Показаны сообщения с ярлыком haskell. Показать все сообщения
Показаны сообщения с ярлыком haskell. Показать все сообщения

понедельник, 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 проставлять...