В далеком 2008-м году я наткнулся в Сети на wiki-движок, написанный на JavaScript. Мне так это понравилось, что я решил его улучшить. Перевел на ООП-парадигму, выделил в отдельный модуль, привел в соответствие со спецификацией Creole 1.0. В результате получилась вот такая вещь. Однако на этом я не остановился.
В этом месте необходимо сделать небольшое лирическое отступление. По странным законам русской души я всегда испытывал непреодолимое влечение к халяве. В частности, к бесплатным хостингам. Учитывая, что года с 2000-го у меня стабильно был root хотя бы на одном серваке, такое влечение действительно можно назвать странным (не говоря уже о том, что с деньгами у меня проблем не было). Но на халяву и уксус сладок. Поэтому шведский стол русским противопоказан по медицинским соображениям. Короче, раз халявный хостинг есть, его грех не взять (и побольше!) Что с ним потом делать — это уже другой вопрос.
В 2009-м году как на грех мне попался на глаза бесплатный хостинг 110MB. Замечательность этого хостинга в том, что абсолютно на халяву можно получить PHP и SQLite! (Второе есть, но они это не афишируют — возможно, забыли отключить.) К сожалению, недавно они стали добавлять ссылку на свой сайт в конец страницы, но это дело легко поправимо с помощью <div style="display: none;"> (при этом никакие Terms of Service не нарушаются — они явно были рассчитаны не на русских :-) Что же сделать на бесплатном хостинге, на котором нет FTP, но зато есть PHP и RDBMS? Конечно, wiki. Я вооружился напильником и за день-другой перепилил JavaScript в PHP. И вот результат перед вами.
Скачать wiki-движок на PHP можно с Gitorious — лучшего в мире хостинга для свободного программного обеспечения. Лучшего не потому, что у него больше всего наворотов, а потому, что его исходники свободно распространяются по лицензии GNU Affero GPL. В мире есть еще один source hosting с открытым кодом — launchpad, но там Bazaar вместо Git.
Еще пару слов стоит сказать о парсере, который заложен в основу wiki-движка. С его помощью можно разобрать текст на языке (в хорошем смысле), слова которого описываются регулярным выражением (тоже в хорошем смысле). Однако благодаря такой штуке, как fallback, парсер получается гораздо более мощным, чем можно от него интуитивно ожидать. Chris Purcell назвал этот парсер RLRD (regular language recursive descent) — но сколько я ни гуглил, так и не разобрался, сам он этот принцип придумал или где-то подглядел. Короче, советую посмотреть и разобраться. Идея того стоит. Сердце алгоритма — метод apply класса creole_rule, всего 60 строк кода (на Perl было бы и того меньше).
Этот движок я впоследствии использовал на сайте детского городского лагеря, организованного моей женой, когда мне надоело вручную редактировать страницы, а учить жену HTML-разметке я не решился. На то, чтобы прикрутить его к сайту, потребовался один вечер. В общем, хороший получился велосипед, годный.

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