воскресенье, 29 ноября 2009 г.

Холивары

В субботу поставил сестре новый компьютер. Все как положено. Четыре ядра, четыре гигабайта, простейшая компоновка, дешево и сердито. И в очередной раз провел эксперимент по внедрению открытых технологий на местах. Виндовс поставил в виртуальную машину. Преодолели некоторое сопротивление. Но зато все было поставлено быстро и четко. Сканер заработал из коробочки. Теперь проверка временем покажет, удастся ли эксперимент на этот раз.

Но в целом, я конечно не совсем прав. Нельзя наставлять стадо на какой-то путь.

Так вот сижу я, размышляю на эту тему. И вижу очередную статью, где рассказывается, как все плохо в виндовсе, и как хорошо - в линуксе. Ну да, все так. Но я точно знаю, что это правда только с одной стороны. Люди привыкают к хорошему. Или к тому, что у них есть. И потом лишь малая часть может взглянуть на происходящее с другой стороны. И в этом нет ничего плохого. Наоборот, это же хорошо.

Т.е. я никому не буду рассказывать, как мне удобно пользоваться линуксом, и как неудобно - виндовсом. Я просто буду пользоваться тем, что мне удобно. Ну и может расскажу, как именно я делаю свою жизнь чуть проще. И склонять всех к тому же - неблагодарное занятие. Человек может сам выбирать, и выбор не обязательно обосновывать.

вторник, 24 ноября 2009 г.

Дружим java и python через web services

На первый взгляд, веб сервисы замечательное изобретение, которое должно обеспечить всех глобальным счастьем. На деле все не так радужно. Хорошо веб сервис зовется из того же языка и фрэймворка, на котором он написан сам, что основательно портит саму идею.



Мне потребовалось подружить java с python, для сервера мы используем jax-ws, а для клиента нашли сначала SOAPpy, но уперлись в то, что данная библиотека как-то плохо дружелюбна со сгенерированными jax-ws wsdl. Притом решать я начал проблему не с того конца. Я научился расширять генератор wsdl собственными классиками. Подцепился в самые нутри, добился таки смены targetNamespace... и налетел на ошибку через еще пару строчек SOAPpy.



Стало очевидно, что дальше с SOAPpy нам не по пути. Еще несколько минут поиска, и мы выходим на suds. Пока что моя кожа благодаря этой библиотеке - мягкая и шелковистая.



Про jax-ws выяснились откровенно говоря неприятные подробности: нутри страшные, индусско-японские, и совершенно дурацкие. Я вообще обычно тревожусь, когда для того, чтобы понять, куда надо ткнуться, мало прочитать статью автора, надо еще самолично проанализировать код, выругаться 10 раз, найти хак для того, чтобы сделать то, что надо нам, но что невозможно сделать тем механизмом, что поставил автор, и все это в первую неделю пользования либом. Зачем было пользоваться такими корявыми классами и так их коряво сращивать. И меня бы все это не волновало, если бы оно все работало. Так ведь нет, не работает еще вдобавок. Reference Implementation, называется.

понедельник, 16 ноября 2009 г.

Vim и Blogger: Dependency hell

Я решил освоить в нагрузку ко всему еще и vim. Возможно, это было
ошибкой. Но было интересно. Итак, решаем привычную задачу - постим
записи из редактора. Даже не так. Как все было: я хотел запостить
сообщение с своим скриптом для сборки свежей версии gentoo-sources
ядра. Запостить из vim. Что для этого надо? Естественно, нужен vim,
плагин для vim для blogger. И еще хорошо бы раскрасить башевский
скрипт всеми цветами радуги перед постом. Итак, идем по шагам.



Шаг 1. Vim



Этот шаг оказался на самом деле самым простым. Я не говорю о
установке самого vim, я говорю о настройке плагинов. Оказалось есть
замечательный GLVS (GetLatestVimScripts). Он вроде как уже впаян в
vim. Так что нам остается только подправить его настройки.
Прописать там наш плагин blogger.vim, и настроить параметры
автоинсталляции в .vimrc . Все бы хорошо, но оказалось, что я
создал файл .vimrc не совсем в корне домашней директории, что
помешало инсталляции автоматом. Ну ничего, я и сам смог распаковать
папочку. И доставить потом еще один плагин, от которого зависит наш
пациент.



А дальше мы выясняем, что корни нашего плагина уходят в ruby.
Достаточно интересный поворот.



Шаг 2. Ruby



Здесь мы имеем gentoo с ее системой пакетов. Первая зависимость -
nokogiri, имеется, так что:



phoenix kilork # emerge nokogiri


Со второй обстоит дело хуже. В портежах его нет, зато можно
поставить очень просто через gem:



gem install rpeg-markdown


Вроде бы все. Пробуем запустить и бац. Опять не работает. На этот
раз не хватает net-https-wrapper. И его нет ни в портэжах, ни в
gem. Что за зверь такой? Оказывается, это гениальная поделка автора
blogger.vim. О зависимости от которой он естественно забыл
упомянуть. Находим, закачиваем, распаковыем, делаем:



kilork@phoenix ~ $ gem build net-https-wrapper.gemspec
kilork@phoenix ~ $ gem install net-https-wrapper-1.0.gem


Хочу обратить внимание, что я ставлю под рутом только то, что
ставлю портэжами.



Счастье близко. Список записей мы уже можем вытащить. Но, дальше,
что-то не работает снова. Видимо, это последняя зависимость из
списка автора, которому как выясняется - верить не стоить. Верить
вообще никому нельзя. На этот раз мы выясняем, что требуется
установка pandoc, а это - haskell.



Шаг 3. Haskell



Выясняем, что чтобы поставить pandoc, нам лучше всего
воспользоваться cabal, аналог gem и cpan, но для haskell. Чтож,
легко:



phoenix kilork # emerge cabal


Должно было быть легко, но как выяснилось, все не так хорошо, как
хотелось бы. Этот cabal, это совсем не тот cabal, который нужен.
Нужно делать на самом деле так:


phoenix kilork # emerge haskell-platform


Вот теперь можно сделать под обычным пользователем:



kilork@phoenix ~ $ cabal update
kilork@phoenix ~ $ cabal install pandoc


Добавляем в пути наш каталог с бинарными файлами cabal, где лежит
тот самый pandoc. Ссылки на требуемый на самом деле html2markdown
там пока что нет, файл лежит где-то в недрах share в поддиректориях
.cabal . Создаем на него символическую ссылку, назначаем полномочия
на исполнение. И... Ничего. Опять ничего, теперь он еще почему-то
не работает. Тут я уже устал мучаться, залез в собственно
html2markdown, обнаружил у него две проверяемые зависимости: tidy и
pandoc. Ругается на pandoc. Проверку тупо убираем, он же у нас
есть, зачем ругаться, да?



С tidy все не так плохо, она есть в портэжах:



phoenix kilork # emerge htmltidy


Шаг 4. .vimrc



Вот это позволит нам найти наш блог:


let g:blogger_blogid = 'your_blogid_here'
let g:blogger_email = 'your_email_here'
let g:blogger_pass = 'your_blogger_password_here'


И все, работает.



Получение записей блога:



:e blogger:list


Ходим по списку, жмем enter, редактируем, жмем :w . Все просто.



Создание новой записи:



:w blogger:create


Итоги.



Все как в анекдоте про допил напильником. И все работает через одну
хитро закрученную жопу. Ну и может быть мое руководство кому-то
поможет. Или кто-то посмотрит, и скажет, как можно было все сделать
по правильному. А я пока подумаю, как бы мне tag проставлять...

четверг, 12 ноября 2009 г.

GGD 2009

Посетили собственно мероприятие, так что не написать что-то просто кощунственно. Все понравилось, откровений особых не было, но достаточно занятно. Личный результат: гуглописательство в домашних условиях, заставил таки себя запустить демки и сгенерить проектик под google webtoolkit. Обнаружилась также интересная вещь: выступления были понятны без переводчика, это конечно не только моя заслуга в изучении языка, очевидно, что и выступления так построены. Чтобы это было возможно. Но тем не менее.

понедельник, 9 ноября 2009 г.

Все говно, кроме мочи

В очередной раз нашел этому подтверждение в интервью с Brad Fitzpatrick: "...The implementation of libraries that look like they could be beatiful are shit...".

Очень точно подмечено. То что с виду кажется не г..., при ближайшем рассмотрении все равно оказывается им самым.

В эти выходные наконец таки реализовал скрипт для сборки нового ядра и почистки старых. Экономия нервных клеток на этой операции будет оценена не скоро, но думаю - будет приятно. Мне кажется, именно в этом суть программистского подхода к делу, все рутинные операции учить делать машину. Если мы делаем это больше чем один раз, это уже надо автоматизировать. Очередной пункт в личном todo-листе выполнен. Выложу тут и код этого сокровища в следующий раз. А пока оставшиеся пункты:
1. python-скрипт для заполнения ежедневных отчетов на работе
2. perl-скрипт Finance::Quote::Sberbank - исправить накопившиеся ошибки (есть 9-месячный багрепорт, а это ужасно)
3. локализовать openerp
4. lfs-нуть нетбук
5. найти или написать штуку для проверки торговой стратегии на архивных данных
6. написать собственно штуку для торговой стратегии
7. сделать информеры на svn репозитории в виде notify в gnome

И еще много чего, что мне хочется сделать. Каждый день я сижу где-то до 2-х часов ночи, стараясь сделать сегодня чуть-чуть больше чем вчера. И главное - ни один день не должен пройти без познания или создания чего-то нового. Это настоящее счастье - узнавать новое.

воскресенье, 1 ноября 2009 г.

24 часа

Почему их всего навсего 24? И зачем этот дурацкий сон? Столько всего надо успевать, а времени катастрофически не хватает.