Saturday, May 29, 2010

libxml-ruby1.9.1 и Unicode

Вот почему
parser = XML::HTMLParser.string((IO.read 'page.html'),
:encoding => XML::Encoding::UTF_8)
doc = parser.parse
obj = doc.find('//tr/td/font[@color="#cc0000"]')
content = obj.first.content.force_encoding("UTF-8")
p content.index "не найден"

выводит 80, а если то же самое, только вместо первой строки — 

parser = XML::HTMLParser.file('page.html',
:encoding => XML::Encoding::UTF_8)
, выводит nil?

Переезд на Ruby 1.9.1

Вообще говоря, Ruby я увлёкся недавно — около месяца тому назад. Особенно меня философия Rails привлекла, да и сам язык довольно красив.

В процессе освоения 1.8, который идёт в Дебиане по умолчанию, столкнулся с пиздецом в виде строк, которые почему-то ведут себя тупо как последовательности байтов. После Питона (в котором, надо сказать, проблемы с Юникодом тоже были немалые) с этим ужасом работать невозможно.

Поэтому поставил ruby1.9.1. После этого попытался запустить Rails. (Естественно, поставил его gem-ом, чтоб поновее был.) 

Во-первых, пришлось вручную сделать ln -s /usr/bin/ruby1.9.1 /usr/bin/ruby и для rake точно так же, иначе неудобно работать.

Во-вторых, кучу библиотек за собой ruby1.9.1 почему-то не потянул. А зря: пришлось вручную потом apt-cache-м искать нужные пакеты (libopenssl-ruby1.9.1, ruby1.9.1-dev, libsqlite3-ruby1.9.1, libxml-ruby1.9.1, возможно, ещё какие-то понадобятся...)

В-третьих, старые проекты пришлось немного модифицировать. А именно, в config/environment.rb заменить версию рельсов, а также переименовать session_key в key; потом запустить rake rails:update (так надёжней, хотя возможно, что достаточно просто переименовать application.rb в application_controller.rb).

В-четвёртых, пришлось заюзать костыль: http://gist.github.com/339265

В-пятых, пришлось немножко подправить код из-за следующего:

Ruby 1.9 introduces an incompatible syntax change for conditional statements such as 'if' and 'case/when'. Previously a colon could be used as a shorthand for a 'then' statement

Немного о блоге

(Тут ранее был написан какой-то полубред)

Изначально блог был just for fun. Однако со временем его стиль сменился в сторону публицистического (и даже матерные слова теперь заменяются всякой #&*^!*), ибо я осознал, что подобных мне психопатов на этом шарике не так уж мало, как казалось ранее.

Аудитория делится на две основные составляющие (исхожу из данных StatCounter и впиленной в blogger статистики):
а) всякие любопытные личности типа тебя (кстати, среди них можно выделить и особо упоротых, которые мой никнейм зачем-то в поисковик вбивают — всё равно всё, что там можно найти, было давно и неправда). И вообще, если ты сейчас это читаешь, то тебе явно делать нефиг. А ну брысь матан учить! (ну или ещё чем полезным займись, если весь матан уже заботал(-а))
б) пришедшие с Google/Yandex (другими поисковиками в этой стране, похоже, и не пользуются). Эти радуют больше, потому что своим существованием показывают, что всякая муть, которую я строчу, кому-то и вправду полезна.

Такие дела.