\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}