Railsclub: отчет о прошедшей конференции
В субботу 17 декабря прошла конференция Railsclub, которую посетило приблизительно 170 человек. Я рад, что в этот раз нам удалось привезти иностранных коллег: Sven Fuchs, Konstantin Haase и Piotr Sarnacki.
Но помимо самой конференции, было еще несколько посиделок, где можно было поговорить со всеми в неформальной обстановке. Я старался о всех публичных мероприятиях сообщать в твиттере конференции @railsclub_ru.
Очень понравилось, что Свен остался специально на день подольше, чтобы потусоваться с русскими разработчиками, специально посетил «Злых Марсианах», чтобы посмотреть, что у нас делается. Мне показалось, что эта неформальная часть получилась не менее интересной и насыщенной, чем сама конференция. И хотелось бы, чтобы в дальнейшем, такие неформальные тусовки посещало больше моих коллег из Москвы и других городов России.
Мастер-класс
В современном мире хочется учиться быстро. И знать только то, что нужно знать, потому что все знать, к сожалению, невозможно. Мне всегда казалось, что можно иметь какую-то «фундаментальную» картинку мира, на которую просто наматываются подробности. Я всегда представляю себе дерево: если есть ствол, то к нему можно прицепить ветки и листья. Но только из веток и листьев дерево не получится. Поэтому мы в «Злых Марсианах» решили подготовить Мастер-Класс, в котором бы обобщили наши лучшие практики при разработке различных web-проектов.
Проблемы с find_in_batches
Иногда мне кажется, что большинство инженерных историй похожи как две капли воды. Вот и эта история началась с того, что в одном большом отчете цифры не сходились раза в два.
Мысленно закурив трубку, как Шерлок Холмс, я взялся за дело. Вот таким образом выглядела модель, по которой считались цифры (я опускаю ненужные подробности).
class OfferDescription < ActiveRecord::Base
has_many :children, :class_name => 'OfferDescription', :foreign_key => :parent_id
end
В отчете данные группировались по родительским объектам OfferDescription
.
Именно у объектов, у которых были дети, в отчетах были все нули. Рассчитывал
отчеты приблизительно вот такой код.
Слияние HashWithIndifferentAccess с обычными хешами
Сегодня у нас перестали ходить отчеты по почте. Ходили, ходили и вдруг перестали. Kлассы выглядели следующим образом (ненужные подробности я опустил).
class ReportSender
def initialize(report_instance)
@report_instance = report_instance
@params = report_instance.params
@emails = @params.delete(:mail_to)
end
class Report
def initialize(params = {})
@params = self.class.default_values.merge(params)
end
К классам отчетов были добавлены значения по-умолчанию, и, как оказалось, из-за них были все проблемы.
Хеш params
, которые передается в класс Report
— это тот самый params
из контроллера. У него базовый класс — HashWithIndifferentAccess
.
Управление конфигурацией и Chef
Расскажу одну очень поучительную и одновременно типичную историю, которая случилась со мною года 3 назад. Однажды один из наших серверов вышел из строя. Казалось бы, обычная ситуация, но беда была в том, что работа приложения была сильно завязано на 10-15 различных cron-задач, которые были прописаны на этой машине. Еще большая проблема была в том, что писались скрипты, которые вызывались по cron, различными людьми, многие их которых к тому времени не работали в компании.
Рассказ про Git
По-моему, в «Прагматичных программистах» было написана фраза, которую я часто люблю повторять: «Программист должен в совершенстве владеть двумя инструментами — текстовым редактором и системой контроля версий». Программист работает с текстом, особенно программист, который пишет на высокоуровневом языке, таком как Ruby. Зачастую можно не вдаваться в подробности того, что происходит внутри, хотя иногда, конечно, надо. Так вот, текст надо уметь изменять, а потом этими изменениями как-то обмениваться со своими коллегами.
Про текстовый редактор я рассказывал немного раньше, а сегодня я хочу рассказать про систему контроля версий git. Пересказывать огромный объем материала, который лежит в сети, мне совершенно не хочется, но я дам ссылки с комментариями на самые лучшие тексты.
Некоторые проблемы с cached_action в Rails 2.3
На Групоне у нас есть внутренняя страница, на которой динамически отображаются данные о продажах по различным городам. Результаты этой страницы зависят от параметров, которые передаются в метод show. А потом эта страница динамически обновляется с помощью ajax-запросов.
# dashboard.rb
class Admin::DashboardsController < Admin::BaseController
layout "admin"
def show
# Здесь сложные-сложные запросы к БД
if request.xhr?
render 'show', :layout => false
end
end
end
Поскольку запросы очень тяжелые, да и сама страничка непростая, то отдача ее сильно нагружала БД и app-сервера.
Простыня
Поскольку я поставил Octopress, то теперь сбылась моя мечта и я могу вести блог в своем любимом текстовом редакторе vim. Про octopress я напишу как-нибудь потом отдельно, потому что система для инженера программных систем просто необыкновенная: простая и удобная.
Но сегодня я хочу поговорить о «простыне» — так я шутя называют длинный последовательный кусок кода. Так вот, моя основная мысль — простыня является самым лучшим кодом. Это так по одной простой причине, что последовательный код гораздо проще читать и понимать. Конечно, если при этом не происходит нарушения правила OOO (Once and Only Once), то есть нет ненужного дублирования кода. Простыня — это способ выполнять правило KISS (Keep It Simple, Stupid), то есть правила держать систему максимально простой.
О редакторе Vim, рассказ ссылками
Vim — прекрасный редактор, который я использую для разработки на Ruby и Rails. Его можно использовать в чистом виде, но если добавить немного плагинов, то удобство работы значительно возрастает. Об этом я и хочу рассказать, правда рассказ получится длинным.
Я выступал на последнем RailsClub’е с докладом Vim Or Die (посмотреть его можно на univertv.ru), в котором неплохо раскрыл тему Vim и полезных плагинов. Cами слайды, которые малополезны без видео, можно найти на slideshare.net.
Англоязычные подкасты про ruby и rails
Так сложилось, что я управляю транспортным средством больше, чем час в день (на работу, на тренировку, домой). И я давно уже хотел слушать английские тексты в это время, потому что музыка часто надоедает.
Я пробовал слушать «обычные» тексты, но потом подумал, что гораздо интереснее слушать то, что тебя волнует. Поэтому я порылся в дебрях интернета и нашел следующие подкасты, которые я регулярно слушаю.
The Ruby Show — выходит по вторникам, длится минут 15-20. Две веселых чувака рассказывают про новости в мире ruby и rails, при этом периодически достаточно весело шутят.