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

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


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

t.me/4x_pro

Лог жизни

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


Запустил 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. И настроился было лечь спать пораньше, но в итоге получилось как всегда: только сейчас собираюсь выключить компьютер.

Спад продолжается

4X_Pro
После слишком активной недели, когда безвылазно дома я провёл всего два дня: пятницу и воскресенье, наконец-то возникла возможность замедлить жизнь и отсидеться дома. Ничем полезным, правда, заниматься не получается, все ресурсы уходят просто на то, чтобы прийти в себя. Да и биоритмический спад продолжается.
Только вчера с 10geekом обсудили его CSS framework. Получилась очень годная стилизация форм, и теперь я планирую начать его использовать при разработке своих проектов на базе MLFW. Только вот гостевую опять переделывать придётся, хоть и не слишком много.
Ещё возникла мысль перевести/дописать несколько своих статей об оптимизации времени загрузки сайта из профблога и опубликовать их на Hashnode. В частности, по тому, как улучшить показатель CLS (content layout shift). Они по формату и тематике вполне там будут уместны! И шансы быть замеченным там достаточно существенны.

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

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