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

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


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

t.me/4x_pro

Лог жизни

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


Сносит потоком жизни

4X_Pro
В среду опять всё пошло не так. Опять день начался с телефонного звонка, причём от спаммеров из какой-то клиники. Эх, надо было дослушать название, и написать негативные отзывы на Яндекс.Картах и Google Maps. А ещё через форму обратной связи отправить что-нибудь вроде «увольте нахрен вашего маркетолога, он вам репутацию портит». Уснуть снова я не смог. Равно как и заниматься чем-либо полезным. Только пришла в голову идея переделать в галерее форму создания темы, чтобы сосредоточить внимание именно на фотографиях. А также добавить возможность делать описание для каждой фотографии и выбирать обложку. Но идея пришла, а реализовать не получилось — был совершенно в нересурсном состоянии и злился на всё вокруг. Попытался было пойти на прогулку, но не сложилось. Единственный плюс — лёг спать по своим меркам очень рано: около 1:40.
На следующий день случилось маленькое чудо: проснулся рано и бодрый! Но увы, день всё равно прошёл мимо. Пришла SMS, что два заказа, необходимых для ремонта, готовы к выдаче. Но был ещё один, который тоже был нужен срочно, и без которого ехать особо не было смысла. В результате несколько часов не мог определиться, ехать или не ехать. Но потом привезли и третий заказ. Потом отправился в Ногинск.
Без приключений не обошлось! Забирать заказы нужно было с двух разных мест. До одного легко можно добраться от автобуса, а на второй ехать с пересадкой. Но маршрутки туда ходят раз в час, и пересесть я не успел. Пришлось на ходу изучать Яндекс.Карту на предмет того, какими другими способами можно добраться. И таки решение нашлось, но пришлось идти пешком около километра. Когда добрался, выяснилось, что на пункте выдачи мой заказ положили в постамат. Но вот кода от него мне не пришло! Пришлось обращаться в центр поддержки клиентов или как он там называется. К счастью, вопрос решили достаточно быстро, но переживаний было много!
На втором пункте выдачи всё прошло легко и хорошо, если не считать того, что я нашёл его не сразу, так как на вывеске было написано Ozon, а по факту, там три в одном: Ozon, Boxberry и PDP. Но сам заказ был объёмным (строительный тазик на 65 литров и полотенцесушитель), поэтому я сдался и решил ехать не на автобусе, а на такси. Увы, к этому времени уже наступил вечер и время повышенного спроса. Так что такси обошлось дорого, и если просчитать все расходы, то окажется, что по сравнению с тремя доставками я сэкономил максимум рублей 300. Но тут вопрос чисто психологии: платить за доставку больше, чем за сам товар (а с тазиком было именно так) я морально не готов в принципе.
Приехав домой, собирался наконец-то заняться форумным движком дальше. Хотя бы сделать возможность задавать размер фото в галерее отдельно от размера previews в обычных разделах. Но всё опять пошло не так. Сначала очень интересно пообщался с одним человеком на тему Intellect Board, IndieWeb и вообще того, почему Интернет не стал тем, чем должен был стать. Потом решил исправить недавно выявленный баг на socionics.me с редактированием профилей. Но потом выявилось ещё несколько помельче. Плюс обнаружилась странная особенность: если включит отладочный режим, InstantCMS работает, если выключить, то падает с ошибкой 500. Причём нигде в логах не удаётся найти, что именно эту ошибку вызывает.
Провозившись с этим пару часов, уже собрался было спать и отправил компьютер в режим ожидания. Но через десять минут вспомнил, что хотел было проверить, работают ли в блогах и фотогалерее IntB теги. Включил обратно и обнаружил пропущенный звонок в TG от DarLik и сообщение, где говорилось, что у неё что-то срочное. Спросил, что случилось. Оказалось, довольно серьёзные неприятности. Потом ещё пару часов её успокаивал, уговаривал не паниковать и не творить всяких бессмысленных действий, которые кроме расходов, ничего не дадут.
И спать лёг в 6 утра с лишним. Теперь снова не выспался и торможу весь день. Никак не могу определиться, стоит ли воспользоваться хорошей погодой и пойти на прогулку, или же ограничиться тем, что пожарить шашлык у дома и пожечь мусор в бочке, а потом засесть снова за форумный движок.

Почти доделал галерею

4X_Pro
Сегодня опять день начался с телефонного звонка и получился бестолковым. Разбудили меня около 11 часов, но потом ещё очень долго лежал в непонятном состоянии: то ли сплю, то ли нет. Вылезать на холод не хотелось, но хотелось пить, что у меня всегда способствует раздражительности. В итоге встал очень злой и недовольный.
Большую часть дня не мог ни на чём сосредоточиться. Немного позанимался фотогалереей для IntB, но дело шло плохо. По сути, только чуть доработал внешний вид. От этого стал злиться и раздражаться. Посидел было в медитации, но помогло не очень.
И только совсем вечером получилось как всегда: уснул на пару часов в эффективное время (с 22 до полуночи), а теперь за три часа успел сделать очень много! Галерея почти работает, осталось только сделать догрузку фото (и проверку того, что они умещаются в лимит по file_upload_size), вывод количества фото в теме и возможность создавать фотосеты без названия и описания. Ещё обнаружил, что в блоге и галерее не было предусмотрено вывода локальных правил форума. В общем, всё-таки дело движется к релизу, хоть и очень медленно.

Груз получен — со второго раза

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 для такого не предназначен, слишком многое придётся перделывать.

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

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