Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске:

Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске:

Предупреждение: для аксакалов статья вряд ли будет полезна. А то и вовсе окажется вредна. Системным администраторам, использующим язык ruby для написания сценариев — строго рекомендуется.
Для парсинга аргументов коммандной строки я обычно использовал библиотеку GetOpt. Это достаточно неудобная библиотека и я был счастлив случайно наткнувшись на Docopt.
Начать использовать ее достаточно просто: для того чтобы научить ваш скрипт парсить строку вывода сначала надо подключить библиотеку:
require 'docopt'
И после этого можно попробовать инициализировать переменную и присвоить ей соответствующее значение.
doc =<<EOF
Usage:
#{__FILE__} add <opt1> <opt2> –input=<something> –verbose
<p>Option:
-h –help Показать это сообщение
–cat Дополнительная опция
–input=<something> Входящий файл [default: my.txt]
EOF
— Ты все еще не бросил свое Ruby? – взволновано спросила Татьяна. – Ты же знаешь, что сейчас на программистов облавы чуть ли не каждый день? Сергей, ты действительно хочешь, чтобы тебя отправили в ЗАТО?
Сергей понуро молчал.
После Большой свободной революции и полной победы антикопирастов, ЗАТО – закрытые абстракто-творческие общества появились по всей стране.

Сначала туда свозили только людей творческих профессий – писателей, композиторов, художников. Затем принялись и за программистов. Благоустроенные бараки, двухразовое полноценное питание, обязательные спортивные мероприятия, помогающие держать форму…
Несмотря на предсказанный рост производительности, качество художественных произведений снизилось, поставив под угрозу интересы главной фигуры любого творческого процесса – ПОТРЕБИТЕЛЯ. После длительных дебатов в парламенте, правительство было вынуждено пойти на крайние меры – была введена система «мотивирующих воздействий». Если созданное произведение не набирало норму лайков – всей бригаде урезали паек, а систематический саботаж творческой выработки мог привести к переводу в лесорубы.
Добрый день уважаемые слушатели. Представляем новый выпуск подкаста RWpod. В этом выпуске:
Одним холодным майским днем от скуки решил я таки приступить к изучению этого удивительного языка — Brainfuck'a.
Его интерпретаторы публиковали на Хабре уже очень много раз.
Но мне хотолось изучить поглубже сам язык и алгоритмы на нем, а не писать очередной интерпретатор. Поэтому было решено сделать из мухи слона компилятор какого-нибудь высокоуровневого языка в brainfuck.
Однако очень быстро начался реальный brainfuck: отсутствие оператора if, отсутствие произвольного доступа к ячейкам и куча других проблем сразу свалилась на меня. Пришлось повременить с высокоуровневым языком и сделать для начала ассемблер, в который и будет компилироваться высокоуровневый язык.
О реализации ассемблера под катом.
Читать полностью »
В январе этого года, Sandi Metz представила свои правила для разработчиков в эфире подкаста Ruby Rogues. Примерно в это же время, я и моя команда начали новый проект. Эта статья описывает тот опыт, что мы получили, применяя эти правила к своему новому проекту.
@object.collaborator.value не допустим).Espresso Framework обзавёлся ещё одним полезным инструментом по имени Frontline.
Данное добро позволяет быстро и эффективно работать с вашими веб приложениями прямо из браузера.
По сути это фронтенд для Enginery. То есть можно делать всё что делает Enginery но в «визуальном режиме».
Большой плюс в том что все части приложения доступны для визуализации и редактирования прямо в браузере.
Подробности под катом.
Сегодня я поделюсь своим набором не всегда очевидных функций и возможностей Active Record, с которыми я столкнулся в процессе разработки Ruby on Rails приложений или нашел в чужих блогах.
Многие Руби-разработчики игнорируют потоки (threads), хотя это очень полезный инструмент. В данной статье мы рассмотрим создание IO потоков в Руби и покажем как Руби справляется с потоками в которых происходит много вычислительных операций. Попробуем применить альтернативные имплементации Руби, а так же узнаем, каких результатов можно добиться при помощи модуля DRb. В конце статьи посмотрим, как эти принципы используются в различных серверах для аппликаций на Ruby on Rails.
Рассмотрим небольшой пример:
def call_remote(host)
sleep 3 # симулируем долгий запрос к серверу
end
Если нам надо обратитьcя к двум серверам, например, чтобы очистить кэш, и мы дважды последовательно вызовем эту функцию:
call_remote 'host1/clear_caches'
call_remote 'host2/clear_caches'
то наша программа будет работать 6 секунд.
Мы можем ускорить исполнение программы, если будем использовать потоки, например, так:
threads = []
['host1', 'host2'].each do |host|
threads << Thread.new do
call_remote "#{host}/clear_caches"
end
end
threads.each(&:join)
Мы создали два потока, в каждом потоке обратились к своему серверу и командами #join сказали, что главной программе (главному потоку) надо подождать их завершения. Теперь наша программа успешно выполняется в два раза быстрее, за 3 секунды.
Читать полностью »
В этой маленькой статье, которую с удовольствием прочитал бы сам неделю назад, я попытался собрать все вещи, которые понадобились бы человеку, задумай он «с нуля» написать приложение на RoR. То есть не углубляясь ни в одну из областей, описать необходимый минимум действий, чтобы установить, настроить и написать своё первое приложение.Здесь собрано, как мне кажется, всё, что нужно и я надеюсь этот текст сэкономит кому-нибудь несколько часов поиска в интернете). Сам изучаю RoR вторую неделю, так что не судите строго).
Просто и быстро ror ставится через rvm c rvm.io/.
>curl -L https://get.rvm.io | bash -s stable --rails --autolibs=enabled
Запустить rvm:
>source /Путь_к_домашней_директории*/.rvm/scripts/rvm
*$HOME в дальнейшем.
После этого в $HOME/.bash_profile должна появиться строчка:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
и при каждом открытии консоли rvm будет подгружаться, но у меня этого не случилось — пришлось ещё в $HOME/bashrc прописывать:
. ~/.bash_profile
Теперь всё точно должно быть хорошо.
Устанавливаем нужную(скорее всего это будет самая последняя) версию руби (сколько их и в чём отличие можно посмотреть сдесь -http://www.ruby-lang.org).
>rvm install 1.9.3
Проверка на успешность создания
>ruby -v
должна вернуть более подробную информацию, вроде
ruby 1.9.2p320 (2012-04-20 revision 35421) [x86_64-linux].
В процессе установки я случайно установил несколько версий, что потом доставило некоторые неприятности). Посмотреть список установленных версий руби можно так:
>rvm list
Если версий несколько, то текущая будет помечена "=>", дефолтная — "*", а текущая и дефолтная — "=*". Поменять на нужную используемую версию можно так:
>rvm use ruby-1.9.2-p320 (любая нужная версия)
Чтобы поменять дефолтную версию руби пишем:
>rvm use ruby-1.9.2-p320 --default