Портрет 4X_Pro
Был в Сети 23 апр. 2025 г., 18:14
Мультиблог
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
Как всегда, у меня всё в жизни получается со второго раза. Так было и сегодня с доставкой: на этот раз всё привезли как надо. Только днём был момент, когда увидел, что заказ показывается со статусом «Отменён» и написал в техподдержку с вопросом, почему так. Вскоре после этого пришла SMS с сообщением, что доставка будет с 14 до 23 часов и ссылка на карту. По карте я отследил, когда нужно выезжать, и поехал на квартиру.
Груза было много, поэтому только затаскивание его в квартиру заняло около часа, потом ещё пересчитывали и проверяли, всё ли в наличии. В итоге вроде бы всё сошлось, и я поехал домой. На обратном пути застрял просто потрясающий закат! Жаль, фотоаппарата с собой не было, пришлось снимать мобильником:

В общем, вопрос решился! Правда, потом ещё предстоит съездить в Ногинск и забрать кое-что с пункта выдачи, что не удалось заказать доставкой. Но это, видимо, в четверг или пятницу, а сейчас наконец-то будет несколько спокойных дней. А то уже переживаю, что из-за всего этого «съезжает» главная задача — выпуск IntB 3.05, а также freelance-задачи. Сегодня попытался доделать фотогалерею, но почему-то фото до сих пор не грузятся, даже несмотря на исправление той ошибки, про которую я писал недавно.

День, полный приключений

4X_Pro
Ну и денёк получился вчера! Должны были привезти стройматериалы для квартиры. Но кое-что заказать через тот магазин не удалось, решил закупать через местный. Там была всякая мелочёвка, но поизучав условия доставки на сайте, обнаружил, что стоить эта доставка будет существенно больше, чем я ожидал. Возникла мысль заказать всё самовывозом, приехать в магазин на велосипеде и отвезти самому. Причём стало ясно, что основной заказ доставят сильно вечером, поэтому возникла мысль не тратить время зря, а съездить в тот же день.
Но увы, пока я решал, ехать или не ехать, пока сделал заказ, пока его подтвердили, пока собрался и выехал, было уже 18 часов. Пока доехал до магазина, солнце уже почти зашло. На пункте выдачи оказалось, что заказ ещё только передали в сборку, и меня отправили в магазин найти какого-нибудь продавца и спросить его, как там со сборкой. Задача «спросить» для меня достаточно сложная, и дико переживая, я поплёлся в магазин. К моему огромному удивлению, я с первого раза обратился именно к тому продавцу, который только что закончил сборку моего заказа. Правда, за сантехническими принадлежностями потом пришлось сходить на второй этаж.
И вот, довольный, что съездил не зря, я отправился на квартиру. Правда, не учёл одного: что в состав заказа входило прави́ло — это такая большая металлическая линейка без делений длиной полтора метра (и повезло ещё, что не 2.5, а то бывают и такие). Попытался закрепить её на багажнике, но она скользила. В результате пришлось применить инженерное мышление: засунуть между скобой багажника и этим прави́лом несколько х/б перчаток, после чего оно стало держаться лучше. Ещё я в спешке забыл пакет, чтобы сложить всё остальное. Но тут мне повезло: в состав заказа входило ведёрко, которое идеально вошло в корзину на велике, и все остальные покупки я сложил в него.
Всю дорогу всё стучало и бренчало (тротуары в Посаде находятся в весьма неидеальном состоянии). А ещё периодически слезал с велика и поправлял это самое прави́ло, чтобы не выпало. Но в итоге доехал до квартиры благополучно и ничего не потерял.
На квартире посмотрел, что с основным заказом. Там прямо ссылку на карту присылают, где можно положение машины отследить. Было видно, что привезут его не скоро, и отправился на небольшую прогулку по окрестностям. В частности, побывал на ближайшем озере, посмотрел на звёзды над водой. Потом вернулся на квартиру, стал ждать, когда, наконец, заказ привезут.
Но время шло, а машина перемещалась как-то очень медленно. Только к 22 часам она доехала до Электростали, где были 9 и 10 точки пути (моя была 11-ой). Там ещё час ушёл на разгрузку. И только в 23:08 я увидел, что 10 точка пройдена, обрадовался, что сейчас поедут к нам, как вдруг случилось неожиданное. Машина свернула в сторону Москвы и поехала туда. Ещё какое-то время я сидел в надежде, что это либо какой-то глюк, либо они поехали на склад в Ногинске для дозагрузки, но нет. Впрочем, это вызвало у меня двоякое чувство: с одной стороны, было обидно, что полдня потратил зря, с другой — заказ был большой, разгружать его было долго, и закончили бы где-то к часу ночи. И домой (в смысле, на дачу) я бы вернулся уже глубокой ночью. Плюс неизвестно, как бы среагировали жильцы дома на ночную разгрузку. Поэтому отчасти я даже испытал облегчение. А с третьей — когда я указывал дату доставки, почему-то можно было выбрать только выходные дни. И я боялся, что ещё неделя уйдёт напрасно.
Но главное приключение было ещё впереди. По дороге домой у велосипеда отвалилась педаль. Отец предупреждал, что такое иногда бывает (я в этот раз взял его велосипед, считая, что он в более хорошем состоянии), но я надеялся, что обойдётся. В итоге сначала несколько раз попытался её прикрутить, но через сотню-другую метров она отваливалась снова. Потом — ехать как на самокате, отталкиваясь ногой, но быстро устал и сбил ногу о вторую педаль. В итоге пришлось четыре километра велосипед вести, и только в двух местах удалось немного проехать под гору. Для полного счастья за северной оконечностью Больших Дворов возле склада меня встретила стая собак штук этак на 7-8. Настроены они были дружелюбно, но на всякий случай облаяли.
В общем, домой я добрался где-то в 0:40. Как это ни странно, когда подходил к даче, чувствовал себя вполне бодрым. Но когда оказался дома, как-то резко накатила усталость, еле хватило сил просто поесть и лечь спать. Но даже несмотря на всё это, уснул далеко не сразу — видимо, мозгу было нужно переработать впечатления (то же самое у меня бывает во время поездок).

Дело двинулось

4X_Pro
И всё-таки это случилось! Кажется, сегодня дело с ремонтом новой квартиры двинулось с мёртвой точки. Правда, до октября вряд ли успеют доделать, и на какое-то время всё равно придётся ехать в Москву.

Поторопился с IntB

4X_Pro
Мда, про выход на финишную прямую с релизом IntB я несколько поторопился. Постоянно появляются разные мелкие доделки, которые иногда могут оказаться не такими уж мелкими. Да ещё и биоритмический максимум, похоже, остаётся позади, умственная активность снова идёт на спад, и успеваю меньше.
Например, вчера решил было разобраться, почему перестал работать вывод фотографий из Instagram на главной странице сайта. Сначала думал, проблема в блокировках. Но нет, обычный wget скачивал файлы без проблем по тем же самым URL. Потом несколько часов ломал мозг, пытаясь найти причину. Вроде всё нормально, файлы скачиваются, но на этапе уменьшения что-то идёт не так. Причём проблема есть только при выполнении из под cron, что очень усложняет отладку. Пришлось включать cron в ежеминутный режим, делать отладочный вывод с помощью обычного echo и смотреть, что приходит на почту.
Только так смог установить, что проблема не в путях, а в функции загрузки изображения. Долго не мог понять, что с ней не так. Потом полез в документацию, и там обнаружил, что с PHP 8.0 функции createimagefrom* возвращают не resource, как раньше, а класс GgImage. А у меня в библиотеке, которая отвечает за масштабирование изображения, есть проверка на is_resource, и если она не проходит, то функция возвращает не хеш с данными об изображении, а false. И именно в этом и была проблема (для cron я писал полный путь /usr/bin/php, по которому запускается PHP 8.2, а через сайт или если написать в ком. строке просто php — пока ещё 7.4, который лежит в /usr/local/bin). Причём исправить её получилось только со второго раза — сначала неправильно написал условие проверки. На этом тоже потерял минут десять.
Но всё равно рад, что ту ошибку нашёл, так как она потом бы всё равно вылезла в модуле фотогалереи. И вообще, убеждаюсь, что в том коде, который запускается не напрямую по запросу из броузера, а через всякие cron, асинхронные задачи и тому подобное, обработку ошибок нужно делать даже тщательнее. И писать все ошибки в логи, чтобы потом было проще разобраться, что не так.
Потом обнаружил проблему с откатом редактирования сообщения. И решил автоматизировать получение токена для взаимодействия с VK. А также дополнительно защитить от возможных DoS-атак генератор previews. В общем, похоже, выпуск даже RC отложится как минимум до выходных. Тем более, тут вроде двинулось дело с ремонтом, и я сейчас сижу на новой квартире.

IntB 3.05 — осталось немного

4X_Pro
Вот и всё: разработка IntB 3.05 выходит на финишную прямую. Осталось всего два пункта: доделать фотогалерею, добавить в инсталлятор поддержку PostgreSQL и SQLite и собрать дистрибутив. Причем, скорее всего, решив вопрос с галереей, я сначала соберу и выложу для тестирования Release Candidate с поддержкой только MySQL, выкачу его же на свои сайты, а уже потом займусь адаптацией под эти базы данных.

Халява пришла

4X_Pro
Вчера (вернее, уже позавчера) принял участие в электронном голосовании на выборах мэра. А сегодня пришла SMS, что выиграл 1000 призовых баллов, которые можно потратить на пополнение карты «Тройка». Так что халява от Города снова пришла!
Ещё узнал, что у меня чуть больше 800 так называемых «городских баллов», оставшихся со времён «Активного гражданина». Стал искать, на что их можно потратить. Обнаружил, что среди поощрений есть даже сеанс во флоат-камере (она же камера сенсорной депривации), правда, на него нужно целых 4600. В результате возникла совершенно дикая идея — попытаться сдать нормы ГТО, за которые дают 15000 баллов (думаю, на бронзовый значок я как-нибудь наберу). Но, скорее всего, всё же не решусь…

Постепенно продвигаюсь к цели

4X_Pro
С IntB дело медленно, но верно движется. В списке из 11 пунктов невыполненными остались только четыре. Вчера доделал одну из самых сложных задач — блочные ссылки (правда, на сайты пока не выкладывал) с поддержкой OpenGraph и асинхронной подгрузкой данных.
Но сегодня ресурс закончился. Встал очень поздно с мыслью, что совершенно не хочется делать что-то дальше. Посидел немного в медитации, стало легче. Но потом поехал на новую квартиру (планово), на это ушло много времени, так как из соображений экономии возвращался через Буньково, чтобы не тратиться на такси. К тому же на обратном пути ещё устроил себе мини-прогулку: спустился к водоёму и какое-то время созерцал его и звёзды над ним. Но увы, в полной мере достичь того состояния Внутреннего Безмолвия не получилось.
А сейчас никак не могу определиться: что лучше — устроить себе полный день отдыха, а завтра взяться с новыми силами, или всё же попытаться сделать хоть что-то, чтобы было чувство «день прожит не зря, сделан шаг вперёд». Впрочем, пока писал это, нашёл мелкие недоработки с блочными ссылками и занялся их исправлениями.
Ещё обнаружил, что после обновления шаблонизатор Twig стал потреблять гораздо меньше памяти и работать быстрее. Сейчас каждый скрипт IntB с ним занимает чуть меньше 1 Мб памяти, тогда как раньше — полтора. Непонятно, то ли тут дело в PSR-4 совместимом загрузчике, который теперь грузит только нужные для данного шаблона классы, тогда как старый грузил всё, то ли сам Twig так хорошо оптимизировали, то ли это заслуга PHP 8.2. Но в любом случае, я задумался над тем, а не зря ли я отказался от шаблонизации в MLFW…

Intellect Board 3.05 — быть

4X_Pro
В понедельник принял важное решение: всё же выпустить версию Intellect Board 3.05. Всё-таки с 2019 года (когда вышла предыдущая версия) сделано было немало, и как-то неправильно, что это так и остаётся неопубликованным. Да и когда попытался запустить его на PHP 8.2, обнаружил огромное количество предупреждений.
Но из серьёзных доделок сначала собирался закончить только кураторов темы и фотогалерею. Но потом как-то набралось ещё несколько доработок помельче: интеграция с Telegram (для отправки уведомлений о новых темах и записях в блог), блочные ссылки и, возможно, переделка CAPTCHA. В итоге окончательный список составил целых 11 пунктов (правда, четыре я за сегодня уже сделал, в том числе и адаптацию к PHP 8.2).
В какой-то момент даже начал думать о том, а не реализовать ли на базе IntB движок мобильно-ориентированного сообщества, идея которого приходила мне прошлым летом. По сути, для этого всё есть, нужно только блоговый раздел немного переделать + предусмотреть двухуровневые комментарии.
Но одной из ключевых идей такого сообщества была минималистичная регистрация. То есть от пользователя просят только имя при отправке первого сообщения (даже без пароля и Emailа), а дальше движок генерирует токен OAuth, который хранится на устройстве в cookies, и опознаёт пользователя по нему. И только по желанию пользователь может либо сгенерировать ссылку для входа с другого устройства, либо привязать профили соцсетей. Но увы, IntB для такого не предназначен, слишком многое придётся перделывать.

Заметка в Instagram от September 03, 2023 at 06:26PM

4X_Pro
Сегодня сам собой получился день информационной разгрузки. Сначала сидел дома и погружался в то самое состояние Внутреннего Безмолвия,о котором неловко писал в основном блоге. Потом решил выбраться на прогулку по окрестностям, сходил к Клязьме. И, надо сказать, не зря. Давно не было такого состояния кристальной чистоты сознания, как сегодня!
Но увы, полного умиротворения достичь не получается. Слишком много неопределённостей в будущем, вопросов без ответа. И, главное, нет возможности отложить решение на потом, дождаться момента когда «сойдутся звёзды», и я увижу, что вот это решение — единственно верное...
#прогулка #отдых #клязьма #спокойствие #размышления #осень2023

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

Небольшие доделки IntB

4X_Pro
Кажется, у меня биоритмический максимум. За вчерашний день успел очень много всего.
А под вечер внезапно решил заняться IntB. Начал с малой задачи — скрыть кнопку «Развернуть», если в ней нет необходимости. Потом стал наводить порядок в комментариях, заодно нашёл пару багов с модерацией. И в конце концов решил сделать цитирование через всплывающее меню, как недавно предложил Aksion. Но получилось как всегда: базовый работоспособный вариант сделал быстро, но сегодня полдня возился с разными мелкими доделками. В частности, нужно было сделать так, чтобы меню не вылезало, когда выбранный текст не в сообщении, а где-то ещё. Плюс ещё решил добавить возможность копирования в буфер обмена и отправки ВК. Плюс ещё почему-то много проблем возникло при выгрузке изменений на сайты. Но в итоге работает! Кстати, в процессе написания немало помог ChatGPT, сэкономив массу времени на поиск нужных свойств для DOM-элементов.
С одной стороны, очень доволен сделанным, плюс приобрёл новый опыт. С другой — немного переживаю, что неизвестно, соберу ли когда-нибудь новый дистрибутив IntB, куда всё это войдёт, или это так и останется только на моих сайтах. Ещё нужно бы в блог написать заметку о том, как делать такое меню, но что-то ресурса на это нет.

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

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