\author{Сыромятников Е. Л.} \city{Москва} \affiliation{ООО ALT Linux} \projecttitle{MoinMoin wiki engine} \projecturl{\url{http://moinmo.in/}} \title{MoinMoin 2.0: вики-сервер нового поколения} \maketitle \begin{abstract} Понятие «вики» существует не первый десяток лет, и технологии, его реализующие, используются практически повсеместно. Простота оригинальной идеи во многом благоприятно сказалась на популярности данного способа совместной работы с гипертекстовой информацией. В то же время, современные вики-сервера (в особенности, наиболее популярные и функциональные из них) зачастую предоставляют множество дополнительных возможностей, которые весьма разнообразны, но в то же время разрозненны и зачастую плохо интегрированы друг с другом. Во второй версии MoinMoin его создатели пытаются пересмотреть концепцию вики в соответствии с существующими реалиями и появившимися в процессе активного использования новыми требованиями и создать на основе неё вики-сервер нового поколения, по функциональности не уступающий существующим решениям. \end{abstract} \section{Что вики есть} \epigraph{The simplest online database that could possibly work.}{Ward Cunningam, \url{http://www.wiki.org/wiki.cgi?WhatIsWiki}} Как многим, вероятно, известно, вики~— (веб-)сервис, позволяющий пользователям свободно создавать и редактировать содержимое размещённых на вики-сайте страниц. Почти всегда вики-сервер поддерживает форматирование текста посредством вики-синтаксиса (минималистичного текстового синтаксиса наподобие ReST и Markdown; синтаксис различных вики-серверов~— программного обеспечения, обеспечивающего работу вики~— обычно отличается). Другой особенностью вики является простота указания ссылок и создания новых страниц. Также следует отметить такую важную особенность вики (являющуюся енеобходимым следствием простоты внесения правок), как наличие истории изменений у каждой страницы. \section{Наслоения} Простота изначальной концепции и её гибкость позволили вики найти применение в широком спектере приложений. Как следствие, исходя из специфики конкретной задачи, в те или иные вики-сервера вносилась различная дополнительная функциональность. Ниже приведены некоторые примеры подобнеых дополнений: \begin{itemize} \item[--] Поддержка синтаксиса, отличного от вики-синтакса (HTML, DocBook, ReST, …). \item[--] Возможность хранения на вики файлов (как прикреплённых к страницам, так и отдельно существующих). \item[--] Ограничение доступа доступа. Наиболее продвинутые варианты реализации подразумевают полноразмерный ACL. \item[--] Интеграция с различными сервисами аутентификации (LDAP, OpenID, …) \item[--] Различные системы расширений синтаксиса и функциональных возможностей. \item[--] Различные способы хранения, индексирования и поиска. \item[--] Управление пользователями (группы, права, переименование, …) \item[--] Различные упражнения с внешним видом~— пользовательские стили, стили страниц. \item[--] Локализация и поддержка нескольких языков. \end{itemize} Не всё легко ложится на оригинальную концепцию. Одним из ярких примеров инородных включений можно назвать поддержку сторонних синтаксисов и файлов~— чаще всего они обрабатываются особым образом, что создаёт проблемы для авторов расширений и вообще при любых существенных изменениях в коде вики-сервера. В результате выжеизложенного постепенно стала назревать необходимость в обновлении концепции. При этом очевидно желание сохранения её простоты и легковесности и не меньшей гибкости, чем было заложено изначально. \section{Концепция MoinMoin 2.0} Одним из возможных вариантов реализации некоторой новой концепции является MoinMoin 2.0~— активно разрабатываемая на данный момент новая версия вики-сервера MoinMoin. В его основе лежит ряд положений, среди которых имебтся следующие: \begin{itemize} \item[--] Унификация хранимых на вики сущностей: \begin{itemize} \item[--] Единый вид объекта~— Item; \item[--] Объект имеет версионируемые данные и набор метаданных (среди которых MIME-тип) как для всего объекта, так и для отдельных версий. \end{itemize} \item[--] Единый способ обработки различных форматов на основе wiki DOM и конверторов в выходные форматы. \item[--] Подсистема хранения: \begin{itemize} \item[--] Выделение storage backend (который может быть любым: на основе файлов, БД, DVCS…); \item[--] mount-like подключение различных хранилищ. \end{itemize} \end{itemize} MoinMoin 2.0 содержит ряд других решений (по сравнению с веткой 1.х, история которой тянется с 2000 года в качестве форка PikiPiki~— переработка и унификация расширений, темплейтинг на основе Jinja2, поддержка совместного редактирования), но существенными в плане концепции являются именно перечисленные выше положения. \section{Текущее состояние} На данный момент MoinMoin 2.0 активно разрабатывается, но в виду малого числа основных разработчиков и большого количества кода, которого требуется написать, релиз планируется не ранее 2011 года. На данный момент уже реализованы основные части системы (storage, Wiki DOM, Item) и ведётся работа над функциональным наполнением (конверторы в раличные форматы, темплейтинг, различные storage backend). \section{Ссылки} \begin{enumerate} \item MoinMoin~— \url{http://moinmo.in/} \item MoinMoin~2.0~— \url{http://moinmo.in/MoinMoin2.0} \item Wiki DOM~— \url{http://moinmo.in/MoinDev/WikiDom} \item ReST (Restructured text)~— \url{http://docutils.sourceforge.net/rst.html} \end{enumerate}