December 2007 Archives

Моя твоя непонимай

|
newsru-ambig.JPG
Вот скажите мне, основываясь только на заголовке, о чем идет речь? О том, что кого-то обвиняли в убийстве репортера, или все-таки о том, что репортера обвиняли в убийстве?

Они что, специально издеваются над языком и читателями?

blog.lexa.ru сделал мой день

|
Не могу удержаться, чтобы не поделиться ссылкой: http://blog.lexa.ru/2007/12/25/sberbank_sdelal_moj_den.html
Аплодирую сбербанку стоя. Твердое второе место на известно каком конкурсе.

Update в целях яндексотопопиара: http://alextutubalin.livejournal.com/57351.html

A network engineer and the budgeting process

|

На случай, если не пролезет через кросспостинг: http://www.youtube.com/watch?v=3xewJOKyyoc

Интересная статья

|
В прошлом посте я кратко упомянул вопрос flow fairness в разрезе P2P, а сегодня вот накопалась интересная статья на предмет flow fairness вообще: Flow Rate Fairness: Dismantling a Religion. Статья написана несколько необычно для такого рода публикаций, вот что пишет сам автор:
It is a classic case of a hegemony where those living within the box don’t recognise the existence of the box, let alone the world outside the box. This paper was written from frustration that no-one inside the box believes that voices outside the box should be listened to. We expect complaints about the blunt style of this paper, but it seemed the only way forward was to force the issue, by making the box look ridiculous in its own terms.
И идеи, которые высказываются в статье, на первый взгляд выглядят неоднозначно. По крайней мере, непривычно. Некоторые из них звучат вполне логично, а некоторые мой разум/опыт сходу не принимает. Но прочитать стоит, и стоит обдумать.

IPTV

|
Надо оправдывать подзаголовок блога, поэтому сегодня будет настоящий pointless rambling. Длинный и нетехнический.

Нынче у нас IPTV - очень модная штука. Телевещать по IP хотят все, буквально все. В принципе, в этом есть определенный смысл. Эфирное телевидение убого, а кабельное не у всех. Раз уж мы построили сеть, то почему бы по ней не подать услугу - авось, кто-нибудь да купит.

А что с точки зрения юзера? Что мне может дать телевещание по IP?

Вышел покурить и подумать - решил написать продолжение к предыдущему посту.

Ведь получается, что можно сделать очень-очень простой блог. Чтоб нифига не публиковал как в обычном блоге, а только раздавал feed'ы постов и комментариев. Писать через atom publishing, комментировать через него же - главное, чтобы читалка поддерживала. Читать, естественно, через читалки и всякие агрегаторы. Web-based читалки, кстати, могут разобраться и с нотификацией по e-mail'у в индивидуальном порядке. Openid сторонний. Причем feed'ы можно отдавать не непосредственно читателю, а через какой-нибудь feedburner.

Вот это был бы distributed blog, о котором так долго мечтают супобеженцы. Только не "вертикально" distibuted, а "горизонтально". Централизованных компонентов получается дофига, но ни один из них ничем не рулит и его, в случае чего, легко выкинуть и заменить на другой такой же.

Update:
То же самое с архивами: хочешь - надейся на гугловый кеш, хочешь - поставь свою у себя, хочешь - возьми какой-нибудь сервис (наверняка такие появятся). Надо только что-нибудь придумать с permalink'ами, чтобы сервис архива можно было менять один на другой прозрачно. Думается, что это можно сделать: It is always possible to add another level of indirection. - RFC 1925.

Web2.0 и комментарии

|
Уважаемые гуру вебдваноля, объясните мне, пожалуйста, такую вещь.

Вот есть блог, который отдает feed, atom'ный или rss-ный. И это есть хорошо. Существует огромное количество читалок, web-based или отдельных, которые показывают эти feed'ы.

А можно отдать комментарии из блога таким-же feed'ом. Либо все подряд, либо per entry. Только что с ними потом делать? Читать просто как поток сознания той же читалкой вперемежку с нормальными постами? Не вариант. Я догадываюсь, что читалка должна, вытягивая feed комментариев, сама подцеплять их к нужным записям и пользователю удобно показывать. Правильно?

В таком случае возникает несколько вопросов.

Есть ли какой-то стандарт на отдачу комментариев? Ведь комментарий - это не просто кусочек текста, у него должен быть, к примеру идентификатор записи, к которой он относится и/или идентификатор родительского комментария, чтобы можно было построить thread.

Какой feed лучше, per blog или per entry? Наверное, per entry. Хотя тут могут быть разные соображения. Например, per entry просто так не заfeedburn'ишь.

В обоих случаях нужен какой-то механизм autodiscovery. В случае per blog нужно найти feed комментариев один раз, а в случае per entry - каждый раз для каждой новой записи. Такой механизм существует? Стандартизован, ну хотя бы на уровне best practices?

И главный вопрос: есть ли читалка, которая поддерживает такое? Желательно даже несколько разных - отдельная для основного использования, web based, для чтения с чужой машины (мало ли куда судьба закинет), отдельная с offline-режимом для КПК.

Опять кросспостнинг

|
Сделал почти человеческий кросспостинг в ЖЖ.

В чем оказалось дело?

Плагин Crossposter к MT пользуется Atom API для создания и последующего обновления кросспостов. И этот API у ЖЖ сломан. Работает и GET на feed, и POST для нового поста, и PUT на существующий для апдейта, и DELETE, но GET на отдельный пост выдает 401.

Как выкрутиться? GET перед PUT нужен в первую очередь, чтобы получить элемент <id> для поста. Без этого элемента PUT не пройдет, а на момент POST этот id еще неизвестен. Что делать? После POST получить feed журнала, пройтись по всем постам, найти нужный, сохранить его в базе, а потом при апдейте записи не делать GET, а вытянуть его из базы, изменить как нужно и отправить в ЖЖ PUT'ом.

Грязный и кривой хак, но ничего умнее я не придумал.

Вот патч: crossposter.patch.gz

Если Crossposter уже установлен, то надо изменить схему базы, добавив в таблицу mt_crossposter_cache колонку crossposter_cache_xml.

Important note: в патч закрался небольшой косяк, поэтому те, кто скачал его до Wed Dec 12 02:01:28 MSK 2007, просьба откатиться и выкачать заново.

Продолжаем упражняться

|
Тутбалин не так давно мизантропировал на предмет плагина Crossposter.

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

Что оказалось насчет левых <br>. Путем вдумчивого чтения сорцов ЖЖ было обнаружено следующее. Livejournal думает, что ему дают не настоящий html, а нечто, что ему нужно отформатировать самостоятельно. Вылечивается установкой флага convertLineBreaks в false. Логика, по которой это не есть установка по умолчанию, от меня ускользает. Как вылечить замену честного юникода на &#xNNNN-style порнуху, пока не ясно. Известно только, что на livejournal контент уходит в нормальном виде, а извращается уже на той стороне. До этого места в ЖЖ-шнух сорцах я еще не дочитал. Но это не сильно мешает.

Что оказалось насчет апдейтов кростпостнутых entries. Тут интересней.
Как положено, плагин Crossposter вытягивает entry к себе, меняет что нужно, и кладет обратно. Вот на этапе вытягивания возникает проблема: 401 Authentication Failed. Как же так? Что ж такое?

Причина вот в чем.
http://code.sixapart.com/trac/livejournal/browser/trunk/cgi-bin/Apache/LiveJournal/Interface/AtomAPI.pm#L576
# let's authenticate.
#
# if wsse information is supplied, use it.
# if not, fall back to digest.
my $wsse = $r->header_in('X-WSSE');
my $nonce_dup;
my $u = $wsse ? auth_wsse($wsse, \$nonce_dup) : LJ::auth_digest($r);
return respond( $r, 401, "Authentication failed for this AtomAPI request.")
    unless $u;

return respond( $r, 401, "Authentication failed for this AtomAPI request.")
    if $nonce_dup && $action && $action ne 'post';

Удивительные люди в этом ЖЖ. Почему post можно по WSSE, а остально нельзя? Загадка. Почему, если уж нельзя edit, не выдать нужные заголовки для digest auth? Еще загадочней.

Чего делать? Хакнуть XML::Atom::Client или засабмитить багу в суп?

А вот запрет на коменты к кростпостнутой entry, судя по всему, сделать не получится через atom. И ручками проставлять лень. Ну и фиг с ним, комментируйте меня где удобно.

Ну, попробуем

|
Вот, завел я себе, как и собирался, standalone blog: http://net-geek.org/dbg/

На wordpress я плюнул - не вынес необходимости хакать злостный PHP-код. Поэтому по наводке alexott взял Movable Type. Это мне понравилось гораздо больше. Само главное, он написан на перле, а перл я знаю и умею относительно прилично. Поэтому дорабатывать напильником гораздо приятней.

Вроде бы в первом приближении основные вещи заработали: коменты иерархические, кросспостинг в ЖЖ, подписка на коментарии. Правда, не без недочетов. ЖЖ-кросспостер постить дает, но не дает обновлять ЖЖ-ную копию, также нет запрета на ЖЖ-комментирование, но это я починю в скором времени. Подписка на комменты работает для зарегистрированных пользователей, но не для тех, кто пришел по openid из ЖЖ.

Теперь буду полировать эту конструкцию дальше, потихонечку перетаскивать старые посты и, дай бог, писать новые.

Upd:некоторые могли заметить, что кросспост в ЖЖ появлялся и исчезал. Обнаружилось, что кросспостинг работал не так, как я хотел - пришлось немного починить.

Upd': Нет, все-таки тоже криво. Появляются лишние <br />. Тоже починим.

Pages

Archives

Sign In