середу, 26 жовтня 2011 р.

Модель User в DataMapper(з BCryptHash) для Warden

В процесі написанні статті Модель User в DataMapper для Warden я натрапив на цікавий тип даних BCryptHash. В DataMapper він стає доступний, якщо включити гем dm-types. BCryptHash зберігається у базі даних як рядок, що представляє сіль, хеш і вартість паролю, використовуючи алгоритм bcrypt. Він пропонує альтернативу більш звичної пари значень хеш і сіль, які зберігаються у базі даних.

Модель User в DataMapper для Warden

В минулій статті Інтеграції Warden з Sinatra і DataMapper ми написали тестовий додаток, який використовує аутентифікацію по імені і паролю. Уважний читач не міг не помітити, що паролі у базі даних зберігаються у відкритому вигляді. Це все робилося, щоб не завантажувати статтю зайвими сутностями.
Але очевидно, з точки зору безпеки паролі у базі даних повинні зберігатися в зашифрованому вигляді. Цю тему ми і розглянемо у цій статті.

За основу взята 11 глава "Task F: Administration" з книги Agile Web Development with Rails (3rd edition).

Тут основний упор буде на роботу з DataMapper. Крім того у другій частині статті ми закладемо фундамент адміністративного інтерфейсу для керування користувачами.

понеділок, 24 жовтня 2011 р.

Ruby 2.0

19 жовтня 2011 Matz, відомий як розробник мови програмування Ruby, оголосив про початок робіт над версією 2.0.


Також з'явився попередній графік випусків для Ruby 2.0.0. Як і очікувалось,  фінальну версію варто чекати 2 лютого 2013 року на 20-у річницю від дня народження Ruby.

Інтеграції Warden з Sinatra і DataMapper

В Інтернеті можна знайти багато статей на тему аутентифікації з допомогою Warden у Sinatra. Я не буду оригінальним, і напишу ще одну, щоб самому розібратися з особливостями цього інструменту. Ціллю цієї статті не є показати повністю готовий механізм аутентифікації. А лише продемонструвати основні можливості інтеграції Warden з Sinatra і Datamapper.

Warden - це Rack middleware, що забезпечує механізм аутентифікації для веб-додатків на Ruby.
Warden вимагає деяких налаштувань для Sinatra. Цього можна уникнути, використовуючи плагін Sinatra::Warden. Але ми ж не шукаємо простих шляхів.

середу, 19 жовтня 2011 р.

RubyMonk - ще один браузерний самовчитель Ruby

RubyMonk — це інтерактивна платформа, яка допоможе вам освоїти основи мови програмування Ruby. Вона поєднує в собі переваги навчання з книгою і наставником. І дає навички практичного програмування в ігровій формі.
RubyMonk можна рекомендувати початківцям, які тільки відкривають для себе мову Ruby.

Навчання проходить у двох формах:
  • Уроки. Користувач знайомиться з основами мови Ruby (масиви, ітерації, стрічки тощо). Всі уроки забезпечені докладним описом з прикладами коду, а також доповнені прекрасною можливістю самостійно виконати код.
  • Проблеми. Користувачу дається можливість самостійно написати код для вирішення певної проблеми, використовуючи знання, отримані на уроках.

пʼятницю, 7 жовтня 2011 р.

Тестування швидкодії Time і Date в різних версіях Ruby

Вчора задався питанням швидкодії бібліотек для роботи з датою і часом, які входять до складу Ruby - Time і Date.

Для для тестування був написаний простий скрипт з використанням модуля Benchmark, який надає методи для вимірювання та звітності часу, що був затрачений на виконання коду Ruby:
require 'benchmark'
require 'date'

puts RUBY_DESCRIPTION
n = 10_000

puts
Benchmark.bm(10) do |x|
  x.report("Time:")     { n.times{Time.now} }
  x.report("DateTime:") { n.times{DateTime.now} }
end

puts
Benchmark.bm(10) do |x|
  x.report("Time:")     { n.times{Time.mktime(2012, 12, 23)} }
  x.report("DateTime:") { n.times{DateTime.new(2012, 12, 23)} }
end

У тестуванні будуть брати участь наступні версії Ruby: 1.8.7, 1.9.2 та 1.9.3-rc1, а також альтернативні реалізації інтерпретатора: Rubinius написаного на мові C++ та JRuby - на Java.

Тепер подивимося на результат виконання цього скрипта:

четвер, 6 жовтня 2011 р.

Mechanize 2.0 довідник

Mechanize - це бібліотека для сканування веб-сайтів для будь-якої автоматизації або з метою тестування. Довідник по Mechanize 2.0 являє собою докладний посібник для отримання речей які можна зробити в Mechanize. Це більше ніж документація, але менше ніж книга. Робота над нею вже йде, і вона буде опублікована тут безкоштовно дуже скоро!

>>> Анонс на ruby.about.com

вівторок, 4 жовтня 2011 р.

Приклад роботи Delayed_job з DataMapper у Sinatra

Delayed_job (або DJ) бібліотека асинхронної черги фонових завдань написана на Ruby. Може знадобитись для таких типових задач як:
  • поштова розсилка
  • зміна розмірів зображень
  • конвертування аудіо/відео
  • HTTP завантаження
  • оновлення інформації
  • перевірка спаму
Спочатку написана Tobias Lütke як плагін для веб-фреймворка Rails з Active Record. На даний час підтримується компанією Collective Idea, і дозволяє використовувати ряд інших бекендів для збереження черги завдань.

понеділок, 3 жовтня 2011 р.

Реліз Sinatra 1.3.0

Світ побачила версія 1.3.0 фреймворка Sinatra. Найбільш помітне нововведення в цьому релізі - додавання streaming API. Цікавим моментом є те, що використовувати цю можливість можна незалежно від того, на якому сервері запущено додаток.
Приклад коду:
get '/' do
  stream do |out|
    out << "It's gonna be legen -\n"
    sleep 0.5
    out << " (wait for it) \n"
    sleep 1
    out << "- dary!\n"
  end
end

Крім того додали підтримку HTTP-методу PATCH:
patch '/' do
  # ...
end

Про інші зміни читайте в офіційному прес-релізі New feature release, Contrib and Recipes