Сайт Романа ПарпалакаБлог20230825

Мысли о движке сайтов S2

25 августа 2023 года, 16:30

В этом году я сделал несколько доработок своего движка сайтов S2, главная и самая заметная из которых — система рекомендаций. Я бы не стал об этом опять писать, если бы не одно но — до этого крупные доработки в движке я делал больше 8 лет назад. В этой заметке я хочу зафиксировать, как так получилось и что теперь с этим делать.

История

Историю движка можно проследить по тегу «S2». Главная проблема движка в том, что он был полем для моих экспериментов в процессе изучения веб-разработки. Человек, изучающий некоторый предмет, проходит те же стадии, по которым этот предмет развивался. Поэтому всё, что я делал в движке, было вчерашним (если не позавчерашним) днем с точки зрения качества кода и современных практик его написания.

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

В какой-то момент я опубликовал код движка, так как хотел поделиться наработками и подумал, что кто-то захочет присоединиться к разработке. Первая часть намерений воплотилась в жизнь. У движка появились свои пользователи, которые делали на них свои сайты. Так, на форуме поддержки 15 человек оставили от 10 сообщений, а двое самых активных пользователей написали больше 100 сообщений каждый.

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

Со временем я приобрел достаточный опыт в разработке и стал понимать, насколько тяжело дописывать новый код движка в старой парадигме. Я несколько раз пытался переписывать код с нуля. Сначала без фреймворков с «нормальным» объектным подходом (версия 2.0dev). Потом на микрофеймворке Silex. Потом авторы Silex отказались от его развития, и я подключил Symfony. Все эти попытки сделать версию 3.0 останавливались на том, что надо переделать на новую схему админку и расширения, и для такой объемной работы у меня не было времени и желания.

Одновременно с этим активность на форуме угасла. Авторы некоторых сайтов перенесли их на другие движки. Некоторых сайтов больше нет. Некоторые заброшенные сайты до сих пор работают на S2.

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

Доработка

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

У меня получилось за 1 января (обычно бесполезный день) подключить к S2 версии 2.0dev свежую версию поискового движка Rose, и при этом сделать так, чтобы в общем кодовом пространстве движка сосуществовали устаревший код, на который больно смотреть, и новый код, с которым приятно работать. Такой быстрый прогресс открыл дорогу к тому, чтобы сделать уже упоминавшуюся систему рекомендаций.

Также я внес несколько менее масштабных, но не менее желанных изменений. Перенес php-код расширений из xml-файлов (он выполнялся через eval()) в php-файлы, что минимизировало объем кода, выполняемого в eval(), и дало возможность делать нормальный рефакторинг и отладку этого кода в PhpStorm. Добавил загрузку картинок на сервер прямо из буфера обмена, минуя сохранение в промежуточные файлы. Отрегулировал расчет релевантности в самом поисковом движке Rose на настоящем живом сайте.

Еще подключил codeception — библиотеку для написания автотестов, и стал добавлять эти автотесты. Среди нескольких видов тестов пришлось выбрать приемочные (acceptance). В них выполняются настоящие http-запросы к отдельно запущенной копии приложения (в моем случае ко встроенному в PHP веб-серверу). Запускать и тесты, и код движка в одном процессе нельзя, потому что в случае ошибок выполняются die/exit, расставленные в куче мест, и их отрефакторить затруднительно.

Продуктовый подход

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

Альтернатива — забросить S2 и перейти на другой движок, хотя бы ту же Эгею Ильи Бирмана. Но для этого надо создать свою тему оформления, написать и отладить конвертер заметок, разобраться со старыми адресами URL, пройтись по всем заметкам и убедиться, что ни в одной ничего не сломалось (а ломаться есть чему: у меня есть заметки с нетривиальной версткой вроде рецензии на книгу о фильме «Интерстеллар»). Это значительный объем работы, которую нельзя делать понемногу, мелкими шагами. Мне проще было постепенно доработать свой движок.

Светлое будущее

Ха-ха, просто будущее :) Оно хорошо описывается фразой из заголовка статьи Бенджамина Эберлея, одного из разработчиков Doctrine ORM, о поддержке в опенсорсе: бесплатный софт, а не бесплатная поддержка.

S2 переехал на гитхаб, откуда его можно скачать. Версию 1.0 я пока что использую, поэтому еще некоторое время буду исправлять баги и проблемы совместимости со свежими версиями PHP. Новых фич в ней не будет. С версии 1.0 можно обновиться до 2.0dev, переработав стили.

Версию 2.0dev буду иногда дорабатывать на досуге. Не планирую свои сайты переводить с неё на что-то другое, поэтому буду поддерживать совместимость с новыми версиями PHP и браузерами (проблем с последними, кстати, почти нет: js-код десятилетней давности всё еще работает без сбоев). При этом я не буду документировать версию 2.0dev. Не хочу тратить время и ограничивать свободу доработок. Энтузиасты, если найдутся, заглянут в частично актуальную документацию версии 1.0 и в исходники стилей.

На вопросы возможных пользователей движка я отвечать не планирую. Я не вижу перспектив в том, чтобы у движка появлялись новые пользователи. Сейчас соцсети, облачные платформы и конструкторы сайтов не оставляют движкам типа S2 какой-либо ниши для развития.

Поделиться

Чему же равно 6:2(1+2)? Ctrl Как покрыть тестами устаревший код?

Читайте также


С наступающим!
Давно я не поздравлял читателей с праздниками. И сейчас не стану писать банальные вещи.
2014

Комментарии

#1. 26 августа 2023 года, 18:45. Луридан пишет:
На счет альтернативы перехода на Эгею. Я через это проходил и не нужно бояться переносить всё руками. Если у сайта посещаемость небольшая, то, если быть честным с собой (как с этим смирился я), можно не бояться, что сайт будет пару лет находиться в переходном состоянии. Можно просто поставить на поддомен эгею, выбрать одну из тем по умолчанию и в свободное время в качестве медитации переносить посты. Можно поставить эгею уже основной версией сайта и сказать, что это бета)) А то, что бета может продлиться долго — уже не важно.

Я так и сделал — потом в течение 4 лет переносил посты. Параллельно, опять же под настроение, сделал одну тему оформления, пожил год-два, потом другую. Последние пару лет блог ожил и активно наполняется новыми постами, но и старые тоже переносились. Недавно только закончил.

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

Вот, кстати, постик немного об этом: https://popori.ru/all/popori-13
#2. 26 августа 2023 года, 22:39. пишет:
Спасибо, что поделились опытом. Вручную я бы точно не стал ничего переносить. Слишком много однообразной работы и не так много для нее мотивации.
#3. 28 августа 2023 года, 07:59. Евгений Степанищев пишет:
Я переезжал на «Эгею» при помощи самописных конверторов, причём писал их аж три раза: для статичной версии своего сайта, которая жила на обычных HTML, для движка «Регистр», на котором я когда-то вёл блог и для конвертации из ЖЖ.

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

По поводу развития кода «Эгеи» лично для меня тут есть сложности. Наверное если заниматься «Эгеей» постоянно, всё будет просто, но лично для меня почти полностью процедурный код (а значит тестов не будет никогда), со своим собственный стилем кода (например, запрещены && и ||, вместо них — and и or), написанный под php5 (новые конструкции использовать нельзя, никакой типизации), без документации и почти без комментариев очень тяжело править и развивать.

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

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

По остатку, у движка лаконичный, во многом продуманный дизайн из коробки, на который делается упор, это мне нравится и до сих пор удерживает меня от ухода, хотя с автором я не во всём согласен, какие-то вещи мне бы хотелось вернуть как было. Конвертация — штука несложная, за счёт того, что движок поддерживает html в качестве разметки, во многих случаях безболезненная.
#4. 28 августа 2023 года, 12:46. пишет:
Евгений, спасибо за отзыв. Мне кажется, что добавить приемочные тесты в Эгею будет несложно, не думаю, что она в этом отношении отличается от S2. Написал подробнее о приемочных тестах в отдельной заметке: https://parpalak.com/blog/2023/08/28/accep … odeception
#5. 29 августа 2023 года, 07:55. Евгений Степанищев пишет:
Приёмочные — да, я всё же, прежде всего думаю о юнит-тестах.

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


Формулы на латехе: $$f(x) = x^2-\sqrt{x}$$ превратится в $$f(x) = x^2-\sqrt{x}$$.
Выделение текста: [i]курсивом[/i] или [b]жирным[/b].
Цитату оформляйте так: [q = имя автора]цитата[/q] или [q]еще цитата[/q].
Других команд или HTML-тегов здесь нет.

Записи