День 1: Филадельфия

Илья • 3 мая 2009 г.

После бесконечных часов перелёта, таможни и прочей херни, я наконец-то добрался до Филадельфии. Через шесть часов летим в Вегас. Завтра начинается РейлсКонф.

В Вашингтоне в аэропорту кто-то нарушил правила безопасности и поэтому все прилетающие иностранцы застряли в гигантской очереди. Все начали опаздывать на свои стыкующие рейсы. Но слава богу все рейсы аэропорт специально задержал. В итоге я всё-таки успел.

Кстати, пришёл мой объектив из BorrowLense.com. Апертура просто гигантская! С плохим освещением наконец-то получаются нормальные фотки. Скоро буду загружать на фликр.

Улетаю через три дня

Илья • 27 апреля 2009 г.

Ну всё. Билеты куплены, пропуск на конференцию забронирован, макбук подготовлен :) В пятницу утром вылетаю в Москву, денёк там гуляю, затем Вашингтон, Филадельфия и Лас Вегас. В сумме 17 часов в воздухе.

В перерывах между РейлсКонфом, думаем посетить Hoover Dam (пол часа на машине от Вегаса) и потусить денёк в Нью Йорке.

Beanstalk API

Илья • 22 апреля 2009 г.

Сегодня наконец-таки завершили написание документации по АПИ, поэтому этот день можно считать оффициальным релизом:

api.beanstalkapp.com

АПИ в данный момент доступно только определённому кругу аккаунтов, которые попросились потестировать. Если есть желание, обращайтесь.

В процессе создания выяснилось, что ActiveResource совсем не понимает singular resources и загрузку вложенных массивов, чисел и символов. Хорошо что в нашем плугине это всё исправлено.

Если вы пользовались rescue_from, то наверное замечали, что по какой-то причине исключения иногда проскакивают необработанными. Причина оказалась весьма простая. Все исключения, которые возникли во вьюшках, всегда оборачиваются абстрактным ActionController::TemplateError и таким образом становятся невидимыми для всех ваших rescue_from хендлеров. Это не очень удобно, потому-что никогда нельзя сказать с точностью где некоторые исключения могут возникнуть, а где нет.

В общем сегодня как раз решал такую проблему в Бинстолке и решил сделать из своего решения маленький плугин. Плугин получился очень простой, всего пару строчек кода, зато работает как надо. Теперь все исключения, не важно где они выпрыгнули — во вьюшках или контроллерах — будут прекрасно обрабатываться вашими rescue_from хендлерами.

Читайте ридми на гитхабе и пользуйтесь на здоровье:

http://github.com/iSabanin/rescue_from_templates_exceptions/tree/master

P.S. — если вы считаете что этот плугин должен быть частью Rails Core, пишите в комментариях своё мнение.

Делая API для Бинстолка, столкнулся с большой тупостью ActiveResource, после которой даже подумал перейти на RestClient. Оказалось что ARes не умеет принимать вложенные массивы, или массивы, в которых содержатся символы или цифры. Он умеет загружать только плоские массивы со строками и ничего больше.

Например такой код выбросит исключение:

# changeset объект класса ActiveResource
changeset.load {:files => [["/trunk/bla", "add"], ["/trunk/ble", "delete"]]}
# => ArgumentError: expected an attributes Hash, got ["/trunk/bla", "add"]

То же самое с символами и числами. Простой массив с числами передать ARes не получится.

Абсурд полный! Особенно для библиотеки, которая вроде как перевалила за вторую версию.

В общем я запостил два пачта (под одним тикетом) на лайтхаус: Support for loading nested arrays, numbers and symbols in ActiveResource.

Буду благодарен за плюсики. Сделаем мир лучше, спасём бегемотов в Африке.

За кулисами Бинстолка

Илья • 19 марта 2009 г.

С сегодняшнего дня у меня в твиттере (@isabanin) будут публиковаться маленькие заметочки о том, как продвигается разработка Бинстолка. Присоединяйтесь.

HTTP Client для Мак ОС

Илья • 17 марта 2009 г.

Тащусь от HTTP Client для Мак ОС. Позволяет быстро и легко формировать любой HTTP запрос, отправлять по нужному адресу и просматривать ответ сервера. Самое то для работы над АПИ для своего веб-приложения.

Я еду на RailsConf '09

Илья • 14 марта 2009 г.

Наконец-то сбылась мечта идиота :) В этом году удалось таки организовать поездку на главную конференцию в мире, посвящённую Ruby on Rails. В Лас-Вегас поеду вместе с коллегами из компании Wildbit.

Я конечно ещё в процессе получения визы, поэтому есть шанс что всё накроется медным тазом в самый последний момент, но будем надеятся на лучшее.

Было бы очень приятно встретить на чужеземных просторах русских программистов. Поэтому, если есть товарищи, которые тоже собираются ехать на РейлсКонф, пожалуйста отпишитесь в комментах. Так же, 23 марта я буду целый день в Москве. Желающие встретиться и показать центр столицы, пишите на мыло (ilya.sabanin@gmail.com).

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

Ruby brothers снова жив

Илья • 13 марта 2009 г.

Последние несколько недель блог был недоступен, потому-что приложение было в процессе переноса со Слайсхоста на Линод. Никак не хватало времени довести дело до конца.

Теперь Ruby brothers работает через Passenger у хостера Linode. Было немного геммороя запуска Мефисто под Ruby 1.8.7 и новыми рельсами, но в итоге всё вроде обернулось удачно.

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

Всем известно как изменить текст сообщения об ошибке валидации модели. Но не всем известен трюк, как изменить само название атрибута, которое будет отображаться в сообщении об ошибке. Рельсы, к сожалению, нам не предоставляют простого пути решения.

Итак, проблема:

Сообщение об ошибке на русском языке, в то время как название атрибута на английском (причём часто на ломаном английском, потому-что название определяется автоматом по названию поля в базе).

Для того чтобы решить эту проблему, нам понадобиться один маленький файлик — humanized_attributes.rb. Бросаем его в lib/ и подключаем в environment.rb.

Далее в нашей модели создаём константу HUMANIZED_ATTRIBUTES:

class User < ActiveRecord::Base

  HUMANIZED_ATTRIBUTES = {
    :login => "Имя пользователя" 
  }

  validates_presence_of :login, :message => 'отсутствует'

end

И вуаля:

На самом деле это удобно не только для русифицирования атрибутов, но и когда заказчик хочет чтобы «login» отображался как «user name».

Для пущего удобства, можно обернуть всё это дело плугином с каким-нибудь прикольным DSL, вместо константы.

redirect_to :back

Илья • 22 мая 2008 г.

Оказывается метод redirect_to может принимать аргумент :back.

def destroy
  …
  redirect_to :back
end

Теперь пользователь будет переброшен обратно на ту страницу, с которой пришёл запрос на destroy.

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

Профилируем Rails-приложение

Илья • 8 апреля 2008 г.

В комплекте с каждым Rails-приложением идут специальные скрипты для профилирования и измерения производительности вашего приложения. С их помощью вы можете определить слабые места своего приложения и измерить прирост или деградацию производительности после изменения исходного кода. В этой заметке я хочу показать несколько простых примеров использования этих инструментов.

Читать дальше…

Изучая Lisp, я столкнулся с проблемой поиска подходящих задачек для практики. Хотелось чего-нибудь компактного, интересного и нетривиального.

Как раз для этих целей и был создан сайт Project Euler — решение интересных задач по математике и программированию.

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

Если зарегистрироваться на сайте, то можно отправлять свои ответы на задачи и, таким образом, закреплять свой прогресс. По количеству решённых задач на сайте строится Top-список пользователей.

Вот пример одной из самых простых задач с сайта:

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

Несколько интересных фактов: всего на сайте зарегистрировано более 20 тыс. программистов, из которых 290 русских и 580 Рубистов. Самый популярный язык программирования C. На втором месте Питон, затем Джава, Хаскель и — сюрприз — Руби на пятом месте.

Книга The Rails Way

Илья • 4 марта 2008 г.

Не так давно, в мире существовала всего одна книга по Ruby on Rails — Agile Web Development With Rails от создателя Rails Дэвида Хейнмейера Ханссона (David Heinemeier Hansson). Кто бы мог подумать, что сегодня у нас будет выбор из двадцати пяти книг на любой вкус и цвет! Ориентироваться в этом изобилии (ну ладно, пусть не изобилии, но многообразии) становится всё сложнее. Какую книгу выбрать? У меня есть подходящий ответ на этот вопрос…

На днях я купил англо-язычную книгу The Rails Way от Оби Фернандеза (Obie Fernandez). Она была выпущена в конце 2007 года и описывает Ruby on Rails версии 2.0. Это уже пятая книга о Rails, которая попадает в мои руки, и она мне очень понравилась.

Книга достаточно толстая (900+ страниц) и выполнена в виде настольного руководства. В ней нет длинных уроков, домашних заданий и больших тестовых приложений. Она больше ориентируется на людей, которые способны самостоятельно изучить материал, имея максимально полную информацию об инструменте. Каждый компонент фреймворка подробно описан и сопровождён примерами. Иногда, автор приводит отрывки кода прямо из исходного кода Rails, чтобы разъяснить сложные моменты. Так же, практически в каждой главе можно найти актуальные советы по теме от профессиональных Rails-разработчиков, со-авторов книги.

Перечислять темы, которые затрагивает книга, можно бесконечно — одно только содержание занимает пятнадцать страниц. Радует наличие глав о таких, сравнительно новых для мира Rails, темах как REST, ресурсы и ActiveResource.

Книга хороша для более глубокого изучения компонентов фреймворка, а так же для поиска подробностей, не описанных (или описанных, но скудно) в официальной документации. Например раздел об ассоциациях ActiveRecord описывает прокси ассоциаций. А в разделе, посвящённому роутингу в Rails, детально описано как он устроен, с вставками исходного кода Rails.

Помимо описания самого фреймворка Rails, книга содержит множество информации о других подручных инструментах и технологиях, которые мы ежедневно используем в работе: Capistrano, Monit, Mongrel, Nginx, RSpec и даже весьма подробное изучение Prototype.js и Scriptaculous. Что это и как это установить? Как настроить лучшим образом и как использовать? На все эти вопросы книга даёт развёрнутые ответы. И это то, что делает The Rails Way таким хорошим кандидатом на покупку. Едва-ли вы сможете найти где-то ещё такую подборку информации в одном месте!

The Rails Way является практически идеальной заменой онлайн документации по Rails (за исключением медленного поиска) — в любой момент, когда у вас возник вопрос или хочется узнать как выполнить ту или иную задачу более правильным путём, она будет вашим лучшим помощником.

На мой взгляд, книга The Rails Way обязательно должна быть в библиотеке каждого Rails-разработчика.

А что думаете вы?

Читаете ли вы техническую литературу на английском языке? Есть ли, по вашему мнению, смысл в русском переводе этой книги?

Иногда, в течении рабочего дня, возникает потребность написать и протестировать какое-нибудь регулярное выражение. Rubular — хороший помощник в этом деле. Это компактное, простое в использовании веб-приложение, в котором можно быстро написать регулярное выражение и протестировать его на любом тексте.

Приложение бесплатное, интерфейс работает при помощи Аякса, а в низу страницы находится краткая справка по использованию регулярных выражений в Ruby. Класс!