livemocha: позор

Я на протяжении четырёх лет пользовался с переменным успехом когда-то замечательным сервисом, со смешной транслитерацией на русский: <a href=\"http://livemocha.com/\">livemocha.com. Это была социальная сеть для изучения языка - носители языка выполняли задания, созданные изучаемого носителями языка и на оборот. Получается такого сообщество, в котором люди друг друга учили, проверяя задания, давая комментарии.

Было несколько типов заданий:

  • созданные специалистами livemocha - на изучение слов, фраз, проверяется автоматически сайтом
  • текстовые и голосовые - носители языка проверяют выполненные вами задания, давая оценку и комментарии
  • собственные - некоторые носители языка создавали тексты(стихи, рассказы) которые нужно было озвучить, прочитать, в некоторых подставить свои слова или фразы, или дать развернутый ответ. Опять же проверяли носители языка.

Read more

nodejs: Отправка файла REST-запросом

Отправка файла и полей с данными как REST запрос из nodejs сервера на coffeescript

По началу кажется простой задачей - на stackoverflow активно рекомендуют модуль request, он правда классный. Гнётся во все стороны.. но..

  1. На сайте есть пример как отправить файл, но не бинарный, а текстовый. И почему то если натравить запрос с таким "файлом" опять же ноде(другому серверу) он не видится как файл
  2. Гуглить любые проблемы связанные с модулем крайне затруднительно - автор решил не задумываться и дал незамысловатое название, благодаря чему гуглится все, что угодно, только не то нужно.

Read more

Текущие проекты

В бложик пишу не часто, а если и пишу - обычно рефлексирую на определённые тематики или посвящаю посты решению конкретных технических проблем.

В действительности эти посты являются отголосками моей повседневной деятельности - работой над стартапами eZWay и Loocker, значительно реже - по фрилансу. Причем пишу не самое интересное или актуальное, а по настроению и остаточному впечатлению после решения задачи.

На момент поста оба стартапа запущенны, есть пользователи. Находимся в стадии проверки гипотиз, ощупывания рынка.

Каждый проект заслуживает не то, чтобы отдельного поста - скорее блога. Начнем с краткого описания :)

Read more

ruX mind: о подкастах

В начале 2012 года я открыл для себя удивительный формат - подкасты. Не сказать, чтоб я про это услышал впервые, но все руки не доходили попробовать. Казалось, что когда идешь по улице или едешь в транспорте - может быть только музыка и иногда радио (в основном bfm).

Знакомый посоветовал начать слушать с Радио-Т. Это было настоящим открытием.

Информация по дороге

Подкасты сами по себе так или иначе существовали и раньше, в виде записанных кусков радиопрограмм и "голосовых заметок", абсолютно ничего нового. Просто включаешь запись - и слушаешь, как обычное радио.

Read more

Coursera: Model Thinking

\"\"

Два месяца назад я взял свой первый класс на курсере: model thinking.

Model Thinking организован University of Michigan. Лектор - проф. Scott E. Page

Курс направлен на то, чтоб лучше понимать мир вокруг, размышлять более открыто, уметь собирать и обрабатывать данные для принятия разумных решений.

Для меня это был новый опыт: я раньше проходил онлайн курсы, но никогда не учавствовал в таком формате. Еженедельно открываются новые видео лекции (коих в сумме было 20 секций, в каждой в среднем по 4-5 кусочка по 10минут). После просмотра лекций нужно сдавать quiz. Причем в срок - иначе баллы будут дисконтироваться. Опаздал на 1 сутки - получай на 10% меньше. Давалось три попытки, если хочется передалать quiz, чтоб получить больший бал.

Read more

ruX’s mind: деньги вместе с ценностью

Слушая 200 выпуск \"Рунетологии\", в котором Максим рассказывал о своих успехах, жизни и проектах, сильно зацепила одна фраза.

В начале появился проект calend.ru - энциклопедия праздников, где просто была идея элементарная охватить максимум поисковых запросов вокруг праздников, которые коммерчески в общем мало окученны, за них мало кто бьётся

Read more

Play Framework: локализация Date.since()

Play framework позволяет в шаблонах groovy использовать extension functions - т.е прицеплять методы на ходу к объектам.

В частности в play имеет расширение экземпляров класса Date - since(), который возвращает сколько времени прошло от указанной даты. Например "13 minutes ago"

С since() все хорошо, пока не требуется интернационализация. Если переопределить соответствующие ключи в файлах перевода, то для русского он возвращает нечто вроде 3 дняs назад. Другими словами этот метод не может отображать количество пройденного времени на любом языке, кроме английского.

Read more

HTC Desire: съел всё место

Внезапно, у меня опять кончилось место в телефоне.

\"\"

Пошёл по известной дорожке:

  • Удалить старые приложения
  • Почистить кэш (твиттера, например)
  • Recorvery -> Wipe dalvik cache

Но в этот раз не помогло. Снёс кучу нечасто используемых приложений: через 30 минут снова стало свободно 0.5Mb.

Место кончилось на столько, что даже телефон не открывался, как и многие приложения.
Стандартная утилита не показывала каких-либо сверх-тяжелого софта (я рассчитывал где-то на 40+мб)

Напомню, что у меня HTC Desire с Runnymede AIO V6.0.4.3, прошивка стоит около 14 месяцев

Read more

Android: запуск дефолтного ланчера

Есть неочевидная ситуация: вы пишете лаунчер лончер или что-то его заменяющее, отдебажили, всё работало. Конечно же, вы поставили его как програму по умолчанию и теперь он стартует вместо дефолтого. И вдруг, вылезает некая бага, которая начинает крушить, бомбить ронять телефон, перезапуская приложение. Перезапустится, конечно же, то, что упало, а упал лончер. И он снова падает. Development mode в продакшене отключён. Ну вы поняли.

На самом деле бывают ситуации ещё хуже, например, для vendor lock-in приложений, которые вообще скрывают, что они работают под андроид.

Предвкушая первую мысль как вернуть дефолтный лончер: вызвать в приложении finish(). Чёрт, это же домашний экран %)

Read more

Groovy: java слишком проста

Возьмём довольно частую задачку: есть несколько значений первой переменной, нужно сделать присвоить второй переменной какое-то значение, в зависимости от первой переменной, т.е. value mapping.

В джаве это делается примерно так:


String alertClass = "";
switch(code.toUpperCase().charAt(0)) {
case 'U':
alertClass = "alert";
break;
case 'P':
alertClass = "alert-error";
break;
case 'B':
alertClass = "alert-warning";
break;
case 'C':
alertClass = "alert-info";
break;
}
// now alertClass has value

Read more