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

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


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

t.me/4x_pro

Лог жизни

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


События последних дней, Geek Code и HackerKey

4X_Pro
Опять не успеваю всё фиксировать в блог. А между тем в последние дни произошло немало интересного. Во-первых, с подачи goblincat я снова занялся сайтом Socionics.me и выложил туда черновик моей типологии эволюционных стратегий (это та, в которой семейные/идейные инь/ян аскеты/жизнелюбы). Плюс там ещё зарегистрировался один новый пользователь — Keynol и написал заметку про одну из линеек типологии «Кроме людей» (линейка Власти) с весьма интересными размышлениями про Бездну.
Во-вторых, закончил эксперименты с панелями управления хостингом и даже написал мини-обзор. Видимо, себе поставлю всё же Hestia. Теперь можно считать, что готов к Великому Обновлению сервера (точнее, вообще переезду на другой хостинг). Сегодня даже хотел было приступить, но не сложилось.
А сегодня почти весь день ушёл на неспешное блуждание по yggdrasil-сайтам. Наткнулся на сайт некоего stargrave, из которого узнал про такие явления, как Geek Code и HackerKey. Сгенерировал себе соответствующие:
GIT/GP d? s+: a+ C++ L++ P+ E-- W+++ N? o? K- w-- O? M-- V? PS PE-- Y- PGP t? 5? X R tv-- b+ DI? D+ G 
и
v5sw6hw4/5pr5/6ISWck5edu8ln5Ama6os6UedGcr1bo6/7ga5Ca40geMh5et5 hackerkey.com
и повесил на главной странице своего личного сайта.
Эх, как же там классно: преобладают технически продвинутые люди, которые делятся своими проектами, никакой рекламы, всплывающих блоков и т.п.! И при этом никакого перегруза информацией, истинный slow life! Всё в полном соответствии с моей статьёй о духе Старого Доброго Интернета: сложность подключения и отсутствие возможности коммерциализации являются естественным фильтром, который отбирает сто́ящих людей. Единственный минус — сайты статичные, даже без возможности комментариев, поэтому как-то повзаимодействовать не получается.

Слово о внутреннем критике

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

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

Узнал о закрытии Яндекс.Кью

4X_Pro
Сегодня узнал, что сервис Яндекс.Кью закрылся. Точнее, переведён в режим read only. Печально! Но с другой стороны, высшие силы меня уберегли от напрасной траты сил на него. Ведь в своё время я хотел всерьёз заняться тем, что отвечать там на вопросы для наработки рейтинга.
Но с другой стороны, в Сети остаётся все меньше и меньше мест, где можно задать вопрос в публичное пространство и получить на него более-менее адекватные ответы. Интернет всё больше и больше из средства преобразования мира в сторону взаимопомощи и свободного обмена информацией превращается в просто средство связи вроде телефона. И это — печально!

Заметка в Instagram от July 23, 2023 at 09:20PM

4X_Pro
Лето в самом разгаре. И я стараюсь его не упустить: второй день подряд выбираюсь вечером на короткие прогулки по окрестностям.
#лето2023 #цветы #облака #вечерняяпрогулка #летнийвечер

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

Жизнь налаживается

4X_Pro
После ужасного позавчерашнего дня жизнь начала налаживаться. Съездил на продолжительную велопрогулку (Google Fit начислил 80 баллов), побывал возле Старого и Нового Карпятников. И даже Интернет перестал тормозить, хотя всё ещё далёк от идеального. Снова задумываюсь, не купить ли внешнюю антенну.
Вчера вечером и сегодня занимаюсь испытанием панелей управления сервером. Пока что на виртуальной машине. Заодно и оценил преимущества использования snapshots: гораздо удобнее сделать snapshot чистой системы, и откатываться к нему, чем каждый раз заново клонировать виртуальную машину. Скоро создам по результатам этого отдельную тему на форуме.

Портальный эффект

4X_Pro
Приехал на дачу, и опять сработал портальный эффект: всё, чем занимался до этого, вдруг стало казаться далёким и не особо важным. Зато хоть немного начал налаживаться режим дня. Ложусь около трёх часов, а в субботу даже раньше. Вчера хотел было вернуться к тому, чтобы сделать из страницы на Start.Me каталог сайтов, но так и не сложилось. К моему удивлению, я там (на Start.Me) всё же прижился, и, видимо, краткосрочные списки дел буду вести там. Удобно: при запуске броузера они сразу оказываются перед глазами. Плюс можно заходить и с мобильных устройств и добавлять/вычёркивать дела из списков, не садясь за компьютер. А в Obsidian переносить только долгосрочные планы и список идей из категории «вроде интересная тема, может быть, когда-нибудь займусь».
Ещё внезапно нашлись другие интересы. Решил выяснить, что было раньше на месте нашего дачного посёлка. Отправился в Интернет искать старые карты и таки нашёл. Но ничего примечательного не обнаружилось, видимо, был просто лес. Зато узнал другое: я всегда считал, что старая Владимирская дорога более-менее совпадала с нынешним шоссе Энтузиастов, но оказалось, что это не так. В частности, за Ногинском она уходила к югу и пересекала Клязьму возле нынешнего устья Плотни, видимо, чтобы не делать переправу через целых три реки. И только на карте 1860 года появляется современный вариант, а старая дорога показана как второстепенная. А я и не знал, что столько раз бывал на таком историческом месте!

Перестановка на даче

4X_Pro
С удивлением обнаружил, что уже середина лета! Странное дело: в апреле и мае время тянулось достаточно медленно, а потом понеслось очень и очень быстро. Куда делся июнь, я почти не заметил, а июль, казалось, начался совсем недавно.
Сегодня снова приехал на дачу. Дорога была очень долгой и тяжёлой, поэтому за день ничего не успел сделать. Только реализовал идею, которая пришла мне пару дней назад — развернуть письменный стол в первой комнате. А то ещё в прошлый заезд обнаружил, что за спиной много свободного пространства (вся комната и дверь в коридор), и, возможно, раздражение от долгой жизни на даче вызвано именно этим. Решил поставить стол так, что теперь буду сидеть лицом к стене, а не окну. И ноутбук поставил слева от внешнего монитора, а не справа, как было раньше. Теперь привыкаю к новой расстановке… Вроде чувствую себя спокойнее, но зато лишился возможности делать перерывы, просто глядя в окно.
Хорошо, что я вовремя это отследил! Теперь учту при планировании кабинета на новой квартире. У меня там ещё с весны была мысль купить стол с выступом справа, который как бы визуально отделял компьютерный угол от остальной части комнаты, но тогда она казалась странной. Но теперь, с учётом этого, да ещё после некоторых изменений в планировке (диван в итоге будет стоять не там, где я предполагал изначально), понимаю, что мысль была правильной, и именно такой стол мне и нужен!

Ещё на тему «куда девается время»

4X_Pro
Мда, я и взять и что-то просто сделать по инструкции, не попытавшись поэкспериментировать в духе «а что будет, если» — вещи несовместимые. А потом удивляюсь, куда девается время.
В частности, вчера продолжил проходить курс по «белому хакерству». Добрался до очередного практического задания, которое, как предполагал, сделаю минут за 10-15, так как ничего сложно там не было. Но сначала решил попробовать поместить файл на взламываемый сервер не тем путём, который предлагался создателями курса, а каким-нибудь другим. Минут 30 экспериментировал, но в итоге сдался, и сделал как в видео. (Впрочем, могло бы и получиться, не перепутай я флаги -o и -O у команды wget.)
Потом оказалось, что я поднял один из контейнеров не на той виртуальной машине. И долго не мог понять, почему файл, сгенерированный pupy (не путать с Puppy Linux и Putty), запускается и вроде корректно работает, но сессия удалённого управления не создаётся. Оказалось, что там адрес для reverse shell, если не указать его явно, определяется автоматически. А поскольку дело происходило внутри docker-контейнера, он брался равным 172.что-то там, тогда как мне нужно было коннектиться на другую виртуальную машину по адресу 192.168.что-то там. И я больше часа ломал голову, что не так, прежде чем додумался заново сгенерировать нагрузку и увидеть в выводе команды gen IP-адрес, куда она пытается коннектиться.
В общем, в итоге с простеньким заданием провозился больше двух часов. С одной стороны, больше опыта и глубже знания, с другой — опять чувство отставания от жизни, потому что на эти два часа были другие планы.
Впрочем, может быть и обратный случай. Сегодня, например, выполняя следующее задание, обнаружил, что в список sudo-команд внесён vim, которым сразу же открыл файл с флагом, который нужно было получить. В итоге получилось, что docker-контейнеры запускал дольше, чем выполнял это задание!
А ещё подумалось тут, что разрабатывай я сам подобный курс, я  сделал бы его куда жёстче: специально допускал бы мелкие ошибки, для устранения которых нужно хорошее понимание того, как всё работает, а не просто следование инструкции. Но увы, на свой курс у меня никогда не хватит ни времени, ни самоорганизованности…

Прошёл BookTraveler

4X_Pro
Мда, только закончил (вроде бы) с тем проектом, о котором писал в прошлом сообщении, как навалилась новая напасть. После очередного обновления системы перестал работать qemu, который мне нужен как для прохождения курса по информационной безопасности, так и для тестирования различных движков. В частности, собирался попробовать CalcKey — ещё один Fediverse-сервер.
В результате забил на всё и остаток дня потратил на то, что давно откладывал: сел играть в Book Traveler — один из тех квестов, которые когда-то скачал на torrent-трекере в Yggdrasil. И наконец-то прошёл эту игру! Кстати, думаю, она очень понравилась бы Kitsune, но увы, та сейчас играет только на мобильниках, а есть ли версия под Android — не знаю. И, надо сказать, правильно сделал: поиграв какое-то время, восстановил внутреннее равновесие и вернул спокойствие! Ну и просто удовольствие от того, что завершил хоть что-то.
UPD: а сейчас каким-то чудом всё-таки смог заставить работать и QEMU. Правда, так и не понял, что повлияло. Возможно, то, что, что у меня один из data pools лежит на сетевом диске, который должен монтироваться при первом обращении.

Проект, который никак не удаётся столкнуть

4X_Pro
Опять накатывало «уплотнение жизни», из-за которого долго не писал в блог. Всё началось с того, что взялся за очередную freelance-задачу — оптимизиацию скорости загрузки сайта. Сначала долго не мог заставить себя начать. Потом, когда всё же приступил, обнаружил, что всё плохо — на сервере стоит CentOS с древним-древним Apache, не поддерживающим HTTP/2. Нашёл возможность поставить более новую версию обходными путями, но оказалось, что для поддержки HTTP/2 нужно переключаться из preforked mode в какой-то другой. Почему-то я думал, что там PHP работает в режиме Apache module, который только в preforked и доступен, и не стал этого делать. Вместо этого решил было поставить nginx. Потом вспомнил, что у клиентов установлен ISPmanager, и если я поставлю nginx, то возможность управления сайтами через него может перестать работать.
В этот момент я совсем было расстроился, но потом пришло в голову, что видел, что через ISPManager можно управлять и сайтами на nginx, а значит, где-то в настройках должна быть возможность переключения. После недолгого поиска возможность нашлась. Причём оказалось, что ISPManager может и сам nginx поставить, и автоматически конфиги сконвертировать. Затем решил переключить версию PHP с 5.4 на 7.1, чтобы уменьшить время генерации страницы. Сайт просто вырубился без каких-либо сообщений об ошибках. Покопавшись, я обнаружил, что проблема в том, что в скрипте магазина используется работа через расширение mysql вместо mysqli. Хорошо, что я с этим уже сталкивался, и было готовое решение. Дальше осталось только настроить сжатие, кеширование, включить HTTP/2 и радоваться тому, как резко подросли показатели скорости сайта. Потом для полного счастья включил еще TLS 1.3.
Но увы, радость была недолгой. Оказалось, что горе-оптимизаторы, которые занимались сайтом до меня, применили жульнический приём: отключали часть скриптов, если User-agent содержит Lighthouse. Когда я это убрал, оценка упала чуть ли не до того же уровня, который был изначально. Было жутко обидно. Потом, правда, удалось решить часть проблем минификацией некоторых скриптов и асинхронной загрузкой вспомогательных CSS.
Потом ещё немного повозился с уменьшением CLS (то, насколько «ездит» изображение по экрану при загрузке), переводом картинок в WebP, прописыванием всяких alt, height, width, другими мелкими оптимизациями, и считал, что дело сделано. Вдобавок ещё переписал несколько SQL-запросов, ускорив их почти в два раза, чтобы уменьшить время выдачи HTML-страницы.
В итоге добился показателей порядка 90 даже для мобильной версии, и уже было считал задачу выполненной. Но решил проверить и другие страницы сайта. И там всё оказалось гораздо хуже, чем я ожидал: там показатель производительности просел примерно до 50. Отчасти из-за того, что опять же предыдущие оптимизаторы для главной сделали отдельный CSS без лишних правил, а на остальных грузился здоровенный общий, отчасти — из-за того, что в картинках товаров использовался формат JPEG с неоптимальным сжатием. Пришлось переводить картинки на WebP. На первый взгляд, задача простая, но проблема вылезла оттуда, откуда я её не ждал: с ключом, который использовался скриптом генерации картинок. Почему-то на мобильной версии использовался скрипт от главной страницы, а ключи там были разные, так как использовали inode от файла конфигурации. И я полдня возился, прежде чем нашёл это! Но в итоге всё же картинки на WebP перевёл и хоть как-то улучшил показатели и внутренних страниц сайта.
К этому моменту я уже вместо радости по поводу того, что удалось сделать пусть даже и отдалённый закоулок Интернета легче и быстрее, а значит, сделать шажок к своему идеалу «дружелюбный мир для бедных», стал испытывать злость по поводу того, что никак не могу закончить и вернуться к своим основным задачам: прохождению курса по информаицонной безопасности и разработке MLFW. Но увы, злоключения на этом не кончились. Оказалось, когда я переносил оптимизированный запрос с мобильной версии сайта на основную, я закомментировал оба: и старый, и новый. Но вместо того, чтобы просто вырубить сайт с какой-нибудь ошибкой или просто пустым экраном, это породило весьма неожиданный баг: в карточке товары показывались по одной цене, а в корзину попадали по другой. (В этом магазине в своё время сделали очень кривое решение: в базе хранят оптовую цену, а розничную считают в скрипте, причём код скопипастили в несколько разных мест, поэтому периодически такие проблемы всплывают.)
На исправление этого ушла минута. Но проблема в том, что оптимизацией я занимался ночью, утром ушёл спать, и сообщение об этой ошибке прочитал только вечером, когда сайт уже часов пять провисел в таком состоянии.
Ну и сегодня заказчики выявили ещё одну проблему: полезли ошибки во взаимодействии со СберМегаМаркетом. Причём, судя по логам, наблюдались они ещё 5 июля, до того, как я затеял все эти переделки. Но такой уж я человек, что мне проще сделать как надо, чем тратить силы на объяснение и доказывание неспециалистам того, что с моими действиями это никак не связано. Там тоже оказалось всё непросто: в МегаМаркете почему-то получение сведений об остатках переключили с feedа на ручное управление, где они благополучно обнулились, и переключить обратно не получалось. Пришлось писать в техподдержку, где тоже подтормаживали, и только через 20 минут проблема вроде бы решилась. По крайней мере, у товаров статус поменялся на «в продаже».
В общем, из-за всего этого только сегодня возвращаюсь к нормальной жизни, хотя изначально думал, что ещё в воскресенье смогу почувствовать себя свободным человеком. Опять жизнь в состоянии вечного опоздания…

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

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