вторник, 17 февраля 2009 г.

Удалённый swank сервер

Возникла необходимость работать через SLIME с удалённым lisp-сервером, но оказалась что наивная попытка соеднинеия не проходит. Беглый разбор полётов выявил следующее (взято здесь):
SLIME binds to your private loopback interface 127.0.0.1. This is done
for security reasons, you most definitely do not want just anyone
connecting to your Lisp with full access to the system. The easiest and
safest way to accomplish a remote connection to a SWANK session is to
use an SSH tunnel to the remote machine.

Лечиться так:
ssh -2 -N -f -L 4005:localhost:4005 user@host-with-swank
Полный рецепт можно посмотреть тут.

среда, 11 февраля 2009 г.

Документация к cl-libxml2

Решил немного улучшить ситуацию с документирование cl-libxml2. Встал вопрос: как документировать? Основное моё требование - возможность просматривать документацию on-line, без скачивания пакета. На хостинге проектов Google Code (где, собственно, и базируется cl-libxml2) для этих целей имеется в наличие wiki-движок, который меня, мягко говоря, не вдохновил. Доступа к другим ресурсам, на которых можно было бы опубликовать документацию, у меня нет. Немного поразмышляв, решил, что наилучший выход - воспользоваться возможностью http-доступа к репозиторию Subversion (который предоставляет Google Code). Т.е. можно просто добавить документацию в формате html к исходному коду, выставить для этих файлов свойство svn:mime-type в "text/html" и опубликовать ссылку на эти файлы. На мой взгляд, это очень удобная возможностью Subversion.

Но откуда возьмутся html-файлы? В принципе, для меня совершенно не проблема писать документацию сразу в виде xhtml (часто приходиться слышать о трудности редактирования xml, но я использую nxml-mode и считаю это исключительно лёгким занятием), но html не предоставляет вменяемых инструментов для "повторного использования" фрагментов разметки. Использование какой-либо системы публикации (типа Emacs Muse) меня тоже не прельщает: необходимо сначала изменить исходник документации, потом сгенерить html и наконец закомитить все изменённые файлы - слишком сложная для меня процедура :-), тем более, что я хотел бы обновлять документации гораздо чаще, чем делать релизы.

В итоге, решил остановиться на решении, которое мне представляется наиболее "концептуальным" для данного проекта: написании документации в виде xml-файлов, которым, посредством инструкции обработки <?xml-stylesheet type="text/xsl"..., сопоставленно xls-преобразование (предоставляющее механизмы повторного использования элементов разметки), преобразующее xml-данные в html-разметку. Это даёт возможность писать документацию в xml, который можно сразу, без дополнительной генерации html, просматривать в браузере. В итоге, в репозиторий кладутся xml-файлы и таблицы стилей xsl и css.

Что получилось можно посмотреть здесь.

пятница, 6 февраля 2009 г.

restas-git-overlay

Сделал следующий шаг в освоении git: создал restas-lisp-overlay - до сих пор работал только с локальными репозиториями, а удаленные использовал только в режиме чтения.

Этот репозиторий, как можно догадаться из названия, содержит overlay для Gentoo Linux, в котором я буду собирать пакеты, необходимые для работы restas. Скажу сразу, что данный overlay не является независимым, и не пытается быть альтернативой для gentoo-lisp-overlay. Наоборот, он рассчитан на совместное использование с gentoo-lisp-overlay, просто будет содержать ебилды для пакетов, которых ещё нет в gentoo-lisp-overlay и ебилды для моих проектов. В данный момент там уже есть ебилды для:
С помощью этого оверлея установка cl-libxml2 на Gentoo Linux становится тривиальной:
$ mkdir /usr/local/overlays
$ cd /usr/local/overlays
$ git clone http://repo.or.cz/r/gentoo-lisp-overlay.git
$ get clone http://repo.or.cz/r/restas-lisp-overlay.git
$ echo "PORTDIR_OVERLAY=\"/usr/local/overlays/gentoo-lisp-overlay /usr/local/overlays/restas-lisp-overlay\"" >> /etc/make.conf
$ emerge cl-libxml2
Правда, возможно придётся размаскировать пакеты по ~x86, но пользователи Gentoo думаю разберутся с этим без особых проблем.

cl-libxml2-0.3

Обновил версию cl-libxml2 до 0.3.

Основные изменения в этом релизе:
  • Появилась обработка ошибок, генерируемых библиотекой libxslt.
  • Появились функции для работы с html: неверифицирующий парсер и серилизация (ну и ещё пара мелочей)
  • Исправлено некоторое количество ошибок.
К сожалению, в состав библиотеки пришлось включить немного, но всё же кода на C. Мера совершенно вынужденная и обязана функции xsltSetGenericErrorFunc, которая требует callback с сингатурой в стиле printf.

среда, 4 февраля 2009 г.

тривиальный, но полезный патч для mod_lisp

Работа над restas движется. Для облечения разработки и придания нового импульса текущим рабочим проектам, стал переводить приложения, над которыми я работаю на работе, на restas. Пока доволен. Но при этом всплыла одна деталь. Что бы не утомлять пользователей вводом логинов и паролей стал использовать mod_auth_kerb, соответственно, появилась необходимость работать через mod_lisp. Однако, оказалось, что имя пользователя, успешно прошедшего аутентификацию на стороне apache в Hunchentoot не попадает. Некоторое время посомневавшись, решил пропатчить mod_lisp, благо это оказалось довольно тривиальным (тут, конечно, помог имеющийся у меня опыт разработки апачевских модулей на C++).

Полученный патч отослал на адрес, указанный на странице проекта. И всё. Ни привета, ни ответа. Впрочем, после прочтения архива списка рассылки cl-pdf, такое поведения меня совершенно не удивило. Ну да и бог с ним :-)

Если кого заинтересует данный (совершенно тривиальный) патч, то вот он:
--- mod_lisp2-1.3.2.c 2009-01-20 14:39:53.000000000 +0300
+++ mod_lisp2-1.3.2.c 2009-01-20 14:37:15.000000000 +0300
@@ -854,6 +854,7 @@
"SERVER_PROTOCOL", "server-protocol",
"SCRIPT_FILENAME", "script-filename",
"SSL_SESSION_ID", "ssl-session-id",
+ "REMOTE_USER", "remote-user",
0
};
const char ** p = plist;