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

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


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

t.me/4x_pro

Лог жизни

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


Хаотичная активность последних дней

4X_Pro
Вся эта неделя оказалась наполнена какой-то хаотичной активностью. Вдруг начал пытаться браться за всё, что раньше откладывал. Возможно, повлияло то, что спал сколько требуется и ложился раньше четырёх утра.
В частности, во вторник хотел было сесть за описание собственной методики управления временем и контроля за жизнью. Но дальше заголовка дело не пошло, весь день ушёл на что-то другое. А вечером взялся за другую свою идею: попытался написать бинарный классификатор, который определял бы спам. Но в процессе полезла масса проблем. В качестве базы решил взять Типач. Там среди удалённых сообщений образцов спама предостаточно, и казалось, что уже есть готовая разметка: удалено — спам, нет — допустимое. Решил было экспортировать все сообщения из него в CSV. Но в процессе полезла масса проблем. Во-первых, оказалось, что многострочный CSV не так-то просто импортировать в LibreOffice Calc так, чтобы это прошло корректно. Провозился долго. Во-вторых, оказалось, что если удаляется тема целиком, то статус «удалена» ставится только ей, а не сообщению, и пришлось переписывать SQL-зарпос, чтобы это учесть (да ещё не сразу понял, в чём именно проблема). Во-вторых, часть удалённых сообщений была не спамом, а была либо дублями, либо сообщениями в духе «удалите предыдущее» после дубля. Пришлось вручную просматривать все сообщения, помеченные как удалённые, и проверять разметку. Но самое неприятное было дальше. Сначала оказалось, что Debian не хочет ставить пакет python3-keras, и почему — непонятно. После долгих попыток решить вопрос пришлось делать как не надо — ставить через pip. Но наконец-то поставил, и тут новая проблема: при попытке обучить модель программа падала на этапе деления выборки на тестовую и обучающую. И это при 8 Гб свободной памяти! То ли реально ML — настолько прожорливая штука, что даже 8 Гб может не хватить (при том, что выборка — всего чуть больше 14000 записей), то ли проблемы возникли из-за кривой установки keras. В общем, так и забросил (хотя сейчас есть мысль попробовать запустить на Google Collab, может там сработает нормально).
А в среду я вдруг вернулся к своей давней идее мобильного сообщества. Даже начал писать код, причём не на MLFW, как задумывал изначально, а по принципу минимализма, в духе старых CMS, которые делают ровно то, для чего создавались. И без всяких namespaces, которые меня всё-таки раздражают, хоть я и научился видеть их плюсы на больших проектах. А в качестве базы решил использовать SQLite. Два дня занимался этим, а сегодня снова снесло потоком жизни на бытовые дела. И, кстати, этот же код, наверное, возьму за основу для движка сайта-личного архива. Правда, сейчас идея сделать его как-то потускнела, мотивация пропала…

ИКС падает

4X_Pro
Опять падает показатель под названием ИКС (индекс качества сайта от Яндекса). Сегодня в очередной раз понизили этому сайту (уже до 90), а незадолго до этого socionics.me после долгого затишья упал с 40 до 30. И уже не помню, когда какой-либо из сайтов рос (если не считать того, что xxxxpro.ru вернули +10). Эх, опять мир становится хуже…

Два насыщенных дня и один неудачный

4X_Pro
Опять не успеваю фиксировать всё в блог, отчасти из-за того, что наконец-то стал налаживать режим дня и ложиться хотя бы до четырёх часов ночи.
В субботу очень классно сходил на игры. Играли сначала в «Остров кошек», занял в итоге третье место с очень небольшим отрывом от второго и четвёртого игроков. Разыграл все 6 карт заданий, которые взял. Правда, из-за этого вместо одного большого кошачьего семейства (что, на мой взгляд, самая выигрышная стратегия) сделал три поменьше, что сказалось на результате. Ещё сильно не повезло в том, что один из игроков выложил карту, утраивающую штраф за крыс, которых у меня осталось больше всего — целых 6 штук. В итоге -18 очков вместо -6. А ещё очень повезло, что на последнем ходу заполнил две каюты, про одну из которых и предположить не мог, что получится (вместо этого ломал голову, как заполнить совершенно другую). Впрочем, там один из игроков подсказал.
Потом играли в давно забытое «Нечто». В первый раз игра закончилась очень быстро: я ходил вторым и у меня была карта «Анализ», которую я применил на следующего за мной игрока. Оказалось, что он и есть Нечто. Тот зачем-то развернул ход обратно, а мне после этого из колоды пришёл огнемёт. И я, естественно, его применил. Игра закончилась! Потом сыграли ещё раз, но так и не доиграли — закончилось время работы «Единорога» — заведения, где мы собираемся. Переместились в ближайший Ростикс, но там обстановка для игр не располагает от слова совсем. Но тем не менее, стали играть снова. В тот раз нечто оказалась К.Ш. (причём из-за шума я упустил, как именно её вычислили). Я сидел рядом с ней, Ал.С. передала мне огнемёт, и на своём ходу я бы сыграл его против К.Ш., но в колоде в этот момент оказалась карта паники. Пока ход шёл ко мне, я пытался подсказать игрокам, чтобы сыграли «Упорство», чтобы сбросить или пересадку, чтобы ход дошёл до меня позже, но увы, то ли у них не было ничего, то ли просто не вняли. Итог — из-за карты паники я не могу играть огнемёт, дальше идёт обмен картами и К.Ш. меня заражает. Я начинаю помогать ей, передавая дополнительные заражения с помощью карты «Соблазн» (целых две штуки отдал), потом ко мне пересела Ал.С. и зная, что я — заражённый, применила огнемёт. Поскольку время было уже за полночь, я решил не дожидаться окончания игры, и отправился домой. В целом я вполне доволен результатом!
В воскресенье пошли с отцом на лыжах. Прособирались долго, вышли уже после 15 часов, пошли на круги. Прогулка начиналась как-то тяжело. Только к началу второго круга как-то раскатился и даже стал получать удовольствие. Но ко второй половине, после долгого подъёма за Красным прудом устал, и остаток пути еле доехал. Когда снял лыжи и посмотрел данные геотрекера, стало ясно, почему так: в этот раз я ехал более чем на 1 км/ч быстрее, чем на предыдущих прогулках. Возможно, потому что больше прошёл коньковым ходом (в нормально выспавшемся состоянии проще поймать нужный ритм).
А вот сегодня день оказался неудачным. Встал вроде бы бодрый, выспавшийся, но никак не мог ни на чём сфокусироваться. Всё раздражало. Поэтому ничего не делал, сидел на Клавогонках, прочитал несколько попавшихся на HashNode статей про JavaScript и играл в Prince of Persia 2, под вечер ещё занимался всякими бытовыми делами. И злился, что уже давно нет продвижений по тому, что реально важно: IntB и некоторым другим своим идеям. А сейчас, когда писал это, вспомнил, как в 2005 году главным желанием было жить в соответствии со своими внутренними ритмами, чтобы была возможность ничего не делать, если это сейчас внутренне наиболее гармонично. Но увы, что называется, «охота пуще неволи». Тогда мне хотелось отложить задачи, навязанные мне извне (типа написания дипломного проекта), а сейчас хочу заниматься своими собственными…

Заметка в Instagram от February 11, 2024 at 01:14AM

4X_Pro
На станции #метро #Трубная всё ещё продолжается Новый Год!
А на обратном пути (уже на родной Калининской линии) мне попался новогодний поезд.

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

Жизнь в вечном опоздании

4X_Pro
Пишу это сообщение в электричке в Москву (причём наконец-то смог попасть на «неуловимую» 18:05, но только за счёт того, что опоздал автобус, так как я из дома вышел на 3 минуты позже, чем надо). 9 дней провёл на новой квартире, но вот комп так и не перевёз. В отличие от прошлых заездов, в этот раз ощущения ретрита, когда оставил позади все пробелы и переживания позади и уехал далеко-далеко, не было. Скорее наоборот, все эти дни занимался тем, что разгребал накопившиеся дела. Только вчера вернулось какое-то внутреннее равновесие и спокойствие, то самое состояние Внутреннего Безмолвия. И надо сказать, вчера закончил почти всё запланированное! Из срочного и важного осталось только налоговую декларацию по УСН подать, но это достаточно быстро. Единственное, что не успел сделать из задуманного — это выпустить релиз IntB 3.05. Но даже там продвинулся: переписал модуль поиска через Sphinx. И ещё успел сходить на длинную-длинную прогулку, про которую никак не соберусь написать в Instagram.
В последние дни много размышляю на тему, почему же не получается жить так, как хочется: читать больше умных книг, смотреть познавательные программы, проходить те компьютерные игры, которые упустил в школьно-студенческие годы, реализовывать небольшие проекты (типа очистки HTML-кода или классификатора спама с помощью ML).
Хотя, казалось бы, формально все условия для этого есть, но вот не получается и всё. И что мешает — непонятно. Точнее, понятно: я всё делаю в 3-4 раза дольше своих ожиданий, плюс много времени уходит на переключение (или, вернее сказать, перетекание) из одного состояния в другое. В результате, когда я заканчиваю что-то, вместо удовлетворения «вот, я сделал!» испытываю раздражение «это должно было быть сделано ещё позавчера, а теперь вот не успеваю вот то и вот то». И так постоянно и живу в режиме вечного опоздания.
Ещё недавно задался вопросом, а можно ли в принципе совместить slow life и какие-то значительные свершения на благо человечества (если не рассматривать варианты типа написания картин или стихов, где у меня всё равно нет таланта)? Потому что изучая биографии людей, вписавших себя в историю, я часто вижу упоминания об их фантастической работоспособности или том, как они загорелись чем-то и занимались этим днём и ночью, и не один-два дня, а неделями или даже месяцами. Я так, увы, не могу.

Очередные неприятности с WebMoney

4X_Pro
Сегодня обнаружил, что срок действия моего сертификата WebMoney закончился ещё в декабре. Обычно за две недели присылают уведомление, но в этот раз его почему-то не было. А помнить самому дату продления целых два года — задача по нынешним временам из области запредельного, особенно если заходишь в WM раз в полгода. (Хотя в начале 2000-х я такое умудрялся удерживать в голове, но тогда и задач в жизни было меньше, и поток информации не такой интенсивный, и сертификат продлевался раз в год.)
Попытался было войти по логину/паролю, но обнаружил, что помню только общую логику построения этого пароля, но не помню, куда вставлять дополнительные символы и какие они должны быть. А это давало несколько сотен возможных вариантов с вводом CAPTCHA после каждого.
Попытался было восстановить пароль. Но несмотря на доступ к телефону, почте, наличие старого сертификата и т.п. отправили на полную процедуру, где нужно писать VideoID (что мне очень не нравится), либо ехать в оффлайновый офис (интересно, они ещё остались в Москве?). В итоге сильно расстроился, т.к. на WM-аккаунте сумма хоть и небольшая, но такая, что просто бросить жалко.
Потом всё же нашёл пароль, смог зайти, но ещё куча времени ушла на то, чтобы выяснить, как теперь сгенерировать новый сертификат. Потом всё же выяснилось и это, но на этапе генерации возникла непонятная ошибка. Впрочем, это уже не в первый раз, два года назад тоже были проблемы. Тогда вычитал, что для корректной работы в FireFox нужна какая-то очень старая его версия, но ставить, естественно, его не стал, а перезагрузился в Windows на старом ноутбуке (том, который потом домашним сервером стал) и сгенерировал сертификат в нём, а потом — экспортировал. Но сейчас такой возможности нет, разве что достать свой совсем старый компьютер (и то только когда приеду в Москву).

Ответ на вопрос «Это я плохой или Интернет испортился» найден

4X_Pro
Кажется, в вопросе «это я плохой (в смысле, контент делаю менее качественным, чем в 2006-2007 годах) или Интернет стал хуже», который не даёт мне покоя уже несколько лет, появляется некоторая определённость. Дело всё-таки не во мне, а в Интернете, где всё сложнее стать сколько-нибудь заметным без денежных вложений, просто по принципу «пиши и выкладывай», особенно на своём сайте, а не на централизованных площадках. В последние дни прямо какое-то оживление наметилось, да и люди отзываются о том, что я сделал положительно. В частности, на socionics.me недавно один ЛИИ очень хорошо оценил пирамиду типологий (правда, уже не раз убеждался, что только ЛИИ в полной мере эту идею оценивают, видимо, для остальных это слишком навороченная БЛ). То есть проблема всё же не в том, что я стал писать хуже, а в том, что до моего сайта всё же слишком мало людей доходит. Но что с этим делать — так и остаётся непонятным.

Зимняя спячка

4X_Pro
Какое-то безресурсное состояние в последние дни. То ли усталость от зимы накопилась, то ли выгорел от слишком большого количества времени вне дома (получилось 9 дней подряд). Сплю по десять часов в сутки, встаю очень поздно даже по своим меркам. За оставшуюся часть дня пытаюсь как-то разгребать накопившиеся дела, но всё движется очень медленно и тяжело. Да и Welltory показывает результаты не очень: энергии даже после подъёма не выше 66%, а в рабочее время — от 40 до 55.
В частности, два дня с лишним возился с тем, чтобы настроить поиск с учётом морфологии с помощью Sphinx на этом форуме и официальном форуме IntB. И это при том, что изначально почти готовый конфиг для него написал ChatGPT. Но постоянно что-то шло не так: то searchd отказывался запускаться автоматически, то пришлось переделывать обращение к Sphinx из IntB, так как Native Sphinx API устарела, то ещё что-то. И только вчера вечером наконец-то заработало! Так что теперь не чувствую себя отставшим от жизни из-за того, что по сайту нет нормального поиска… Только, как всегда, переживаю, что это надо было сделать ещё несколько лет назад, а руки дошли только сейчас, и то с подачи Corsico, которому обещал сделать похожую задачу, но для поиска по ЛС. (Кстати, от него я про Sphinx и узнал когда-то.)
Ещё окончательно перевёл SuperMon_bot на Python 3.11. Как всегда, без проблем не обошлось: забыл установить пару модулей, из-за чего логи переполнились сообщениями об ошибках. Конечно, мы с GoRo это поймали, но определённый downtime всё же был, и это неприятно… Всё-таки нужно либо искать, либо писать самому утилиту для мониторинга скорости роста логов. Но писать её нужно либо на C, либо хотя бы на Go… И не верю в то, что никто прежде такого не делал!
Хотел было сделать ещё одну заметку в Instagram, с выводами от поездки в плане самопознания, но так и не сложилось, а сейчас уже как-то и поздно. Запишу только основной вывод: чтобы быть travel-блоггером (о чём я иногда мечтаю), мне пришлось бы бросить свои проекты и уйти на Рестарт. Иначе уже через пару дней начинает копиться то, что тянет меня назад: сообщения, на которые надо ответить с компьютера, какие-то доделки по сайтам, freelance-задачи и т.п. Ну и плюс публиковать заметки хотя бы вечером того же дня (не говоря уж о реальном времени) — для меня задача малопосильная…

HTMX возрождает мою веру в Web-разработку

4X_Pro
Мда, снова убеждаюсь, что всё уже придумано до нас. Недавно в канале IndieWeb увидел упоминание библиотеки HTMX. Сначала думал, что какая-то очередная React-подобная гадость. Но решил узнать подробнее, что это такое, и оказалось, что как раз таки нет. Она реализует тот же подход, который я задумывал в 2021 году, когда начинал делать интерфейсную часть для своего движка сообщества: позволяет задавать через data-атрибуты то, как надо реагировать на пользовательские действия. Вот простейший пример: <button hx-post="/clicked" hx-trigger="click" hx-target="#parent-div" hx-swap="outerHTML">Click Me!</button>
И главное, весь рендеринг делается на сервере, как и должно быть! На клиенте только полученный кусок вставляется в нужное место (указанное в hx-target) и всё. И всё это в gzipped-виде занимает что-то порядка 14 Kb, если верить официальному сайту. И ещё есть возможность задавать, на какое именно действие реагировать (например, вместо клика можно повесить это на onmouseout, чего у себя я не предполагал в принципе).
В общем, HTMX возродил мою веру в возможность возврата к нормальному Интернету!
А моё бессознательное, видимо, ещё тогда, в 2021 году понимало, что, скорее всего, есть готовое решение, поэтому заблокировало идею писать подобное самому. Жаль только, что узнал о нём я спустя аж два с половиной года…

О личной неэффективности

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

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

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