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

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


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

t.me/4x_pro

Лог жизни

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


Перепрошёл «Возрождение Эрафии»

4X_Pro

Сегодня завершил перепрохождение «Возрождения Эрафии» на среднем уровне сложности. Первый раз я проходил её в 1999 году, незадолго до окончания школы, и с тех пор почти забыл основную сюжетную линию. Точнее, помнил только первые две кампании, а вот что было дальше, в голове не отложилось совсем. Возможно, потому что играл то ли на первом, то ли втором уровне сложности.
В процессе игры пришло некоторое переосознание. Раньше я воспринимал Heroes III как не очень удачную попытку повторить вторую часть. А сейчас понял, что там есть одно существенное отличие. Во второй части, по сути, игра сводилась к тому, чтобы собрав небольшую армию, взять под контроль ближайшие шахты и собрать легко доступные ресурсы, а потом как можно быстрее выйти на юнитов шестого уровня и набрать их хотя бы десяток. И только после этого идти на захват остальной части карты, так как при наличии такой ударной силы юниты более низких уровней на поле боя уже мало что решали. (Кроме разве что каких-то безумных соотношений типа 5000 минотавров против 10 титанов, но чтобы эти 5000 минотавров где-то накопились, должно пройти много игрового времени, да и при правильном использовании магии даже с этим можно справиться.) Исключением были разве что сверхмалые карты.
А в третьих же золото является более дефицитным, и такой подход оказывается неэффективным: пока удастся накопить на десяток титанов, противник успеет захватить уже полкарты, избавиться от дефицита золота и прибежать с существенной армией. Так что пришлось учиться избавляться от перфекционизма в духе «сначала отстрой всё, что можно, выкупи всех юнитов, а потом уже иди в атаку» и учиться искать точку баланса, а также расставлять приоритеты, каких юнитов выкупать в первую очередь с учётом особенности героя.

Поставил Lineage OS на планшет!

4X_Pro

Ещё раз убеждаюсь в том, что я — человек, который всё делает со второго раза. Вот и с планшетом получилось именно так: сегодня без особых проблем разблокировал планшет DC-Unlocker, прошил TWRP и установил Lineage OS 21. Причём на этот раз всё прошло на удивление легко и просто, только в какой-то момент не сразу сообразил, как закинуть образ LineageOS на SD-карточку, сидя в TWRP. Так что теперь у меня планшет обгоняет по новизне все остальные устройства! По всей видимости, вчера планшет некорректно определился из-за старого шнурка, который болтается в разъёме и иногда отходит.
Интерфейс Lineage мне сначала сильно не понравился — сильно напоминает Android 6 с его безумной минималистичностью. Потом кое-что понастроил, в частности, шрифты и форму значков, стало поприятнее. Теперь бы только найти ещё ту фирменную картинку Huawei, которая стояла на фоне раньше. Ещё очень непривычно выглядит верхняя область, где включается/отключается WiFi, Bluetooth и прочее: вместо круглых значков теперь используются вытянутые.
Сейчас занимаюсь тем, что переустанавливаю все необходимые приложения. (И просто голова пухнет от необходимости вспоминить всё.) А также устанавливаю то, чего раньше не было, но решил поставить для жизни с планшета. Ещё решил сделать из него «островок тишины», и не стал ставить Telegram (но на в случае острой необходимости залогинился в Web-интерфейсе), и сейчас думаю, ставить ли ВК, или ограничиться только ВК Видео. И конечно же, по-максимуму ограничу уведомления!
Ещё столкнулся с тем, что последние версии Android блокируют доступ к некоторым каталогам. Например, нельзя настроить SyncThing на каталог Download, что я раньше делал для выгрузки всего, что накачал с планшета, на компьютер.

Ещё одна попытка разблокировки планшета

4X_Pro

Сегодня всё-таки решился на платную разблокировку планшета. Нашёл в Сети сайт реселлеров, которые принимают оплату аккаунтов DC-Unlocker за WebMoney. И после часа долгих и мучительных размышлений убедил себя попробовать, во многом из соображений, что WebMoney сейчас принимают всё меньше и меньше, да и доставались они мне в те времена, когда 1 WMZ стоил 30-35 руб. Комиссию, правда, при этом содрали грабительскую — целых 35%.
Но увы, всё пошло не так. Сначала попытался воспользоваться DC-Unlocker, но она после подключения планшета вместо опции считать unlock code за 4 credits вдруг показала какую-то непонятную опцию с TWRP за 15 credits. Я решил, что это — слишком, и решил попробовать другую утилиту того же производителя — HCU. При попытке получить unlock code в ней возникла непонятная ошибка, а вот опция unlock bootloader, на первый взгляд, сработала: планшет перезагрузился и выдал предупреждение, что он разблокирован. Но почему-то программа Huawei Multitool всё равно продолжала писать, что он — заблокирован. Подключил планшет к основному компьютеру с Linux и попытался прошить TWRP через fastboot, но и тут ждало разочарование: образ отказался прошиваться. Попробовал более старые версии — то же самое. Стал разбираться дальше. Оказалось, что у устройств Huawei есть два уровня блокировки: FB LockState и USER LockState. Так вот, у меня разблокировался только первый. Хотя в Интернете утверждается, что первая опция может всё то же, что и вторая, и даже больше, но я так и не нашёл информации, как имея FB Unlocked, получить User Unlocked.
Дальше — больше. В попытках хоть как-то решить этот вопрос, я отформатировал recovery-разделы, и теперь не могу зайти в режим fastboot, чтобы попытаться прошить что-нибудь ещё раз. И теперь не знаю, что делать: то ли потратить ещё 5 WMZ и повторить попытку получения unlock code, то ли вообще забить и смириться, что планшет так и останется на Android 7.

Поднял свой Gemini-сервер

4X_Pro

С подачи Zvezdo4ёtiя вновь заинтересовался протоколом Gemini. Сначала поставил пару нормальных gemini-броузеров, поизучал сам протокол, посмотрел несколько сайтов. Реально то, что я хотел: максимально простой и лёгкий аналог Интернета. Причём оказалось, что на нём можно делать даже почти полноценные форумы! В итоге пришёл к выводу, что нужно начинать его использовать и решил для начала поднять одностраничный сайт (в Gemini их называют капсулами) для idealists.su — просто страницу с информацией о том, кто такие идеалисты.
Но с сервером дело пошло очень тяжело. На localhostе всё запустилось быстро, а вот на VDSах — проблемы лезли буквально отовсюду. Сначала в качестве сервера решил использовать molly-brown, так как это — единственный сервер, который есть в репозиториях Debian. И тут меня ждала первая неприятность. На localhostе у меня Debian testing, где более новая версия molly-brown, в которой можно запустить его от имени root, прочитать файлы сертификатов, а потом переключиться на нужного обычного пользователя. А на серверах — обычный Debian, где гораздо более старая версия, и пользователя сменить нельзя. Не додумался ни до чего лучше, кроме как забросить новый бинарный файл в /usr/local/bin, и запускать его.
Потом выяснилось, что всё напрасно: я забыл о том, что для HTTP у меня настроено проксирование, и адрес idealists.su ведёт не на второй VDS, где висит akkoma, а на первый, откуда пробрасывается на второй через nginx. И я поднял molly-brown не на том VDSе! Пришлось перебираться на первый. Тут я вдруг решил, что вариант с загруженным бинарником — плохая идея, и нужно искать другой путь. В итоге нашёл — разрешить доступ к нужным сертификатам через ACL. Вроде бы всё сделал правильно, но почему-то доступ получить не мог. Сначала думал, что нужно включить поддержку ACL при монтировании файловой системы, ради этого даже перезагрузил сервер, потерял uptime в несколько месяцев. Потом оказалось, что поддержка была включена, просто я не сообразил дать доступ пользователю на вышестоящие каталоги, поэтому он и не мог достучаться до файла.
Когда это решилось, вылезла новая проблема: на самом сервере вроде всё работает, а при попытках подключиться извне — ошибка соединения. Поизучал вывод netstat и обнаружил, что он пишет, что сервер висит только на IPv6. Чуть не сломал мозг, пытаясь понять, как такое получается. В какой-то момент даже сдался, и решил вместо molly-brown поднять Agate, который написан на Rust и потребляет меньше памяти. Но там обнаружилась та же самая проблема: он писал предупреждение, что не может прослушивать IPv4. И это несмотря на то, что в нём в настройках можно явно указать адрес, который слушать!
Я понял, что тут что-то не так, и стал проверять, в чём ещё может быть дело. Очень быстро выяснилось, что на самом деле проблему создаёт firewall (хотя я вообще думал, что он у меня выключен). После этого всё заработало!
Оставалось сделать последний выбор: что всё-таки использовать: molly-brown или Agate. В итоге остановился на первом, так как Agate поддерживает только сертификаты в формате der, а Hestia, наоборот, всё держит в pem. И пришлось бы либо делать автоматическую конвертацию, либо переходить на self-signed.
А вообще, всё больше и больше думаю о том, что мне нужно позиционировать себя как «знатока альтернативных Сетевых технологий и малого Web». По сути, это единственное, что мне по-настоящему интересно… Видимо, так проявляется соционическая ЧИ: а что, можно сделать привычное как-то иначе?

Солнцестояние и чувство потерянной жизни

4X_Pro

Вот и всё, летнее солнцестояние позади. А с ним — и лучшая часть лета. Из-за того, что большую часть времени вынужден сидеть в городе, складывается ощущение, что лето проходит мимо, да и жизнь в целом тоже из-за того, что живу не своей жизнью. Да и в городе на прогулки выбираюсь крайне редко, слишком поздно встаю, и слишком много времени уходит на быт и прочую повседневность. В общем, полнейшее чувство безрадостности и бесперспективности.
Не радует даже сегодняшний приезд в Перово (правда, поздним вечером и всего на одну ночь). Только удивление, насколько я уже отвык от этой квартиры. Хотя ощущение восстановления внутренней целостности именно в плане физического самоощущения всё же есть. А ещё осознал, настолько тут тише, чем на Пресне. Там при открытых окнах всегда слышен фоновый шум. Он вроде бы не замечается на сознательном уровне, но, видимо, нагрузку на психику дополнительную создаёт.

Вторые игры за это лето

4X_Pro

Снова выбрался на настолки, второй раз за последнее время. Играли, в основном, в «Меч самурая» aka японский бэнг и один раз в Codenames. В Codenames в одной команде с Ал.С. и К.Ш., причём Ал.С. была ведущей. В итоге угадали почти всё точно (кроме одного слова в начале) и победили. Хотя и вторая команда показала себя очень неплохо. А вот в бэнг снова не везло. Один раз выиграл за самураев, остальные — проигрывал. Причём в последние два раза дважды оказывался ронином и прогирывал в ноль (игра заканчивалась на мне). Но тем не менее, в целом был играми доволен — всё почти как в старые добрые времена! Только под конец один из участников слегка меня затроллил на тему «приятно было тебя обыграть», что мне несколько не понравилось.

Хаос в жизни

4X_Pro

Опять не успеваю фиксировать всё в блоге: ни настолки в среду, ни вчерашнюю прогулку в Филёвский парк, ни то, что прошёл ещё одну кампанию в Heroes III. Да и вообще, какая-то активность хаотичная совершенно. Делаю много, но ничего не приносит удовлетворения.
Опять скачу с одного на другое. Сегодня, например, нашёл несколько скриптов навесных комментариев на Go (из которых понравился Remark42), потом стал изучать framework под названием Astro. Он во многом похож на Svelte Kit, но с гораздо более естественными путями к файлам и компонентам. Т.е. странице /page2 будет соответствовать файл src/pages/page2.astro, а не ужас вроде /src/routes/page2/+page.svelte. Именно такие сложные пути и превращают Svelte Kit во многом в «стеклянное дерево». Да и выделение JavaScript-части с помощью frontmatter, а не тега script — тоже удачное решение.
И ещё Astro умеет работать с Markdown-файлами «из коробки», вставляя их в нужный шаблон, указанный во frontmatter — примерно так же, как мой проект Preambula. Единственное, что не нравится — это необходимость писать вручную кучу imports. Интересно, неужели нет возможность сделать автоимпорт компонентов по имени, как у классов в PHP по стандарту PSR 4?

Продолжаю экспериментировать с Zulip

4X_Pro

Продолжаю экспериментировать с Zulip. Создал своё тестовое сообщество на zulipchat.com. Первые восторги стихли, но впечатление всё равно остаётся положительным. Пожалуй, из недостатков — только отсутствие возможности закрепить первое сообщение в теме (что было бы удобно для комментирования статей), поддержки хеш-тегов и тега description. А также отсутствия активных и отмеченных как ценные сообщения для всех (есть возможность отметить сообщения звёздочкой, но у каждого пользователя подборка отмеченных — своя). Но в целом как selfhosted-замена Telegram-канала — вполне приемлемое решение. К тому же обнаружилось, что в профиле есть задаваемые поля (при желании можно предусмотреть возможность указывать социотип, ПЙ-тип и т.п.)
Задумался даже о том, не перевести ли на Zulip socionics.me. Но не уверен, во-первых, есть ли в этом смысл, а во-вторых, оценят ли это Keynol и другие участники. Если была бы поддержка ActivityPub, однозначно перевёл бы на него сообщество Идеалистов. А не будь у меня принципа «на своём сайте — свой код», может быть, и этот сайт перенёс.
Ещё недавно подходил к концу оплаченный период хостинга для старых сайтов (openproj, socioclub и тому подобные). В какой-то момент пришла в голову мысль поступить так: перенести их на этот VDS и устроить из него кладбище старых сайтов. А живые проекты — этот сайт, сайт IntB и сообщество идеалистов — перенести на ещё один VDS (взятый на сэкономленные деньги), причём в качестве базы данных для всего перечисленного использовать Postgres. Правда, этот план провалился из-за того, что оказалось, что сюда уже штатными средствами Hestia PHP 5.x не установить, даже самый последний. Его уже удалили из репозиториев. А искать обходные пути как-то не хотелось… Так и пришлось продлевать старый хостинг.

Эксперименты с броузерами

4X_Pro

В очередной раз задумывался о том, что нужно меньше сидеть за компьютером, и больше выходить в Сеть с мобильных устройств. И при этом желательно иметь возможность лёгкой синхронизации вкладок. На мобильнике я уже давно использую Edge, поэтому решил, что и на компьютере нужно переходить на него же.
Но я не был бы собой, если бы просто перенёс нужные настройки, вкладки и залогинился на нужных сайтах. Вместо этого я стал гонять benchmarks, и искать советы по оптимизации. В частности, узнал про то, что в Edge есть встроенная возможность разместить вкладки сбоку, а любой сайт сделать системным приложением, которое можно даже вынести в quicklaunch bar. Потом залез в about:gpu, увидел там, что использование Vulkan API и Skia по умолчанию выключено, и стал экспериментировать, как их включение/выключение повлияет на производительность.
Вечером, наконец-то определился, что всё же перейду на Edge с IronSW, которым пользовался до этого, даже несмотря на то, что Edge не является СПО.
Написал об этом у себя на сайте Идеалистов, кратко перечислил, что понравилось, и тут получил комментарий от пользователя gleb.zhulik комментарий на тему того, что всё то же самое есть в открытом броузере Vivaldi. Решил протестировать, скачал, поставил, понравилось. Почти всё то же, что и в Edge (только режима чтения не нашёл), но при этом это идеологически верный open source! И всё повторилось: опять прогон нескольких benchmarkов и перенос вкладок, настройка синхронизации и т.п. В итоге засиделся до глубокой ночи, тормозил весь следующий день, теперь Vivaldi стал моим браузером по умолчанию везде.

Узнал про Zulip

4X_Pro

Позавчера, сидя на Идеалистах и листая ленту Fediverse, узнал о существовании такого проекта как Zulip. Решил узнать поподробнее, что это такое. И в очередной раз оказалось, что всё уже придумано для нас! Zulip изначально позиционируется как open source аналог Slack. Но в нём реализованы мои идеи мобильного сообщества как сочетания realtime-общения и асинхронного общения в одном месте! Что-то вроде self-hosted стены ВК или канала в Telegram, только ещё с поддержкой деления на разделы (там их называют каналами) и темы, как на форуме . Хотя, на мой взгляд, то, как это деление там устроено, несколько перегружает интерфейс. К тому же я предполагал мобильное сообщество сбалансированным в плане пользователь-центричности (user centrinc) и темо-центричности (topc centric), тогда как Zulip — это типичное темо-центричное сообщество. Там даже отдельной страницы профиля пользователя нет, только карточка, которая показывается при наведении мыши с минимумом информации: имя, аватар, статус в сообществе, и всё. Ни счётчика сообщений, ни поиска всего, написанного автором.
Но есть и недостатки. Во-первых, Zulip сделан на Django+PostreSQL, из-за чего будет весьма прожорлив в плане памяти. Во-вторых, использует client side rendering, и в принципе не будет работать с выключенным JavaScript. Хотя этим страдают многие проекты, сделанные после где-то 2012 года (Zulip появился в 2013), те же Mastodon и Akkoma, например. Но, справедливости ради, следует заметить, что интерфейс там достаточно быстрый и отзывчивый, а на любое сообщение или тему можно поставить внешнюю ссылку, как на полноценном форуме (но реализованы они в формате #/channtel/topic). Правда, не знаю, поддерживается ли возможность читать и писать сообщения в оффлайне. Для Web-версии поддержки PWA нет, но в то же время есть native apps для всех платформ (надеюсь, не на Electron написанные).
В общем, буду изучать Zulip дальше. Но, в любом случае, теперь количество возможных направлений жизни сократилось вообще до четырёх: блоггерство (и сюда же каталог бесплатного софта), инфобезопасность, написание TextCMS 2.0 на базе Preambula, участие в сторонних open source проектах (в первую очередь, HumHub, хотя кто знает, может и в Zulip вклад сделаю).


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

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