S2
S2 — это быстрый бесплатный движок сайта, написанный на PHP и выпущенный под лицензией GNU GPL.Поиск
Написал в блог разработки S2 всё, что я думаю о поиске на сайтах.
А еще я сделал автоматический экспорт свн-лога S2 в твиттер. Не знаю, правда, кому это нужно. Просто прикольно. Да и пришлось всего лишь две строчки добавить.
Первый релиз S2
Я доделал сайт движка S2 и сделал самый первый релиз — выпустил альфа-версию. В общем, встречайте «убийцу Вордпресса»!
Да, и если можете — попиарьте его, пожалуйста :)
Демо-сайт движка S2
Установил последнюю ревизию S2 на демонстрационный сайт (спасибо рефератам Яндекса). Можно протестировать админку (логин admin и пароль admin). Любые изменения демонстрационного сайта откатываются каждый час, так что не стесняйтесь в своих желаниях :)
Кстати, на дефолтный стиль оформления потратил целый день, и теперь он мне очень нравится.
Пора делать сайт движка и самый первый альфа-релиз.
Базы данных
Сейчас S2 поддерживает две базы данных: MySQL и PostgreSQL (правда, поддержку последней нужно тестировать). Из-за активного использования подзапросов работа с SQLite 2 невозможна. А про SQLite 3 в PHP я ничего не знаю. Поэтому думаю вообще забить на SQLite.
Вопрос: сильно ли нужна движку сайта поддержка SQLite?
S2
Интересующиеся знают, что written.ru работает на движке, практически целиком написанным с нуля. Последний раз я занимался этим движком два года назад. Тогда нужно было на чем-то остановиться (нельзя же непрерывно над ним работать), а потом я оказался занятым и отложил движок до лучших времен.
Похоже, лучшие времена наступили. Я решил доработать и опубликовать движок. Вообще, характеристики у него и раньше были неплохие, а интерфейс администратора — просто отличный. На этот раз основное внимание я уделил настраиваемости и расширяемости, стилям, языковым пакетам и шаблонам. В общем, всему тому, без чего written.ru спокойно обходился, но без чего нельзя представить себе «настоящую» CMS. В результате в движке поменялось многое.
Во-первых, я решил не изобретать велосипед, а использовать код из открытых проектов. Самые большие позаимствованные части — модуль для работы с базами данных и система расширений из PunBB. При переделке, как это говорится, не осталось нетронутых строчек кода.
Во-вторых, как этого требует лицензия PunBB, движок будет выпущен под лицензией GPL. Как-либо «монетизировать» это дело я пока не собираюсь. Вообще я уверен, что косвенная выгода от публикации кода движка будет больше возможных доходов от продаж.
В-третьих, такие изменения не могли не затронуть название. Старое рабочее название движка, «SiteX», неудовлетворительно по нескольким причинам:
- оно не вполне уникально;
- интересные домены, содержащие sitex, оказались занятыми;
- название можно прочитать несколькими способами (я подразумевал «сайтекс», а некоторые произносили «сайт икс»).
Я решил изменить название на «S2». Новое название лишено прежних недостатков и обладает рядом достоинств:
- это намек на SiteX второй версии;
- его можно прочитать единственным способом, «эс два»;
- такое название похоже на названия движков b2, e2, R2;
- домены s2cms.ru и даже s2cms.com оказались свободными;
- символы S и 2, расположенные рядом, образуют неповторимую форму, такую, что долго думать над логотипом не приходится.

По сравнению с SiteX пользовательский интерфейс существенно не изменился. Изменилась (точнее, появилась) идеология: S2 — это относительно небольшой и быстрый, но легко расширяемый движок сайта.
Первый релиз S2 (альфа-версия для ознакомления) может быть сделан уже в ближайшее время. Если кто-то захочет использовать движок для своих нужд, запросы на добавление функциональности могут быть учтены при выпуске бета-версий и в окончательном релизе.
Опять про SiteX
SiteX назвали конкурентом движка блогов с названием «Явь» (правда, что он собой представляет и каковы условия его использования — неясно). Забавно.
Кстати, я всё еще не передумал сделать SiteX оупенсорсом. Сейчас SiteX выполняет одну из первых задач — быть движком для written.ru, причем выполняет ее, как нетрудно заметить, вполне успешно. У меня были и другие идеи, реализация которых сделает SiteX более-менее универсальным движком. Например, можно сделать регистрацию пользователей и обеспечить возможность работать над одним проектом нескольким авторам, прикрутить OpenID, переделать внутреннее устройство (сделать систему расширений и вынести часть функций в расширения). Сейчас у меня на всё это времени нет, и вряд ли оно появится в обозримом будущем.
Однако я совсем не против, чтобы отдачу от времени и умственных усилий, ушедших на SiteX, почувствовали и другие. Один из вариантов — сделать код SiteX'а открытым. Смена лицензии будет иметь смысл, если кто-нибудь из разработчиков присоединится к проекту.
Мысли и вопросы по поводу вышеизложенного приветствуются.
SiteX
Может сделать SiteX оупенсорсом? Кто-нибудь хочет присоединиться к разработке?
SiteX
Несколько недель назад я закончил работу над движком сайта SiteX, на котором сейчас работает written.ru. Текущая версия — 0.91. Для тех, кто хочет узнать, что такое SiteX и с чем его едят, я написал небольшой обзор движка.
Комментарии можно оставлять здесь.
У сайта день рождения
Сегодня у сайта written.ru день рождения. Ровно два года назад я закачал на сервер набор HTML-файлов и картинок (именно это и представлял с самого начала сайт). Потом был PHP, выбор хостинга, домен, новый дизайн, движок блога.
В течение трех недель я написал новый движок (и систему редактирования) с рабочим названием SiteX, о котором я думал и который планировал написать последние полгода. Теперь сайт работает на базе данных, у него есть система редактирования с удобным веб-интерфейсом. Также я обновил дизайн, исправив ошибки в предыдущем варианте.
Как это обычно случается, я реализовал не всё, что хотел. Иначе чем бы я занимался дальше? ;)
Подробно анализировать события, произошедшие с сайтом за прошедший год, я не буду.
Я неоднократно имел возможность убедиться в том, что самое главное — это сделать первый шаг. Написать материалы, нарисовать какое-нибудь оформление. Конечно, шаг получится неуклюжим. Но все когда-то с чего-то начинали. А со временем приходят умение и опыт.
Я знаю, что сделал правильно, когда позапрошлым летом решил создать сайт и довел задуманное до конца.
См. также:
Сайту пять лет
written.ru четыре года
С трехлетием, written.ru!
Сайту written.ru — год
По мотивам нового движка блога
PHP меня радует такими вещами (хотя заслуги PHP в этом особой нет, это типичный синтаксис C):
while ($row = mysql_fetch_row($result))
$tag_ord[$a[] = $row[0]] = ++$i;
А вот MySQL порадовал меня следующим:
SELECT
recs.c_time,
title,
recs.text,
recs.url,
commented,
count(if(comms.id = recs.id, 1, NULL))
FROM recs, rectags, comms
WHERE recs.id = rectags.record_id
AND tag_id = 5
AND published = 1
GROUP BY recs.id
ORDER BY recs.c_time DESC
Добавлено 13.12.2007: А сейчас MySQL радует меня возможностью написать такой запрос: SELECT s.id, b.title, b.c_time, b.url,
FROM (
SELECT rec.id, label
FROM (
SELECT record_id
FROM rectags
WHERE tag_id = 4
) tt, recs
WHERE recs.id = tt.record_id
AND recs.label <> ''
) s, recs b
WHERE s.label = b.label
AND b.id <> s.id
ORDER BY 3 DESC
Новый движок блога
Больше месяца прошло с тех пор, как я размышлял о том, что мне не хватает в блоге как в системе для хранения и доступа к информации. Я написал новый движок, на котором сейчас блог и работает. Я реализовал не все возможности, которые хотел. Передо мной стояла дилемма: отложить разработку на неопределенный срок в связи с нехваткой времени, либо доделать до завершенного вида, но без части функций. Поскольку функциональность предыдущего варианта была достигнута и превзойдена, я остановился на втором варианте. Итак, перечислю основные особенности нового движка:
- Для хранения информации используется MySQL (раньше были текстовые файлы).
- Линейная навигация, использовавшая «страницы» по 20 записей, заменена на календарь (как в R2 или в Interra).
- Списки последних записей и комментариев.
- ЧПУ — человекопонятные Url.
- Кеширование на стороне сервера и настройка правильного кеширования в браузере.
- Через RSS экспортируются только те записи, которые появились после предыдущего обращения клиента к RSS (Идея взята отсюда).
- Можно подписаться на комментарии к определенной записи.
- Я попробовал сделать защиту от спама в комментариях. Если метод окажется хорошим, я потом напишу о нем.
- У ключевых слов может быть описание (например, как у слова кино). Это позволит в определенной степени реализовать идею «knowledge base» (загляните в размышления).
- Автоматическая типографика.
- Административный интерфейс.
Последний пункт — самый важный. Собственно, из-за него я всё и затеял. Основная его часть — это редактор записей. Он был и раньше. Следует отметить, что я добился кое-какой работы редактора в Firefox, а также добавил загрузку картинок и файлов вообще, автоматическую вставку тега для загруженной картинки, список записей с сортировкой, редактирование, добавление и удаление ключевых слов. И всё это расположено на вкладках. В общем, получилось весьма удобно и функционально. Никаких кнопок для переиндексации, устаревшие файлы из кеша удаляются автоматически, и генерятся заново по мере обращений к страницам.
Что еще в планах?- Поиск. (сделано)
- Простейшая разметка в комментариях, цитирование. (сделано)
- Связывание записей в группы и автоматическая расстановка ссылок «см. также» (некий аналог ключевых слов, только без явного их выделения). (сделано)
- Возможно, RSS отдельно для ключевых слов, комментариев и т. д.
Комментарии по поводу нового движка приветствуются.
Опять об авторских проектах и блогах
Первоначально я задумывал written.ru как авторский проект, на котором будут истории и размышления. Тогда всё выглядело как набор файлов html, редактируемых во FrontPage. Достаточно быстро я сообразил, что это не есть хорошо. Через полгода статьи перекочевали в отдельные почти текстовые файлы, дизайн ушел в шаблоны, и всем этим управляет PHP-скрипт. Одновременно я пришел к тому, что для разнообразия и оживления на сайте неплохо бы сделать «ежедневные заметки» — блог. Еще через полгода я сделал нынешний дизайн, изменил структуру (распределение материалов по рубрикам).
Прошло еще полгода. К этому времени стало ясно, что трудно провести границу между блогом и остальной частью сайта в том плане, что не всегда однозначно можно сказать, где следует расположить тот или иной материал. Кроме того, записей в блоге накопилось достаточно много, и он начинает «перевешивать» на сайте. Иногда у меня появляются мысли перенести все статьи в блог и оставить только его (особенно после того, как я в блоге сделал систему редактирования). Независимо от этих соображений (а может и зависимо) у меня назрело желание переписать движок для сайта с использованием MySQL. С нуля. Ну или почти с нуля. С нормальной системой редактирования. Фактически, CMS, но узкоспециализированную.
Возможные решения:
1. Изменить модель хранения и доступа к информации. Сейчас это отдельно статьи на сайте и записи в блоге. Предлагается для рассмотрения вариант knowledge base. Зачем это надо? Такая система хранения записей в отличие от уже надоевших блогов не распространена. Можно постараться и сделать CMS доступной для распространения. Нужно продумать, как те материалы (в том числе из блога), что есть сейчас, впишутся в рамки knowledge base.
2. Оставить всё, как есть. Наиболее простое решение. Правда, придется писать два отдельных движка для блога и для сайта, что не является оригинальным, поскольку уже проделывалось очень много раз.
Добавлено: Материалы на сайте в разделе «Заметки» и записи здесь, в блоге, совершенно различны «по духу». Нет смысла размещать статьи в блоге. Они представляют самостоятельную ценность. Им больше подходит роль структурной единицы на сайте. Записи в блоге в большинстве своем короткие. Они описывают что-либо достаточно полно только вместе с другими заметками по той же теме.
Структура сайта (распределение статей по разделам) сейчас достаточно наглядна, трудностей у пользователей не возникает. Они также знакомы с блогами. А «knowledge base» может вызвать у новых посетителей затруднения.
Один из вариантов — сделать «блогообразный knowledge base». К некоторым (или всем) ключевым словам можно сделать описание, которое и будет «основным темообразующим документом» в случае необходимости, затем можно разместить ссылки на статьи или даже разделы, имеющие те же ключевые слова, а после выводить записи.
Еще добавлено:
…контент, который востребован и не теряет актуальности со временем (или теряет, но не так быстро, как, например, новости)…
Не совсем понятно, что делать с контентом, который устаревает достаточно быстро (а у меня он есть). В результате размышлений я пришел к выводу, что существующая форма, в которой воплощено содержимое, адекватнее «knowledge base». Придется делать по сути два отдельных движка, хоть и тесно интегрированных. В блоге сделаю возможность давать описание ключевым словам. А также нужно подумать о реализации более тесной связи между блогом и статьями через ключевые слова.
Трансляция блога в ЖЖ
Продолжаю дорабатывать систему редактирования записей в блоге. На этот раз прикрутил возможность экспорта записей в ЖЖ, как хотел ранее. Трансляция блога доступна по адресу parpalak.livejournal.com.
За основу взяты имеющиеся наработки. Правда, всё это иногда отказывается работать. Разбираюсь, почему.
Простейший редактор на javascript
На выходных сделал простейший редактор записей в этом блоге на javascript. За основу взята эта разработка. Вот работающий вариант (не мой, а оригинальный).
Получилось весьма удобно. До сих пор приходилось все теги вручную прописывать (ну, или почти вручную :) ). Непонятно, почему я раньше не сделал нечто подобное.
Может, стоит сделать нечто похожее для комментариев на сайте и блоге. Пока думаю, насколько это будет нужным.
Добавлено: Это дело правильно работает только в Опере. В IE работает немного не так, как хотелось. А Firefox совсем капризничает. Буду выяснять, в чем дело.
Еще добавлено: Firefox капризничает, потому что не понимает document.selection.createRange(). Ну и пусть не понимает, всё равно я Оперой пользуюсь. Тем, кто хочет во всём этом разбираться, можно посоветовать статью о WYSIWYG-редакторе.




