понедельник, 15 марта 2010 г.

MoinMoin в качестве личной записной книжки

Не знаю как у других, а у меня регулярно возникает необходимость вести записи. Работа администратора штука творческая: то обнаружится какая-нибудь мелочь, которую желательно запомнить; то всплывет вялотекущая задача, к которой приходится периодически возвращаться спустя несколько недель затишья; то в голову придет "умная" мысль, которая имеет хорошие шансы пригодиться в будущем.

Сначала я вел записи в текстовых файлах разбросанных по диску. Решение гибкое, но не очень удобное. Затем пришла очередь специализированных программ: Tomboy/Gnote, The Personal Brain. Не прижились по разным причинам, в основном: закрытость (The Personal Brain) и ограниченный функционал. Наконец, я остановился на хранении записей в вики. Несколько месяцев использую для этой цели MoinMoin и вполне доволен.

К программе для ведения личных записей у меня сформировались определенные требования. Возникли они в результате длительных поисков и большого количества набитых шишек. Попробую сформулировать эти требования, а заодно оценить насколько MoinMoin им удовлетворяет.

Записная книжка нужна сразу. Идеи приходят быстро, еще быстрее они уходят. Если программу необходимо долго настраивать, ждать пока она запустится, или читать тома документации пытаясь понять/вспомнить, как это работает, она не подходит.

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

Записная книжка должна быть переносной. Зачем мне записная книжка, которой я не могу воспользоваться тогда, когда она мне нужна? Количество и расположение записных книжек должно ограничиваться только моими потребностями, а все экземпляры должны быть одинаково функциональны и, желательно, иметь возможность синхронизации записей между собой.

В принципе, с переносимостью записных книжек проблем обычно нет, а вот гибкая функция двусторонней синхронизации встречается реже. В MoinMoin такая возможность есть.

Гибкость и хороший потенциал для роста важны. Чем дольше используется программа, тем больше вероятность, что от нее потребуется что-то такое, о чем в начале даже не думалось. Кто знает, сколько времени я буду вести свои записи: год, пять, десять лет, а может всю оставшуюся жизнь? Это долго. За это время определенно потребуются новые функции, в том числе, для формализации и автоматической обработки записей.

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

Если всего перечисленного выше для вас достаточно и вы тоже решили попробовать MoinMoin в роли записной книжки, ниже я опишу, как выполнить базовую установку и настроить синхронизацию записей. На первое время этого хватит, мне хватило на пару месяцев.

Установка вики для записной книжки

Личная записная книжка по определению имеет весьма ограниченный круг пользователей. От нее не требуется ни высокая масштабируемость, ни изощренное разграничение прав доступа. Конечно, со временем ситуация может сильно измениться, но на первых порах, все это — лишние сложности, которые врядли стоят затраченных усилий. Я считаю, что начинать надо с MoinMoin Dektop Edition.

На самом деле, Desktop Edition мало чем отличается от других вариантов. Отличия лишь в крайне упрощенной процедуре установки и настройки, но поскольку дистрибутив один и тот же, ничто не мешает со временем вырастить из милого ручного зверька дикого саблезубого монстра. Конечно, если на то будет необходимость.

Для установки потребуется Python 2.5+ (версия 3.x еще не поддерживается) и дистрибутив moin-x.x.x.tar.gz. В принципе, вики готова к работе сразу после распаковки дистрибутива. Однако, небольшая настройка все же не помешает.

В каталоге, куда был распакован дистрибутив, необходимо создать два файла: wikiconfig_local.py и wikiserverconfig_local.py. Настройки желательно делать только в этих файлах, так как это поможет в дальнейшем избежать лишней работы при обновлении движка до новых версий, которые выходят достаточно часто. Если настройки по умолчанию полностью устраивают, можно обойтись созданием заглушек:

wikiserverconfig_local.py

from wikiserverconfig import LocalConfig

class Config(LocalConfig):
   pass

wikiconfig_local.py

from wikiconfig import LocalConfig

class Config(LocalConfig):
   pass

Однако, для работы механизма синхронизации, без которого использование MoinMoin теряет большую часть своей привлекательности, потребуются кое-какие изменения.

Настройка синхронизации записей

Я пришел к выводу, что везде, где есть необходимость работать с записной книжкой желательно иметь её независимую копию (дома, на работе, и т.д). Независимые копии дают большую надежность, поскольку, даже если вы забыли загрузить в локальную копию последние изменения, у все еще есть предыдущая версия, с которой можно работать. Кроме того, появляется возможность тонкой настройки по месту (например, выбор начальной страницы).

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

Для работы механизма синхронизации необходимо, чтобы все копии имели уникальные URL и все были прописаны InterWikiMap. Поскольку выставлять вики в сеть я не хочу, сервер будет принимать соединения только на localhost, а копии будут различаться номером порта. Соответствующие настройки прописываются в wikiserverconfig_local.py

from wikiserverconfig import LocalConfig

class Config(LocalConfig):
   hostname = 'localhost'
   port     = 8180         # Portable wiki copy
   #port     = 8181        # Wiki copy at home
   #port     = 8182        # Wiki copy at work

Для каждой копии вики, необходимо настроить имя (interwikiname), расположение файла описывающего соответствие имени вики и URL (shared_intermap — я везде использую один и тот же файл), а также разрешить XML-RPC необходимый для работы механизма синхронизации. Соответствующий wikiconfig_local.py выглядит следующим образом:

from wikiconfig import LocalConfig

class Config(LocalConfig):
   interwikiname    = u'MyMobile'
   shared_intermap  = 'intermap.txt'
   actions_excluded = [
     #'xmlrpc',  # we do not want wiki admins unknowingly offering xmlrpc
     'MyPages',  # only works when used with a non-default SecurityPolicy
     'CopyPage',  # has questionable behaviour regarding subpages
    ]

Файл intermap.txt следует разместить в том же каталоге, что и wikiconfig_local.py, Выглядит он так:

MyMobile http://localhost:8180/
MyHome   http://localhost:8181/
MyWork   http://localhost:8182/

Наконец, необходимо создать в вики специальную страницу. Имя страницы значения не имеет, я назвал её Sync2Mobile. Создавать страницу придется в каждой стационарной копии вики вручную, но делать это нужно всего один раз. На странице достаточно разместить следующий текст (подробности в докуменатции):

#format wiki
#language en


<<Action(SyncPages,Start the synchronization)>>

= Parameters =

remoteWiki:: MyMobile

= Log =
...

Теперь записная книжка полностью готова к использованию. Для запуска вики сервера достаточно выполнить следующие команды:

cd <path to wiki>
python ./wikiserver.py

Для переноса записей между компьютерами используется копия MyMobile, которая копируется в холодном режиме, то есть при остановленном сервере, на переносной носитель. При желании можно шифровать архив с помощью GnuPG, но пока руки не дошли:

tar -czf /media/disk/mobile.tar.gz mobile

Когда мне необходимо выполнить загрузить/выгрузить данные из локальной копии я использую следующую последовательность шагов.

  1. Удаляю старую версию MyMobile.

  2. Распаковываю на её место архив с переносного носителя.

  3. Запускаю сервер новой копии MyMobile.

  4. Захожу на страницу синхронизации стационарной вики (например MyHome).

  5. Нажимаю ссылку "Start the synchronization" и жду завершения процесса. Содержимое страниц MyMobile и MyHome синхронизируется, так что копии становятся идентичными.

  6. Останавливаю сервер MyMobile.

  7. Упаковываю новую копию MyMobile переносной носитель.

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

Комментариев нет:

Отправить комментарий