Старый новый блог

Три года назад мой блог перестал управляться WordPress и стал статическим. Многих из популярных сегодня статических движков ещё не существовало, самым известным на тот момент был Pelican. Но он, как и некоторые другие решения, на которые я тогда смотрел, чем-то очень не устраивал, и мне пришлось написать свой собственный движок.

Назывался он Adelaide, и поддерживал всё, что было необходимо на тот момент: markdown с расширяемым синтаксисом (чего достичь в большинстве markdown-парсеров до сих пор очень нетривиальная задача), несколько параллельных независимых блогов внутри одного проекта, и всякие другие интересные штуки.

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

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

Здесь произошло неожиданное: я вдруг начал приходить к тем же решениям, что и команда Jekyll. То, что в Jekyll я изначально считал странным и неуклюжим, на практике оказалось (почти) разумным компромиссом. Отдельные части (например, система плагинов) у меня получились более развитыми и удобными, но перед тем, как потратить кучу времени на написание велосипеда, я решил убедиться, действительно ли Jekyll настолько меня не устраивает.

Если кратко — то я ожидал гораздо большего количества проблем. Вот, что не понравилось:

  1. То, что в Jekyll нельзя создать несколько независимых блогов внутри одного проекта, я знал с самого начала. Но был очень неприятно удивлён отсутствием пагинации по категориям или тегам, которыми я хотел это эмулировать. Решения есть, но каждое из них лежит где-нибудь в Gist, и либо работает из рук вон плохо, либо устарело и не работает совсем. Пришлось взять наименее страшное за основу и дописать ручками.

  2. Да и в целом, Jekyll хвалится огромным количеством плагинов, но де-факто они — некачественные и/или неконфигурируемые самоделки. За примером далеко ходить не надо: в jemoji размер иконки 20px прибит гвоздями, и для исправления сего недоразумения приходится городить очень страшные и некрасивые хаки.

  3. Движок местами шаткий. Легко совершить ошибку в YAML и потом долго размышлять, отчего не выходит каменный цветок. Я бы ожидал увидеть ошибку при сборке.

  4. Мой скромный блог собирается более 20 секунд. Почему так долго?

Впрочем, как я сказал раньше, не всё так плохо. Больше всего я опасался сложностей со нетривиальными штуками вроде автоматической генерации миниатюр из markdown. В Adelaide для этого был собственный тег, здесь же можно прикрутить расширение к Liquid. Выглядит это примерно так:

{% thumbnail data/posts/2016/07/design1.png %}

Вместе с движком сменился и дизайн. Он пока ещё в бете, принимаю любую конструктивную критику. Вот, кстати, то, что было раньше: в 2010-2013 годах и до недавнего времени.