Дружим Ruby со Spotlight и Quicklook
Илья • 21 декабря 2007 г.
Дейв Томас не так давно наткнулся на очень интересный плагин для поисковой системы Spotlight, встроенной в Мак ОС. После установки, плагин позволяет искать по модулям, классам, методам и комментариям в любых файлах Ruby, находящихся на вашем Маке. Великолепная штуковина!
Если есть желание попробовать, то качаем Ruby Importer 0.2.1, затем копируем файл RubyImporter.mdimporter в папку /Library/Spotlight (папку возможно придётся создать).
Далее, в терминале нужно запустить следующую команду, чтобы заставить спотлайт заметить новый плагин и проиндексировать с помощью него все
$ mdimport -L && mdimport -r /Library/Spotlight/RubyImporter.mdimporter ~/
Теперь можно приступать к поиску:

А для того чтобы исходники Ruby (и других языков) можно было просматривать с подсветкой кода при помощи Quicklook, нужно установить отдельный плагин для квиклука QLColorCode.
Дождались! Первая книга по Ruby on Rails на русском языке
Илья • 6 декабря 2007 г.
Издательство Питер
AWDWR это культовая книга, которая содержит в себе достаточно информации о рельсах, чтобы написать своё первое приложение с нуля. Просто незаменима для новичков и стажёров.
Уже сейчас книжку можно
Фильтровка списка доступных rake-задач
Илья • 22 ноября 2007 г.
Очень маленький, но весьма полезный трюк, который лично я открыл для себя только сегодня:
$ rake -T clear
(in /Users/ilya/work/application)
rake db:sessions:clear # Clear the sessions table
rake log:clear # Truncates all *.log files in log/ to zero bytes
rake tmp:cache:clear # Clears all files and directories in tmp/cache
rake tmp:clear # Clear session, cache, and socket files from tmp/
rake tmp:pids:clear # Clears all files in tmp/pids
rake tmp:sessions:clear # Clears all files in tmp/sessions
rake tmp:sockets:clear # Clears all files in tmp/sockets
То есть, после rake -T можно написать любое интересуемое вас слово, в данном случае clear. И тогда на экран выведутся только задачи в названии которых это слово встречается.
За открытие спасибо Антонюку Стасу ;)
Upd: Переписал описание и пример. Как оказалось позднее, выводятся не только задачи, у которых именная область совпадает с введённым словом, но и вообще все задачи, в название которых это слово включено.
Beanstalk — Subversion для людей
Илья • 19 ноября 2007 г.
Компания Wildbit не так давно анонсировала своё новое
Хорошая книга — «Программист–прагматик»
Илья • 16 ноября 2007 г.
Хочу порекомендовать ещё одну замечательную книгу — Программист–прагматик. Путь от подмастерья к мастеру от Энди Ханта и Дейва Томаса.
Книжка является сборником советов и рекомендаций о том, как стать более эффективным программистом. Она компактная и очень легко читается.
Её авторы имеют огромный опыт в создании различных программных продуктов и им действительно есть чем поделиться. Рекомендую всем, кто занимается программированием профессионально.
Наверное лучшая техническая книга из всех что я читал.
Ruby on Rails теперь в комплекте с каждым Маком
Илья • 16 октября 2007 г.
Сегодня Apple назвала дату начала продаж новой версии операционной системы Mac OS 10.5 Leopard — 26 октября.
В Леопарде более 300 нововведений и улучшений. Наш любимый фреймворк не остался в стороне:
Да, Ruby on Rails, Ruby, Rubygems и Capistrano теперь идут в комплекте с каждым Маком. Ну разве это не здорово? ;)
Приятное обновление error_messages_for
Илья • 14 октября 2007 г.
В Edge Rails и Rails 2.0 теперь можно указывать допонительные параметры методу error messages for, который выводит ошибки валидации во вьюшках:
- :header_message По умолчанию: “<count> errors prohibited this <object_name> from being saved”
- :message По умолчанию: “There were problems with the following fields:"
<%= error_messages_for :user,
:header_message => "#{@user.errors.size} ошибок сохранения этого пользователя",
:message => "Следующие поля заполнены не верно:" %>
Так что теперь можно спокойно использовать эту удобную функцию в русских проектах.
Используем form_for с несколькими моделями
Илья • 5 октября 2007 г.
Не так давно в распоряжении
<% form_tag users_path do %>
<%= text_field :user, :name %>
<%= text_field :user, :email %>
<% end %>
в такой:
<% form_for :user, :url => users_path do |f| %>
<%= f.text_field, :name %>
<%= f.text_field, :email %>
<% end %>
Используя form_for, больше нету необходимости указывать более чем один раз кому принадлежит то или иное поле. Это уменьшает количество повторений в вашем коде, то есть делает его более DRY.
Но что делать, если вы хотите использовать сразу несколько моделей в рамках одной формы? В такой ситуации нам на помощь придёт метод fields for, который переопределяет объект, к которому будут принадлежать поля, находящиеся в его блоке.
Всё просто, давайте разберём следующий пример. В одной и той же форме мы хотим редактировать данные и пользователя, и его кредитной карты:
<% form_for :user, :url => users_path do |f| %>
<%= f.text_field, :name %>
<%= f.text_field, :email %>
<% fields_for :credit_card do |cf| %>
<%= cf.text_field :number %>
<%= cf.text_field :holder_name %>
<% end %>
<% end %>
Используя fields_for в примере выше, мы получили возможность описать сразу две модели в одной форме. Теперь в контроллере у нас доступны и params[:user] и params[:credit_card].
Эта тема так же подробно раскрывается в эпизоде 73 от Railscasts.
Разбиваем длинные выражения Ruby на несколько строк
Илья • 3 октября 2007 г.
Несколько компактных примеров о том, как можно разбивать длинные выражения в руби на несколько строк.
User.create! \
:name => 'Вася',
:password => '12345',
:login => 'vasya'
name = first_name +
last_name +
middle_name
name = "Sabanin" \
" Ilya" \
" Vladimirovich"
# name => "Sabanin Ilya Vladimirovich"
array.
find_all {|e| e.position > 5}.
map {|e| e.symbol}.
join('/').
downcase
Текст для Web: понятные заголовки
Илья • 30 сентября 2007 г.
Джонатан Прайс и Лиза Прайс в книге «Текст для Web»:
Представляйте тему статьи в тех терминах, которые используются потенциальными посетителями. Не предлагайте никаких каламбуров, шуток или метафор, а только суть контента. Странные заголовки могут вынудить посетителя щёлкнуть мышью и обнаружить
Web-страницу , которая не отвечает его ожиданиям. В результате пользователи будут подозрительно относиться к двусмысленным заголовкам, которые могут представлять совершенно разные темы.
Напомнило мне причину, по которой я перестал читать Мембрану.
Замечательная книга, рекоммендую.
Безопасность Rails: фильтрация логов
Илья • 25 сентября 2007 г.
Если в вашем приложении используются такие важные данные как номера кредитных карт или пользовательские пароли, то вам стоит фильтровать свои логи, в которые эта секретная информация просачивается.
Сделать это очень просто. Достаточно вставить следующую строку в ApplicationController:
class ApplicationController < ActionController::Base
filter_parameter_logging :password
end
В метод filter_parameter_logging через запятую передаются названия всех параметров, которые вы не хотите отображать в логах. Вы можете вызвать этот метод в любом контроллере, где должна совершаться фильтрация логов.
Важный нюанс: метод filter_parameter_logging использует регэкспы, для сравнения параметров, так что код, приведённый выше, будет работать для всех параметров, в названии которых содержится слово password.
Вот как выглядят логи с отфильтрованным параметром :password:
Processing AccountsController#login (for 127.0.0.1 at 2007-09-25 03:56:02) [POST]
Session ID: 66e0c98d03cc80433cecfe3cf76f65aa
Parameters: {"login"=>"vasya", "password"=> "[FILTERED]",
"password_confirmation"=> "[FILTERED]"}
Берегитесь операторов and, or и not в Ruby
Илья • 21 сентября 2007 г.
С виду безобидные операторы and, or и not могут привести к очень загадочным ошибкам в вашем приложении.
Вот две строчки одинакового кода. В первой строке используются операторы || и &&, а во второй операторы or и and. Как видите, результат не совпадает:
Всё
Что самое неприятное, операторы and и or стоят по приоритету даже ниже чем оператор =, а это может создать в коде ошибки следующего типа:
Такой же код, но с оператором || вместо or:
Теперь всё работает как надо.
Итак, старайтесь заменять операторы and, or и not на &&, || и !. Конечно, вторая тройка не такая красивая и читабельная, но читабельность того не стоит.
Первая книга про Ruby на русском
Илья • 18 сентября 2007 г.
Очень порадовало наткнуться на Озоне на первую книгу про Ruby на русском языке.
Перевести
The Ruby Way будет весьма интересна людям, которые уже знакомы с программированием и основами Руби. Новичкам же придётся подождать пока на русский переведут Programming Ruby или Ruby Cook Book.
По старой доброй русской традиции, издатель русской версии The Ruby Way до неузнаваемости изуродовал её оригинальную обложку. Им
Не смотря на то, что мне уже довелось полистать электронную версию этой книги, а так же не смотря на то что это уже достаточно устаревшее первое издание, я всё-равно заказал этот русский перевод. Я думаю, что если мы все вместе поддержим первые русские книги по Руби, то может тогда наши издатели пошевелят своим задом и переведут ещё несколько хороших книжек.
Update: как мне помогли выяснить мои любезные читатели, эта книга является переводом второго издания The Ruby Way, а не первого, как я считал ранее. Хороший повод всё-таки купить эту книжку…
Один маленький нюанс :counter_cache
Илья • 18 июля 2007 г.
Если вы хотите использовать :counter_cache для своих ассоциаций, не забудьте что поле, в котором будет хранится количество связей, должно иметь дефолтовое значение 0, а не NULL, как это иногда бывает по-стандарту.
class AddCounterCaches < ActiveRecord::Migration
def self.up
add_column :posts, :comments_counter, :integer, :default => 0
end
def self.down
remove_column :posts, :comments_size
end
end
Маленький трюк для Textmate Drawer (Rails)
Дима • 8 июля 2007 г.
Сегодня в порыве продуктивно-оптимизационной истерии нашел удобный способ отображать проект в Textmate Drawer.
Превратил такой, “стандартный” вариант:

В такой:

Суть такая, создаем новый проект, из Finder перекидываем содержимое app/ в Drawer. Это то, что мы используем чаще всего. Следом создаем в Drawer новую группу – rails root, куда засовываем всё остальное.
Кстати, вы знали что по запросам в Гугле продуктивность популярней чем порно?
vs. 




