Обновить
2.1

Ruby *

Динамический высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Coffeescript — Javascript в силе Ruby

Время на прочтение2 мин
Охват и читатели22K
CoffeeScript — язык, чтобы писать на JavaScript с более удобным синтаксисом.

Краткий пример на CoffeeScript (с jQuery):
jQuery($ =>
 notified: false
 $('a').click( =>
  if notified
   true
  else
   $('.alert').show()
   false..
 ).
)

Этот код будет транслирован в:
jQuery(function($) {
  var notified = false;
  $('a').click(function() {
    if (notified) {
      return true;
    } else {
      $('.alert').show()
      return false;
    }
  })
})

Но обо всём по порядку

Визуальный сахар для ActiveRecord

Время на прочтение4 мин
Охват и читатели1.2K
Каждый, кто разрабатывал приложение на RoR знает, что в консоли (./script/console) не слишком удобно просматривать ActiveRecord объекты, они имеют мягко говоря не читабельный вид

Например в моем последнем проекте есть модель Schema
Читать дальше →

Вышел черновик спецификации Ruby

Время на прочтение1 мин
Охват и читатели807
Дорогие друзья

Язык Ruby своими превосходными качествами привлекает огромное количество программистов, особенно web-разработчиков. Однако спецификация Ruby до сих пор не стандартизирована. Information-technology Promotion Agency, Япония (IPA) собрало рабочую группу стандартизации языка «Ruby Standardization Working Group» в октябре 2008 года, для разработки спецификации. С тех пор рабочая группа выработала черновик спецификации.

Так как первый черновик закончен, мы обращаемся к пользователям и разработчикам Ruby-сообществ за дополнениями и комментариями.

Собирая и просматривая комментарии от Вас, мы хотим доработать черновик спецификации. Дополненный документ мы направим в японский комитет отраслевых стандартов Japanese Industrial Standards Committee (JISC) для того чтобы он приобрел статус японского стандарта (JIS).
После публикации его как JIS, мы предложим его на рассмотрение в Международную организацию стандартизации (ISO/IEC JTC1) для создания международного стандарта.

Мы с нетерпением ждем большого количества комментариев и активных дискуссий вокруг документа

Пожалуйста, направляйте комментарии до 12 января 2010. Мы постараемся отобразить их в спецификации насколько это возможно, прежде чем начать процесс утверждения стандарта.

Ikuo NAKATA
Глава рабочей группы стандартизации Ruby
IPA

Здесь можно прочесть спецификацию и оставить свои комментарии

Автозавершение для Rake

Время на прочтение1 мин
Охват и читатели1.7K


Автозавершение в bash’е по Tab’у — это невероятно удобная вещь. И оно точно нужно для rake, которым каждый программист на Ruby пользуется часто.

Особо ленивые программисты уже давно прописали самодельные скрипты в своих .bashrc. Но настоящий дзен-программист не должен любить велосипеды и чтит репозитории и пакеты. Поэтому я собрал скрипт в пакет и выложил в Ubuntu on Rails PPA.

Установка


Ubuntu
  1. Добавляем Ubuntu on Rails PPA:
    $ sudo add-apt-repository ppa:ubuntu-on-rails/ppa
  2. Устанавливаем пакет rake-completion:
    $ sudo apt-get install rake-completion
Другие UNIX
  1. Клонируем репозиторий:
    $ git clone git://github.com/ai/rake-completion.git
  2. Копируем скрипт в системную папку:
    $ sudo cp rake-completion/rake /etc/bash_completion.d/.
Читать дальше →

Ruby-встреча в Петербурге: Инструменты разработки

Время на прочтение1 мин
Охват и читатели702
Очередная встреча ruby-программистов состоится в 20-го ноября
(пятница) в 18:30 в здании учебного центра «Авалон» (он же ФПО СПбГПУ)
по адресу ул. Обручевых, д. 1, аудитория 102, первый этаж,
направо, первая дверь с правой стороны.

В этот раз тема — инструменты разработки.

  • Антон Асташов, автор Vim Ruby Debugger, удаленно из ночного
    Красноярска представит свое детище, а так же расскажет почему и как он
    использует Vim.
  • Федор Кочерга продемонстрирует Emacs, а так же свою версию его
    логотипа.
  • Андрей Ситник расскажет как из Gedit сделать монстра, всего лишь
    установив пакет дополнений Gmate, в разработке которого он участвует.
  • Илья Заяц покажет, чем хорош Textmate для Ruby-разработки


Приходите — устроим аналоговый holy war, а так же пожалуйста,
ggVG"+y"+gP это объявление.

Тинейджер улучшил производительность Ruby

Время на прочтение1 мин
Охват и читатели842
Интересный случай произошел в Японии. Молодой подросток, который участвовал летом в сборе «Security and Programming Camp 2009», под руководством учителя занимался улучшением производительности Ruby 1.9. Достигнутые им успехи можно назвать отличными, а если принять во внимание возраст, то удивительными. Подросток смог ускорить выполнение некоторых методов Ruby 1.9 (которая, напомню, славится своей производительностью относительно версии 1.8) в среднем на 8%. При этом максимальное ускорение составило даже 63%.

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

via yokolet.blogspot.com/2009/11/japanese-teenage-boy-improved-ruby-19.html

BDD/TDD — Учимся писать матчеры

Время на прочтение3 мин
Охват и читатели4.3K
Разработка, основанная на специфицировании поведения (BDD), — один из краеугольных камней философии Ruby.

Очень удачной реализацией BDD является всем знакомый RSpec. Одной из замечательных черт RSpec является его расширяемость.

Так, мы используем RSpec совместно с Factory Girl (хотя стоило бы перейти на Machinist), RR (прекрасный каркас для заглушек), Spork и недавно перешли с Shoulda на Remarkable.

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

Хорошим способом сделать это является создание нового «ожидателя» (matcher).

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

RubyFlow.ru перешагнул рубеж в 500 читателей

Время на прочтение1 мин
Охват и читатели581
Хочу поделится приятной для нас новостью о том, что проект RubyFlow.ru сегодня перешел рубеж в 500 читателей через RSS. А по случайному совпадению сегодня здесь также была опубликована семисотая статья.

Практически каждый день на RubyFlow.ru публикуются статьи о событиях связанных с Ruby. И любой может стать их автором.

Все материалы доступны как просто на сайте, так и через RSS, а также в твиттер-канале @rubyflowru.

Спасибо всем авторами статей и их читателям! :)

Руби-встреча в Петербург: noSQL

Время на прочтение1 мин
Охват и читатели963
Когда: 15 октября (четверг) 2009 в 18:30.
Где: Учебный центр «Авалон».

Тема этой встречи — noSQL, не реляционные базы данных. Будет два доклада:
Алексей Газиев за еду расскажет про MongoDB.
Роман Снитко — про TokyoCabinet.

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

Также мы можем выделить немного времени для различного рода
объявлений. Например, если в Питере есть работодатели, которые ищут
Ruby-программистов, то мы с удовольствием предоставим им время
рассказать о своих вакансиях. Либо если есть какие-то проекты, которым
нужна помощь. Просто предупредите заранее и приходите на встречу.

Ruby-новая встреча в Петербурге

Время на прочтение1 мин
Охват и читатели568
Мы предлагаем возобновить ruby-встречи, проводимые в Петербурге.
Приглашаются абсолютно все желающие.

Место:

Встреча состоится 15 сентября (вторник) в 18.30 в здании учебного
центра «Авалон» (он же ФПО СПбГПУ) по адресу ул. Обручевых, д. 1, аудитория 102, первый этаж,
направо, первая дверь с правой стороны.
Читать дальше →

Интеграция с TeamCity

Время на прочтение2 мин
Охват и читатели4.3K
В процессе разработки проекта на Ruby 1.9 нам потребовалось использовать систему непрерывной интеграции.

CruiseControl.rb в своё время не подошёл из-за несовместимости с Ruby 1.9, в результате мы остановились на бесплатной TeamCity Professional под Linux.

Начальная настройка тривиальна, потребует лишь распаковки дистрибутивов TeamCity и JRE, а также настройки переменной JRE_HOME.

Прямо из коробки мы можем получить запуск тестов Test::Unit, RSpec, с оценкой покрытия rcov.

Но нам потребовалось большее, например, использовать кастомные тесты.

Рассмотрим тривиальный пример — тесты на компилируемость (например, исходного кода, файлов в формате YAML etc.).

image

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

Ближайшие события

VIM как Rails IDE в стиле TexMate благодаря набору скриптов от Akita

Время на прочтение4 мин
Охват и читатели24K
Это мой первый пост на Хабре, прошу не судить строго :)

В далекие времена, когда я ещё писал на c\c++, я пользовался замечательным редактором VIM, знал минимальный набор vim-фишек, и был в целом доволен его работой. Несколько позже я стал изучать Rails и программировать на Ruby. Я достаточно быстро понял, что базовой поставкой VIM не обойтись, попробовал пару найденных в интернете руководств по доведению VIM до уровня полноценной IDE, наткнулся на подводные камни, и быстро сдался. В тот момент мне хотелось изучать в первую очередь именно Rails, а не VIM.
Немного помытарился с разными другими редакторами и IDE типа Aptana, Geany, Eclipse и т.п. пока не наткнулся на полностью, на тот момент, удовлетворящий меня Netbeans. О Netbeans можно писать, да и написано, немало хорошего. Как IDE для разработки на Ruby Netbeans просто прекрасен. Я и сейчас использую его в случае, если работаю в Windows. Но однажды я оказался на длительное время не за своим, а за чужим ноутбуком, на котором уже стоял VIM, в месте, где интернет-трафик был сильно ограничен. А Таксовик требовал срочной доработки. Выкачивать ~60мб Netbeans и ещё n-ное количество мб на плагины было не этично, я и снова начал освоение VIM. И к моей радости довольно-таки быстро наткнулся на набор скриптов от бразильца Akita on Rails и скринкаст в придачу. Он, как я понял, собрал кучу полезных плагинов вместе и чуть-чуть дописал конфиг. Всё, о чём будет говориться ниже верно не только для Ruby, но и для других языков типа C, PHP и прочее, готовые наборы сниппетов (о них далее) в комплекте есть и для них.

Основные фишки этого набора скриптов


  1. FuzzyFinderTexMate — очень удобный поиск файлов в проекте по ctrl+f. К примеру, чтобы найти файл config\routes.rb надо набрать rorb. Или даже и того меньше :)
  2. Набор сниппетов из TexMate и некоторое количество своих (в смысле, NERDSnippets). Очень удобно, набираешь vf + TAB — получаешь validates_format_of :<+attribute+>, :with => /<+regex+>/<+, :on => :<+create+>, :message => "<+is invalid+>"+>, где по TAB скачешь между параметрами, заключёнными в <+...+>. Сниппеты есть для всего, чего угодно, их полный список можно посмотреть в папке snippets в директории с файлами кофигурации VIM.
  3. Дерево проекта, реализованное с помощью NERDTree. Доступно по \+p (обратный слеш и символ p). Переключение с дерева проекта в окно редактирования кода и обратно осуществляется по ctrl+w и стрелка (куда будет стрелка, туда курсор и перескочет), в самом же дереве o — открыть\закрыть папку\файл, R (shift+r) — обновить дерево и по вопросу(?) довольно внятная справка по горячим клавишам.
  4. Подсветка кода (rb, html, rjs, js, erb и т.п.)
  5. Возможности из rails.vim типа перехода по gf на файл модели, если курсор стоит на вызове, например, конструктора. Всяческие :Rake, :Rgenerate и т.п.
  6. Ну и все возможности и навороты VIM, за которые его так любят :)


А вот и скринкаст от автора на эту тему (рекомендую к просмотру):


Перестало работать. Ссылка на другом видеохостинге: blip.tv/file/3765175

Надеюсь, вы уже потираете руки, потому что vim — это очень быстрый, удобный, расширяемый и очень не требовательный к ресурсам компьютера редактор.
Как же всего этого добиться?

Рецепты: Свои наборы обработчиков событий

Время на прочтение1 мин
Охват и читатели953
Думаю, большинство из пользователей Ruby работали с Rails, и использовали их обработчики событий.

validate :validate_humanity_conflicts

validates_presence_of :radius # это не обработчик события, но декларация

Польза от них очевидна:
  • Декларативность описания поведения, когда мы видим особенности классов по декларациям в его начале;
  • Возможность создавать наборы из обработчиков событий, не заморачиваясь на управление ими.
Нам, скорее всего, захочется использовать декларации для удобства описания своих собственных событий.
Читать дальше →

Легковесные веб-приложения на Ruby

Время на прочтение5 мин
Охват и читатели9.1K

Быстрая разработка


Вдохновленный постами на западных блогах вроде «Clone TinyURL with 40 lines of Ruby» или «Clone Pastie in 15 Minutes with Sinatra & DataMapper» я решил попробовать пройти и заодно описать весь процесс реализации легковесного веб-приложения на руби, от проектирования до деплоймента.

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

Производительность IronRuby, Ruby 1.8 и Ruby 1.9

Время на прочтение1 мин
Охват и читатели1.2K
Некотое время назад, после выхода IronRuby сотрудник IBM Антонио Кангиано провел тесты по производительности и получил интересные результаты.
image
Как мы видим из графика, IronRuby уверенно шагает вперед и дает хорошие результаты производительности. Не смотря на результат графиков IronRuby не быстрее Ruby 1.9.1, чего не скажешь при сравнение с веткой 1.8.х

Как бы там не было, быстрее IronRuby или медленнее Ruby 1.9, он дает хорошую альтернативу для программистов, которые разрабатывают и развертывают свои приложения на Windows. Соединив мощности .NET и VS — IronRuby дает интересные возможности, включая выполнения Ruby кода в браузере, благодаря таким проектам как Silverlight/Moonlight и Gestalt.

На данный момент IronRuby нацелен на реализацию функционала Ruby 1.8.x.
Официальный сайта проекта IronRuby
Небольшой обзор IronRuby 0.9 от XaocCPS

Вышел IronRuby 0.9

Время на прочтение1 мин
Охват и читатели1.1K
image
Проект IronRuby на всех парах двигается к релизу. На днях было объявлено, что доступна последняя перед релизом версия IronRuby 0.9 с большим набором изменений. Далее будут минорные версии с отладкой и улучшением производительности. Что же нового добавлено в этом выпуске? А добавлено много вкусного:

* добавлена возможность вызывать коды на Python из IronRuby;
* добавлен механизм работы с Win32Ole для работы с COM-объектами и ActiveX;
* добавлена прозрачная работа с генериками .net, так что код написанный на других языках .NET может быть запросто прозрачно вызван в IronRuby;
* явная поддержка x64 через ir64.exe;
* ну и закрыто несколько багов, улучшена производительность и стабильность, все как обычно для предрелизных выпусков.

По поводу IronRuby хочется сказать еще пару слов:

* во-первых проект практически допилен, судя по тестам ironruby.info: 85.14% тестов RubySpec пройдено еще релизом 0.6;
* во-вторых, реализация Ruby на .NET позволяет использовать как имеющийся .net-код с других языков в IronRuby, так и использовать ruby-код в своих проектах написанных, например, на C#;
* в-третьих, IronRuby — это open source проект и работает под Mono, что тоже большой плюс;
* в-четвертых, IronRuby, по оценкам разработчиков, в два раза быстрее MRI, что, конечно, тоже огромный плюс.

Все это — замечательные новости для .net-разработчиков, которые присматриваются к ruby или даже уже используют коды на ruby для своих проектов. Ну и для всех рубистов это тоже отличные новости, потенциал Ruby растет и язык набирает все больше и больше поклонников.

Ubuntu on Rails

Время на прочтение1 мин
Охват и читатели2K
Недавно на просторах Launchpad.net был создан тим Ubuntu on Rails.

Миссия тима заключается в поддержании пакетов для инструментария, необходимого в Ruby/Rails разработке. В первую очередь это актуальные версии rubygems (вы все еще инсталите их из исходников?) и passenger.

В тиме участвуют ребята из Brightbox, которые до сих пор поддерживали пакеты passenger, nginx-passenger, ruby-ee для Ubuntu и Debian.

В своем блоге я опубликовал небольшой howto для тех кто хочет помочь.

Под катом инструкции по удалению rubygems установленных из исходников и установке правильных :)

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

плагин StringParser

Время на прочтение1 мин
Охват и читатели677
Решил как-то упорядочить избитую проблему: практически в каждом проекте приходится делать кастомный парсер, который бы выводил текст в удобочитаемом виде. И практически в каждом проекте 80% этого парсера — это решение уже решенных задач.

StringParser — это плагин к Рельсам и либа, которая включает методы, реализующие наиболее часто встречающиеся задачи парсинга. Давайте я покажу на примере:

StringParser.new("what a cool url: url.com and image image.com/image.jpg<br/>").urls_to_images.urls_to_links.html_escape.string

То же самое можно оформить в блоке (это кому как больше нравится):

parser = StringParser.new("what a cool url: url.com and image image.com/image.jpg<br/>") do |p|
p.urls_to_images.urls_to_links
p.html_escape
end
parser.string

Я просто приведу названия методов, которые я уже успел закодить, а более подробнее описание можно найти в доках или в исходниках:

break_long_words
close_tags
cut
highlight_code # использует для подсветки gem ultraviolet
html_escape # в отличие от рельсового аналога принимает :except => []
newlines_to_br
urls_to_images
urls_to_links


Хотел бы пригласить всех дополнить либу и довести до ума.

Вклад авторов