Ruby is not Rails

    Последнее время о Ruby начали думать только как о Ruby on Rails. Но в мире Ruby ещё много красивых и иногда уникальных вещей. Поэтому, в целях борьбы с предрассудками, хочу вкратце рассказать о отличных и необычных Ruby-проектах.


    Веб


    Тем не менее Ruby больше известен как язык для Веба. Но Ruby on Rails далеко не единственный framework.

    Merb

    Основным его конкурентом считается Merb. Есть мнение, что у него более чистая разработка и красивый API.

    Во-первых, он не привязан к каким-то ORM или JavaScript framework’ам. Вы можете использовать jQuery или ExtJS. Вы можете делать сайты без БД или использовать Sequel, чтобы выжать ещё скорости. И эта агностичность сразу заложена в архитектуру и идеологию.

    Во-вторых, он разбит на под-проекты: merb-core с самым главным и пакеты для конкретных задач. Зачем вам скрипт генерации проекта на сервере?

    В-третьих, он немного быстрее Ruby on Rails. Есть даже мнение, что его скорость уже может сравниться со скоростью PHP с framework’ом. Конечно это спорно, но может на вашей задаче он будет быстрее? :)

    Многим нравиться реализация slice, когда вам надо написать MVC-модуль и реализация аутентификации. Плюс plug-in’ы для Merb — это обычные gem’ы.

    Конечно, holy war «Rails vs. Merb» — бессмысленная затея, но посмотреть Merb всё равно стоит — вдруг он придётся вам по душе.

    Sinatra

    Sinatra — это «DSL для Веба». Формально, только система роутинга — идеал для минималиста :). Пусть лучше за меня скажет код:

    require 'rubygems'
    require 'sinatra'
    
    get '/' do
      @name = request.cookies["name"]
      erb :index
    end
    
    post '/:name' do
      set_cookie "name", params[:name]
      redirect '/'
    end

    Скорость её вполне соответствует количеству кода ;). Если вы пишете небольшой проект, присмотритесь к Sinatra.

    Другое

    Вне статьи останутся Ramaze, Camping и много других. Посмотрите их сами :).

    ORM


    Тут вкратце:

    DataMapper относиться к ActiveRecord, как Merb к Ruby on Rails. Чуть быстрее, местами красивее, так же поделена на под-проекты. Они с Merb даже «разделяют» часть кода — extlib.

    Sequel — это даже не ORM, а скорее DSL для более простого написания SQL. Поэтому она и существенно быстрее.

    Скрипты


    Конечно большинство скриптов в Linux написана на Bash. Но Ruby прекрасная кандидатура для написания ваших личных скриптов (например, для какой-то особой организации фотоальбома). Он имеет лаконичный синтаксис и удобный API работы с окружением: для вызова команды нужно лишь указать её внутри ``, а IO.popen очень удобен, чтобы читать ответ команды. А наличие интерактивной Ruby-консоли очень полезно при разработке и отладки.

    Rake представляет красивый синтаксис для сборки приложений — компактнее и понятнее Ant’а и Make.

    Также посмотрите Sake и Thor, как «альтернативе» Rake.

    Java


    Если у вас есть нудный и некритичный к скорости код на Java (например, описание GUI или тесты), то почему бы не взглянуть на JRuby? Часто можно написать 40—60 % кода на Ruby и особо не потеряв в скорости выполнения (зато повысив скорость программирование и моральное удовольствие). Как минимум для прототипирования это будет очень удобно. Например, для GUI созданы красивые API, а для тестирования можно использовать старый-добрый DSL RSpec.

    Ребятам из чистого Ruby тоже можно взглянуть «через мост» JRuby: Swing — очень неплохой кроссплатформенный GUI, да и в мире Java есть много уже хорошо отлаженных библиотек типа Processing.

    Shoes


    Раз мы затронули тему GUI, то нельзя не вспомнить Shoes. В ней не исповедуется, что интерфейс под каждой ОС должен выглядеть как родной. Наоборот, как в Вебе у каждой программы он должен быть собственным. Есть много приложений на Shoes, но мне особо понравилось Hackety Hack. Hackety Hack всё равно крут, хоть и на XUL :).

    Ruby Arduino Development


    Ну и под конец самое неожиданное — встраиваемые приложения :). Не знаю как, но ребята смогли с помощью RAD писать под микроконтроллеры Arduino. Конечно же с помощью красивого DSL.

    Самый сумасшедший проект на RAD — бармен с приятным Ruby-синтаксисом:

    drink 'Screwdriver' do
      serve_in 'Highball Glass'
      ingredients do
        2.ounces :vodka
        5.ounces :orange_juice
      end
    end
    


    P.S.: Конечно это не все интересные проекты. Если вы знаете ещё пару интересных вещей — напишите о них, их разработчики будут вам рады :).
    Поделиться публикацией

    Комментарии 30

      0
      Спасибо, со временем испытаю все
        +3
        спасибо за статью, из неточностей: hacketyhack НЕ на shoes, а на по-моему XUL сейчас, но _why shoes собственно для того и стал писать, чтобы новый hacketyhack написать на shoes, для processing есть ruby-processing.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            Enterbrain в RPG Maker XP (и, думается, далее) использует Ruby как внутренний скриптовый язык.
              +2
              Да, скрипты для внутренних задач — прекрасная ниша для Ruby. Я правда слышал, что интерпретаторы Lua и IO лучше подходят для встраивания, но всё равно :). В статье не упомянул потому что не думаю, что многие на Хабре разрабатывают свои системы со внутренним скриптовым движком :).
                0
                Кстати, если уж говорить о Lua, какую-нибудь литературу не посоветуете? Давно была мысль посмотреть как это внутри :)
                0
                Сейчас уже начали V8 встраивать местами :)
              +1
              еще для руби неплохи биндинги Qt (это я в тему про ГУЙ)
                +1
                GTK+ тоже есть :). Но в таком случае надо думать как распространять приложение — если включать Qt в дистрибутив получается очень жирно. А менеджера пакетов под Windows и Mac OS X нет :(.
                  +1
                  По поводу жирно не согласен. Если нужно именно минимум объема то можно пользоваться тройкой и выбирать только те компоненты которые непосредственно нужны. При этом объем библиотек сиииильно уменьшается.
                    0
                    Тройки виндовой нет под GPL, а ruby-шные биндинги — это GPL. Соответственно, довольно сложно извернуться, что бы результат можно было бы кому-то показывать. Впрочем, это не на тему жирности или нежирности.
                      0
                      странно, мне казалось я где-то видел перекомпиленную тройку под гпл (либо под что-то другое открытое)
                    0
                    Ну под мак в принципе все приложения жирные, потому что тянут за собой все нужные им библиотеки (например adium (IM client) весит под 30 метров в сжатом виде) и маководов это не особо парит.
                  +3
                  Если у вас есть нудный и некритичный к скорости код на Java (например, описание GUI или тесты), то почему бы не взглянуть на JRuby?

                  Потому что есть Groovy?)

                  Статья интересная, правда ощущение, что весь код Ruby — DSL судя по концентрации этого термина в статье)
                    +2
                    Ну лёгкость создания DSL — одно из преимуществ Ruby. Groovy — крут, но может некоторые уже привыкли к Ruby :).
                      +1
                      >Ну лёгкость создания DSL — одно из преимуществ Ruby.
                      groovy умеет это не хуже

                      >Groovy — крут, но может некоторые уже привыкли к Ruby :)
                      ага, java-разработчики? уж groovy-то куда ближе и понятнее для них.
                        0
                        Знаю, что Groovy умеет :). А ещё там более красивое определение хеша и не надо явно указывать параметр i в анонимной функции.
                    0
                    Спасибо за подборку. Действительно, даже этот блог на Хабре по большей части состоит из статей по рельсам, вот такой революционный фрэймворк :)
                      +1
                      по-поводу Merb — после выхода версии 1.0 решил начать новый проект на нем, хотя он совсем не критичен по скорости, очень понравилось, не смотря на множество не привычных вещей

                      спасибо за пост, хотя я в принципе ничего нового не узнал, но читал с удовольствием
                        +1
                        очень рад что хотябы у одного человека руби !== рор
                        описание Merb понравилось (из-за того что не навязывают как нужно программировать), возможно знакомство с его идеями станет моим шагом в руби )
                          –1
                          Интересно, откуда пошла эти идиотская байка, будто все считают, что руби == рор? Не встечал ни одного человека, который так считает.
                            +1
                            В тексте есть ссылки :). Например, см. habrahabr.ru/blogs/ruby/45377/#comment_1148113
                              0
                              Ну и где там утверждение, что руби == рельсы? Первое предложение: «Роуты в рельсах очень важная вещь». Дали ссылку на свой же комментарий, опревергающий утверждение, которое никто не высказывал? Чисто для пЕару? Ну-ну. Похоже модная фразочка такая? :)
                                0
                                Дело в том, что в серии статей о роутерах в Рельсах по умолчанию подразумевалось, что это рельсы. Например, это не указано в заголовке и т. д.
                                  0
                                  Рельсы же построены на умолчаниях :).
                                  Ну, а нафига в заголовке писать что «руби != рельса» не очень понятно. В тексте же написано. Посмотрите в статьи про джангу, симфони, жквери… Никто не указывает что-то специально в заголовках. Или вы там тоже оставляете комментарии, что джанга != питону, симфони != пхп, жквери != жабаскрипту? Ну смешно же.
                                    0
                                    В том-то и дело, что указывают :). Для PHP существует куча framework’ов и Symphony вообще не лидер. Для JS многие используют ExtJS, в Rails вообще Prototype — перевес jQuery минимален. С Django конечно подобная история, но Python активно применяется не только для Веба.
                                      0
                                      >В том-то и дело, что указывают
                                      Доказательства? Загляните в раздел веб-разработка. В 99.9% случаев под языком для «веб-разработки» подразумевается по умолчанию пхп. Вы бы знали как меня это бесит :). Начать что ли вставлять везде бессмысленные комментарии «веб-разработка != пыхыпе» :).
                                      >Для PHP существует куча framework’ов и Symphony вообще не лидер.
                                      А при чём здесь лидер — не лидер? Заголовки пишут «Как сделать вот разэдакую хрень в симфони/джанге/жквери/прототипе», а не «как сделать эту хрень в пхп/питоновском/жабаскриптовском фреймворке симфони/джанге/жквери/прототипе». Так зачем же для рельс это надо указывать явно???
                                      >С Django конечно подобная история, но Python активно применяется не только для Веба.
                                      Ну и что. Руби тоже активно применяется не только для веба.
                                      Я не об этом. Стало модным почему-то, любую статью про руби, там где не идёт речь о рельсах начинать с этого дурацкого заявления, что все якобы думают… Не все. Не думают. Идиотская мода. Я сразу начинаю подозревать, что аффтар подобной статьи — вчерашний «пхп-программист» (в худшем смысле этого слова), который сегодня пролистал книжку про рельсы, а час назад неожиданно для себя открыл, что рельсы написаны, оказывается, на таком специальном языке руби, который не просто веб-шаблонизатор, как пхп, а нормальный себе язык программирования и этой немудрёной, но радостной мыслью аффтар и спешит огорошить якобы ничего не подозревающую общественность, которая, ага, «вся думает, что руби==рельса». Не вся. :) Не думает :) :)
                          +1
                          Да, согласен что руби и рельсы это разные вещи. Как там DHH говорит — «рельсы — это самоуверенное программирование». Т.е. нужно быть всегда готовым смотреть в кишки приложения, как всякие плагины от дяди Васи насилуют рантайм и прочее. Но мне как-то не по душе такой подход. А вот руби в целом довольно по душе.

                          Насчет скриптов — попиарю ка я одну штуку: www.inquisitor.ru/doc/einarc/index.html
                          Получил огромное удовольствие при написании модуля Software для нее=) Кстати весь проект Inquisitor достаточно активно использует ruby на ряду с sh и perl
                            +1
                            На всякий случай небольшое уточнение. Рельсы также, как и Мерб не привязывают к конкретному фреймворку. По дефолту стоит Prototype, на парой сточек он меняется на JQuery. :)

                            + FFI к интересным проектам. Позволяет интегрировать код на С/C++

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое