Портрет 4X_Pro
Был в Сети 8 дек. 2024 г., 00:47
Мультиблог
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
В конце прошлой недели я писал о том, что жизнь не просто налаживается, но и становится просто замечательной. Увы, с понедельника всё стало не так. Началось всё с зубов: в понедельник в очередной раз пошёл лечить один зуб. Но оказалось, что кариес там хоть и маленький, но очень глубокий, и нужно удалять нерв, как и в предыдущем зубе. Но с этим всё оказалось немного сложнее. Даже врач в конце концов сказал «Ну и же-есть!». Сложность была в том, что никак не получалось найти третий корень зуба. В итоге он вколол какого-то лекарства в найденные два корня и поставил временную плобму. Придётся ещё раз прийти через несколько недель, для чего вернуться с дачи.
Во вторник решил было заняться синхронизацией данных с ноутбуков через свой новый VDS. Но большая часть дня прошла мимо, и получилось заняться только под вечер. Как это ни странно, заработало всё достаточно быстро. Но я был бы не я, если бы сделав что-то, не попытался это оптимизировать. В частности, решил rsync перевети в daemon mode в надежде, что так будет быстрее и меньше траффика. А вдобавок к этому ещё и запускать под обычным пользователем. Но вот тут и возник ряд сложностей с аутентификацией. В итоге потратил почти весь день, и от идеи запуска под простым пользователем вынужден был отказаться. Плюс ещё выявил ряд каталогов, которые нужно добавить в список исключений. Правда, параллельно всему этому сделал ещё первичное копирование данных на дачный ноутбук, так как через сервер в целях экономии места и траффика синхронизируются файлы, обновившиеся за последние 30 дней и размером не более 24 Мб. Но в итоге за весь день не занимался ничем другим.
В общем, три дня из жизни выпали, и за это время начали опять копиться мелкие задолженности перед жизнью: и GoRo обещал разобраться с некоторыми багами в SuperMon_Bot, и ещё пара задач по freelance висела, и в dev-блог Intellect Board хотелось новую заметку написать. Но при этом всю неделю чувствую какую-то слабость и упадок сил. Да ещё недосыпы сказываются. В итоге в четверг ночью очень капитально психанул на тему «как всё достало». Потом успокоился, но вчерашний и сегодняшний день ушли на разгребание всего накопившегося, из-за чего опять чувствую неудовлетворённостью жизнью по поводу того, что занимаюсь какой-то ерундой, вместо того, чтобы двигаться в тех направлениях, в которых считаю важным (типа сообщества идеалистов или переделки старого личного сайта). И снова чувствую сильную усталость без видимых причин. Да и в Welltory показатели ощутимо ухудшились: впервые за последнее время дважды энергия падала ниже 40%. Не понимаю, что со мной…

Заметка в Instagram от April 28, 2022 at 09:16PM

4X_Pro
Вышел на небольшую прогулку и смог в полной мере прочувствовать тишину и спокойствие вечернего Перово.
#вечер #перово #город #вечернийгород #фонари

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

Синхронизация ноутбуков сделана!

4X_Pro
Сегодня сделал ещё один шаг вперёд: настроил синхронизацию между своими ноутбуками через новый VDS-сервер. Теперь любой изменённый за последний месяц файл размером меньше 24 Мб в домашнем каталоге или в разделе-файлохранилище автоматически через rsync уйдёт на VDS, а оттуда — на второй ноутбук, когда тот будет онлайн. Это гораздо удобнее, чем использование Яндекс.Диска и тому подобного софта, так как не нужно думать или указывать в настройках, где лежат синхронизируемые файлы — синхронизируется всё. Даже сохранения от какого-нибудь Settlers. При этом одна операция синхронизации, если изменений нет генерирует суммарно полмегабайта траффика. Так что можно повесить синхронизацию на cron или запускать вручную перед отъездом с дачи/на дачу. Единственная проблема — это базы данных MySQL. С ними пока не знаю, что можно придумать…
Ещё обновил систему на дачном ноутбуке до Ubuntu 20.04. Как всегда, смена релиза шла достаточно тяжело и мучительно: то сказалось, что /tmp монтируется с noexec, потом вылезло, что в самосборном ядре нет поддержки squashfs и initrd, потом какая-то непонятная проблема с phpunit, который я в итоге просто снёс. Но в итоге всё работает! Сейчас занимаюсь тем, что делаю первичную синхронизацию (то есть переношу с основного ноутбука на дачный всё без ограничений по времени изменения и размеру). В общем, ещё раз убеждаюсь: чем более нестандартная конфигурация, тем сложнее даются большие изменения.
Ещё навёл порядок в разделе с книгами вручную синхронизировал его с флешкой в планшете. Эх, теперь бы придумать, как это автоматизировать…

Заметка в Instagram от April 24, 2022 at 06:30PM

4X_Pro
Всегда нравилось созерцать текущую воду, и вот сегодня для этого получил #подарок от @natalia_tella — комнатный #фонтанчик. Что особенно порадовало, так это то, что он почти бесшумный.

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

Жизнь хороша!

4X_Pro
Второй день испытываю какой-то эмоциональный подъём. То ли весна влияет, то ли так покупка нового сервера обрадовала (хех, главное, не стать серверным шопоголиком). Да и в Welltory показатели отличные — энергия до 75% выросла.
Ещё хорошие новости с Intellect Board: постепенно растёт в Google, да и в Яндексе некоторые запросы стали появляться. Увы, в PixelTools лимиты кончились, теперь отслеживаю позиции в другом сервисе — AllPositions. Там дают 1000 проверок на старте, для моих целей этого пока что хватит. И ещё за последнее время два человека подписалось на сообщество ВК, куда идёт трансляция dev-блога IntB.
Сегодня (вернее, уже вчера) выбрался на прогулку. Была мысль отправиться на самокате, но раздумал. Это позволяет добраться дальше, но лишает чувства включенности в мир. Вместо этого просто походил по соседним дворам. В воздухе просто разлито чувство весны, спокойствия и того, что всё идёт как надо. Давно такого ощущения у меня не было!
А главное, снова хочется творить! Сделать новый личный сайт, причём наконец-то освоить для этого какой-нибудь статический генератор типа Hugo или Hexo. Переписать бота мониторинга (SiteKnockerBot) с использованием RabbitMQ и распараллелить проверку между несколькими процессами. Настроить синхронизацию файлов между ноутбуками через свой новый сервер, благо места там более чем достаточно.
В общем, снова чувствую себя собой!

Настройка нового VDS, день второй

4X_Pro
Отоспавшись, сходил на небольшую прогулку, потом вернулся к настройке сервера. Во-первых, решил явно выключить компрессию на VPN, так как видел упоминание, что она может серьёзно снижать производительность, и так и не понял, включена ли она по умолчанию. А данные всё равно и так обычно сжаты: либо gzip-сжатие в протоколе HTTP, либо изначально сжатые картинки.
Потом взялся за настройку i2pd. По предыдущему опыту знал, что с ним бывает много проблем, поэтому и откладывал его на самый последний момент. И без проблем не обошлось, но совершенно неожиданных. Началось всё с того, что сначала i2pd отказался запускаться из-за опции meshnets.yggdrasil = true. Стал выяснять, в чём-то дело. Оказалось, что эта опция появилась совсем недавно. Пришлось подключать сторонний PPA и ставить оттуда более новую версию i2pd. Поставил, вроде запустилось. Указал в настройках, что Web-консоль и proxy сервер должны ждать соединений не на 127.0.0.1, а на IP-адресе VPN-сервера. Попытался подключиться, но без толку! Делаю netstat — всё равно висят только на 127.0.0.1 и всё. Ломал голову очень долго… Пытался в какой-то момент даже указать 0.0.0.0 для консоли и достучаться снаружи без всяких VPN, но без толку! И только потом дошло, что опять забыл про uwf и не прописал там правила для соответствующих портов. Причём не разрешил нужные порты не только для i2pd, но и для yggdrassil тоже.
Исправил, запустил, всё вроде заработало! Но в Web-консоли i2pd почеуму-то показывался Firewalled mode. Долго читал и документацию, и разные сайты в попытках найти ответ, что же делаю не так. А он оказался простым: нужно ещё разрешить те же порты и по UDP. Только после консоль написала, что всё хорошо, и стали появляться транзитные соединения. Потом ещё долго думал, стоит ли разрешить максимальную пропускную способность для своего i2p-узла или же оставить лимит на уровне 2 Мбит/с. В итоге пока остановился на втором варианте — всё же боту и VPN траффик важнее. Главный плюс — в процессе всего этого узнал много нового. В частности, разобрался, как вообще сконнектить i2p и какие-либо свои ресурсы типа сайтов или IRC-серверов. Осталось только старый личный сайт (который на xxxxpro.ru находится) переделать в духе Web 1.0.

Настройка нового VDS, день первый

4X_Pro
Вчера после долгих колебаний всё же решился взять второй VDS, о чём впервые задумывался ещё с февраля. Арендовал его на VDSCOM, так как это один из немногих хостеров, где есть дешёвые серверы с безлимитным каналом в 1 Гбит/с. На сервер я планировал перенести своих Telegram-ботов, поднять VPN, а также узлы i2p и yggdrasil. Собственно, такая высокая скорость канала мне ради SiteKnockerBot и требовалась.
И вот наконец-то сервер готов! Зашёл, осмотрелся, и обнаружил, что нет адресов IPv6, хотя я специально подключал IPv6-сеть как дополнительную опцию. И, главное, в панели управления про них тоже ни слова! Пришлось писать в техподдержку. Там сообщили мне эти адреса и дали ссылку, как прописать их в настройках. А потом решили прописать сами и перезагрузили сервер. Я очень удивлялся, когда он внезапно исчез со связи! А ещё у них бардак творится с размером подсети, которую мне дали: на сайте написано, что дают всего /125, в ответе техподдержки было написано /80, а в настройках прописали стандартные /64.
Дальше настроил VPN. Взять и воспользоваться готовым скриптом — это не есть путь Настоящего Компьютерщика, поэтому нашёл инструкцию и стал делать по ней вручную. Но просто взять и настроить — неинтересно, поэтому без приключений не обошлось. Сначала я хотел повесить VPN на tcp-порт 443, чтобы подключение на первый взгляд выглядело как обычный https-запрос. Поставил, протестировал. Вроде заработало, но тут обнаружилось, что хотя адреса IPv6 дали, но обратиться куда-либо вовне не получается: шлюз возвращает «no route to host». Видимо, админы хостинга забыли прописать разрешающее правило на самом шлюзе. Написал в техподдержку ещё раз, но, судя по всему, она отвечает только в рабочее время. (Хе-хе, это у меня вечер и ночь пятницы — пик активности). Так что решение вопроса с IPv6 отложилось до понедельника.
Решил поэкспериментировать, насколько различается VPN с TCP и UDP. Как выяснилось, разница очень существенная, почти в два раза. Решил, что пока всё-таки перейду на UDP. Но держать сервер на UDP-порту 443 как-то глупо, поэтому решил выбрать другой порт. Поменял порт, а также заодно ещё несколько настроек: жёстко задать алгоритмы шифрования и аутентификации, чтобы всё быстрее согласовывашлось на этапе подключения, и уменьшить размер MTU до 1400, чтобы не было фрагментации пакетов при подключении через мобильные сети. И вдруг подключение перестало работать! Стал поштучно отменять каждую из настроек, кроме порта (так как думал, что уж тут-то накосячить негде), но без толку. И только потом вспомнил, что на сервере включён ufw, и нужно прописать правило для подключения к новому порту!
Затем решил перенести ботов. Поскольку прежде делал это уже два раза, опыт был, и перенос удалось выполнить совершенно без проблем и с минимальным простоем: меньше 15 минут. Точнее, эти 15 минут исчезли из логов, но на старом сервере ещё работала мониторинговая часть, которая отправила бы уведомления, если бы возникла такая необходимость. Потом отключил в Яндекс.Облаке виртуальный сервер, где боты были раньше и подумал «ну всё, теперь можно удалить, наверное». Но не стал этого делать. Как оказалось, правильно! Буквально через 10 минут вспомнил, что забыл забрать один файл — настройки sysctl для SiteKnockerBot. Пришлось включать обратно… Причём в облаке при включении/выключении виртуальной машины IP-адрес меняется, но я этого не учёл, и долго пытался сконнектиться на старый по сохранившимся настройкам. И только скопировав тот файл, смог сказать «Прощай, Яндекс.Облако!» Кстати, впечатления от Яндекс.Облака остались противоречивые: с одной стороны, просто отличная скорость каналов (даже на новом VDS чуть ли не на порядок меньше), с другой — отсутствие внешних IPv6-адресов и совершенно грабительские цены — в месяц получалjсь около 800 рублей за сервер с 20% ядра, медленным HDD и 1 Гб оперативки, причём часть из них — за «белый IP» и совершенно ненужную мне услугу «Cloud DNS».
Разобравшись с этим, я решил было попробовать подключиться с Android. Залез в настройки, там множество опций, и совершенно непонятно, что выставлять для подключения именно к OpenVPN. После недолгого поиска выяснилось, что готовой поддержки для OpenVPN в Android нет, и всё-таки придётся ставить приложение. И тут я подумал, что раз приложение придётся ставить по-любому, то почему бы не попробовать WireGuard. (Изначально я от него отказался именно из-за необходимости ставить стороннее приложение.) Сказано — сделано. Но пришлось разбираться ещё и с его настройкой. И тут ждала первая неприятность. Под Linux он попытался собрать модуль ядра, но не смог — не хватило каких-то symbols. Ядро у меня старое и самосборное. Искать, что там нужно включить обратно, и пересобирать ядро не хотелось от слова совсем, ставить второе из дистрибутива и перезагружаться — тем более. Поэтому решил ограничиться тестом на Android. Поставил для него клиентское приложение, далеко не сразу разобрался с настройками, но в итоге запустил. Потестировав, выяснил, что WireGuard реально даёт неплохой выигрыш на WiFi. Скорость загрузки была порядка 50 Мбит/с против 35—40 у OpenVPN. Но когда переключился на 4G-соединение, результат был обратный — OpenVPN стал уверенно выигрывать. В итоге окончательно решил остаться на нём.
Остаток ночи провёл, экспериментируя с различными размерами MTU в попытках выжать из VPN больше скорости. Но особой разницы увидеть не удалось. Ещё попытался было включить TLS-аутентификацию, но безрезультатно. Уж не знаю, что делал не так, но она так и не заработала. Зато поставил yggdrasil. Вот он завёлся сразу! Правда, потратил кучу времени на то, чтобы собрать список хостов и привести к нужному формату. Почему никто не сообразил выложить их в таком виде, чтобы можно было бы просто скопировать в файл настроек?

Очередные настолки и день спада

4X_Pro
Вчера был дурацкий день. Начался он с телефонного звонка, который поднял меня на какой-то очень сильно неподходящей фазе сна. И весь остаток дня я был в каком-то непонятном состоянии: вроде и всё хорошо, но внутри крутится какая-то совершенно непонятная раздражительность. Из-за этого даже сомневался, идти ли на настолки. Tella отговаривала, но с другой стороны, в субботу я тоже собирался пропустить, и, получалось, до дачи оставалась всего одна возможность — в следующую среду. В итоге сделал даже расклад на Таро. На вариант «ехать» выпала перевернутая тройка пентаклей, что тоже счёл не очень хорошим знаком. Но всё же поехал.
Изначально хотел было приехать к 19:00, но, как всегда, прособирался и добрался только в 19:45. К этому времени уже собралась компания игроков в «Меч самурая» aka «японский бэнг», и присоединиться к ним не было возможности. Из-за этого стали играть в «Project L», в просторечии именуемый «тетрисом». Когда-то я один раз смог сыграть в него прошлой зимой, и с тех пор так и не складывалось. И вот, наконец, смог сыграть снова! Но в «Project L» и «Роскоши» у меня всегда есть проблема в том, чтобы определить момент, когда нужно переходить от накопления ресурсов к активному набору очков, поэтому закончил в итоге третьим из четверых.
Потом пришла К.Ш. и мы сели играть в «японский бэнг». Сначала игра шла просто отлично: Ал.С. спалила всем, что она играет за самурая, а К.Ш. — за ниндзю. Потом я применил «боевой клич» и «дзю-дзюцу» и за один ход отобрал целых 3 жетона чести. Но вот дальше как-то дело заглохло: никак не могли определить, кто ронин. Я на начальном этапе выдвигал версию, что это Tella, потом подозрение пало на другого игрока, который ходил последним. Потом начали подозревать меня, а потом соседний со мной игрок вдруг решил, что ронин — это К.Ш. Я же подозревал, что ронин как раз он, и тогда получалось, что он выигрывает, так как у него было 4 жетона чести, которые у ронина умножаются на три. В общем, началось то, что я называю «слишком мало ходов, слишком много разговоров». От этого, а ещё и от недостатка кислорода начала болеть голова, и всё раздражать, особенно громкие звуки. Но в итоге мы всё же победили с разгромным счётом. Ронином и правда оказалась Tella, а К.Ш. в конце выложила три карты «даймё». Да и я большую часть добытых жетонов сохранил, только одного лишился и один сознательно отдал К.Ш. В общем, в итоге у нас было то ли 10, то ли 11 очков. Кое-как доиграв, срочно отправился домой. Возвращение было ужасным, было какое-то ощущение загаженности организма.
Сегодня отоспался, пришёл в норму, но весь день была какая-то вялость. Делать ничего не хотелось от слова совсем. Даже второй VDS-сервер так и не купил, хотя собирался. Только написал ещё одну заметку в блог IntB. Под вечер поспал немного, и теперь активность повышенная. А ещё нашёл возможность потренироваться в «Роскошь» онлайн — на сайте BoardGameArena.com. Я на нём регистрировался ещё в 2019 году, но забросил, так как подумал, что бесплатно поиграть не получится. Но оказалось, что на бесплатном тарифе можно присоединяться к чужим играм, а по ночам играет довольно много платных пользователей из Америки, и можно присоединяться к ним. В общем, буду знать о такой возможности!

Сделал dev-блог про IntB

4X_Pro
Вчера переделал на сайте IntB раздел новостей в полноценный dev-блог, настроил автоматическую трансляцию в группу ВКонтакте, и написал первые две заметки. И в целом очень рад, что эта идея пришла мне в голову. Мало того, что это полезно с точки зрения SEO, это ещё и форма самомотивации: доделать что-то, чтобы рассказать об этом в блоге. Или рассказать об IntB то, что не вписывается в рамки офицальной документации, например, то, с какими проблемами пришлось столкнуться и как было найдено какое-то решение. Правда, есть опасение, что тут может получиться как всегда — начну с сильного «хочу», которое затем превратится в «надо», или же опять снесёт потоком жизни…

Неудачный день

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

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

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