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

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


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

t.me/4x_pro

Лог жизни

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


Отселение 3.1

4X_Pro
Снова уехал в Отселение, в то же самое место и по тем же самым причинам, что и в августе. Поэтому решил назвать его не четвертым Отселением, а Отселением 3.1. Причём уехал на день раньше, чем собирался изначально, и собирался в сильной спешке. Но вроде ничего важного не забыл. Только внешний монитор решил в этот раз не брать — уехал всего на неделю.
Ещё есть мысль воспользоваться тем, что в жизни затишье, и устроить себе период полуоффлайна (тем более, тут сейчас проблемы с Интернетом и приходится подключаться через мобильник) и медленной жизни, как в мае: читать книги, размышлять и медитировать, и радоваться, что не нужно заставлять себя успевать к определённому сроку. Но с другой стороны, продолжают крутиться мысли о том, чтобы начать делать свой framework и скрипт каталога сайтов на нём.

Ещё один парадокс

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

Третья неудачная попытка купить компьютер

4X_Pro
Хе-хе, уже третий раз сталкиваюсь с тем, что стоит задуматься о покупке компьютера, как начинает происходить что-то из ряда вон выходящее. (Первые два были в феврале 2020 и феврале 2022.) Вот и сейчас уже почти принял решение купить всё-таки новый компьютер, а не б/у, как хотел раньше. Даже собрал конфигурацию компьютера-мечты в корзине Яндекс.Маркета и обнаружил, что вылез за верхнюю границу изначального бюджета всего на 12 тысяч (и это с учётом покупки видеокарты RTX 3060, правда, вместо полносьтью пассивного блока питания Seasonic решил взять полупассивный от Corsair, но помощнее). Хотя ещё рассматривал вариант отказаться от возможности апгрейда в будущем и взять матплату и блок питания попроще, чтобы уложиться в изначальную психологически более комфортную сумму, но потом решил что нет, не стоит на этом экономить.
А сегодня и цены вверх прыгнули, и упал рынок акций. Так что видимо, всё же придётся покупать не компьютер, а акции.

О скрипте каталога и фреймворке для него

4X_Pro
Во время последнего заезда на дачу обдумывал, как сделать свой скрипт каталога сайтов. Вернулся к тому, о чём думал во времена начала работы над IntB 3.x в 2007 году — хранить все сущности, которые могут быть выведены в виде Web-страниц, в одной таблице: сами сайты, категории, подборки по формату сайтов, пользовательские подборки, вспомогательные фильтры, теги и т.п. По сути, у всего этого атрибуты одинаковые: название, описание, HURL, владелец, основной текст, дата создания и последней модификации, а также поле для сериализованных специфических атрибутов. Но в отличие от IntB, где предполагалась чисто иерархическая структура, предусмотреть таблицу для возможности связывать сущности произвольно. К тому же, как выяснилось, современные версии MySQL и Postgres позволяют хранить такие атрибуты в виде JSON с возможностью выборки по атрибутам внутри JSON и даже создавать по этим атрибутам индексы!
Потом мысль пошла дальше — решил сделать собственный микрофреймворк, взяв за основу тот код, который я писал для движка MLCE в прошлом году. И потом на нём реализовать и каталог сайтов, и мобильное сообщество, и, возможно, в дальнейшем вернуться движку для сообщества идеалистов, только переделать его на SQL вместо MongoDB. Но потом застрял на вопросе, использовать ли namespaces и загромождать код противоестественными конструкциями вида \MLFW\App\Router или \MLFW\Models\Entity или писать в духе CMS двухтысячных, используя namespaces только для указания путей, где искать необходимые классы (то есть Models\Entity или Templates\MainPage).

Дачный сезон закончился

4X_Pro
Четыре дня, прожитые на даче, можно назвать днями вынужденного slow life. Ни разу даже за пределы участка не выбрался, хотя хотел сходить напоследок к реке. Но не сложилось: в пятницу и воскресенье была слишком уж неподходящая погода, а в субботу было не до этого — занимались с отцом обрезкой деревьев.
Зато вдруг начал налаживаться режим дня. Правда, ценой жёсткого недосыпа в пятницу, которая вообще оказалась каким-то особо неэффективным днём. Не получалось ничего из того, за что брался. Хотел было старый роутер настроить в режиме ретранслятора — не получилось, обновить Linux на старых ноутбуках — тоже. Видимо, у Ventoy всё же есть какие-то ограничения, и для совсем старых компьютеров нужно делать загрузочные флешки обычным образом.
Уезжал с противоречивыми чувствами. С одной стороны, было жалко, что всё закончилось, и что теперь полгода, если не больше, не увижу эти места. Хотелось даже ещё на несколько дней остаться. С другой — было ясно, что жить тут теперь слишком уж холодно и некомфортно, и ехать всё же надо.
Возвращение было долгим и мучительным, так как ехали не на электричке, а по шоссе с ужасными пробками. Приехал уставший и даже не стал пытаться сделать что-то за остаток дня. Зато отоспался и сегодня проснулся в состоянии повышенной бодрости. А Welltory (её наконец-то обновили, и новая версия и замеряет нормально, и результаты выдаёт без задержек) показала вообще 22% стресса и 99% энергии. Не думал, что для меня такое возможно.
Но даже несмотря на то, что сил много, в голове полнейший бардак в плане того, что делать. Нужно и по freelance очередную задачу столкнуть, и бытовыми делами заняться, и ответить на накопившиеся сообщения. (Вообще, заметил, что после того, как переболел коронавирусом, резко сократился ресурс на общение, стал подолгу не отвечать на сообщения.) А вместо этого хочется либо заняться своим frameworkом, либо вообще сесть играть в Arcanum.

Осенний заезд на дачу

4X_Pro
Вчера снова приехал на дачу. Заезд отчасти вынужденный — обещал в субботу помочь отцу с обрезкой орешника. Тут холодно и мрачно, и спать начинает хотеться уже в 22 часа. Впрочем, несмотря на это, вчера всё равно засиделся за компьютером до 3:30, а потом ещё час готовился ко сну. Весь день был пасмурный, но ночью небо полностью расчистилось, благодаря чему удалось посмотреть на звёзды, а ещё увидеть Юпитер и Марс.
Из-за холода долго не мог уснуть: мерзли ноги. Только около 6 утра сообразил встать и найти шерстяные носки. В итоге сегодня не выспался и вынужденно сделал день полного безделья. Даже не обновил ArchLinux на одном из старых компьютеров, хотя хотел это сделать, и не протестировал старый роутер в режиме ретранслятора. Только купил несколько акций на фондовом рынке.
Зато, в отличие от предыдущих заездов, есть то самое чувство затерянности, удаленности от людей и цивилизации, ради которого и стоит ездить на дачу.

Немного о программировании

4X_Pro
Интересное наблюдение: раньше (во времена создания IntB 2.x) я писал код с позиции «Я — ведущий разработчик, тут я решаю, что и как будет в проекте. Кому не нравится — идите подальше отсюда и там пишите сами с нуля, как считаете нужным.» А сейчас стал слишком часто задумываться над вопросами типа «какое решение будет выглядеть более профессиональным, что лучше соответствует общепринятым практикам и т.п.». Естественно, производительности это не способствует…

Возвращаюсь к идее каталога сайтов

4X_Pro
В последние дни снова крутил в голове идею сделать каталог сайтов. Но долгое время не было в голове цельной картины, какова же должна быть его структура. Создал в Obsidian заметку, где попытался систематизировать сайты из раздела «Интересные материалы» или просто те, которыми хотел бы поделиться, и быстро понял, что простая древовидная не подходит. Думал на тему фасетов, активным сторонником которых является Evg, но они — хорошее решение для больших каталогов уровня YaCa и DMOZ, тогда как я на такие масштабы не замахиваюсь.
А в ночь с четверга на пятницу случился приступ бессонницы, когда я лежал и крутил в голове эту тему. И вроде решение пришло! Нужно предусмотреть выбор по двум параметрам: формат (официальный сайт, онлайн-сервис, канал в ТГ, блог, видеоблог и т.п.) и тематическая категория. Причём тематические категории — одноуровневые, но с возможностью создания для каждой категории набора фильтров. Например, для программного обеспечения это будут «Платформа», «Лицензия» и «Тематика». И ещё нужно сделать хороший поиск, который учитывал бы и название сайта, и URL, и описание и фильтры.
Из-за необходимости поиска я даже подумывал о том, чтобы вместо MySQL использовать MongoDB (там легко настроить поиск с учётом морфологии), но потом пришла в голову мысль сделать иначе — задействовать MySQL + Sphinx.
А ещё в этот же каталог можно встроить мою давнюю-давнюю идею [социального поиска](http://4xpro.ru/ideas/social-search/), предусмотрев для зарегистрированных пользователей возможность составлять свои подборки и рейтинговать их.
Интереса ради попробовал поискать на GitHubе и в Google современные скрипты каталогов сайтов, но ничего толком не нашлось! Теперь вот думаю, взяться за эту задачу или нет.

Противоречивые настолки

4X_Pro
Сегодня впервые с мая съездил на настольные игры. Из того заведения, где они проводились прежде, нас выжили (слишком мало денег приносим). Теперь собираемся в ДК ЗИЛ на Автозаводской. Я там был впервые, вход нашёл не сразу, и само здание оставило какое-то неприятное впечатление очень странной и неудобной планировки. Кроме того, ДК закрывается в 22 часа, поэтому и на игры приходится приезжать раньше. Мы договорились начать в 18, я опоздал минут на 20, но всё равно приехал вторым, вскоре после Ал.С. Мы с ней сыграли в «Каркассон», причём я выиграл с большим отрывом. Потом пришёл ещё один человек (причём из тех, кто присоединился недавно), сели играть в «Меч самурая» (в просторечии японский бэнг). Новый участник в японский бэнг не умел, поэтому Ал.С. посадила его и села сама играть за ниндзю, а меня — за сёгуна, который при игре втроём получает целый ряд преимуществ: дополнительную атаку, дополнительную карту, неуязвимость к «Бусидо» и целых шесть жетонов чести. На начальном этапе мне ещё очень повезло: пришло несколько карт усиления и «чайных церемоний». В итоге я сходу отобрал ещё три жетона чести у ниндзя, но дальше дело встало. Дальше всё время приходила одна-две карты защиты, и ещё какая-нибудь малополезная в моей ситуации, изредка — оружие. Я их разыгрывал, и оставался без карт, в результате чего ниндзя ничего не могли мне сделать, но и я тоже не мог развить успех. Но после очередной пересдачи колоды ко мне снова пришло несколько карт «чайной церемонии». С одной стороны, я получил возможность атаковать противника (и постепенно выбил все защиты), с другой — не успевал тратить всё оружие за ход (а синие карты усиления к тому времени мне все снесли) и стал получать ответные атаки. В какой-то момент даже стал бояться, что проиграю, но через некоторое время смог выбить все защиты у нового игрока и отобрать у него последний жетон чести, закончив игру, кажется, с шестью жетонами.
Потом долго разбирались с новой игрой под названием «Дедуля винчестер». Когда уже готовы были приступить к игре, пришёл YKrop Ukropovich, у которого был «Остров кошек», и мы с Ал.С. переместились туда, а оставшиеся игроки решили сыграть вместо этого в «Каркассон», решив, что в «Дедулю» на троих неинтересно.
В «Остров кошек» я начал неплохо. Но дальше допустил ряд ошибок. Во-первых, взял задание «оставить средний ряд корабля полностью пустым», которое стоит целых 25 баллов. На первый взгляд кажется, что это легко, но оказалось, что в этом случае быстро становится негде размещать кошек. Но самое обидное — я отказался от карты, которая давала возможность размещать кошек и сверху, и снизу корабля, оставляя этот средний ряд пустым. В третьем раунде место закончилось от слова совсем, поэтому я принял тяжёлое решение на это задание забить. Но к этому времени уже успел наразмещать кошек очень неэффективно, не думая о заполнении кают.
Во-вторых, вспоминая впечатления от прошлых игр, когда на последних ходах сильно не хватало корзин, ударился в другую крайность: начал активно на них тратиться. В итоге набрал целых три штуки, но потратил на это слишком много рыб. В итоге последняя корзина постоянно оставалась незадействованной из-за их нехватки. В общем, моя вечная проблема, что в «Кошках», что в «Роскоши», что в «Project L»: не могу поймать момент, когда нужно переходить от вкладывания ресурсов в развитие «инфраструктуры» к их трате на основную задачу.
Ну и третьим просчётом была ставка на сокровища. У меня была карта, дающая 7 очков, если я к концу игры буду обладателем самого большого их количества. В итоге каждый ход я тратил как минимум одну карту на их получение, плюс ещё дважды потратился на кошек неподходящих цветов только ради сокровищ и закрытия каюты. Но каким-то образом у того же YKrop Ukropovich в итоге сокровищ оказалось всё равно больше!
Итог — полнейший разгром с таким счётом, что я был в полном шоке, и пришлось всё пересчитывать дважды, так как думал, что кто-то где-то ошибся. Но безрезультатно. Огромные минусы из-за незаполненных кают, плюс в этот раз я мало набрал там, где беру обычно максимум — на картах заданий. Они мне просто не шли (плюс несколько я сбросил в начале ради корзины).
В итоге домой возвращался сильно злой на всё вокруг. Плюс ещё удручали новости из Интернета. Да ещё, оказывается, сегодня день города, и в метро просто толпы народа. Но, видимо, высшие силы меня оберегали: и сидячее место в поезде оба раза удачно занял сразу же, и люди кругом были спокойные и миролюбивые, ни с кем цапаться не хотелось. Плюс Ал.С. успела всё же частично снять негатив (не знаю только, осознанно или нет).

Настройка роутера

4X_Pro
Сегодня ходил к отцу на вторую квартиру. Он купил новый роутер, и нужно было помочь с настройкой. Я думал, что всё это займёт минут пять, но получилось как всегда: постоянно вылезали какие-то мелочи, и провозился почти час. Сначала попытался настроить статический IP-адрес, который указан в приложении к договору. Траффик не пошёл. Выключил новый роутер (чтобы не было конфликта двух сетей с одинаковым названием), включил старый, залез в его настройки, там стояло получение адреса по DHCP. Поставил так же на новом, но снова без толку: вроде IP-адрес дали, но траффик наружу не идёт. В какой-то момент даже стал думать, не кончились ли деньги на счету, но зайти в личный кабинет тоже не получалось. Стал думать, что делать. Отец уже хотел звонить в техподдержку провайдера, но это не есть путь Настоящего Компьютерщика. Потом вдруг вспомнил, что при подключении мастер записывал MAC-адрес роутера. Подумал, что, возможно, есть привязка подключения к MAC. К счастью, новый роутер позволял легко делать подмену MAC-адреса программным путём. Вбил в него старый адрес, и всё заработало!
Потом пришлось повозиться с принтером, который не умеет подключаться к сети в 5 ГГц-диапазоне. Сеть со старым названием я сделал именно там, а в 2.4 ГГц назвал по-другому, и нужно было вновь ввести эти данные. Долго вспоминал, где вообще это настраивается на принтере, потом пытался подключить его по PIN-коду WPS, но не сработало. Причём во время попытки принтер никак не позволяет отметить это действие: только либо дождаться таймаута, либо включить/выключить (и загружаться он будет примерно то же самое время). В итоге пришлось вбивать ключ сети с самого принтера. Там система ввода такая же, как на кнопочных телефонах, а после принтер перезагружается. Со второго раза получилось. Потом ещё делал привязку IP к MAC, чтобы принтеру всегда давался один и тот же адрес, пришлось ещё раз перезагрузить. В общем, на всё это час и ушёл.
В итоге домой шёл несколько недовольный, несмотря на то, что всё было сделано, и даже без нервотрёпки. Кстати, второй раз за неделю вожусь с чужими компьютерами, и оба раза всё получается спокойно, без нервов, хоть и долго, и с непредвиденными сложностями.

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

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