julik live

Нерусский трекбек

Трекбеки - очень полезная и нужная штука, позволяющая связать блоги (и в принципе сайты) друг с другом по принципу “статья-статья” получше вашего LiveJournal. Работает оная штука (вдруг кто не знает) так:

  • Владелец блога Х пишет статью, под названием “Y - полный идиот”. Хорошую и интересную. Среди прочего он ссылается на текст статьи Y, которую считает ну самым откровенным примером идиотизма Y в жизни.
  • Владелец блога Y немедленно получает оповещение о том, что X сослался на его статью и крушит ее в пух и прах. При этом под статьей Y появляется приписка “На сайте Х - есть статья, зовется - Y ничтожество!”
  • Владелец блога Y идет по линку, читает про себя статью, сию же секунду пишет ответный пасквиль ссылаясь на статью владельца блога X, о чем владелец блога X немедленно узнает тем же способом (стоит господину X поставить линк на господина Y).

А вот дальше наступает самое, пожалуй, интересное (правда, пока не реализованное в материале -- но скоро думаю будет). Господин Z заползает на сайты господина Y и начинает пролистывать фрагменты пасквилей господина X. После этого господин Z может (хитрым способом) подписаться на всю перестрелку пасквилями между господами X и Y а также (внимание!) на все записи других господ, которые ссылаются на пасквили господ X и Y.

Довольно толковое русское описание Trackback с точки зрения пользователя можно прочитать здесь.

Но не в рунете

Однако на подавляющем большинстве русских блогов трекбеки выключены. Почему? Блог, работающий в windows-1251, получая трекбек от блога в utf-8 его спокойненько берет и публикует as-is. Из этого, как вы догадываетесь, ровным счетом ничего хорошего не получается. Когда блог в windows-1251 сбирается ответить, получается еще хуже - win-1251 просто не видно (насколько я понял, это зависит от шрифта). Короче говоря, ничего хорошего. Будучи выпущено в RSS-фид (или любой другой “строгий” носитель) это ничего хорошего эффективно превращается в полный з[skip].

До сегодняшнего дня. Плагин для MT внутри (это кстати следует оценивать и как намек русским пользователем MT - включите прием trackback, время пришло иначе на что я потратил столько времени).


Поскольку с Perl я раньше дела не имел, ситуация на два дня приобрела ужасный оборот. Утонул как в болоте, но вроде “зверя убил”. Огромное спасибо Жаку Дистлеру за советы и пример решения той же проблемы.

TrackDecode для Movable Type

В итоге получилось вот это.

Работает на MT-блогах в любой кодировке, поддерживаемой Perl (это та кодировка, которая у вас в mt.cfg зовется PublishCharset). Требует Perl 5.8+ и Movable Type 3.1+

Устанавливается... киданием плагина в папку плагинов. Потому что установка плагинов должна работать именно так.

Баг-репорты по плагину приветствуются. Для него вам понадобится свежий Perl (5.8+) и свежая версия MT (3.1+). Все, что он делает, пишется в логи инсталляции МТ.

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

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

To do

  • Перекодировка уже полученных трекбеков непосредственно в интерфейсе MT

Дальше некоторое количества rants по поводу, которые можно не читать.


Как надо делать блог-движок

Итак, entar callbacks. У MT мало того, что есть развернутая объектная модель вообще всего, которая полностью абстрагирована от хранения данных, так еще и есть callbacks. Например - при добавлении комментария в систему ваша функция будет получать в качестве аргумента всю систему MovableType (объект MТ) и полученный комментарий уже в виде объекта (то есть как обьект MT::Comment с полями author, body, email и так далее). Делайте с этим объектом что хотите. После вызова вашего коллбека MT аккуратно сам сохранит все изменения в объекте.

Японцы

Как это ни странно, в решении всякого рода кодировочных проблем часто помогают японцы (которые проблем с кодировками огребают поболее нашего). Например, японцы написали все расширение mbstring для PHP, поддержку кодировок в PostrgeSQL и многое, многое другое.

Так вот, у них есть еще и своя версия MT (поскольку SixApart в свое время купил Joi Ito), а к ней - свои, специальные версии плагинов. Они не появляются на MT plugin directory, но большая их часть как раз ориентирована на работу с различными кодировками. Среди них нашлось вот такое чудо.

Насколько я понял, этот плагин ставит на модерацию любой комментарий, предположительно написанный не по-японски.

Соответственно, был обыскан код MT и найден callback, отвечающий за получение trackback, и данный японский плагин был напильником адаптирован для решения нашей задачи.

Пример человеческой архитектуры (это к вопросу о хакабельности):

my $charset = MT::ConfigMgr->instance->PublishCharset;

То есть из плагина можно легальным способом узнать, в какой кодировке автор содержит свой блог. Такие вещи и зовутся “удобный API”. Не шаблоны в heredocs, нет.

Кстати, показательно -- при наличии такого количества великих 10 строчек плагина для самой крупной блог-системы в мире должен почему-то писать невежественный дизайнер Юлик Тарханов. This is a fucking dissapointment обидно, господа великие. Или никто Perl не владеет?

Рекомендации изобретателям

Что такое “русский трекбек”? Давайте подумаем здраво, есть ли у трекбека например китайского отличия от трекбека например литовского? Пока у них нету атрибута lang - никакого не вижу. Только не надо этот атрибут вставлять.

Все что пока лежит в wiki в принципе здраво, за исключением нескольких важных вещей

  • Такие спецификации пишутся не четырьмя русскими хакерами по-русски, а всем миром по-английски.
  • Единственный, науке известный ныне способ autodicsovery работает с помощью rdf-дескриптора в заголовке документа. Нет мелочничайте, от одного тага вас не убудет. Парсинг того же тага -- дело тривиальное.
  • Главный публикатор спецификаций трекбека называется SixApart. В оной спецификации очень много упущений (начиная с the very charset problem). Только не надо их чинить методом изобретения собственного треугольного колеса. Запустите нормальную англоязычную Wiki, отпишите создателям блог-движков (например Мэтью Муленвегу и Дину Аллену - textpattern становится все более популярным в дизайнерской среде, и есть за что) и т.д. И там повесьте - Trackback Specification v.2 Working Draft.
  • Людям, имеющим дело с технологиями типа трекбеков, было бы невредно хотя-бы на ucapi-discuss и mt-dev подписаться. А то к моменту окончания треугольного велосипеда выяснится, что там уже паравоз построили.
  • Если соберетесь таки (надеюсь) оснастить свои блог-движки реализацией trackback, существующей уже несколько лет, умоляю -- перекодируйте все, что отправляете, в UTF-8 и проставляйте charset в заголовках запроса. Нам всем станет проще.

А я отправляюсь смотреть незабвенного Кремастера в славный город Леуварден.

Cremaster 3 by Matthew Barney

Сказал оприхтер и захлопнул ноутбукъ.

Suspects: Веб-стройка Юникод

 
comments powered by Disqus

Aspirine not included.