Записи с тегом «Ruby»

Возрождение блога разработчика веба

17.07.2010

Давно ничего не писал. То ли вдохновения не было, то ли просто думал, что «всё уже написано до нас».

Сейчас я участвую в довольно интересном стартапе, в роли технического директора и ведущего разработчика. Занимаюсь пока несколько нетипичными для себя занятиями: очень мало программирования, но много проектирования, различной документации, общения с сотрудниками других компаний, которые будут обеспечивать расширенную функциональность разрабатываемого нами сервиса, собеседования (кстати, обратите внимание на наши вакансии дизайнера интерфейсов и технического писателя) и прочее.

Но скоро (надеюсь, очень скоро), буду и вновь писать код в своё удовольствие и на благо компании :-)

Пока составлял план разработки, понял что научиться нужно будет ещё очень и очень многому. А учиться, для меня, подразумевает и делиться полученными знаниями, в том числе. Постараюсь почаще описывать различные используемые нами технологии и процессы разработки в этом блоге. А «вести с полей» всегда можно увидеть в моём микроблоге на Жуике, они отмечены тегом «работа».

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

Оставайтесь на связи! ;-)

P. S. И задайте, пожалуйста, какие-нибудь темы для обсуждения. Что вы хотите узнать о разработке стартапа (но, пока, не о нём самом)? Для затравки, несколько ключевых слов про используемые технологии: mobile, iPhone, Android,  realtime, geolocationRuby, JavaScript, HTML 5Ubuntu.

Ставим рубиновый типограф на Рельсы

25.11.2009

В продолжение вчерашней темы, добавил простой способ типографить избранные поля в модели ActiveRecord.

Достаточно написать в нужной модели примерно следующее:

class Article < ActiveRecord::Base
  typograf :title, :use_p => false, :use_br => false
  typograf :content, :teaser
end

И тогда каждый раз перед сохранением (конкретнее, перед проверкой правильности полей) будет проходить типографирование этих полей, посредством Типографа студии Артемия Лебедева.

Поддерживается несколько возможных синтаксисов объявления моделей для типографирования:

  • для одного конкретного поля:
    typograf :content
  • можно указать параметры для типографирования этого поля:
    typograf :content, :entity_type => AlsTypograf::NO_ENTITIES
  • для нескольких полей сразу (тоже с возможностью объявить параметры типографирования, общие для всех объявленных полей):
    typograf :skills, :achievements, :additional, :use_br => false, :use_p => true
  • для нескольких полей сразу (но с объявлением параметров для каждого конкретного поля):
    typograf :foo => {:entity_type => AlsTypograf::HTML_ENTITIES},
             :bar => {:use_p => true, :use_br => false},
             :baz => {:max_nobr => 5},
             :some_other_field_name => {}

Все эти варианты могут комбинироваться друг с другом внутри одной модели произвольное количество раз (но если параметры типографирования для одного и того же поля были указаны в вызовах несколько раз, будут применяться только последние).

Типограф студии Артемия Лебедева с отблеском Рубина

24.11.2009

Понадобилось мне типографировать тексты, добавляемые в админке одного из приложений. Поиск в интернете ни одного годного типографа на Ruby не показал.
Зато, я вспомнил, что студия Артемия Лебедева позволяет типографировать тексты с помощью их веб-сервиса. Поэтому, я написал маленькую обёртку к их сервису.

Пользоваться очень просто.

  1. Установите:
    sudo gem install als_typograf --source=http://gemcutter.org/
  2. В коде приложения используйте метод process модуля AlsTypograf следующим образом:
    require 'als_typograf'
    AlsTypograf.process('- Это что, "Типограф"?') # "<p>— Это что, «Типограф»?</p>"

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

AlsTypograf.process('- Это что, "Типограф"?', :use_p => false, :use_br => true)

так и выставлять глобально, для всех запросов на типографирование:

AlsTypograf.encoding = 'CP1251' # По-умолчанию используется кодировка UTF-8
AlsTypograf.html_entities! # Заставляет использовать сущности HTML, такие как: &nbsp;, &mdash; &hellip;

Документация для рубинового типографа хранится (и автоматически обновляется при любых изменениях) на сервисе rdoc.info, который весьма рекомендую всем разработчикам.

Метапрограммирование в Ruby

30.09.2009

Что такое метапрограммирование?

Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data, or that do part of the work at compile time that would otherwise be done at runtime. In many cases, this allows programmers to get more done in the same amount of time as they would take to write all the code manually, or it gives programs greater flexibility to efficiently handle new situations without recompilation. (via Wikipedia)

Это руководство перечисляет все стандартные методы Ruby, используемые для метапрограммирования, а так же приводит примеры их обычного употребления. В конце мы получим пример использования метапрограммирования для динамического создания классов, соответствующих таблицам в БД, включающих методы, соответствующие полям таблицы, на манер ActiveRecord.
(далее…)

Интеграция WYSiWYG-редактора TinyMCE в рельсовые приложения

15.09.2009

Вчера закончил работу (ну, её было не очень много) по переделыванию плагина TinyMCE для рельсов в полноценный gemТеперь редактировать текстовые данные в рельсовых приложениях ещё проще.

Достаточно вставить в environment.rb:

config.gem 'tiny_mce', :source => 'http://gemcutter.org/'

В нужный контроллер:

uses_tiny_mce :only => [:new, :create, :edit, :update]

В обёртку:

= include_tiny_mce_if_needed

А в представлении указать у нужного поля текста класс mceEditor:

- form_for @page do |f|
  = f.text_area :content, :class => 'mceEditor'

После этого остановите свой проект, наберите в командной строке rake gems:install, запустите проект снова — файлы для TinyMCE автоматически установятся в нужное место. Если вы обновите гем (например, в связи с обновлением кода TinyMCE его авторами) — удалите public/javascript/tiny_mce, перезапустите приложение и новые файлы лягут в нужное место.

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

Ссылки проекта:

Установка Ruby on Rails в Ubuntu (для разработки)

29.09.2008

Я постараюсь поддерживать эту статью в актуальном состоянии. На данный момент, все действия, описанные в статье, актуальны для следующих версий ПО:

  • Ubuntu Karmic Koala (9.10)
  • Ruby 1.8.7 (2009-06-12 patchlevel 174)
  • Rubygems 1.3.5
  • Ruby on Rails 2.3.4

Установка Ruby

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

sudo apt-get install ruby-full build-essential libruby-extras libsqlite3-ruby

Установка Rubygems

  1. RubyGems в репозитории Ubuntu Karmic пока актуальные, поэтому можно смело ставить из репозитория командой:
    sudo apt-get install rubygems
  2. Однако, если вы предпочитаете ручную установку RubyGems, воспользуйтесь следующими командами:
    wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
    tar xzvf rubygems-1.3.5.tgz
    cd rubygems-1.3.5
    sudo ruby setup.rb
    sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

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

    sudo gedit /etc/bash_completion.d/gem1.8

    И вставить в начало этого файла, сразу после комментариев, следующий код:

    have()
    {
      unset -v have
      PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null &&
      have="yes"
    }

    А в самый конец вставить:

    [ -n "${have:-}" ] && complete -F _gem18 $filenames gem

    Теперь вы в консоли сможете набирать gem i и консоль будет сама дополнять команду до gem install,

    Если же у вас уже была установлена более старая версия Rubygems, вы можете обновить её до текущей:

    sudo gem update --system

    Иногда, после обновления этой командой, gem может начать выдавать ошибку:

    /usr/bin/gem:23: uninitialized constant Gem::GemRunner (NameError)

    Для её устранения, необходимо отредактировать исполняемый файл (sudo gedit /usr/bin/gem) и перед строкой require "rubygems" вставить строку require "rubygems/gem_runner"

Установка Rails

Теперь, когда нас установлены актуальные версии интерпретатора и менеджера гемов, мы можем присутпить к установке самих Rails.

sudo gem install rails

Всё, рельсы установлены. Чтобы проверить, что всё в порядке, создадим приложение на рельсах:

cd ~
mkdir Sites
cd Sites
rails my_first_site
cd my_first_site
./script/server

Эти команды создадут в вашей домашней директории поддиректории Sites, а в ней, в директории my_first_site rails-приложение, после чего запустит стандартный сервер WEBrick, поставляемый вместе с интерпретатором Ruby. Если установка прошла без ошибок, то вы сможете увидеть приветствие рельсов, пройдя по ссылке http://127.0.0.1:3000/.

Установка дополнительных гемов

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

Если для вас не обязательно наличие самой последней версии этого гема, вы можете ограничиться командой

sudo apt-get install librmagick-ruby

Если же вы захотите установить самую последнюю версию этого гема, вам нужно будет скачать исходные коды для библиотек ImageMagick (а они потянут за собой много-много других библиотек). Скорее всего, для вас это излишне. Но команды напишу:

sudo apt-get install libmagick9-dev
sudo gem install rmagick

Ещё лично я советую поставить вам несколько плагинов, которые облегчат вам жизнь при работе с Rails вдальнейшем. Установка одной командой:

sudo gem install mongrel BlueCloth RedCloth sqlite3-ruby ZenTest

И о каждом геме поподробнее:

  • mongrel — более быстрый, чем WEBrick сервер, написанный специально для работы с Rails. Если н установлен, то по команде ./script/server рельсы станут запускать именно его.
  • BlueCloth и RedCloth — библиотеки, используемые рельсовыми хелперами markdown и textilize соответственно для разметки текста.
  • sqlite3-ruby — библиотека для работы с базами sqlite3 (которые создаются по-умолчанию при создании рельсового приложения).
  • ZenTest — набор утилит для автоматического тестирования приложения. По команде autotest запускается тестирующий демон, который будет проверять все изменённые файлы, пробегая связанные с ними тесты. Об этой утилите я напишу позже

Неделя на Рельсах (выпуск от 10 сентября 2008 г.)

11.09.2008

Перевод. Оригинальная статья: This Week in Rails (September 10, 2008), за авторством Gregg Pollack

Добро пожаловать в пятый выпуск «Недели на рельсах», еженедельный отчёт о событиях в околорельсовом сообществе. Antonio Cangiano (автор идеи) был весьма занят, поэтому на этой неделе я решил его подменить.

Вы, скорее всего, уже слышали о выходе Rails 2.0.4 и Rails 2.1.1. Оба релиза — в основном исправляют ошибки, за подробностями отправляйтесь в списки изменений.

(далее…)