Бунт Книжников (часть вторая)

Apr 09, 2008 04:20


Итак, пути монахов Братства разошлись. Кто-то построил свои "аббатства" из одного человека, кто-то создал центры для б`ольшего или меньшего числа друзей, а кто-то ушел в чужие монастыри.

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

Чтобы понять как монахи организовали систему обменов, давайте сначала рассмотрим типы "узлов", nodes, распределенной и изменчивой сети Ордена.

Келии Отшельников, Аббатства и Монастыри
Исход книжников случился не сразу. Сначала самые умные и оснорожные из них, первыми поняв безбожие нового Аббата, стали втайне принимать меры, чтобы сохранить Знание. Страхи вскоре подтвердились: случились первые изгнания нескольких монахов Тимом Абусом, который лично вычистил все следы их ученых работ и комментариев в монастырской Библиотеке.

Отшельники -или те, кто ими стали - по прежнему ходили в главную Библиотеку на Гору Жизни, писали исследования и комментировали ученые трактаты других книжников. Но, опасаясь потери знаний, они каждый раз, обнаружив интересное, копировали его и уносили в свое тайное и никому не известное хранилище. Редко, откликаясь на чью-либо просьбу, отшельник мог помочь восстановить манускрипт, но его хранилище не было открыто для посетителей. Отшельник просто собирал знания для себя.
Разумеется устройство хранилища у отшельника повторяло многие главные черты Библиотеки, хотя в намного облегченном виде. На самом деле одинаковая организация работы хранилища одного монаха-отшельника, на которую надстраивались лишь немногие дополнительные механизмы для превращения хранилища в Аббатство которое могли посещать и другие братья, оказалось важно для успеха книжников в создании Сферы. Точно так же, лишь немногое надо было добавить к устройству мелкого Аббатства чтобы получить уже действующий Монастырь со своей обширной Библиотекой, устроенный почти так же как когда-то Монастырь на Живой Горе, но при том не обязывая монахов собираться и работать непременно в его собственной Библиотеке. Новая система на любом уровне поддерживала Сферу.
    Программы распределенных блогов должны в идеале быть написаны так, чтобы они позволяли при добавке дополнительных модулей/функций исполнять работу на разных уровнях. Прикидывая тичичные роли, которые могут играть nodes, узлы сети, можно выделить:
      [1] "Скит", или "Отшельник", или "келейная функциональность": работа отдельного закрытого от внешнего доступа читателя/агрегатора/хранилища статей и комментариев полученных из формата ЖЖ и преобразованных во внутренний стандартный формат распределенной блог-системы.

      Обычно на первом уровне планирования принимают множество неявных решений и предпосылок. Давайте попробуем их оговорить подробнее для программы самого низкого уровня
      Решение использовать http влечет за собой сопутствующее решение: программа должна иметь пользовательский веб-интерфейс, который пользователь видит в браузере. Причина - универсальность и легкость создания.
      Значит,
      • на локальной машине Отшельника должен быть (самый очевидный вариант) какой-либо веб сервер, в случае Отшельника закрытый от посетителей извне, который предъявляет самому отшельнику страницы для чтения. Было бы идеально, если бы на машинах низкого уровня не было бы необходимости запускать отдельно такой сервер, и он был бы встроен в саму программу.
      • На машинах открытых для посетителей снаружи ("Одинокий Аббат") эта же программа (в идеале) раобтала бы под стандартным веб сервером.
      • На машинах принципиально многопользовательских, дублирующих функциональность ЖЖ, в масштабах одной машины или выше, та же программа (в идеале) должна была бы работать с большой скоростью, что вызывает ряд иных решений - например, отказ от CGI, запуск многих копий программы с расщеплением множества пользователей и проч.

      Далее (возвращаясь к келейной конфигурации), страницы, копии документов из Библиотеки (ЖЖ или других центральных серверов) собираются программой-агрегатором по моему заказу ("принеси мне все, что недавно написали братья в сообществе ru_perl").
      Далее, как Отшельник я могу дополнительно вести мой локальный дневник-блог (например, для заметок, или для черновиков комментариев или статей, которые я затем скопирую через браузер в ЖЖ или другие блоги - или просто для себя).
      Дополнительно, я могу писать/править комментарии в моем локальном хранилище, как к своему локальному блогу, так и к любым материалам, я скопировал из ЖЖ.

      При этом нет необходимости создавать систему authentication и ограничения доступа. Это - архив моих личных копий, у меня есть полный доступ к любым документам.

      [2] Одинокий Аббат
      Я - сам себе целый монастырь, и единственный в нем монах, но я могу позволить другим придти посмотреть на мои документы.
      Эта версия обеспечит работу как в п.1, но с возможностью открыть машину для доступа к чтению вашей коллекции любого внешнего читателя и/или читателя из списка ваших друзей
      Это означает, что надо дописать систему доступа к веб сайту для внешних читателей или воспользоваться любой встроенной authentication, и только.
      Это - минимальный шаг. Мы по-прежнему не позволяем никому добавлять документы в наше Хранилище, или даже их комментировать. Однако в этом случае возможно мы хотели бы программу запускать из-под настоящего веб сервера (бросив её в CGI-директорию), а не включать встроенный, хотя и это не исключено.
      Здесь впервые возникают услуги по предоставлению своего Хранилища другим людям - раз они могут просто читать, они могут любые части вашей Библиотеки и скопировать.
      Т.е. на этой ступени мы также добавляем функциональность для p2p копирования между узлами. Важны два положения:
      • все функции аггрегирования, которые мы уже написали для ЖЖ ("взять журнал брата Тука", "взять последние послания брата Джона", "принести статью Джона о xxx со всеми её комментариями") годятся и для обмена между членами Братства напрямую, минуя центральный сервер ЖЖ (или его аналогов).
      • Отличие лишь в том, что не надо подстраиваться под (нам навязанный) формат документов из ЖЖ - т.е. RSS или прямой parsing html-файлов, где возможно в стандартном форматировании.
        Другими словами, если немного подумать, наша программа должна обеспечить выдачу манускриптов и наборов документов из Хранилища в двух видах: (а) красиво форматированный html, для прямого чтения в браузере, и (б) "raw-formatted", БЕЗ html-обрамления.

      html-оформление может изменяться ("style"), и наша программа стандартно для современных веб-applictions отделяет engine, предоставляющую CGI-API, т.е. язык запросов для выдачи страниц, и стиль обрамления содержимого в 2 или 3 столбца веб-страницы раскрашенной произвольным образом и возможно несущей javascript-мелочь вроде кнопок.
      Наконец, третье. Запросы на материалы было бы странно проводить, каждый раз пересылая полную копию документа. Например, пытаясь выяснить, не появились ли новые комментарии к статье ученого книжника Ю., я, обращаясь к ЖЖ, не могу избежать копирования массы ненужной информации.
      Между узлами нашей системы мы будем обмениваться "skeletons", "готтиками", или "оглавлениями", как хотите, выслав в приведенном примере, лишь маленький фал с полусотней строк, описывающих комментарии.
      Итак, в случае открытия машины для внешних посетителей и репликаций, наша программа предоставляет 3 режима - (a) сами страницы заметок и комментариев с оформлением, (b) страницы в "raw format", и (c) "оглавления", служебные краткие перечисления для быстрого выяснения кто какую информацию имеет. Все это пересылается по результатам стандартных http-запросов, обращение через предоставляемые программой cgi-api (www.my.server.com/path/to/program?arch=LJ&user=ru_perl&search_str=2008-03-28&format=raw&....), на которые ссылается интерфейс или сама программа во время разговоров-обменов, и которые совершенно не надо знать и помнить самому пользователю.
      Подробно протоколы обменов и еще одна сторона, автоматизация обменов, будут описаны ниже в отдельном разделе.

      [3] Аббатство
      Я держу мини-копию "монастыря" с библиотекой, куда могут приходить посетители, и им также позволено создавать новые документы, комментировать существующие, а также держать списки друзей и свои френд-ленты.
      Это по масштабу меньше, чем ЖЖ, это скорее всего еще одна, единственная машина, и я могу предоставлять эту услугу тем "отшельникам", которые (возможно в силу технических ограничений) способны только читать и копировать себе, либо быть "read-only" "одинокими аббатами".
      Возможно, моя машина по-прежнему лишь частная домашняя машина, но на этой ступени возможно это какой-нибудь линукс-компьютер арендованный у ISP. На этой ступени применения программы она скорее всего будет включена 24 часа в сутки (о "странствующих монахах" т.е. системах, которые могут выключаться и менять от включения ко включению адреса см. подробно ниже).
      Главное отличие здесь в том, что я организую на машине многопользовательский режим.
      Программа умеет все описанное в [1], [2], вдобавок вводя логин пользователей, их личные блоги, и личные предпочтения для френд-лент и наборов друзей.
      Интересно, что и этот incremental step не так сложен. Когда мы опишем устройство Хранилища документов, Библиотеки, станет очевидно, что все поступления лежат в одном, центральном, главном месте для всего Аббатства. Образование кружков друзей и их лент легко сделается путем создания "виртуальных" директорий из soft links, указывающих на место в центральной библиетеке сайта.
      Это станет очевидно после рассмотрения принципов, по которым образовано Хранилище.

      [4] Монастырь.
      Знаю, знаю, монастырь может значить практически то же, что и аббатство, но мы здесь вводим в чем-то условные термины. Главное чтобы было понятно и однозначно определено.
      Новой функциональности по сравнению с машиной-"аббатством" нет, изменился лишь масштаб. Вместо принципиально одного сервера в случае [3], здесь мы имеем дело с несколькими, со множесвом apache instances, расщеплением списка пользователей, каждый из которых может обслуживаться with a setup повторяющим "аббатство", и заведомо мы откажемся от применения CGI, перейдя на встроенный в веб сервер язык (mod_perl, php, ...) или интерфейсы вроде mod_lisp (a generic ascii clone of fast_cgi), либо fast_cgi - и так далее.


    Дальнейшие требования к программе
    Описанная серия ступенчато повышающейся функциональности должна:
    • (а) быть одной и той же программой в идеале (хотя возможно написать несколько, каждую на свой случай)
    • (б) быть написана на языке, работающем на всех платформах, windows, Mac, and Linux (плюс, возможно, другие популярные юниксы вроде BSD).
    • (в) В идеале - на языке, который обеспечит создание a standalone executable, не требующего установки языка интерпретации и каких-либо дополнительных библиотек, или по крайней мере сводить их к минимуму


    Это непростые и неочевидные требования. Может быть, использовать язык вроде Явы? Писать на Пёрле, несмотря на то, что установка его на машину наивным пользователем не гарантирована (мы уничтожим "отшельников" и "одиноких настоятелей" и будем вынуждены держать многопользовательские серверы доступа - что противоречит самой идее распределения копий по сети.
    Может быть, мы могли бы написать это на каком-нибудь современном скриптовом языке, который потом компилируется в standalone executable?
    Как быть с требованием встроенного веб-сервера и веб-клиента (чтобы копировать наши документы между машинами)? При этом по возможности избегая внешних программ и библиотек - либо позволяя их, но создавая отдельно процедуру гладкой установки для наивных пользователей..

    Кажется, простое решение есть. Все инструменты на всех платформах сводятся ко двум

    - скриптовому простому языку, размером 200кб без зависимостей, который позволяет "приклеивать" к себе скрипт, так что наша программа на все случаи жизни будет одним файлом порядка 300 кб.
    Этот язык имеет встроенный веб-сервер, простую работу с сетью, и все основные операторы высокого уровня, которые делают perl таким популярным. Это "newlisp", www.newlisp.org
    - и такой же маленькой utility, которая обеспечит работу с https вне ssl-функций веб сервера. Она использует крипто-библиотеку, но, насколько я понимаю, сама библиотека уже установлена в windows, она распространяется пре-компилированной, и потому, кажется, её установку удастся автоматизировать или сильно облегчить, сведя к паре "щёлков".
    Если понадобится б`ольший набор стандартных юникс-utilities, моим третьим предпочтением будет busybox, прекрасная миниатюрная упаковка всех основных команд юникса, которая компилируется как один файл (от 40кб до 1мб, в зависимости от набора, который вы включаете).
    Все это может работать на уровнях от персональной машины для чтения и сохранения статей ЖЖ или блоггеров распредеелнной сети - и до "фермы серверов", аналогичной ЖЖ.
    Больше станет очевидно после объяснений следующих разделов.
    Программа-отшельник с "келейной" функциональностью мной написана и используется уже года два как. Первый вариант этого агрегатора-личного блога без доступа извне был написан на пёрле, сейчас я его переделываю на newlisp. Разные части и функции не сведены аккуратно в один скрипт, но все они есть


Библиотека и Хранилища.
Обмены. Роли. Странствующие монахи
Previous post Next post
Up