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

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


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

t.me/4x_pro

Лог жизни

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


Ещё одно разочарование: Epycion

4X_Pro
Нашёл вчера ещё один Fediverse-клиент под названием Epicyon. Сначала понравился: он позиционируется как легковесный (насколько это слово вообще применимо к Python), быстрый движок для небольших сообществ, работающий без JS и даже в консольных броузерах. В общем, как раз то, каким и должен быть софт. В какой-то момент даже подумал, а не запустить ли на нём предварительную версию сообщества идеалистов (да ещё и с готовой интеграцией в Fediverse), пока не напишу свой движок.
Но когда попытался запустить, наступило разочарование. Во-первых, как выяснилось, заставить его работать на нестандартном порту без SSL — задача весьма непростая. Но гораздо хуже другое: незалогиненному пользователю на главной вообще ничего не показывается, кроме краткого описания сообщества. И самое плохое — автор, похоже, был каким-то privacy-озабоченным (чего стоит только фраза «The administrator of this instance does not agree to participate in human subjects research, or research to study website policies and practices, carried out by academic institutions or their executors without prior written consent.» в описании сообщества по умолчанию) и сознательно по умолчанию заблокировал индексацию сообщества поисковыми системами. И если бы я не наткнулся в одном из readme-файлов на упоминание об этом, то мог бы долго недоумевать на тему «а чего это меня не индексируют».
Была мысль поднять виртуальную машину и сделать всё как надо, даже сертификат от Let's encrypt получить. Но тут понял, что для виртуализации в целях потестировать то или иное ПО лучше подходит всё же VIrtualBox, чем QEMU. Во-первых, там есть динамически растущие диски, а во-вторых, при клонировании виртуальной машины можно сделать связанный диск, то есть на диске новой машины будут записываться только изменения по сравнению с основной. Это даёт возможность держать машину с почти чистым дистрибутивом, а перед каждым экспериментом делать такой связанный диск. А QEMU диск клонируется целиком. Причём если делать маленький (я для Alpine сделал 4 Гб изначально), его может просто не хватить (как вчера было с Foremом). Ну и плюс от частого копирования целых гигабайт износ SSD получается слишком большой.

Запустил Forem и разочаровался

4X_Pro
Всё-таки у меня получилось запустить forem на виртуалке. Опять всё шло очень и очень непросто. Сначала забыл создать .env-файл, поэтому в процессе сборки образа возникали ошибки. Потом, когда это обнаружил, вылезла другая ошибка — Blocked host. Долго ничего не мог с ней сделать, потом нашёл какую-то статью, в которой давалось решение именно в случае запуска Ruby on Rails-приложения в docker. Но и то до сих пор до конца не понимаю, как именно это сработало.
После этого с диким скрипом и скрежетом (пусть и воображаемым) главная страница сообщества на Forem всё же открылась! Ну и прожорливый же он! На диске занял 6.6 Гб, оперативки я выделил 2 Гб, занята почти вся, и ещё 300 Мб swap используется. И при этом всё еле ворочается! Правда, возможно, дело было в том, что в качестве среды выполнения по умолчанию используется development, а не production, так как сообщества в Сети работают быстрее.
После установки возникла другая проблема: не пришёл Email для подтверждения пользователя. К счастью, я смог найти код активации в логе, который выводится при работе сервера, а URL подобрать почти методом тыка (точнее, покопался в исходниках). После этого я наконец-то вошёл в своё сообщество уже как полноправный пользователь. Но и тут «приключения» не закончились. Во-первых, по каким-то причинам не подгружаются JavaScripts. А во-вторых, база изначально заполнена тестовыми данными, поэтому мой пользователь оказался не первым и не получил админских прав.
В общем, нужно всё-таки писать свой движок сообщества, на PHP, простой и лёгкий.

Необычная настолочная встреча

4X_Pro
Опять меня несёт потоком жизни куда-то мимо. Вчера плохо выспался, под вечер голова не соображала от слова совсем. Решил лечь пораньше. И даже сумел реализовать это решение — лёг в 0:35. Но получилось как всегда: проспал один цикл, и потом почти восьми утра не мог заснуть повторно. Естественно, днём проснулся очень поздно, делать уже ничего не хотелось.
Вечером наконец-то добрался до настольных игр. Изначально хотел сделать это ещё две недели назад, но всё как-то не складывалось. Такое ощущение, что высшие силы как-то неохотно пускали меня на них. И сегодня, пока добирался, всё время попадал к уходящему поезду метро, на который не успевал, что я считаю весьма неблагоприятным знаком.
Игры сегодня получились необычные. Во-первых, собралось довольно много народа: в опросе отметилось около 30 человек. Причём многие из тех, кто ходил на самые ранние встречи 2018-2019 годов.
Сам я добрался очень поздно — около 21 часа с небольшим. В «японский бэнг» aka Меч Самурая на тот момент народ давно собрался, мест не было. Присоединился к небольшой группе из трёх человек, которая стала играть в игру The Mind. Игра мне очень сильно не понравилась: вроде и задача простая (избавляться от карт по возрастанию чисел на них), но играть нужно не друг против друга, а всем вместе на общую победу. По сути, всё сводится к прогнозированию риска того, что кто-то положит слишком большую карту слишком рано, когда у кого-то ещё есть меньше. Но при этом каким-либо образом согласовывать действия или обмениваться информацией нельзя. По идее, тут может помочь теория вероятности, но не сильно. (Например, была ситуация, когда я положил подряд карты 74 и 76, а у одного из игроков оказалось 75, или когда у меня было 98, а у другого игрока — 99, хотя сами по себе эти события достаточно маловероятны с учётом того, что всего карт 100.) А также время реакции других игроков, которое я вообще никак не учитывал,  Поэтому мои ходы окружающие воспринимали как странные, и Яр.Ш.  стал меня троллить на тему, что у меня гуманитарный склад ума, поэтому играть со мной невозможно. Я тогда на него сильно обиделся, хотел даже поконфликтовать, но как-то не сложилось.
Потом присоединился Дж.П., а ещё один участник ушёл домой. Сыграли в Каркассон, причём не обычный, а в «Охотников и собирателей», где правила немного отличаются. (Я в него до этого играл как-то один раз то ли осенью, то ли зимой.) Я очень переживал, что если проиграю, Яр.Ш. затроллит меня окончательно. Но повезло: удачно занял поле в центре, за которое в конце получил 22 очка (и очень повезло, что пришёл нужный кусок карты), и ещё одну из речных систем, которая дала 10 очков. Ну и остальное набирал лесами и реками по ходу игры. В итоге занял второе место (Яр.Ш. был, кажется, третьим), после чего вполне успокоился.
Потом перегруппировались: часть присутствующих ушла играть в CodeNames, часть присоединилась к нам, Дж.П. ушёл играть в «Колонизаторов». Причём в «японский бэнг» сыграли пару раз вшестером — это самый небалансовый вариант игры, где все атакуют самурая, так как у него умножаются победные очки. И тут отличилась Ал.С.: она убедила всех, что играет за ниндзя, но реально была самураем. В итоге жёлтая команда убедительно победила. На следующий раз сёгуном был я. Игра шла хорошо, но никак не удавалось понять, где кто. В итоге проиграли 8:10:9. Потом сыграли ещё, кажется, раза три, но уже всемером, где игра более сбалансирована (к нам присоединилась Liu Art, а с ней вместе играл ещё один участник). Эти игры запомнились меньше, плюс ещё стала сказываться духота и нехватка кислорода. Помню только, что пару раз мы побеждали с перевесом всего в одно очко.
В общем, домой поехал вполне довольный. Попал немного под дождь, но промок не сильно. А вот весь остаток дня опять ушёл куда-то мимо.

Минимум позади и возвращение к идее каталога бесплатностей

4X_Pro
Кажется, выбрался из биоритмического минимума. Вчера вернулся к работе над фреймворком и достаточно неплохо продвинулся: переделал систему работы с событиями на совместимую с PSR-14, предусмотрел возможность навесить обработчики событий на типичные exceptions, и ещё несколько мелочей доработал. А сегодня опять хватаюсь то за одно, то за другое. С подачи 10geek стал проходить на Stepik курс по «белому хакерству».Наткнулся там на массу полезных материалов, один из которых привёл меня на проект Start.Me — редактируемую онлайн-стартовую страницу, во многом перекликающуюся с моей давней идеей инфохаба.
Но оказалось, что стартовых страниц там можно создавать не одну, а целых три, с разными правами доступа, вплоть до полностью публичных и открытых для индексации. Пришла в голову мысль воспользоваться этим и разместить там временную версию своего каталога бесплатностей Интернета. Конечно, по сравнению с тем, каким я задумывал собственный скрипт, получится очень урезанно, но зато это будет хоть что-то работающее уже сейчас, а не через несколько лет. Так что завтра займусь переносом ссылок из локального файла. Заодно и структуру лучше продумаю в процессе.

Экспериментирую с OpenLLM

4X_Pro
Сегодня наткнулся на проект OpenLLM, который создаёт единый API для работы с разными языковыми моделями и решил с ним поэкспериментировать. В целом впечатления не очень: при использовании русского языка в ответе получается сплошная шизофазия. На английском более-менее приемлемые результаты дают модели opt и dolly-v2 (но последняя работает ужасно долго). Но места на диске и оперативки всё это потребляет просто огромное количество! Впервые после покупки нового компьютера столкнулся с угрозой зависания из-за её нехватки (правда, параллельно висел в памяти броузер с десятком вкладок, VS Code, и World of Tanks).
В общем, на хостинг такое не повесишь, да и держать постоянно на своём компьютере (скажем, для каких-нибудь скриптов) тоже как-то слишком затратно. Так что это разве что поставить поиграться, и не более того.
Но вообще, нужно будет как-нибудь вернуться к идее автоматизации соционического типирования по текстам, но теперь уже с помощью таких вот языковых моделей, а не того подхода, который я использовал в 2016 году.

Первый знак Мастер в World of Tanks!

4X_Pro
Сегодня в World of Tanks день начинался ну очень неудачно: проигрыш за проигрышем. Порой складывается впечатление, что стоит активировать «личные резервы» (бонусы к опыту по итогам боя), как ВБР начинает играть против меня. Или тут дело в том, что в Трансёрфинге называют избыточном потенциалом важности — растут ожидания от боя, поэтому итог оказывается обратный. Когда срок действия резерва истёк, ситуация несколько наладилась: результаты остались так себе, но я хотя бы выполнил три основных дневных задачи. Осталась бонусная — нанести урон 25 единицам техники противника. На обычных танках я бы за такое не взялся, но на арте — это вполне реальная задача. Начал выполнять. И в последнем бою показал какой-то просто запредельный результат: знак «Мастер», 8 единиц повреждённой техники (и, как следствие, медаль «Поддержка»), с отличием выполнена последняя задача кампании «Долгожданное подкрепление» (которую я не мог пройти уже не помню сколько) и эта самая бонусная задача. Ещё использовался бонус «опыт x5», в реультате чего я получил более 4000 опыта.

Заметка в Instagram от June 24, 2023 at 11:40PM

4X_Pro
Так получилось, что ближайшие несколько недель проведу в Москве. Воспользовавшись этим, решил возобновить прогулки по тем местам, где перестал бывать, когда началась пандемия. И начать решил с парка Зарядье, потом отправился пешком до Третьяковской. Там меня ждало небольшое, но удивительное открытие: прямо посреди города в фонтане, несмотря на его малую глубину, во всю плескалась утка и совершенно не боялась людей! Интересно, куда она прячется на ночь?
Во время прогулки размышлял над вопросом, правильно ли я поступаю, что переселяюсь жить в Область. Москва — благоустроеннее, но зачастую — даже слишком, и это начинает восприниматься как что-то искусственное. Особенно сильно это чувствуется как раз в Зарядье: вроде и уголок природы в городе, но какой-то ненастоящей, подходящей лишь для тех, у кого нет возможности выбраться в настоящий лес. Тогда как в Области у меня, наоборот, возникает чувство «вот это и есть настоящая жизнь».
С другой стороны, в Москве сложно заскучать: можно целыми днями бродить по разным местам, созерцать жизнь города, и бывают всякие бесплатные выставки, лекции и тому подобное. Но всё это хорошо летом и тогда, когда нет никаких срочных целей и задач, и можно позволить себе встать из-за компьютера и отсутствовать дома целый день. А вот осенью и зимой — слишком мрачно, серо и скучно.
Наверное, мне следовал бы жить так: с января по середину апреля — в Области, потом — на даче до дня солнцестояния, до сентября — в Москве + путешествия по другим городам, сентябрь-октябрь — снова в Области, и в конце октября уезжать во Владикавказ, где более солнечно и сокращение светового дня переносится не так тяжело. И на новогодние праздники — ненадолго снова в Москву. Но увы, слишком уж такое экономически неэффективно…
#москва #жизньвмоскве #зарядье #река #москварека #мост #мосты #видсмоста #размышления #размышленияожизни

Смотреть все фото

День падающих ботов

4X_Pro
Сегодня был день падающих ботов. Проснувшись, обнаружил от GoRo сообщение, что SuperMon_Bot после вчерашнего обновления не работает. Пришлось бросить всё и лезть на сервер выяснять, в чём дело. Оказалось, кончилось место на диске из-за того, что слишком раздулись логи, и некуда было сохранять файл с id последнего запроса. Потом выяснилось, что бота то и дело перезапускает проверяющий скрипт, написанный самим GoRo, который считает насколько активно появляются новые строки в логе. Причём скрипт написан неэффективно и сжирает память и процессор гигабайтами. А после рестарта бот делал запись в логе об успешном старте, и лог рос ещё больше.
С этим быстро разобрались. Я немного доработал бота: во-первых, сделал обработку ситуации, когда в id последнего запроса пустая строка (раньше это вызывало цикл exceptionов, что опять же вело к переполнению лога), во-вторых, сделал счётчик, который увеличивается при ошибках и уменьшается при нормальной работе. И при превышении определённого значения процесс бота завершается с ненулевым кодом ошибки, чтобы его перезапустил systemd, чтобы избавиться от необходимости контролирующего скрипта.
Параллельно с этим выяснилось, что упал и мой VDS, на котором работает SiteKnockerBot. Но тут обошлось без ошибок с моей стороны, были проблемы с физическим сервером у хостера. Через пару часов всё заработало. Кстати, SuperMon_bot, после того, как его починили, даже отследил это и прислал уведомления (в нём есть и функция мониторинга других ботов).
Но к вечеру выяснилось, что хотя бот вроде работает, но лог продолжает расти. Посмотрев, что туда пишется, я увидел первопричину всех происшествий вообще. Оказывается, я обновления загрузил, а модуль dnstwist, нужный для их работы, установить забыл (хотя когда выгружал, крутил в голове «надо сделать вот это»). В результате GoRo добавил соответствующую проверку для тестирования, бот стал сыпать в лог сообщениями о том, что нет нужного модуля. И именно с этого всё и началось.

День YouTube и важное осознание

4X_Pro
Сегодня, отчасти с подачи DarLik, у меня получится день, точнее, вечер YouTube. Посмотрел довольно много разных материалов. В том числе наткнулся на видео про конкуренцию на канале Ольги Демчук. Посмотрел видео, стал читать комментарии к нему, и там попался один очень важный комментарий, который на многое открыл мне глаза:
RinataGrin написал(а):
[…]А по поводу самого Зверя. Мне кажется, что сам Зверь - это такая программка в психике, которая возникла, когда достаточно одаренный, крепкий, сообразительный ребенок попал под давление авторитарного тирана значимого взрослого, боялся его, согласился жить по его правилам, а главное - взрослый пугал и принуждал ребенка соответствовать его ТРЕБОВАНИЯМ и ОЖИДАНИЯМ, и ребенок ИСПУГАЛСЯ, он хотел выжить, и он принял на веру, что тот ОБРАЗ, который транслировал ему этот взрослый, действительно хороший, правильный, потому что будучи ТАКИМ он выживет! Вот и всё. Самое главное здесь - каким бы крутым ни стал этот ребенок, следуя требованиям взрослого, ВНУТРИ СЕБЯ ОН БУДЕТ ЗНАТЬ, ЧТО ОН ТРУС, ОН УЖЕ ПРОГИРАВШИЙ!!! И теперь, всю свою жизнь он будет стремиться получить РЕВАНШ. Сначала он будет следовать требованиям и ожиданиям своего тирана - он даже станет этаким суперменом - и здесь он хорош, и здесь он умен, и здесь он крут и т.п.! И тиран доволен им. И вся его жизнь - это взять реванш, доказать другим, что он не трус, не проигравший, что он крутой! Он достигает в жизни высоких положений. Но люди таких людей не любят. Они чувствуют, что он - не настоящий. А в чем его ненастоящесть? В том, что он показывает одно - какой он умный, крутой, добрый и т.п., а в душе он при этом ЗНАЕТ И ТРАНСЛИРУЕТ окружающим, что он - трус, слабак, не тот, за кого себя выдаёт. И ему все время надо доказывать, что он крутой. Он тратит на это силы, время, он учится, тренируется, соревнуется и доказывает себе через других, что он крут! Отсюда его злость, когда что-то идет не по его, отсюда у него чувство несправедливости, когда кому-то, а не ему выдали премию: "Я столько усилий сделал, столького достиг, я такой умный, а меня не оценили, а оценили этого бездаря!" и т.п.  Есть второй тип людей, который тоже проиграли в самом начале. Этим еще хуже. Они тоже оказались под воздействием тирана и признали своё поражение перед ним в самом начале жизни, тоже хотели соответствовать образу, который требовал от них значимый тиран-взрослый, но не смогли - в силу слабого тела, отсутствия каких-то качеств. И эти люди считают себя дном. Первые - считают себя супер-менами, крутыми, вторые - считают себя слабаками, неудачниками, дном. Но оба эти типа глубоко внутри себя понимают, что ОНИ УЖЕ ПРОИГРАЛИ. И супер-мены проиграли, и слабаки проиграли. Отличие первых от вторых в том, что первые занимаются компенсацией, чтобы выиграть-таки, они жаждут реванша! Но реванш так и наступает. Отсюда получается, что здоровый человек - это тот, кто мог противостоять тирану и не согласиться с его требованиями, отстаивать свою позицию до конца.

Ведь это же верно как про меня (для меня таким невыносимым требованием было соответствие мужской гендерной роли, о чём писал недавно, и вообще меня всегда пытались заставить быть взрослее, чем я был на самом деле), так и про моих противников — «ускорителей жизни». Кстати, вот ответ, почему они со своими целями и достигательством всегда мне казались такими  фальшивыми. А в моём случае существует запрос на другое: чтобы некая значимая фигура дала мне внутреннее разрешение на то, что я имею право этим требованиям не соответствовать. И, желательно, чтобы мнение этой фигуры было значимо не только для меня, но и для всех окружающих, включая тех самых ускорителей, чтобы они не могли втягивать меня в берновскую игру «я вот чего достиг, а ты — неудачник».
Там дальше есть продолжение с рецептом, который, в теории может помочь, но по-моему, просто сказать себе подобное недостаточно:
RinataGrin написал(а):
Но сделать это маленькому ребенку трудно, даже невозможно. Что же им делать? Найти этого взрослого и дать ему люлей! Шучу. Надо найти способ как-то объяснить собственному подсознанию: "Я был очень очень мал, глуп и слаб! Взрослый тиран - был силен, страшен и угрожал моей и не только моей жизни! Я признаЮ, что я СОГЛАСИЛСЯ с тем, что я - глуп и слаб! Я всем своим телом и поведением демонстрировал ПОКОРНОСТЬ. И моё подсознание УВЕРОВАЛО в это! Этот взрослый меня заколдовал, сформировал во мне рефлекс страха и ощущения неполноценности рядом с сильными значимыми взрослыми людьми. И мне нужно расколдоваться, разобусловить этот рефлекс. Какими способами? Ну, во-первых, поняв это. Второе, можно произвести в уме магическое действие - рассмотреть образ, который на меня налеплял тиран-взрослый, разбить его, запаковать части и вернуть его этому тирану-взрослому. Третье, можно осознать свои реальные качества и сильные стороны, и слабые и принять их. Четвертое, заявить себе о том, что я ни в чем не виноват, я не предавал себя, я был просто слишком мал, чтобы что-то понимать и думать - не чем было это делать, мозгов по возрасту не хватало! А это вина самого тирана! И сказать себе: я отказываюсь от каких-либо мыслей о собственном превосходстве и от соревнований (или от мыслей о своей ничтожности). Потому что ЭТО ВЗГЛЯД ТИРАНА НА МЕНЯ! А я забираю себе, возвращаю себе свой взгляд на себя! И внутри меня я сильный, достойный, добрый, умный и душевный человек!  Пятое, отслеживать свое положение тела и не принимать позы покорности, а принимать позы, осанку счастливого человека и расслабленного. - Сформировать таким образом свой новый СОБСТВЕННЫЙ ОБРАЗ! И вести себя соответственно своему образу. (Когда человек соревнуется и доказывает превосходство - он - по обратной связи - себе же доказывает, себя же убеждает в том, что он не хорош: "Раз я доказываю, значит сам не верю в это!"). Как-то так.;

Самый длинный день в году и информационная разгрузка

4X_Pro
Сегодня был день солнцестояния — самый длинный день в году. Обычно я проводил его на даче, с прогулкой к реке и жарке шашлыка. Но в этом году году такой возможности не было. Даже не получилось выбраться к реке, хотя была такая мысль. Зато получился день информационной разгрузки: в Интернет только несколько раз за день выскакивал ненадолго. Только совсем уже вечером вышел нормально и почти доделал то, что обещал GoRo по SuperMon_Bot. И настроился было лечь спать пораньше, но в итоге получилось как всегда: только сейчас собираюсь выключить компьютер.

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

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