субота, 31 грудня 2011 р.

З Новим Роком!


Ruby-ua вітає усіх з Новим 2012 Роком, який настане вже через кілька годин!

Бажаю в новому році творчих успіхів, гарного коду, відкритих API, швидкого заліза і щоб кваліфікація ваша тільки росла.
$ ruby -e 'def a;10.times{puts " "*rand(79)+"*"};end;99.times{a;puts " "*34+"З Новим 2012 роком!";a;sleep 0.1;puts "\e[2J"}'

Ура! З наступаючим!

середа, 28 грудня 2011 р.

Ретроспектива 2011


2011 рік добігає кінця, і я згадав запис, у якому згадував про найбільш значущі події в світі Ruby, що відбулися в 2010. Хотілось вірити, що тенденція збережеться. Так і сталося.

Цей рік приніс декілька приємних новин:
  • У 2011 році Ruby став повнолітнім
  • Реліз 1.9.3 - основної реалізації мови програмування Ruby
  • Оголошено про початок робіт над Ruby 2.0
  • Опублікований план підготовки релізу Ruby 2.0
  • Matz автор мови Ruby в інтерв'ю виданню InfoWorld повідомив, що працює над діалектом мови для мобільних пристроїв
  • Yukihiro Matsumoto тепер працює в Heroku
  • Припинена підтримка Ruby 1.8.6

Розвиток альтернативних реалізації мови Ruby:
  • Реліз MagLev 1.0, альтернативної реалізації Ruby VM з вбудованим NoSQL-сховищем, побудованої на основі використання 64-розрядної віртуальної машини VMware GemStone/S, початково створеної для мови Smalltalk.
  • Реліз JRuby 1.6 - реалізації мови Ruby, написаної цілком на Java і призначеної для виконання у віртуальній машині JVM з підтримкою Ruby 1.9.2. Прискорення JRuby 1.7 у три рази після установки OpenJDK 7 update 2
  • Успіхи спільноти розробників Rubinius - альтернативної реалізація мови програмування Ruby, написаної на C++
  • MacRuby 0.10 - реалізація мови програмування Ruby, написаної на Objective-C і фреймворку CoreFoundation. Розроблена компанією Apple Inc. Базується на версії Ruby 1.9.

Також хочеться відмітити декілька цікавих проектів:
  • Бібліотека rbenv від 37signals: проста і легка альтернатива RVM для керування версіями Ruby
  • Ruboto - фреймворк для написання повноцінних програми для Android на Ruby
  • У 2011 склалася тенденція, що кожен проект на Ruby приєднується до Travis. Travis - дуже проста, система безперервної інтеграції, яка розповсюджується у вигляді відкритих вихідних кодів.

Інші значущі релізи:

P.S. З наступаючим Новим Роком!
P.P.S. Якщо вам є що додати, пишіть в коментарі.

пʼятниця, 23 грудня 2011 р.

Створення простого AJAX-сайту з Sinatra та JQuery

За основу цієї статті взятий скрінкаст Building a Simple AJAX Website with Sinatra & jQuery. Зараз у вільний час я працюю над сайтом isit.heroku.com, який основну свою ідею почерпнув саме цього скрінкасту.

У цій статті ви дізнаєтеся:
  • Як створити свій власний веб-сайт із таймером зворотного відліку
  • Як визначити в Sinatra, якщо запит XMLHttpRequest чи ні
  • Як відключити шаблони(layouts) для XHR запитів у Sinatra
У цьому епізоді ми будемо використовувати Sinatra, HAML і JQuery.

"Is It" веб-сайт

Ви можливо зустрічали цей жанр сайтів раніше. Це прості веб-сайти з "Так" або "Ні" в середині сторінки. Вони відповідають на питання типу "Це Різдво?", "Це Новий Рік?" або інші термінові питання. Іноді на сторінці також є таймер зворотного відліку.

Розробку нашого "Is It" веб-сайту розпочнемо з огляду структури додатку на Sinatra.
app.rb - це головний файл нашого додатку, який містить єдиний маршрут до кореневої URL-адреси. Також ви помітили, у ньому підключається файл lib/countdown.rb.

## app.rb
# -*- encoding: utf-8 -*-
require 'sinatra'
require 'haml'

require_relative 'lib/countdown.rb'

get '/' do

end

вівторок, 13 грудня 2011 р.

Асоціації в DataMapper

Прочитавши заголовок цієї статті, читач мабуть зрозуміє про що піде мова нижче. У далекому 2009 я писав статтю про DataMapper, у якій згадувались асоціації між моделями. Сьогодні з власного досвіду спробую описати найбільш поширені асоціації та роботу з ними.
Для початку освіжимо пам'ять.
DataMapper - це ORM бібліотека (англ. Object-relational mapping, Обє'ктно-реляційна проекція - технологія, яка зв'язую бази даних з концепцією об'єктно-орієнтовного програмування, створюючи "віртуальну об'єктну базу даних").

Асоціації - це спосіб оголошення відносин між моделями. Вони надають ряд методів, які дозволяють створювати відносини та отримувати пов'язані моделі.

Зараз ORM використовуються повсюдно - ніхто не намагається працювати з базою вручну. Функціонал дозволяє зробити багато речей простіше. Робота з асоціаціями стала в рази легшою. Можна не використовувати SQL-запити, а працювати з даними, як зі звичайними об'єктами.

Я писав цю статтю виключно для себе, тому методика викладання навряд чи сподобається вам своєю легкістю і доступністю :))
Картинка для затравки.
Зацікавило? Тоді ласкаво прошу під кат.

неділя, 11 грудня 2011 р.

Ruby/Tk в RVM

Так як wxRuby не розвивається більше 2-ох років, а Qt4 надмірний для моїх задач. Вибір впав на бібліотеку Tk, яка поставляється разом з Ruby.

Tk (від англ. Toolkit — "набір інструментів", "інструментарій") - кросплатформна бібліотека базових елементів графічного інтерфейсу, яка розповсюджується відкритими вихідними текстами.

Для того щоб почати використовувати Tk достатньо імпортувати бібліотеку для роботи з нею:
require 'tk'
Якщо ви отримаєте помилку
LoadError: cannot load such file -- tk
значить Tk не скомпільована з вашим Ruby.
Якщо у вас RVM, ласкаво прошу під кат.

середа, 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 (масиви, ітерації, стрічки тощо). Всі уроки забезпечені докладним описом з прикладами коду, а також доповнені прекрасною можливістю самостійно виконати код.
  • Проблеми. Користувачу дається можливість самостійно написати код для вирішення певної проблеми, використовуючи знання, отримані на уроках.