9 листопада 2009 р.

Привіт, DataMapper!


DataMapper - це ORM бібліотека (англ. Object-relational mapping, Обє'ктно-реляційна проекція - технологія, яка зв'язую бази даних з концепцією об'єктно-орієнтовного програмування, створюючи "віртуальну об'єктну базу даних"). DataMapper написана на Ruby, і широко використовується у таких фреймворках як Merb та Sinatra. Вона була розроблена, щоб усунути недоліки бібліотеки ActiveRecord, яка використовується в Ruby on Rails по замовчуванню. DataMapper слідує стандартам ORM-моделі: таблиці відображаються у вигляді класів, записи - у вигляді об'єктів, а стовпці - у вигляді властивостей цих об'єктів. Методи класу використовуються для здійснення операцій на рівні таблиці, а методи екземпляра здійснюють операції над окремими рядками.
Якщо в базі даних є таблиця з назвою posts (записи), то наш застосунок матиме клас Post. Рядки цієї таблиці відповідають об'єктам класу - конкретний запис представляється як об'єкт класу Post. У межах цього об'єкту для отримання доступу до окремих стовпців і встановлення їм значення, використовуються властивості.

Інсталяція DataMapper

DataMapper доступний через менеджер пакетів Ruby Gem:
gem install dm-core

Якщо ви плануєте використовувати DataMapper з базою даних, встановіть адаптер бази даних з проекту DataObjects. В залежності від ваших уподобань, це може бути do_mysql, do_postgres або do_sqlite3.
gem install do_sqlite3

28 жовтня 2009 р.

Привіт, Sinatra!

Sinatra — об'єктно-орієнтований програмний каркас(framework) для створення веб-застосунків, написана на мові програмування Ruby. На офійному сайті написано, що Sinatra це навіть не фреймворк, а DSL для створення веб-додатків. Залежить від інтерфейсу веб-сервера Rack. Вона є альтернативою іншим Ruby фреймворкам, таким як Ruby on Rails, Merb, Nitro та Camping.
Sinatra є відкритим програмним забезпеченням і розповсюджується під ліцензією MIT.
Розроблена та створена Blake Mizerany, Sinatra є крихітною(близько 1500 рядків коду, що майже 1/100-а розміру Rails) та надзвичайно гнучкою. Вона не слідує типовій архітектурі Модель-Вид-Контролер(Model-View-Controller, MVC), яка використовується в інших фреймвоках, таких як Ruby On Rails. Натомість, Sinatra зосереджена на "швидкому створенню веб-додатків на Ruby із мінімальними зусиллями". Sinatra використовує всі можливості Ruby і є його оригінальним розширенням.

Sinatra дає незвичайне відчуття присутності. Це як музика. Ви диригент оркестру. І перша скрипка звучить так, як ви їх наказали, хоча ви не обов'язково повинні знати, як на ній грати. Але в той же час у вас є можливість посмикати струни, побити в барабани, засурмити фанфари. Sinatra крихітна, гнучка і модульна. Ви вільні у виборі, що використовувати у якості бібліотеки моделі, двигуна шаблонів, двигуна JavaScript. Незважаючи на свій юний вік Sinatra є потужним і багатообіцяючим інструментом, про що свідчить підтримка з боку таких таких маститих проектів, як Engine Yard, Heroku, GitHub і Songbird.

Інсталяція Sinatra
Розпочнемо знайомство із встановлення Sinatra.
У вас уже повинен бути встановлений Ruby. Для тих хто вже користується новою гілкою 1.9 можу вас втішити - починаючи з версії 0.9.2, Sinatra повністю сумісна з Ruby 1.9 і Rack 1.0. Найпростіший шлях - встановити Sinatra через Rubygems:
$ gem install sinatra


Привіт, Sinatra
Тепер давайте створимо наш перший веб-додаток.
# myapp.rb
require 'rubygems'
require 'sinatra'

get '/' do
"Привіт, Sinatra!"
end


22 жовтня 2009 р.

Try Ruby! Now With 1.9

Веб-версія IRB(interactive ruby prompt) та 15 хвилинний навчальний посібник для людей, які хочуть познайомитися з Ruby. Тепер версія 1.9.



14 жовтня 2009 р.

vk.com. Частина 7

У цьому дописі мова знову піде про ВКонтакте і WWW::Mechanize. Хоч він і йде під номером сім, він не є продовженням попередніх частинами, хоча для повного розуміння про далі буде йти мова, бажано ознайомитися з ними. З них ви можете дізнатися, як робити наступні речі ВКонтакте:

  • Отримання новин профілю (кількості нових повідомлень, фотографій, відео, друзів, груп).

  • Отримання списку друзів

  • Отримання приватних повідомлень

  • Написання приватних повідомлень



Я вже писав про те, що домен VK.COM перейшов під контроль соціальної мережі ВКонтакте. Майже з тих самих пір авторизація користувачів на сайті vkontakte.ru відбувається через редірект login.vk.com. Це викликає незручність при авторизації за допомогою WWW::Mechanize.

require 'mechanize'
require 'json'

class Vkontakte
def initialize
@ua = WWW::Mechanize.new{|agent|
agent.user_agent_alias = 'Linux Mozilla'
agent.follow_meta_refresh = true
}
end

# Authorisation by submitting email and password (Login)
#
def login_force(uid, email, pass)
url = "http://login.vk.com/?act=login"
page = @ua.post(url, {'email' => email, 'pass' => pass, 'expire' => '1', 'vk' => 1})
s = page.body.match(/'s' value='(.+?)'/)[1]
@ua.post('http://vkontakte.ru/login.php?op=slogin&redirect=1', {'s' => s})
user_page = @ua.get('http://vkontakte.ru/profile.php')
end

end

if __FILE__ == $0
id = "xxxxxxxx"
email = "user@example.com"
pass = "your_password"

vkontakte_agent = Vkontakte.new
vkontakte_agent.login_force(id, email, pass)

end


Далі можна продовжувати роботу з ВКонтакте як звичайно.

29 вересня 2009 р.

Proxy list fetcher using Ruby & Nokogiri

А чому б нам не зробити накручувалку, яка голосує за що-небудь ? "Чорні"(брудні) технології залишимо нашим політиком. А самі займемося чимось корисним.

Цей скрипт складає список проксі-серверів з сайту proxy4free.com, і записує його до файлу proxy_list.txt.

# -*- encoding: utf-8 -*-

require 'nokogiri'
require 'open-uri'

file = File.new('proxy_list.txt', 'w')
url = 'http://www.proxy4free.com/page1.html'
# Get a Nokogiri::HTML:Document for the page
doc = Nokogiri::HTML(open(url))

# Search for nodes by css
doc.css('table tr.text').each do |tr|
ip = (tr/"td:nth(1)").first.inner_html
if ip.match(/^(\d{1,3}\.){3}\d{1,3}$/)
port = (tr/"td:nth(2)").first.inner_html
file.puts "#{ip}:#{port}"
end
end
file.close



Керівництва до дії:

  1. Do something

  2. Do something else

  3. Do something once more

  4. <Do something so much you need>

  5. ?????

  6. PROFIT!


22 вересня 2009 р.

RubyInstaller for Windows



RubyInstaller (раніше відомий як One-Click Installer) - це автономний Windows-інсталятор, який включає в себе саму мову Ruby, середовище виконання, важливу документацію (містить документацію Ruby Core і стандартних бібліотеках, а також книжку "The Book of Ruby" написану Huw Collingbourne), та багато іншого.
Для інсталяції Ruby в один клік необхідно спочатку завантажити версію, яку ви хочете (на даний момент доступні 1.8.6 та 1.9.1) і запустити .exe файл.
Після цього в меню "Пуск" з'явиться відповідний пункт:


Хочу замітити цей проект знаходиться на першому місці по кількості скачувань з сайту RubyForge. На даний момент це - 3,572,852 раз.

21 вересня 2009 р.

wxRuby → Сайзери (3 частина)

У попередній частині ми розглянули Wx::BoxSizer. Продовжимо знайомитися з сайзерами wxRuby.

13 вересня 2009 р.

З Днем програміста!

irb(main):001:0> require 'date'
=> true
irb(main):002:0> (Date.new(2009) + 255).to_s
=> "2009-09-13"


День програмі́ста — офіційне професійне свято програмістів, яке відзначають у 256-й день року (255-й з нуля). У високосний рік це 12 вересня, а у невисокосний — 13 вересня.
Таку нетрадиційну дату було вибрано через те, що число 256 відповідає кількості чисел, яку можна виразити за допомогою вісімкового байта, це — від 0 до 255 (двійкова система: 11111111), які можна представити за допомогою одного байта, який складається з 8 бітів, котрі в свою чергу можуть мати значення 0 або 1, тобто — 28 випадків. Також 256 у шістнадцятковій системі числення це 100 (0x100). А також це максимальна степінь числа 2, яка менша 356 (днів у році).

Вітаю всіх, хто має відношення!

12 вересня 2009 р.

Keyword: login.vk.com/?act=login



Судячи з активності, або народ переживає, або щось не так...
Доменне ім’я vk.com віднедавна належить мережі "В контакте". VK на пути к мировому господству. А API нормальне не можуть надати, так то.

7 вересня 2009 р.

wxRuby → Сайзери (2 частина)

У попередній статті ми познайомилися з позиціонуванням віджетів. А тепер перейдемо до найцікавішого, до огляду сайзерів, які є у бібліотеці wxRuby. І на прикладах побачимо, як впливають на розміщення елементів прапорці з методу Wx::Sizer#add().
У якості прикладу розглянемо код, на основі якого ми будемо експериментувати з сайзерами надалі.
# -*- encoding: utf-8 -*-

require 'wx'

class MainWindow < Wx::Frame
def initialize
super(nil, :id => -1, :title => 'Розмір має значення')
self.size = [300, 200]
self.do_sizer
show
end

def do_sizer
sizer = Wx::BoxSizer.new(Wx::VERTICAL)
set_sizer(sizer)
end
end

class SimpleApp < Wx::App
def on_init
MainWindow.new
end
end

app = SimpleApp.new
app.main_loop()


У цьому прикладі оголошується клас вікна MainWindow, у конструкторі якого викликається метод do_sizer(). Всередині цього методу у майбутніх прикладах відбуватиметься все найцікавіше, в тому сенсі, що у ньому ми і будемо розміщувати елементи керування. Інший код змінюватись не буде, тому в усіх наступних прикладах буде наводитись тільки цей метод.