Портрет 4X_Pro
Был в Сети 15 апр. 2024 г., 23:38
Мультиблог
4X_Pro
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Сейчас специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb.

Социальные сети


Новости сайта в Telegram

t.me/4x_pro

Лог жизни

Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.


Эксперименты с frameworks

4X_Pro
Вот и я попался в ловушку убеждения, что если проект долго не обновляется, то с ним лучше не связываться. Попалась недавно на глаза информация о CodeIgniter 3 — очень лёгком frameworkе, который по затратам для страницы Hello World вполне сопоставим с моей TextCMS: что-то около 600 Кб памяти при первом запуске и 450 Кб при последующих. Причём код организован во многом так же, как я хотел сделать у себя. Как я говорю в таких случаях, «framework совместим с моим мышлением». Только нет встроенных обработчиков событий.
В какой-то момент я задумался, а не воспользоваться ли им для создания каталога сайтов. Но потом узнал, что уже давно вышла 4-ая версия, которая куда более тяжёлая прожорливая (тот же Hello World занимает 1.8/1.7 Мб). В итоге я в какой-то момент решил, что с третьей связываться смысла нет, и стал экспериментировать с другими frameworkами. Наткнулся на Fuel. Он тоже произвёл положительное впечатление, но на сайте с 2019 года никакой активности. Затем был Slim. Вроде и нормальный, но не нравится, как сделана работа с объектами Request и Response. Потом попробовал Lumen, Nette, CakePHP, но они все слишком прожорливые — даже банальный Hello World уходит за 1 Мб памяти, что для меня не вариант. (Хотя Nette — весьма симпатичный вариант для проектов, где нужен шаблонизатор.)
Ещё противоречивые впечатления остались от Yii. Он потребляет больше CodeIgniter (890 Кб), зато есть авторизация «из коробки», и хуже совместим с моим мышлением (кроме работы с формами — в Yii она лучше соответствует моим представлениям). Но там ситуация аналогичная: я тестировал первую, и узнал, что уже появилась вторая версия, которая требует ни много ни мало PHP 8.0.
И вот теперь оказался перед сложным выбором. То ли вернуться к идее писать свой framework на основе кода для MLCE, как и собирался изначально (плюс в процессе возник ряд новых идей, как сделать конфигурацию более гибкой), то ли сделать каталог сайтов на CodeIgniter 3 для экономии времени. Тем более, как выяснилось, иногда обновления к версии 3 ещё выпускаются.

Дно реки жизни и «дребезг»

4X_Pro
Уже почти неделю не писал в блог. В жизни то, чего мне не хватало уже давно — «лечь на дно реки жизни». То есть устроить полное затишье, когда нет каких-либо «надо», ведущих к необходимости ломать свои естественные ритмы, чтобы успеть к какому-то сроку. Но в то же время чувство полнейшей дезориентированности во времени. Особенно оно усилилось несколько дней назад. Тогда я попытался наладить режим, лёг спать около полуночи. И конечно же, через один цикл сна проснулся и засиделся в Сети до утра.
Занимаюсь тем, что перепрохожу Arcanum на максимальном режиме сложности ниндзя-подобным персонажем-полуорком, читаю книги прохожу очередной курс на Coursera и тренируюсь на Клавогонках. Ещё наконец-то отправил письмо о смене реквизитов в SAPE. (Хех, не прошло и двух месяцев.) Пытался медитировать, но это место действует на меня странно: не получается толком сосредоточиться. А вот просто уходить в свои мысли — наоборот, получается очень легко, даже проще, чем дома.
В Клавогонках пытаюсь поймать то самое состояние сосредоточенности и расслабленности, про которое недавно читал в статье про геймеров. Несколько раз получилось его достичь, но очень ненадолго. В остальное время мешает то, что я называю «дребезг» — какие-то навязчивые лишние движения, приводящие к ненужным нажатиям, которые приходится подавлять и расходовать на это силы. Да и не только движения, всё больше и больше осознаю, какое же у меня огромное количество компульсий самого разного вида, например, мыслей или того же бессмысленного циклического переключения вкладок в броузере. Именно это и есть моя главная причина низкой личной эффективности на самом деле.

Отселение 3.1

4X_Pro
Снова уехал в Отселение, в то же самое место и по тем же самым причинам, что и в августе. Поэтому решил назвать его не четвертым Отселением, а Отселением 3.1. Причём уехал на день раньше, чем собирался изначально, и собирался в сильной спешке. Но вроде ничего важного не забыл. Только внешний монитор решил в этот раз не брать — уехал всего на неделю.
Ещё есть мысль воспользоваться тем, что в жизни затишье, и устроить себе период полуоффлайна (тем более, тут сейчас проблемы с Интернетом и приходится подключаться через мобильник) и медленной жизни, как в мае: читать книги, размышлять и медитировать, и радоваться, что не нужно заставлять себя успевать к определённому сроку. Но с другой стороны, продолжают крутиться мысли о том, чтобы начать делать свой framework и скрипт каталога сайтов на нём.

Ещё один парадокс

4X_Pro
Сегодня с подачи Tellы поймал себя на очередном любопытном противоречии. В основе моей жизненной позиции лежит фундаментальное убеждение, что конкуренция между людьми — это зло, которое должно быть изжито и искоренено с помощью разумного человеческого начала, а также ограничений, запрещающих концентрировать слишком много какого-либо ресурса в одних руках в обмен на гарантии, что не останешься «за бортом жизни» в трудную минуту.
Но в то же время я считаю смыслом существования любой цивилизации борьбу за утверждение своей идеологии (или веры) как единственно истинной. Более простыми словами, отрицая конкуренцию на уровне отдельных личностей, воспринимаю её как норму на уровне цивилизаций. И тут получается парадокс: с одной стороны, не бороться — нельзя, потому что тогда победят западные индивидуалистические ценности, которые я ненавижу с лицейских времён, но с другой, борьба цивилизаций — это тоже форма конкуренции.

Третья неудачная попытка купить компьютер

4X_Pro
Хе-хе, уже третий раз сталкиваюсь с тем, что стоит задуматься о покупке компьютера, как начинает происходить что-то из ряда вон выходящее. (Первые два были в феврале 2020 и феврале 2022.) Вот и сейчас уже почти принял решение купить всё-таки новый компьютер, а не б/у, как хотел раньше. Даже собрал конфигурацию компьютера-мечты в корзине Яндекс.Маркета и обнаружил, что вылез за верхнюю границу изначального бюджета всего на 12 тысяч (и это с учётом покупки видеокарты RTX 3060, правда, вместо полносьтью пассивного блока питания Seasonic решил взять полупассивный от Corsair, но помощнее). Хотя ещё рассматривал вариант отказаться от возможности апгрейда в будущем и взять матплату и блок питания попроще, чтобы уложиться в изначальную психологически более комфортную сумму, но потом решил что нет, не стоит на этом экономить.
А сегодня и цены вверх прыгнули, и упал рынок акций. Так что видимо, всё же придётся покупать не компьютер, а акции.

О скрипте каталога и фреймворке для него

4X_Pro
Во время последнего заезда на дачу обдумывал, как сделать свой скрипт каталога сайтов. Вернулся к тому, о чём думал во времена начала работы над IntB 3.x в 2007 году — хранить все сущности, которые могут быть выведены в виде Web-страниц, в одной таблице: сами сайты, категории, подборки по формату сайтов, пользовательские подборки, вспомогательные фильтры, теги и т.п. По сути, у всего этого атрибуты одинаковые: название, описание, HURL, владелец, основной текст, дата создания и последней модификации, а также поле для сериализованных специфических атрибутов. Но в отличие от IntB, где предполагалась чисто иерархическая структура, предусмотреть таблицу для возможности связывать сущности произвольно. К тому же, как выяснилось, современные версии MySQL и Postgres позволяют хранить такие атрибуты в виде JSON с возможностью выборки по атрибутам внутри JSON и даже создавать по этим атрибутам индексы!
Потом мысль пошла дальше — решил сделать собственный микрофреймворк, взяв за основу тот код, который я писал для движка MLCE в прошлом году. И потом на нём реализовать и каталог сайтов, и мобильное сообщество, и, возможно, в дальнейшем вернуться движку для сообщества идеалистов, только переделать его на SQL вместо MongoDB. Но потом застрял на вопросе, использовать ли namespaces и загромождать код противоестественными конструкциями вида \MLFW\App\Router или \MLFW\Models\Entity или писать в духе CMS двухтысячных, используя namespaces только для указания путей, где искать необходимые классы (то есть Models\Entity или Templates\MainPage).

Дачный сезон закончился

4X_Pro
Четыре дня, прожитые на даче, можно назвать днями вынужденного slow life. Ни разу даже за пределы участка не выбрался, хотя хотел сходить напоследок к реке. Но не сложилось: в пятницу и воскресенье была слишком уж неподходящая погода, а в субботу было не до этого — занимались с отцом обрезкой деревьев.
Зато вдруг начал налаживаться режим дня. Правда, ценой жёсткого недосыпа в пятницу, которая вообще оказалась каким-то особо неэффективным днём. Не получалось ничего из того, за что брался. Хотел было старый роутер настроить в режиме ретранслятора — не получилось, обновить Linux на старых ноутбуках — тоже. Видимо, у Ventoy всё же есть какие-то ограничения, и для совсем старых компьютеров нужно делать загрузочные флешки обычным образом.
Уезжал с противоречивыми чувствами. С одной стороны, было жалко, что всё закончилось, и что теперь полгода, если не больше, не увижу эти места. Хотелось даже ещё на несколько дней остаться. С другой — было ясно, что жить тут теперь слишком уж холодно и некомфортно, и ехать всё же надо.
Возвращение было долгим и мучительным, так как ехали не на электричке, а по шоссе с ужасными пробками. Приехал уставший и даже не стал пытаться сделать что-то за остаток дня. Зато отоспался и сегодня проснулся в состоянии повышенной бодрости. А Welltory (её наконец-то обновили, и новая версия и замеряет нормально, и результаты выдаёт без задержек) показала вообще 22% стресса и 99% энергии. Не думал, что для меня такое возможно.
Но даже несмотря на то, что сил много, в голове полнейший бардак в плане того, что делать. Нужно и по freelance очередную задачу столкнуть, и бытовыми делами заняться, и ответить на накопившиеся сообщения. (Вообще, заметил, что после того, как переболел коронавирусом, резко сократился ресурс на общение, стал подолгу не отвечать на сообщения.) А вместо этого хочется либо заняться своим frameworkом, либо вообще сесть играть в Arcanum.

Осенний заезд на дачу

4X_Pro
Вчера снова приехал на дачу. Заезд отчасти вынужденный — обещал в субботу помочь отцу с обрезкой орешника. Тут холодно и мрачно, и спать начинает хотеться уже в 22 часа. Впрочем, несмотря на это, вчера всё равно засиделся за компьютером до 3:30, а потом ещё час готовился ко сну. Весь день был пасмурный, но ночью небо полностью расчистилось, благодаря чему удалось посмотреть на звёзды, а ещё увидеть Юпитер и Марс.
Из-за холода долго не мог уснуть: мерзли ноги. Только около 6 утра сообразил встать и найти шерстяные носки. В итоге сегодня не выспался и вынужденно сделал день полного безделья. Даже не обновил ArchLinux на одном из старых компьютеров, хотя хотел это сделать, и не протестировал старый роутер в режиме ретранслятора. Только купил несколько акций на фондовом рынке.
Зато, в отличие от предыдущих заездов, есть то самое чувство затерянности, удаленности от людей и цивилизации, ради которого и стоит ездить на дачу.

Немного о программировании

4X_Pro
Интересное наблюдение: раньше (во времена создания IntB 2.x) я писал код с позиции «Я — ведущий разработчик, тут я решаю, что и как будет в проекте. Кому не нравится — идите подальше отсюда и там пишите сами с нуля, как считаете нужным.» А сейчас стал слишком часто задумываться над вопросами типа «какое решение будет выглядеть более профессиональным, что лучше соответствует общепринятым практикам и т.п.». Естественно, производительности это не способствует…

Возвращаюсь к идее каталога сайтов

4X_Pro
В последние дни снова крутил в голове идею сделать каталог сайтов. Но долгое время не было в голове цельной картины, какова же должна быть его структура. Создал в Obsidian заметку, где попытался систематизировать сайты из раздела «Интересные материалы» или просто те, которыми хотел бы поделиться, и быстро понял, что простая древовидная не подходит. Думал на тему фасетов, активным сторонником которых является Evg, но они — хорошее решение для больших каталогов уровня YaCa и DMOZ, тогда как я на такие масштабы не замахиваюсь.
А в ночь с четверга на пятницу случился приступ бессонницы, когда я лежал и крутил в голове эту тему. И вроде решение пришло! Нужно предусмотреть выбор по двум параметрам: формат (официальный сайт, онлайн-сервис, канал в ТГ, блог, видеоблог и т.п.) и тематическая категория. Причём тематические категории — одноуровневые, но с возможностью создания для каждой категории набора фильтров. Например, для программного обеспечения это будут «Платформа», «Лицензия» и «Тематика». И ещё нужно сделать хороший поиск, который учитывал бы и название сайта, и URL, и описание и фильтры.
Из-за необходимости поиска я даже подумывал о том, чтобы вместо MySQL использовать MongoDB (там легко настроить поиск с учётом морфологии), но потом пришла в голову мысль сделать иначе — задействовать MySQL + Sphinx.
А ещё в этот же каталог можно встроить мою давнюю-давнюю идею [социального поиска](http://4xpro.ru/ideas/social-search/), предусмотрев для зарегистрированных пользователей возможность составлять свои подборки и рейтинговать их.
Интереса ради попробовал поискать на GitHubе и в Google современные скрипты каталогов сайтов, но ничего толком не нашлось! Теперь вот думаю, взяться за эту задачу или нет.

Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.