Title: Дальше по дороге Unix-way
Author: Viva Calman
Date: 2023-01-19 12:18:54
Correction code: 167511148843238

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

Так что пришло время для еще одной модификации моей, с позволения сказать CMS, которая используется для этого блога.

С того момента, как монструозный вордпресс был выкинут на помойку, создание новых записей проходило примерно по одному сценарию: сначала создавалась поддиректория со всей внутренней структурой и шаблонами необходимых служебных файлов, потом эти файлы правились и писалась, собственно, заметка. В качестве языка разметки для написания текстов я использую Markdown, считая его самым простым способом получить HTML, без, собственно, написания HTML. Изначально я использовал свой псевдосинтаксис для разметки заголовков, ссылок и прочего, который, к тому же, использовался и для трансформирования текстовиков в TeX-разметку, но Markdown оказался более простым, наглядным и надежным. Что еще важнее, Markdown является решением стандартным, часто используемым и проверенным временем. А что до относительной бедности выразительных средств, предоставляемых Markdown-ом, то я придерживаюсь позиции, согласно которой наличие богатого набора средств для выражения, не является требованием все эти средства применять.

К тому же, Markdown-разметка даже в виде plain-text-файла выглядит и читается просто замечательно (что логично, она для этой цели и создавалась).

После того, как заметка написана, ее нужно преобразовать в HTML. Для этого у меня в .zshrc была создана функция, в теле которой и происходило все самое интересное. Markdown конвертировался в HTML, получившийся HTML оборачивался в шаблон страницы с хидером и футером, в конце генерировались превьюшки для картинок. Где-то в процессе формирования HTML-я в череду pipe-ов влез мой небольшой скрипт, который добавляет пропущенные дефисы, делает правильные тире и наводит прочую косметику. Он совершенно необязателен и его его оттуда убрать, процесс формирования HTML не нарушится.

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

Так что было принято решение соответствовать unix-way. Для этого я написал специальный Makefile, в который была вынесена вся логика создания страницы. Первым делом туда были вынесен весь код, который содержался в функциях для zsh. А потом эти функции были немного изменены и получившийся Makefile приобрел совершенно неожиданную, но приятную гибкость в использовании. Теперь, например, довольно долгая процедура создания превьюшек картинок вынесена в отдельный таргет (что немаловажно, так как я пишу заметки на старом нетбуке с Intel Atom вместо процессора. Писать текст в vim на нем можно без проблем, но вот достаточно оперативно перемолотить пару десятков full-HD джипегов он не способен. Нет, не надо спрашивать, почему все так, как оно есть). Теперь, в случае, когда измененния вносятся только в текст, можно пропустить эту операцию, перегенерировав только HTML, не трогая уже обработанные картинки.

Кроме этого, в Makefile есть таргеты, отображающие список картинок в виде Markdown-разметки, чтобы ее можно было вставить в файл (должен признаться, что работа с картинками - это самое неудобное, что есть в текущем процессе создания заметок. Иногда без WYSIWYG сложновато. Впрочем, я уже почти привык, хотя и стараюсь оптимизировать этот процесс, сделав его более комфортным). Еще есть таргет, размещающий страничку на локальном веб-сервере для предварительного просмотра и таргет, который, для экономии места, ресайзит большие картинки до разрешения 1080р (я решил, что этого вполне достаточно для всех устройств, с которых мой сайт будут просматривать). Пришлось немного повозиться, решая не очень актуальную, но все же проблему файлов с пробелами в названиях. Вообще, лучше до такого не доводить и подготавливать имена файлов заранее, но для перестраховки я сделал некоторую защиту от дурака в лице меня.

Для максимальной гибкости, все эти таргеты вынесены в отдельный Makefile, который через include подключается в Makefile-ы в директориях заметок. Это, с одной стороны, позволяет не держать весь Makefile в каждом каталоге заметки, а, с другой стороны, позволяет добавить новые таргеты, если вдруг заметка потребует какой-то специальной обработки. Гибкость сохранена, но она не идет в ущерб простоте решения. Unix-way соблюден.

Так что продолжаю радоваться тому, как мой бложик эволюционирует, пусть и незаметно для того, кто его читает. В конце концов, основная цель его существования - радовать меня. А я люблю вещи, которые работают так, как я хочу, без лишней самодеятельности. И еще я апологет indie-web, если это можно так назвать, и если от слова indie вас не корежит еще со времен, когда хипстеры были актуальны. Нужно больше маленьких персональных сайтов. Web должен жить за пределами корпоративных соцсетей и алгоритмов формирования новостных лент. Такая вот моя позиция по этому вопросу и я планирую продолжать ее придерживаться.

^HOME