pages tagged blogbloghttp://www.wagner.pp.ru/~vitus/blog/tags/blog/blogikiwiki2013-01-15T19:24:04ZDeadlock http://www.wagner.pp.ru/~vitus/blog/posts/Deadlock_/2013-01-15T19:24:04Z2013-01-15T18:59:43Z
<p>Обнаружилось что в ikiwiki возникает какой-то deadlock. Причем, видимо, только с использованием git в качестве бэкэнда, а то бы может давно заметили.
Сейчас вот грохнул процесс git push origin (origin и рабочая копия - в одной файловой системе) и в результате смог завершиться десяток процессов и запоститься три комментария.</p>
<p>Но вообще с блокировками они там явно что-то перемудрили. Уж во всяком случае окно комментирования должно на порядок быстрее открываться при данной мощности машины. Причем профайлер ничего интересного не показывает.</p>
Ещё про OpenIDhttp://www.wagner.pp.ru/~vitus/blog/posts/%D0%95%D1%89%D1%91_%D0%BF%D1%80%D0%BE_OpenID/2013-01-11T04:46:56Z2013-01-11T04:27:27Z
<p>Поднял, наконец свой собственный OpenID провайдер. Путем минимальных переделок примера к модулю Net::OpenID::Server.
Пока что никаких simple registration и attribute exchange extension не поддерживает, так как их, похоже, забыли положить когда переписывали
модуль на поддержку OpenID 2.0.</p>
<p>Вообще OpenID 2.0 это что-то ужасное. Исходный OpenID был простым и понятным протоколом - вот URL, по ней есть контент, и где-то маленький-маленький
элемент link, который указывает на опенидный сервер. Мы у этого сервера спрашиваем, а правда, что тот, кто к нам пришёл — законный владелец этой URL.
Тот проверяет и отвечает да/нет.
Всё. Если этот человек хочет ещё что-то про себя рассказать не людям, а другим серверам, может link с другим rel (например foaf) вписывать.</p>
<p>Теперь накрутили какой-то Yadis, для корректной работы которого нужно отдавать нестандартные http-заголовки, какие-то xrds, которые непонятно какой смысл имеют. При этом поддерживают все кто во что горазд. Например, хотя спецификация Yadis вообще-то предусматривает использование <meta http-equiv> Dreamwidh её кушать не хочет - ему http-заголовок подавай.</p>
<p>При этом половина ссылок на спецификацию и библиотеки с openid.net возвращает 404, а готовых drop-in реализаций не в виде плагинов к огромным фреймворкам нет. Приходится раскапывать информацию где-то на stackoverflow и чуть ли не в википедии.</p>
<p>Кстати, про foaf, похоже, забыли, и забыли незаслуженно.</p>
<p>Расширения sreg и ax надо будет прикрутить. А то вдруг заведется среди тех, куда я хожу комментировать, блог, который умеет оттуда email для посылки ответов
или хотя бы для вытаскивания аватарки с gravatar-а доставать.</p>
<p>Вообще я хотел в этом вопросе отказаться от идеологической чистоты, и
воспользоваться сторонним сервисом для обслуживания openid моей URL. Но myopenid.com, единственный
известный мне сервис, позволяющий вешать openid на свою URL, что-то
вчера безбожно тормозил, да и Email он, судя по ToS отдавать не умеет.
Поэтому пришлось опять пойти по пути «Хочешь, чтобы было сделано хорошо,
сделай это сам».</p>
Аутентификация в распределенной блогосфереhttp://www.wagner.pp.ru/~vitus/blog/posts/%D0%90%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B2_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B1%D0%BB%D0%BE%D0%B3%D0%BE%D1%81%D1%84%D0%B5%D1%80%D0%B5/2013-01-08T13:28:26Z2013-01-08T13:28:26Z
<h3>О существующем положении вещей</h3>
<p>Практика показала, что OpenID довольно плохое решение для "бегства из ЖЖ". Пока ЖЖ лежит, никто блог и не комментирует, поскольку аутентифицироваться через OpenID не может.</p>
<p>Вообще, OpenID за те годы, которые прошли со времен его изобретения Фицпатрикром испортился. Исходно идея была очень симпатична - человек, приходя комментировать в чужой блог, представляется URL своего блога. Представляться комментатор должен для того, чтобы у него накопилась репутация. Очевидно, что "владелец такого-то блога" это вполне себе репутация.</p>
<p>К сожалению, в сети тут же развелись всякие сервисы, которые предоставляют OpenID с URL, которая не содержит никакой информации о человеке, псевдониме или персонаже, от имени которого комментатор аутентифицируется.</p>
<p>Особенно, тут отличился гугль. У которого URL вообще неудобочитаема. Конечно, с тех пор в OpenID появлись всякие расширения, которые позволяют запросить
определенную информацию о том, кто аутентифицировался. Но нужна ли эта информация читающим блог? Ну ладно E-Mail, он нужен самому блогодвижку, чтобы комменты на почту отправлять. Но всё остальное? Самого главного-то что пользователя как-то характеризует - какой-нибудь ссылки на то, что он ещё написал в интернете, нет.</p>
<p>Кстати, если подумать, то требование чтобы в момент регистрации пользователя его OpenID провайдер был online есть содержательный смысл. Ведь куда мы пойдем для того, чтобы что-то узнать о пользователе? На ту URL, которая является его claimed identity. Ничего другого у нас всё равно нет. Если пользователь у нас не первый раз, то можно просто когда он первый раз (при активном своём сервере) аутентифицируется, выдавать ему уже местную куку на месяц-другой, как делает lj.rossia.org.</p>
<p>Еще хуже с так называемыми "социальными сетями". Почему в этом блоге нету аутентификации через фейсбук или вконтакте? А потому что для того чтобы хотя бы прочитать девелоперскую документацию, нужно иметь аккаунт в этих сетях. А у меня его нет и я его заводить не хочу.</p>
<p>Не говоря уж о том, что для аутентификации через OAuth, поддеживаемой этими сетями, любой сайт, желающий аутентифицировать своих пользователей должен зарегистирроваться у соответствующей социальной сети и получить там некий секретный код, который использовать при обмене. То есть решению своего пользователя пойти на этот сайт они не доверяют. Они еще хотят и сам сайт заранее знать.</p>
<h3>О том, чего хотелось бы</h3>
<p>Что такое, на мой взгляд, распределенная блогосфера?</p>
<p>Это множество разных серверов, на каждом из которых может быть от одного блога, до нескольких тысяч, которые используют самый разный софт, кому какой удобно, самую разную политику по отношению к содержимому и так далее, но при этом все позволяют комментировать друг у друга без дополнительной регистрации на каждом сервисе, и обеспечивает устойчивость к высоким нагрузкам, то есть каждый блог тем доступнее, чем больше людей его регулярно читают.</p>
<p>Последнее можно достаточно легко организовать, если в рамках создания френдленты - общей ленты читаемых пользователем постов, кэшировать у себя все читаемые им блоги, позволять в кэшированных копиях комментировать.</p>
<p>Потребуется, конечно, какая-нибудь процедура для поиска пользователем наиболее доступной (либо ближайшей, либо наименее загруженной) копии блога. Но по-моему, чего нельзя категорически, так это требовать ради этого наличия у пользователя какого-либо софта, кроме стандартного браузера. Читать блоги должен иметь возможность любой аноним с браузером. Писать/комментировать - уже можно предъявлять несколько более высокие требования.</p>
<p>Но опять же надо зарекаться на то, что родной любимый сервер данного пользователя может быть в данный момент offline - то-ли затоплен водой вместе с датацентом каким-нибудь ураганом, то-ли конфискован злой полицией тоталитарного режима какого-нибудь Тувалу.</p>
<p>Я уже как-то раз предлагал систему аутентификации, основанную на встроенной в браузеры поддержку авторизации по клиентским сертификатам в HTTPS. Благо, утверждение, что сертификат обязательно должен быть выдан каким-нибудь коммерческим удостоверяющим центром - это неправда, и наш серверный софт вполне может
работать удостоверяющим центром для своих клиентов. Это хорошо тем, что</p>
<ol>
<li>Используются надежные криптографические алгоритмы и протоколы.</li>
<li>В этих протоколах предусмотрен срок действия сертификатов</li>
<li>Предусмотрена процедура отзыва.</li>
</ol>
<p>Плоха эта процедура в первую очередь тем, что требует наличия закрытого ключа на компьютере пользователя. На самом деле есть ещё андроиды <4, которые не умеют работать с посторонними удостоверяющими центрами, и более новые андроиды, которые не хотят с ними работать, если отключены блокировка устройства.</p>
<p>Но вот придумать процедуру авторизации, которая не требовала бы наличия в интернете (в данный момент) сервера, которому пользователь полностью доверяет, и на котором можно хранить секрет, и не требовала хранения какого-то достаточно объемного (не вмещающегося в человеческую память) секрета при пользователе, довольно сложно. Хэшированный пароль с солью - это секрет. Его нельзя делать публично доступным, как это было в юниксах 1970 года - словарные атаки на современном железе весьма эффективны. В принципе, можно попробовать распространять вместе с RSS-фидом блога что-нибудь симметрично-зашифрованное с помощью <a href="http://en.wikipedia.org/wiki/PBKDF2">PBKDF2</a> или <a href="http://en.wikipedia.org/wiki/Scrypt">scrypt</a>. Тогда серверный софт несущий любую копию данного блога сможет аутентифицировать его владельца.</p>
<p>Тут возникает, правда, вопрос, а достаточно ли доверяет пользователь серверу, на который он пришёл комментировать, чтобы вводить там пароль, дающий доступ ко всем копиям его блога? Собственно одна из причин распространения протоколов вроде OpenID и OAuth заключается в том, что свой пароль пихать куда попало не следует.</p>
Френдлентное-2http://www.wagner.pp.ru/~vitus/blog/posts/%D0%A4%D1%80%D0%B5%D0%BD%D0%B4%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B5-2/2012-12-29T09:58:44Z2012-12-29T07:49:38Z
<p>Рассмотрел ещё один генератор френдленты, написанный <a href="http://frox25.no-ip.org/~mtve/">mtve</a> - <a href="https://github.com/mtve/rssagg">rssagr</a></p>
<p>Проект существенно менее зрелый, чем rawdog, но несколько приятных особенностей есть.</p>
<p>Плюсы:</p>
<ol>
<li>Компактный скрипт с минимумом внешних зависимостей. Легко модифицировать и развивать</li>
<li>Ротирует старые записи в отдельные HTML-файлы (у rawdog аналогичная функциональность достигается плагином)</li>
<li>Держит список фидов отдельно от прочей конфигурации (каковой пока вообще не имеет)</li>
</ol>
<p>Минусы:</p>
<ol>
<li>Не имеет никакого шаблонизатора. Не генерирует ссылку на css.</li>
<li>Ссылки на предыдущие куски ленты генерируются независимо от их наличия</li>
<li>Как и rawdog при добавлении большого количества фидов одновременно, не располагает свежескачанные записи в порядке написания</li>
<li>Не имеет никакого интерфейса добавления, который бы избавлял пользователя от ручного поиска ссылки на фид (rawdog хоть из командной строки умеет скачивать html и парсить его в поисках <link rel="alternate"></li>
<li>Не разделяет публичные данные (сгенерированный html) и внутренние (кэш состояния потоков). Я, конечно, могу доступ к этому кэшу ограничить
средствами файловой системы и web-сервера, но подход rawdog, у которого есть недоступная по web директория для локального состояния и конфигурации, мне чем-то нравится больше.</li>
<li>Всё-таки непонятно, чем автора не устроили имодуль XML::RSS, XML::RSSLite, XML::Feed и прочие несть им числа.</li>
<li>При регулярном использовании ротирует страницу целиком, даже если с момента предыдущего апдайта появилось 1-2 новых сообщения.</li>
</ol>
<p>Что бы можно сделать:
1. Прикрутить шаблонный движок (от HTML::Template, чтобы использовать общий шаблон страницы и css с блогом ikiwiki).
2. Для хранения списка фидов использовать не плоский текстовый файл, а foaf. Раз уж оно лежит там же где раздаваемые html.
3. Поправить алгоритм сортировки.</p>
<p>Но пока у меня rawdog работает, это имеет меньший приоритет чем древовидные комментарии и корректная работа почтовой нотификации.</p>
френдлентноеhttp://www.wagner.pp.ru/~vitus/blog/posts/%D1%84%D1%80%D0%B5%D0%BD%D0%B4%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B5/2012-12-28T09:23:21Z2012-12-28T08:36:06Z
<p>Одной из причин, которая до сих пор удерживала меня на ЖЖ-подобных движках, было наличие там френдленты - встроенного
в журнал RSS-агрегатора с достаточно удобным интерфейсом добавления ну по крайней мере других журналов с того же хостинга.</p>
<p>Решив всё-таки из DW уйти я встал перед необходимостью завести и собственную френдленту.</p>
<p>То есть какую-то фиговину, которая регулярно собирает обновления с нескольких десятков блогов на разных сайтах
и делает из них общую страничку для просмотра.</p>
<p>Пока <a href="http://vitus.wagner.pp.ru/friends.html">эксперементирую</a> с <a href="http://offog.org/code/rawdog.html">rawdog</a>.</p>
<p>Эта собака страшная в общем-то делает почти всё, что мне надо, и почти так, как мне надо.
Правда, иногда случаются проблемы с кодировками. Типичные для питоновских web-интерфейсов попытки проинтерпретировать как ascii то, что ascii
не является, Как бы его по умолчанию заставить считать что всё, что пришло из сети - по умолчанию utf-8.</p>
<p>Ну и при добавлении кучи фидов разом он почему-то сортирует записи не в том порядке, в каком они были запощены авторами, а в том, в котором оно их первым увидело. Посмотрю через сутки, по идее должно выравняться.</p>
<p>И интерфейс для добавления новых фидов команднострочный. Хотя я может ещё это и пофикшу и приделаю какую-нибудь cgi-шку.</p>
<p>Теперь вот думаю - как быть с подзамочными постами? В принципе, ничто не мешает мне прописать в конфиге rawdog-а имя и пароль под которыми тащить фид, и будет оно брать подзамочные посты. Но сгенерированный-то html в открытом доступе лежит. Так что, наверное, лучше не надо.</p>
blog todohttp://www.wagner.pp.ru/~vitus/blog/posts/blog_todo/2013-01-11T04:44:22Z2012-12-11T06:11:18Z
<p>Пока я ещё не собираюсь сюда окончательно переезжать. Пока большая часть
этих пунктов не выполнена, содержательные посты будут в
<a href="http://vitus-wagner.dreamwidth.org">DW</a>, если там не сломают
комментирование нафиг.</p>
<ol>
<li>Хоть тушкой, хоть чучелком, но древовидные комментарии. (можно опереться на <a href="http://ikiwiki.info/plugins/contrib/mailbox/">mailbox plugin</a> )</li>
<li><s>Дизайн. Вероятно, css не обойтись, придется править шаблоны.</s></li>
<li><s>Прикрутить поиск.</s></li>
<li><s>Нужен свой OpenId провайдер, чтобы в чужие блоги ходить</s>. sreg
и ax extension-ы поддержать надо</li>
<li>Опросы не работают на страницах с русскими названиями.</li>
<li>Не нравится мне поведение календаря, показывающего только последний пост за данные сутки. (попробовать <a href="http://ikiwiki.info/plugins/contrib/jscalendar/">jscalendar</a> )</li>
<li>Разобраться с репликацией, чтобы шаблоны и пароли тоже реплицировались.</li>
<li><s>Из серии хотелок - тянуть юзерпики для OpenID пользователей. Причем
не только с lj-based, но и с гугля - DW же это умеет.</s> (включил
поддержку libravatar и gravatar)</li>
<li><s>Запретить регистрацию локальных пользователей</s> (ну где-то как-то)</li>
</ol>
<p>По выполнении большей части этих пунктов, я, пожалуй, сбэкаплю свой
журнал из DW и перееду сюда. Кросспостов делать не буду, <s>попрощу
кого-нибудь из френдов с платными аккаунтами втащить RSS-фид этого
блога, и пусть на него подписываются.</s>(done)</p>
Пост номер 2http://www.wagner.pp.ru/~vitus/blog/posts/%D0%9F%D0%BE%D1%81%D1%82_%D0%BD%D0%BE%D0%BC%D0%B5%D1%80_2/2012-12-10T18:57:01Z2012-12-10T18:54:59Z
<p>А это - второй блин.</p>
<p>C тэгом <span class="selflink">blog</span></p>