середа, 29 червня 2011 р.

Mechanize 2.0

Після більше року активної розробки вийшла нова версія Mechanize - Ruby-бібліотеки для автоматизації взаємодії з веб-сайтами. У новій версії проведена велика робота з усунення помилок, а також додані нові можливості. Дивіться офіційний анонс для більш докладної інформації.

вівторок, 21 червня 2011 р.

ВКонтакте → Авторизація Standalone-додатків використовуючи OAuth 2.0 на прикладі Ruby і Mechanize

Про авторизацію Desktop-додатків ВКонтакте на прикладі Ruby і Mechanize я писав більше року тому. З того часу спливло чимало води:
  • Для авторизації додатків використовується відкритий протокол OAuth 2.0.
  • Запити до API здійснюються без необхідності їх підписувати, завдяки використанню протоколу HTTPS.
Про серверну авторизація ВКонтакте використовуючи OAuth 2.0 я вже писав у цій статті на прикладі Sinatra. У цій статті мова про клієнтську авторизації на прикладі Mechanize.

Поїхали!

понеділок, 20 червня 2011 р.

Sinatra - Up and Running


Alan Harris і Konstantin Haase працюють над книгою Sinatra – Up and Running від O'Reilly, вихід якої запланований на серпень 2011 року. Приємно, що нарешті спільнота розробників Sinatra і Padrino матиме власну книгу. Попередньо замовити її можна тут.

Ось короткий опис книги:
Sinatra дає розробникам маленький але потужний і масштабований фреймворк для розробки веб-додатків на Ruby. Ця вступна книга дасть читачеві старт, допомагаючи йому створити, встановити і відшліфувати свій перший веб-додаток з Sinatra. Також вона досліджує, як Sinatra вписується в екосистему веб-додатків, головним чином у порівнянні з його більшим братом, Ruby On Rails.

пʼятниця, 17 червня 2011 р.

Використання will_paginate з DataMapper і Sinatra

Часто потрібно так, щоб у представлені(View) відображалися не усі записи з масиву на одній сторінці. У цьому випадку необхідно реалізувати розбиття на сторінки(pagination). Забезпечення цієї функціональності буде простішим з використанням плагіна WillPaginate, який є популярним у середовищі Rails-розробників. У цій статті мова піде про використання WillPaginate разом з Sinatra і DataMapper. Все що нам потрібно це версія >3.0 з підтримкою DataMapper.

Здійснюємо пошук
$ gem search will_paginate --remote
і встановлюємо необхідну версію
$ sudo gem install agnostic-will_paginate

За приклад ми візьмемо наш проект блогу із серії статей про Sinatra. Нашою задачею буде вивести на головну сторінку статті з розбивкою по сторінках.

четвер, 26 травня 2011 р.

Огляд Padrino і OmniAuth

У цій статті буде показано, як з’єднати модуль автентифікації Access Control, описаний тут, з OmniAuth middleware для Rack.

Система аутентифікації і контролю доступу Padrino забезпечує простий спосіб створювати свої системи аутентифікації. У поєднанні з OmniAuth ви можете легко використовувати її для аутентифікації за допомогою різних методів. Читайте нижче для більш докладної інформації про те, як інтегрувати їх.

У цій статті ми розглянемо дві теми:
  • Інтеграцію Padrino Admin Authentication в усі додатки вашого проекту
  • Створення власних стратегій аутентифікації

На відміну від оригінальної статті, де у якості ORM використовується ActiveRecord, тут ми будемо використовувати DataMapper, про який я писав тут. Можливо вам необхідно познайомитись з фреймворком Padrino, про який я писав тут і тут. І про OmniAuth тут.

Перш ніж ми почнемо, важливо відзначити, що наша вбудована аутентифікація, що базується на ролях, може взаємодіяти з іншими системами. Потрібно лише внести зміни у файли session.rb і account.rb для того щоб додати свій власний код.

Отже, давайте почнемо зі створення проекту використовуючи DataMapper:

субота, 21 травня 2011 р.

Термінальний віконний менеджер Tmux

Майже кожен поважаючий себе linux'оїд знайомий з чудовою утилітою GNU Screen. Але у цій статті мова піде не про неї. А про її альтернативу Tmux, яка на мою думку є більш зручнішою.
Отже.
Tmux - це термінальний віконний менеджер, і мультиплексор. Тобто дозволяє використовувати декілька терміналів у одному. Tmux так само як і screen можна легко завести у фон, і так само легко повернутися до нього.

пʼятниця, 20 травня 2011 р.

OmniAuth: Зовнішня, проста автентифікація для Rack на прикладі Sinatra і ВКонтакте

В останні один-два роки веб-додатки зазнали радикальних змін. Час, коли кожен сайт представляв собою бункер, який чекає приходу нових користувачів поступово проходить. Я роздратовано зітхаю кожен раз, коли мені доводиться заповнювати чергову реєстраційну форму замість того, щоб скористатися "Connect with Facebook", "Sing in with Twitter" або "Log in with OpenID". Зараз веб-додатки стають все більш відкритими світу. Один з кращих способів збільшення популярності та життєздатності нового сервісу є його доповнення існуючими базами користувачів таких додатків, як: Twitter, Facebook, ВКонтакте, тощо.

Нещодавно я писав про авторизацію додатків ВКонтакте використовуючи відкритий протокол OAuth 2.0. У цій статті мова піде про OmniAuth.

OmniAuth - система аутентифікації заснована на Rack, яка значно спрощує зовнішню аутентифікацію в тому сенсі, що вам немає потреби розбиратися в API провайдерів, а також не вимагає ніякої інформації про те, що буде відбуватися з надіcланими після аутентифікації даними.

Що це означає для вас? Це означає, що ви можете легко реалізувати аутентифікацію в вашому додатку через Twitter, Facebook, LinkedIn, Google, GitHub, ВКонтакте, Mailru і т.д. І потім мати повний контроль над нею.

Запуск текстового редактора в IRB

Якщо ви працюєте з Ruby, ви знаєте, що interactive ruby shell (або IRB для стислості) - це командна оболонка для програмування на мові Ruby. Програма запускається з командного рядка і дозволяє виконувати команди мови Ruby в реальному часі. IRB є чудовою для випробування однорядкового коду, але якщо вам потрібно написати більше блоків, вона починає не справлятися з роботою. Якщо вам потрібно змінити або додати один рядок у блок коду, доводиться повторно вводити всі команди одна за одною. Відчувається, що інтерфейс командного рядка IRB є обмеженим у порівнянні з силою вашого текстового редактора. У цьому дописі я збираюся показати, як ви можете взяти найкраще з обох світів, шляхом завантаження текстового редактора всередині IRB для редагування і подальшого виконання коду.

Існує бібліотека Interactive editor, що забезпечує цю функціональність. Вона доступна через gem:
$ gem install interactive_editor
Далі необхідно створити файл ~/.irbrc, якщо у вас його ще немає, і вставити в нього наступний рядок:
require 'interactive_editor'
Тоді можете використовувати його в irb:

$ irb                        # або його альтернатива ripl
> vi                         # (використовувати vi з тимчасовим файлом)
> vi 'filename.rb'           # (відкрити filename.rb в vi)
> ed                         # (використувуваьт змінну оточення EDITOR)
> [emacs|vim|mvim|nano|mate] # (інші редактори)

Додаткові матеріали:

четвер, 19 травня 2011 р.

Як визначити країну по IP адресі

Щоб дізнатися країну з IP адреси слід встановити geoip gem:
$ gem install geoip
Потім завантажити базу даних GeoLite Country, яка є безкоштовною за умови GPL/LGPL для API.
Розпакувати її кудись і використовувати як хочете.
Приклад:
require 'geoip'
geoip = GeoIP.new('GeoIP.dat')
country_location = geoip.country('8.8.4.4')
puts country_location.country_code2 # => "US"

середа, 13 квітня 2011 р.

Авторизація ВКонтакте використовуючи OAuth 2.0 на прикладі Ruby і Sinatra

Віднедавна для авторизації додатків ВКонтакте використовується відкритий протокол OAuth 2.0. Тепер інтегрувати сайти і клієнтські програми з соціальною мережею стало значно простіше.
На сторінці з документацією нової системи авторизації написано, що підтримуються два типи авторизації: серверна і клієнтська.
У результаті проходження процесу авторизації вам видається ключ доступу access_token, з допомогою якого ви можете виконувати будь-які запити до API ВКонтакте від імені користувача або від імені додатку.
Не дивлячись на новизну протоколу OAuth 2.0, вже зараз на його сайті можна знайти бібліотеки для більшості популярних мов програмування, в тому числі і для Ruby
Крім появи підтримки OAuth у ВКонтакте змінився спосіб взаємодії з API. Тепер всі запити відправляються з безпечного протоколу HTTPS, в результаті чого зникла необхідність підписувати кожен запит.
Я не буду вдаватися у подробиці процесу авторизації. Про це можна почитати у документації ВКонтакте.
Нижченаведений код показує наскільки легко використовувати API ВКонтакте з OAuth2 gem в Ruby.