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

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


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

t.me/4x_pro

Лог жизни

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


Полдня оффлайна и падение сайта

4X_Pro
Мда… Стоило устроить себе полдня оффлайна, как посыпались проблемы. Включил Интернет, и обнаружил сообщение от 10geekа о том, что сайт идеалистов лежит с ошибкой 500. Стал разбираться, и оказалось, что дело было вот чём: я решил для Postgres немного уменьшить лимит памяти, а то он забрал больше 1 Гб, из-за чего начался swap и медленная работа сайта. Прописал в конфиге для одного параметра значение 512Mb. А оказалось, что Postgres корректно воспринимает значения, только если обе буквы заглавные, т.е. нужно было писать 512MB. А я вместо полноценного рестарта Postgres после правки конфига сделал systemctl reload, поэтому тогда это не всплыло. А сегодня ночью написал в техподдержку просьбу разблокировать порты для почты, после которой они, видимо, сервер перезагрузили, и из-за этой ошибки Postgres не стартовал.
Теперь добавил сайт идеалистов в SiteKnockerBot. Впрочем, даже если бы сделал это раньше, всё равно бы не особо помогло: я же полдня сидел в оффлайне.
А ещё ломаю голову: уместно ли написать в сообщество заметку «как глупо уронить Postgres», где в более кратком формате рассказать про эту ошибку в конфиге, или не очень, с учётом того, что она уйдёт в Fediverse. Эх, вечная моя проблема: оценить, что уместно писать, а что будет не в тему…

Учусь жить без планов

4X_Pro
Прихожу в себя после пуска сообщества. И снова учусь жить без планов, в режиме открытости тому, что принесёт река времени, жизнью, про которую есть замечательная цитата: «Каждое утро тебя встречает день, в котором ты никогда не был. Каждое утро тебя ожидает мир, который ты никогда не видел.» Так непривычно! Но хорошо, нет постоянного мучения своего третьего Будущего по темпористике различными «надо, надо, надо, а то столько времени прошло, а ты так мало сделал»!
Весь день прожил в режиме slow life. Впервые с весны побегал на дорожке, разобрал закладки в броузере (снова думаю о переходе под Edge, всё-таки синхронизация с мобильными устройствами — штука полезная, а Iron этого не умеет). Поизучал Web-клиенты для Fediverse, нашёл даже такую экзотику как Brutaldon — клиент для броузеров типа lynx, links или dillo. Правда, с Akkoma он не заработал, в ней сработала защита от CSRF. Потом наконец-то определился с компьютерным столом и креслом для новой квартиры и сделал заказ. И просто много сидел и размышлял. В ближайшее время, наверное, буду всё же приучать себя меньше времени проводить за компьютером, а больше выходить в Сеть с мобильных устройств. Они всё же не так цепляют внимание, возможно, из-за отсутствия многооконности. (Хех, я это собирался делать каждый раз, когда планировал покупать мобильник или планшет.)

Размышления об игре Sir Brante

4X_Pro
В очередной раз перепрошёл игру Sir Brante, в этот раз за заговорщика. И совершенно неожиданно для себя получил отличный результат: и Аркнийская империя устояла, но с позитивными переменами и торжеством закона для всех, и у большинства персонажей жизнь хорошо сложилась. Исключением были только Софья и Мейер Эгмонт, которых, увы, пришлось вынужденно принести в жертву. Правда, сыграл я совершенно не так, как планировал сначала…
Вообще, странное дело: хотя изначально, ещё читая описание этой игры, я думал, что при прохождении буду стремиться к спасению империи. Но прежде всегда получалось так, что вставал на сторону сил прогресса, желающих изменений: судей, ограничивающих произвол дворян, новой веры, отвергающей Уделы, реальных бунтовщиков.
И вообще, при прохождении не раз замечал, что есть моменты выбора, где все варианты даются одинаково легко, а есть такие, когда выбор нужного для задуманного прохождения варианта требует определённого насилия над собой. Видимо, так и можно выявлять свои ценности.
Но чем меня больше всего удивляет эта игра, так это тем, что в конце игрок выступает в роли божеств, вершащих суд над главным героем. И можно сыграть ужасно, развалить всё, что только можно: и дело, и семью, и спровоцировать восстание в самой кровавой форме, но при этом решить, что персонаж достоен вечного блаженства.

Сообщество Идеалистов Интернета запущено!

4X_Pro
В субботу запустил своё сообщество идеалистов! Первый пуск с 2018 года, если считать только новые домены (ещё был перезапуск xxxxpro.ru в прошлом году).
Долго не мог определится с названием домена. Изначально, ещё в 2021 году, я хотел взять адрес idealisty.net. Но регистрировать домен в зоне .net дороже и сложнее, поэтому в последний момент пришла в голову другая идея — взять домен idealists.ru.net и переименовать сообщество в «Идеалисты Рунета». Решил обсудить эту идею с 10geekом и участниками чата. 10geek предложил идею idealists.su, потом эту идею поддержала goblincat. И в итоге я решил, что правильное написание и «самый коммунистический домен» для такого сайта — вполне хорошее сочетание!
Запуск шёл вполне нормально. Я создал свой аккаунт, выложил те сообщения, которые подготовил за последние дни, создал двух ботов: Idealists — для общих новостей сообщества и Catalog — для каталога бесплатностей. Его я тоже решил делать не отдельным сайтом, а внутри сообщества. Правда, для этого придётся пожертвовать социальными функциями и автоматической проверкой ссылок…
И вот пуск состоялся! Остался только последний крошечный шаг — перенести свой профиль с lor.sh. Но вот тут-то и полезли проблемы.
Началось всё с того, что я не мог прописать alias в свой профиль для переноса. Стал искать причины, разбираться, что сервер отдаёт при просмотре моего пользователя. И оказалось, что зря я сначала делал сайт на временном домене третьего уровня (idealists.4xpro.ru)! Теперь этот домен оказался «прошит» в идентификаторе пользователя.
Пришлось менять его прямыми запросами к базе данных. Но дальше — хуже. После того, как это сделал, пропали все опубликованные сообщения. Стал разбираться, и оказалось, что идентификаторы там тоже привязаны к домену. Более того, в базе в одних местах идентификаторы они хранятся как строки, в других — лежат в массивах или JSON.
Пришлось на ходу изучать структуру базы данных Akkoma и разбираться в работе с JSON и массивами в Postgres. С JSON сначала напутал, и в итоге сначала получилось, что в базе настоящего JSON стала храниться строка, содержащая экранированные данные. Пришлось разбираться, как преобразовать это дело обратно.
После где-то полутора часов вроде всё сделал правильно, но сообщения так и не появились. Долго ломал голову, пытаясь понять, что же не так. По несколько раз перепроверил каждую таблицу в базе, написал несколько новых сообщений, чтобы посмотреть, в чём будут различия. Но без толку!
И только спустя два часа совершенно случайно заметил, что случайно в один из столбцов с обычным текстом в конец адреса пользователя добавил кавычки! Видимо, ошибся после того, когда спасал JSON в других столбцах. Когда исправил, сообщения появились. А ещё починилось редактирование сообщений. Но это уже была глубокая-глубокая ночь.
После этого осталось только закончить перенос аккаунта (там тоже пришлось в базу залезть вручную) и смотреть, как начала наполняться federated-лента…
Так что всё, теперь у меня есть не только сайт с поддержкой IndieWeb, собственный узел i2p и yggdrasil, но и собственный instance Fediverse! А ещё сервер синхронизации данных, и даже в какой-то момент поднимал собственное облако на NextCloud, но потом отказался. В общем, как сейчас принято говорить, полная цифровая автономность! Разве что ещё свой сервер Matrix поднять осталось, впрочем, я Matrixом всё равно не пользуюсь.

Знак свыше на запуск сообщества

4X_Pro
В последние дни думал о том, что надо бы установить Akkoma уже на боевой сервер для сообщества идеалистов, но всё никак не решался. Всё время колебался между тем, сделать отдельный сервер, и поставить туда, или добавить памяти на основной. Как вдруг сегодня (вернее, уже вчера) прилетело письмо от TimeWeb о том, что они решили сделать свою «чёрную пятницу», и до 19 часов удваивают скидку при пополнении баланса на полгода или год вперёд. Я решил, что такая халява — это знак свыше для поддержания меня в моём намерении, быстро зарегистрировал ещё один сервер и тут же проплатил год вперёд. Получил скидку в 20%! Причём баланс там общий для всего аккаунта, и даже если я решу избавиться от нового сервера, деньги пойдут на оплату основного.
Потом занялся установкой Akkomы на новый сервер. Прошло всё на удивление легко и хорошо! (Видимо, и правда высшие силы благоприятствуют.) Только на этапе компиляции файла с сообщениями был вылет из-за нехватки памяти. Но я быстро сообразил, в чём дело, сделал swap-файл на 2 Гб, после чего процесс прошёл нормально. Теперь осталось только определиться с доменным именем (хотя я с 2021 года присмотрел один вариант, сейчас пришло в голову ещё два новых), дописать вводные тексты. И, скорее всего, завтра сделаю официальный запуск!
А ещё я воспользовался DALL-E, чтобы сгенерировать логотип и несколько фоновых картинок. Получилось симпатично, но на выходе размер картинок всего 1024x1024, что маловато. И ещё нейросеть часто неправильно прорисовывает глаза.

Разорванность жизни

4X_Pro
Никак не получается переехать окончательно. Всё тормозит этот строительный мусор в кабинете: из-за него не могу купить ни диван (потому что ставить некуда, да и грязным станет быстро), ни компьютерный стол (потому что его нужно покупать с учётом размера дивана). Из-за этого на новой квартире приходится сидеть за старым столиком, очень низким и неудобным.
Из-за этого езжу то туда, то сюда. В частности, последний раз заезжал на квартиру в воскресенье. Наконец-то сделал то, что хотел ещё с момента покупки квартиры: помыл окна в кабинете и спальне, благо высшие силы мне благоприятствовали, обеспечив температуру 10 °C в ноябре, при которой мыть окна вполне комфортно.
И впервые подключил проводной Интернет. Правда, он оказался весьма не впечатляющим — 22 Мбит/с даже на проводе (при том, что в тарифе заявлено 60 Мбит/с). Но, возможно, проблема не в провайдере, а в старом роутере, который и раньше-то выше 40 Мбит/с не тянул, потому что железо не позволяло. А во время ремонта ещё и пыли наглотался, и скорее всего, сейчас перегревается. Да ещё и какие-то глюки с DNS-серверами, которые провайдер даёт через DHCP: первый из них просто не отвечает, поэтому name resolving делается через второй с ощутимой задержкой, что раздражает. Попытался прописать в настройках роутера публичные сервера 1.1.1.1 и 9.9.9.9, но без толку. Так и пришлось идти путём костылей — прописывать их непосредственно в настройках компьютера. После этого задержки исчезли.
И стоило выйти в безлимитный Интернет с компьютера, как всё вернулось на круги своя: стало ни до квартиры, ни до видов из окна, Интернет поглотил внимание целиком и полностью. Причём я ничего серьёзного не делал, только поэкспериментировал с броузером Edge под Linux (да, и такое существует). В целом он даже мне понравился, но память жрёт активнее, чем Iron, поэтому переходить на него не буду. Да и встроенного блокировщика рекламы там не нашёл.
Тем не менее, во вторник выбрался на прогулку к Клязьме. Но слишком поздно, уже когда солнце заходило. Из-за этого даже сосновый бор казался мрачным и неприветливым.
Потом попытался собрать стол для гостиной. И даже почти получилось. Но потом обнаружилось, что нужно кое-где просверлить отверстия для шурупов, а свёрла куда-то делись: то ли на даче остались, то ли куда-то завалились во время ремонта кладовки. Так и лежит до сих пор стол в полусобранном состоянии.
В среду, наоборот, успел поймать момент, когда выглянуло солнце. Выбрался буквально на 10 минут (и даже не на прогулку, а по другим делам), но реально было такое чувство радости и лёгкости! И ещё тишины, которую нарушали только птицы. Что-то подобное я испытывал в марте, в первый приезд, когда ещё смотрел квартиру в Филимоново, но не сложилось.
И тогда же, в среду, поехал обратно в Москву. Из-за этих постоянных переездов чувствую какую-то разорванность жизни на две части, ни в одной из которых не могу ничем нормально заниматься. Время уходит неизвестно куда, и нет ощущения прогресса, движения вперёд.

Развернул направление трансляции блога

4X_Pro
Решил развернуть трансляцию: если раньше писал у себя на сайте, а потом это автоматически транслировалось в ЖЖ, то теперь будет наоборот. Это даст возможность использовать мобильный ЖЖ-клиент и писать сообщения в оффлайн-режиме. Это сообщение будет первым, которое так отправится. Правда, ради этого придётся пожертвовать тегами…
Конечно, идеологически правильно было сделать из своего сайта PWA с оффлайн-кешированием. Но времени это займёт много, а плюсов, кроме опыта и некоторого чувства гордости собой, никаких не даёт. Тогда как трансляцию из ЖЖ я сделал за пару минут через IFTTT. (Даже пароль дольше восстанавливал.)
Интересно, когда и почему всё-таки так поменялось моё мировоззрение, что сэкономить время стало важнее, чем сделать самому? Впрочем, на вопрос «когда» вполне могу ответить: после Великого Выгорания, когда понял, что силы весьма и весьма ограничены, а написание и, главное, отладка любого кода занимает в разы больше, чем кажется сначала. И поэтому сделать самому всё, что хотелось бы, никогда не получится.

Избавляюсь от неопределённостей

4X_Pro
Несколько дней после возвращения в город прожил в режиме полярной ночи, безвылазно сидя дома. Режим слетел так, что просыпаю почти весь световой день, и только когда темнеет, начинаю какую-то активную деятельность. Но несмотря на это, успевал достаточно много, правда, в основном, всяких второстепенных дел типа бытовых вопросов или мелких исправлений на своих сайтах.
Но зато стали уходить неопределённости, которых слишком уж много было в последнее время. Во-первых, окончательно решил делать сообщество идеалистов на Akkoma и, отчасти с подачи сэра Мика, понял, каким будет формат сообщества. Если совсем кратко, то буду писать туда более сжато, отчасти даже Twitter-подобно. Длинные статьи, которые уже есть (или будут) на этом сайте, дублировать не буду. Вместо этого буду выкладывать основные тезисы или ключевую идею + ссылку. Ещё продумал систему хештегов. Правда, выяснилось, что в Akkoma не предусмотрено возможности вывести список либо активных, либо избранных хеш-тегов. И ещё всё же решил создать отдельный аккаунт именно сообщества, в котором публиковать материалы, касающиеся самого сообщества и вопросов, кого можно называть идеалистами. Но до сих пор не могу решить, как лучше поступить — взять под сообщество отдельный VDS или поднять тариф на уже существующем. По деньгам это более-менее одинаково, но, как выяснилось, на том тарифе, который хочу взять, процессорное ядро дают всего одно, и не уверен, будет ли его хватать для всего. Сейчас иногда SiteKnockerBot выдаёт ошибки доступности, но вызваны они проблемами на основном VDS или тем, что не хватает ресурсов там, где стоит сам SiteKnockerBot из-за i2pd — не знаю.
Во-вторых, более-менее определился с мобильником. Как это ни странно, вернулся к выбору, сделанному ещё два года назад: Huawei P40. До недавнего времени мне казалось, что он уже устарел. Но поизучав ещё раз обзоры и характеристики, узнал, что там UFS 3.0 есть, и камера до сих пор обходит почти всё из того, что есть в приемлемом для меня ценовом диапазоне. Правда, аккумулятор не особо ёмкий. Но, как пишут в одном из обзоров, у Huawei очень хорошая оптимизация энергопотребления, за счёт чего это не такая уж проблема. Особенно с моей привычкой выключать передачу данных, когда в ней нет необходимости. Плюс отсутствие Google-сервисов, которые, как мне кажется, и являются одним из ключевых потребителей энергии в фоне. Но и тут тоже не могу определиться: то ли купить новый P40 на Ozonе (единственное место, где его ещё продают), то ли б/у P40 Pro через Авито. Второй вариант выглядит и дешевле (20-23 тыс. руб против почти 30), и привлекательней. Но покупать что-то с рук всё же страшно. Плюс ещё вопрос в том, насколько за прошедшее время успели деградировать аккумулятор и флеш-память.
Ещё вновь возвращаюсь к идее развернуть трансляцию своего блога: отправлять сообщения не с личного сайта в ЖЖ, а с ЖЖ на личный сайт. (Выражаясь в терминах IndieWeb, применять PESOS вместо POSSE.) По идее, это будет достаточно просто реализовать через IFTTT и протокол MicroPub аналогично тому, как сейчас сделано с Instagram. И в результате я получу возможность делать записи с телефона через ЖЖ-приложение, а также использовать ЖЖ-возможности типа репостов или ответов отдельным сообщением. Хоть я и негативно отношусь к идее писать длинные тексты с мобильника, но иногда это всё же бывает удобным.
В общем, определённостей прибавилось, но вот того ощущения, что «звёзды сложились» и пришло время действовать, всё ещё нет.

Запустил Akkoma

4X_Pro
Закончил настройку Akkoma на виртуальной машине. Как оказалось, пароль, который был нужен для Postgres, был прописан в файле docker-compose.yml. Дальше оставалось только решить проблему с получением https-сертификата. Сначала хотел идти традиционным путём: создать поддомен на VDSе, получить сертификат туда, потом скопировать его в виртуальную машину и прописать её адрес в файл /etc/hosts для соответствующего доменного имени. Но потом пришла в голову другая идея — пробросить порты 80 и 443 на VDS с ботами через SSH (сайтов на нём нет, поэтому эти порты свободны). Причём сделал это особо извратским образом: ssh запускал не внутри виртуальной машины, а на основной (чтобы не возиться копированием ключей от VDS в виртуальную), но с указанием адреса виртуальной в опции -R.
Но, как всегда, всё оказалось непросто. Почему-то ssh-сервер слушал порты только на 127.0.0.1, и никак не хотел открывать их на внешнем интерфейсе. Сначала я думал, что мешает Apache или firewall. Но дело оказалось не в этом. Оказывается, по умолчанию разрешено пробрасывать порты только на loopback-интерфейс, а чтобы пробросить на другие, нужно прописать в GatewayPorts clientspecified в файле /etc/ssh/sshd_config. После того, как это сделал, всё заработало, и я наконец-то увидел главную страницу Akkoma!
В целом впечатления остались очень даже положительные! Нет главного недостатка Mastodon: контринтуитивной кнопки ответа, которая не показывает форму, куда этот ответ писать, а перекидывает курсор в поле для нового сообщения в левом столбце. И размер сообщения легко выставляется в настройках. А интерфейс создаёт впечатление лёгкого и быстрого.
Поизучав статистику, обнаружил, что в Docker контейнеры с Akkoma (без учёта сервера Caddy) занимают около 400 Мб памяти. В общем-то не так уж и много. В этом случае можно даже не отдельный VDS брать, а поднять тариф на основном до 2 Гб оперативной памяти, и этого должно хватить! Более того, так ресурсы будут использоваться более рационально.
Единственное, что на данный момент не нравится — это невозможность увеличить форму ввода сообщения. И просто интерфейс довольно непривычный. Почему-то светлые темы смотрятся не очень, а вот тёмные — весьма хороши. Также перевод на русский неполный, но это, думаю, поправимо.
В общем, склоняюсь к тому, чтобы реально поднимать сообщество идеалистов на Akkoma. Но сначала поэкспериментирую на виртуальной машине, а то сейчас чувствую просто растерянность какую-то. Вроде площадка есть, но как начать заполнять контентом, что писать — непонятно, даже несмотря на то, что в своё время составлял масштабный контент-план.

Минус баг в IntB

4X_Pro
Мда, только что в IntB исправил очень нетривиальный баг: если у пользователя был одновременно статус и модератора, и эксперта раздела, то модераторские права в некоторых случаях просто не работали. Оказалось, что всё дело было в том, что при запросе, который загружал из базы данных информацию о правах доступа, я просто не прописал условие, что нужно грузить информацию только о статусе модератора, а не эксперта (проверку AND role=\'moderator\' в WHERE-части). Возможно, потому, что статус эксперта придумал чуть позже, уже после того, как написал ту часть кода.
Хорошо, что Keynol нашёл это на socionics.me и сообщил! А то так бы и ушло в версию 3.05.

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

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