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

eSyr/Protva2010Thesis.tex (last edited 2010-07-30 22:55:16 by eSyr)