понеділок, 23 лютого 2009 р.

Ruby 1.9.1 in Debian

Нещодавно в репозиторії experimental з'явилися пакети ruby 1.9.1 для Debian.

Основні нововведення Ruby 1.9:

  • Значно збільшилась продуктивність і зменшено споживання пам'яті. У деяких тестах Ruby 1.9.1, який використовує для інтерпретації коду нову віртуальну машину YARV (Yet another Ruby VM), виявився майже в 5 разів швидше Ruby 1.8.

  • Повноцінна реалізація багатопотоковості, що використовує засоби операційної системи (раніше була присутня реалізація "green threads", через емуляцію ниток (threads) інтерпретатором);

  • Повна підтримка мультибайтних кодувань (Unicode);

  • Значні зміни в синтаксисі мови. Гілка Ruby 1.9 не є 100% сумісною з попередніми версіями, з'явилося багато нових конструкцій і змін логіки роботи існуючих елементів.



Додайте рядки для відсутніх репозиторіїв у /etc/apt/source.list і оновіть список пакетів.
deb http://ftp.de.debian.org/debian/ experimental main
deb-src http://ftp.de.debian.org/debian/ experimental main


$ sudo apt-get update


Щоб встановити ruby1.9 з репозиторія experimental виконуємо наступну команду.
$ sudo apt-get install -t experimental ruby1.9
[...]
Пакунки, які будуть ВИДАЛЕНІ:
libruby1.9
НОВІ пакунки, які будуть встановлені:
libruby1.9.1
Пакунки, які будуть ОНОВЛЕНІ:
irb1.9 libopenssl-ruby1.9 libreadline-ruby1.9 rdoc1.9 ruby1.9 ruby1.9-dev
[...]


$ ruby1.9 --version
ruby 1.9.1p0 (2009-01-30 revision 21907) [i486-linux]

неділю, 15 лютого 2009 р.

Шлях до Ruby 1.9. is it ruby 1.9

Нещодавно анонсований Ruby 1.9.1 - це перший стабільний ("production-ready") реліз серії 1.9.
Як сказав Дейв Томас (Dave Thomas):
"Якщо ви підтримуєте якийсь публічний Ruby-проект (Gem, додаток чи ще щось), то я настійно рекомендую завантажити цей реліз. Тим самим ви допоможете спільноті розробників з двох причин. По-перше, різні несумісності між Ruby 1.9 та Ruby 1.8 означають, що деякі ділянки коду перестануть працювати без додаткової доробки. Виправляючи свій код, ви допомагаєте іншим у його використанні."

Зовсім нещодавно з'явився проект isitruby19, завдяки якому (точніше кажучи завдяки відвідувачам якого), можна довідатися, які геми готові для використання в Ruby 1.9. Кожен відвідувач може внести вклад, перевіривши геми на своїй платформі і відписатися про результати в коментарі.

четвер, 12 лютого 2009 р.

Mechanize + Google Translate

Google Translate
require 'rubygems'                                                                                           
require 'mechanize'                                                                                          
$KCODE = 'utf-8'                                                                                             

langs = {'auto' => 0,'sq' => 1,'ar' => 2,'bg' => 3,'ca' => 4,'zh-CN' => 5,'hr' => 6,'cs' => 7,
'da' => 8,'nl' => 9,'en' => 10,'et' => 11,'tl' => 12,'fi' => 13,'fr' =>14,'gl' => 15,
'de' => 16,'el' => 17,'iw' => 18,'hi' => 19,'hu' => 20,'id' => 21,'it' => 22,'ja' => 23,
'ko' => 24,'lv' => 25,'lt' => 26,'mt' => 27,'no' => 28,'pl' => 29,'pt' => 30,'ro' => 31,
'ru' => 32,'sr' => 33,'sk' => 34,'sl' => 35,'es' => 36,'sv' => 37,'th' => 38,'tr' => 39,
'uk' => 40,'vi' => 41}                                                                  

to = langs['en']
from = langs['uk']
text = ARGV[0] || "Привіт!"
# Зверніть увагу, якщо замість тексту ввести посилання до веб-сторінки (наприклад http://example.com)
# перекладач буде намагатися перекласти саму стоорінку, а не текст.                                  

a = WWW::Mechanize.new {|agent|
agent.user_agent_alias = 'Linux Konqueror'
#agent.follow_meta_refresh = true
}

a.get('http://translate.google.com/translate_t') do |home_page|
translated_page = home_page.form_with(:name => 'text_form') do |form|
to_lang = form.field_with(:name => 'tl')
# lang - список доступних мов формувався приблизно за таким принципом
# to_lang.options.each_with_index{|o, i| print "#{o} => #{i}, "}
source_lang = form.field_with(:name => 'sl')
text_f = form.field_with(:name => 'text')
source_lang.options[from].tick
to_lang.options[to].tick
text_f.value = text
end.submit
tr_text = translated_page.form_with(:action => "/translate_suggestion").field_with(:name => 'gtrans').value
puts tr_text
end


$ ruby transtale_t.rb "З'їж іще цих м'яких французьких булочок"
Eat more of these soft French rolls

вівторок, 10 лютого 2009 р.

Шлях до Ruby 1.9. Крок перший: Багатомовність

Однією з важливих змін в Ruby 1.9 стала підтримка багатомовності (також відомої як m17n).
Раніше стрічки не підтримували нічого іншого крім кодування ASCII. Ruby 1.8 завжди припускає, що символ має рівно один байт, що незмінно призводить до проблем при роботі з мультибайтним кодуванням. Встановивши змінну $KCODE можна додати підтримку для різних кодувань (наприклад японського або UTF-8), але навіть у цьому випадку існує ряд проблем, що робить роботу з такими стрічками незручною.

Інші мови програмування вирішують цю проблему, використовуючи одне внутрішнє кодування для всіх своїх стрічок. Python, наприклад, використовує Unicode. Це означає, що він повинен перекодувати стрічки в інше кодування, після чого може працювати з ними. Однак Ruby 1.9 підтримує по-стрічкове кодування символів, а також конвертування між кодуваннями. Практично, це означає, що ви можете призначити для кожної стрічки її власне кодування, і Ruby автоматично зробить всі необхідні речі (наприклад такі як обчислення довжини стрічки). Кодування представляються класом Encoding. Кожен екземпляр являє собою конкретне кодування, наприклад, UTF-8. Ви можете отримати список всіх вбудованих кодувань викликавши Encoding.list.


$ ruby1.9 --version
ruby 1.9.0 (2008-06-20 revision 17482) [i486-linux]
$ irb1.9
irb(main):001:0> Encoding.list.size
=> 81

Імена кодувань вбудованих в Ruby 1.9

Недоліки:

Наприклад метод str.upcase повертає копію рядка з усіма буквами нижнього регістру, заміненими їхніми аналогами у верхньому регістрі. Ця операція діє тільки в ASCII регіоні (на символи 'a' - 'z'). Аналогічно і для методів: capitalize, downcase, swapcase, upcase.


$ irb1.9
irb(main):001:0> "hello".upcase
=> "HELLO"
irb(main):002:0> "привіт".upcase
=> "привіт"

понеділок, 9 лютого 2009 р.

habradigest#7


Вийшов 7 випуск habradigest. По обкладинці видно, що темою номеру є мова програмування Ruby. І це так. Сьомий номер містить 4 статті на тему Ruby, в тому числі об'ємне введення в мову, яке в оригиналі складається з 11 частин від автора MaxElc .


  • Покорим Ruby вместе!
  • DSL и динамические вкусности Ruby
  • Интересные приёмы в Ruby, которые вы можете использовать в своём коде
  • Ruby on Rails шаг за шагом.

Скачати (99 сторінок, 3.93 Мб).