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

Лог жизни

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


Непростые размышления

4X_Pro
Последние несколько дней горю идеей создать то самое тег-управляемое сообщество. Вчера продумал, как это реализовать технически, и даже пришёл к выводу, что можно всё сделать только на файлах, даже без REDISа. Правда, чтобы избежать проблем с перезаписью файлов из-за одновременных обращений, придётся сделать отдельный процесс для операций, затрагивающих многопользовательские списки, и повесить его либо на cron, либо запускать как отдельный systemd-unit. Ещё непонятно, что лучше использовать для внутренней системы перекрёстных ссылок (например, в каталоге с тегами — на файлы с текстами, лежащие в каталогах пользователей) — symlinks или обычные txt-файлы с указанием пути и прочей мета-информации. Symlinks на первый взгляд, кажутся хорошим решением, но снижают легкость переноса сайта и делают невозможным размещение его на Windows-хостингах.
Ещё перечитал массу самой разнообразной информации по темам, которые могут пригодиться, так что теперь голова идёт кругом. Пересмотрел кучу WYSIWYG-редакторов, пытаясь найти бесплатный и с файл-менеджером. Искал готовые CMS на файлах, в надежде, что можно будет их использовать для моих целей без существенной переделки. В частности, посмотрел Grav и HTMLy. Но первый у меня просто отказался работать, потребовав PHP 7.3, а вторая — это, по сути, файловый аналог Wordpress. Если бы мне нужен был просто блог, то, может быть, была бы хорошим решением. Но когда я узнал, как там устроено хранение файлов, сразу понял, что работать будет очень неэффективно.
Потом пришла в голову мысль, что то, что я задумал, может быть слишком похоже на Reddit. Залез туда, поизучал, как там всё устроено, но нет. Местные subreddits — это всё же скорее аналог групп в соцсетях, а не тегов. Ещё выяснил, что движок Reddit — open source, думал даже, не приспособить ли его, но когда зашёл на GitHub и увидел, сколько там всего в репозитории, отказался от этой мысли.
Узнал ещё, что тот подход, который я когда-то назвал StaJAX — «главный контент генерируем в статику, второстепенную динамику подгружаем через AJAX» и кратко описал в одной из своих заметок — действительно постепенно становится одним из ключевых в Интернете. Правда, под другим названием: JAM-stack. Даже не знаю, радоваться, что удалось спрогнозировать будущее, или переживать, что При этом его ещё как-то умудряются совмещать с React, Angular и прочей подобной гадостью. Вычитал про такое интересное явление, как headless CMS, где на первом месте стоит создание API.
Также пришла мысль, что поскольку почти в любом социально-ориентированном проекте нужна система внутреннего обмена сообщениями, то нельзя ли интегрировать готовый децентрализованный мессенджер типа Matrix.net. Но пока ещё не нашёл ответа на этот вопрос.
Но вообще, хотя узнал много интересного, это повергло меня в уныние. Как жить при том, что моя скорость жизни столь несовместима с миром? Сейчас за 5—7 лет многие технологии морально устаревают, в то время как мне только чтобы решить, что технология имеет ценность, нужен год-полтора, потом несколько месяцев на первичное освоение, и пару лет — для того, чтобы пользоваться уверенно.
С подачи Tellы возникла даже идея создать оффлайновую комунну, где технологии будут искусственно заморожены на уровне 2007—2008 годов: никаких смартфонов (только кнопочные мобильники), интрасесть только с личными сайтам без фреймворков, только чистый JavaScript, HTML, CSS и PHP (или другой серверный язык) с очень ограниченным Интернетом, и т.д. Плюс из-за ограниченности числа людей каждый может получить свою долю общественного внимания и нет гигантского расслоения, когда у одного — миллионы подписчиков, а у другого — три посетителя в месяц. Но самое главное, чтобы в коммунну отбирались только люди с мышлением инженеров, а не маркетологов, то есть те, кто ставит перед собой цель решить какую-то задачу, а не менять цели на ходу в поисках того, что будет продаваться.

Затишье в жизни после нескольких отличных дней

4X_Pro
Опять перестал писать в блог. Впрочем, писать особо не о чем. После нескольких очень результативных дней наступило затишье. Видимо, биоритмический максимум кончился. Подумывал было над тем, чтобы сделать паузу в разработке IntB и за это время написать движок для того формата сообществ, про которые писал в статье. Но понял, что пока ещё в голове нет цельной картины в техническом плане. Главный вопрос — как делать кеширование: только ли на REDISе или же что-то более универсальное, что могло бы работать и на NoSQL, и на SQLite, и на REDIS. Зато в процессе поиска готовых решений узнал о CMS под названием TextPattern, которая является хорошей альтернативой WordPress.
Как всегда в тех случаях, когда я не могу избавиться от неопределённости, решил пока не делать ничего вообще, и вернуться к разработке IntB. Вчера добавил для админа возможность вывода списка тем, которые просматривал пользователь, а сегодня — вернулся к разделу-фотогалерее и немного продвинулся — сверстал вывод первых фото из всех фотосерий на главной странице раздела.
В последние дни (кроме четверга) сижу дома. Только в четверг сходил ещё раз к устью Плотни. Там уже уровень воды уменьшился. Хотел было пройти вдоль самой Плотни, но попробовав идти по траве после дождя, понял, что быстро промочу ноги, и отказался от этой идеи. Вместо этого зашёл на полустров на бывшем песчаном карьере, и посидел там, созерцая воду и радуясь тишине и покою в жизни.

Один счастливый день

4X_Pro
Сегодняшний день можно назвать одним из самых счастливых дней моей жизни. У меня в голове сложилась картина, какими я вижу сообщества, которые могут заменить собой традиционные форумы! Бросив всё, я сел писать об этом заметку, и вскоре она была готова. Ещё я продумал, как могла бы быть устроена CMS для реализации такого сообщества. Как это ни странно, её имеет смысл пользователе-центричной, то есть по принципу: всё есть действия пользователя — и статьи, и комментарии, и лайки, и репосты. Причем все действия хранятся в текстовых файлах в каталоге каждого пользователя с упорядочиванием по времени. А для кеширования метаинформации, например, списка всех статей для тега, и хранения всяких OAuth tokens использовать что-нибудь типа REDIS или SQLite. (Хех, сказывается тлетворное влияние сообщества IndieWeb.) Плюс тогда пользователю можно будет дать возможность выгрузки своих данных для простого переноса на другой сайт.
В общем, написал об этом статью, а также выложил вчерашнюю заметку про 7 полезных привычек для «человека настроения» вроде меня. Затем купил несколько акций Сбербанка, пользуясь их просадкой, и пошёл жарить шашлык. Но перед этим ещё сфотографировал яблони, которые вчера зацвели, и выложил их в Instagram. А пока жарил шашлык, наслаждался тишиной, спокойствием и неспешностью природы.
Вечером хотел было поискать, нет ли готовой CMS для того, что я придумал. Но не мог сосредоточиться: слишком много написывали в мессенджеры. А я только-только настроился на дачный режим, когда потребности в Интернете просто нет. В какой-то момент хотелось удалиться из ВК. Но вместо этого просто ушёл в оффлайн, сел играть сначла в Heroine's Quest, потом — в Transport Tycoon, и спокойствие и удовлетворённость жизнью тут же вернулись.

События последних дней

4X_Pro
Опять не успеваю фиксировать в блоге всё происходящее. А интересного происходит немало. В воскресенье хотел было дописать материал для канала о выживании в Сети. Но получилось как всегда: делаю всё, что угодно, кроме запланированного. Поэтому вместо него написал заметку об условиях существования такого явления, как Старый Добрый Интернет. И ещё даже продумал, каким должно быть сообщество, которое в наше время соответствовало бы его духу. Но увы, тут опять всё упирается в то, чтобы набрать начальную критическую массу участников.
Ещё вечером того же дня опробовал было одну идею для конкурса на CodinGame, но она себя не оправдала: результат стал хуже почти 300 позиций. Пришлось вернуть исходную версию. И в итоге в понедельник закончил соревнования на 1465 месте из 6867 участников, второй раз за всё время добравшись до золотой лиги. Причём в этот раз участвовал достаточно лениво, а не как в предыдущие, сидя все десять дней за компьютером безвылазно.
Понедельник решил сделать днём отдыха и отправиться на длинную велопрогулку. Сначала хотел было поехать вдоль Клязьмы на Великий Луг. Но оказалось, что там строят мост для будущего шоссе, и проезд перекрыт. Эх, воистину, «бойся своих желаний» — в первые годы жизни на даче я и мечтал о том, чтобы мост через Клязьму был, чтобы можно было посмотреть лес на другом берегу. Причем как раз примерно в том же месте. Но увы, есть и обратная сторона: для строительства шоссе насыпали высоченную насыпь, из-за которой оказалась перерезана короткая дорога к Большим Дворам и Карпятнику.
Кое-как перебравшись через эту насыпь, я очутился в сосновом бору. Том самом, где когда-то снимал видео про пирамиду типологий. К счастью, его дальняя часть в целом осталась нетронутой, только старые деревья кое-где спилили. Посидел немного там, потом отправился на Великий Луг. По пути старался сделать прогулку максимально осознанной, сосредоточиться в здесь и сейчас и максимально полно почувствовать происходящее. (Впрочем, вся эта «осознанность» гораздо проще описывается языком соционики: переключится с БИ на БС.) Но в полной мере мне удалось это только у Карпятника. Я доехал до самой дальней его части, откуда вытекает ручей, который потом впадает в Клязьму, и долго сидел на его берегу, предаваясь созерцанию. В частности, смотрел на то, как рыбы из озера то выплывают в ручей, то, увидев меня, быстро бросаются обратно. Потом вернулся домой, сделав большой крюк, чтобы объехать насыпь.
Во вторник начал день с обливания холодной водой. Это очень бодрит! Правда, потом полдня мёрз, несмотря на жару. И за день успел написать (но пока не выложить) заметку про привычки для повышения личной эффективности для тех, кто подобно мне не может жить по плану. И ещё немного продвинулся с написанием статьи про выживание в Интернете. Ещё нашёл было приложение Hacker X — курс для изучения кибербезопасности, и начал проходить, но увы, оказалось, что с третьего раздела там доступ платный. В итоге так и снёс это приложение. А ночью с подачи DarLik дважды наблюдал пролёт спутников Starlink (группы 26 и 27). Это весьма необычное зрелище: похоже на цепочку метеоров, летящих один за другим на небольших расстояниях.

День настоящей slow life

4X_Pro
Вчера получился день самой настоящей slow life. Проснувшись, я вышел на участок и где-то почти час сидел и созерцал природу. Удалось почувствовать гармонию с миром и то самое ощущение, что всё идёт как надо, и некуда спешить! Потом сел за компьютер и занялся доделкой алгоритма для соревнования на CodinGame. После нескольких улучшений удалось подняться в серебряной лиге с 70—80-х мест до 30-х. Потом решил существенно переделать алгоритм выбора места для посадки новых деревьев (и тут пригодились алгоритмы поиска пути в графе, которые изучал в 2019 году), но он что-то не хотел работать. Решил прерваться и поесть, тем более по времени было уже около 18 часов, а я за день нормально не ел. Не знаю почему, но когда я на даче один, обеды/ужины растягиваются просто на какое-то нереально огромное время. То ли из-за того, что в процессе ухожу в созерцание и размышления, то ли ещё по каким-то причинам. Но есть я закончил в 19:40. В это время на улице выглянуло солнце, и я решил, что всё же отправлюсь на прогулку, на которую хотел выбраться ещё днём, но так и не собрался. Изначально хотел просто пройтись по посёлку, но потом подумал, что солнце уже заходит, и можно снять закат, чего я в этом году ещё не делал.
Когда я собрался и вышел из дома, меня ждал небольшой сюрприз. Несмотря на яркое солнце, на улице шёл легкий дождь! Из-за этого какое-то время я сидел на крыльце и созерцал его. И только когда дождь прекратился, отправился к водоёму. Закат в этот раз получился очень красочный! Снял несколько кадров над водоёмом, потом вышел к Клязьме. Хотел дойти до того места, где река делает поворот, и можно посидеть и посмотреть, как она течёт к нам издалёка, но увы: место было занято — там сидел какой-то рыбак.
Побродив ещё немного по берегу реки, вернулся к дому. Была мысль заснять на видео полёт майских жуков и выложить в Instagram, но увы, это оказалось сложной задачей: получается либо слишком мелко и их просто не видно, либо нужно сделать zoom на максимум и долго ждать, когда жук влетит именно на участок, куда направлена камера.
Потом вернулся к доработке программы для соревнования. На этот раз таки нашёл и исправил ошибку, а потом сделал ещё несколько мелких улучшений для учёта того, что почва в игровом лесу постепенно истощается, и за каждое следующее дерево дают меньше очков. И вот где-то около полуночи сделал очередной submit кода. С самого начала было ощущение, что вот теперь всё получится. И вот код отправлен! Когда расчёт результатов дошёл где-то до 75%, я обнаружил, что переместился в таблице выше бота-главаря серебряной лиги (чтобы пройти в следующую, нужно обойти именно его). Началось томительное ожидание: «неужели получится?». Но тут пошла серия поражений. Я вновь оказался ниже этого бота. Потом снова выше, и так происходило несколько раз. Когда расчёт дошёл до 92%, опять пошла серия поражений, и я был уже уверен, что всё, в этот раз не пройду. И придётся долго играться с настройками алгоритма, чтобы добрать несколько недостающих побед. Так длилось до 98%, я решил, что ждать больше нечего, и ушёл пить чай. А когда вернулся, услышал звук уведомления. Оказалось, что всё же на последних процентах было достаточно побед, чтобы оказаться выше бота и прорваться в золотую лигу! Так что главная задача этого конкурса — выполнена. И, увы, предел достигнут: больше я из этого алгоритма вряд ли выжму. Разве что была бы возможность поиграть в настольную игру Photosintezis, по мотивам которой этот конкурс и сделан, достаточное количество раз, чтобы почувствовать правильную стратегию, а не просто пытаться понять её умозрительно. Или же применять методы машинного обучения, как делают топовые игроки, но на это не хватает квалификации.
А ещё снова убедился, что для меня избыточный выбор — зло. Чем хороши конкурсы, так это тем, что они заставляют сфокусироваться на какой-то одной задаче. А вне конкурсов, видя несколько десятков задач, по которым можно соревноваться, я не могу определиться, за какую взяться, и в итоге не берусь ни за что. То же самое и в жизни за пределами CodinGame: когда одна из задач выделена, гораздо больше шансов, что я её сделаю, чем когда вижу много вариантов и весь день не могу определиться, за что взяться. А потом испытываю неудовлетворённость жизнью и тем, что ничего не сделал. Кстати, в тех же 2003—2004 годах, которые я считаю образцом производительности, как раз и было так, что у меня не было выбора: либо работа над форумом, либо несколько старых надоевших игр, и всё.
За остаток дня так больше ничего и не сделал, даже запись в блог об этом дне. Только около двух часов ночи вышел ненадолго посмотреть на звёзды. Но небо уже начинало бледнеть, поэтому их видно было плохо. Зато на фоне дома очень классно выглядели тени от деревьев: почти как какой-то народный узор!
А сегодня, как обычно после завершения чего-то важного, день потерянности. Не могу взять и быстро переключиться на то, чем занимался до конкурса: заметками для Дзен.Каналов, работой над IntB и так далее.

Смешная ошибка

4X_Pro
Продолжаю участвовать в конкурсе на CodinGame. Вчера открылась серебряная лига, куда я сразу же прошёл. А вот дальше откатился на 1200-1300 места и ничего не мог с этим поделать. Два дня ломал голову, что же улучшить в алгоритме, почему такие плохие результаты. Потом стал сравнивать свои действия и действия противника на первых ходах (у меня до 6-ого хода последовательность действий закодирована жёстко) и обнаружил, что даже когда я пытаюсь дублировать действия противника один в один, это не получается. Стал разбираться и обнаружил глупейшую ошибку. У меня проверка возможности совершить то или иное действие была сделана криво: количество sun points (очков действий) проверялось на строго больше, а не больше или равно. Как только это исправил, сразу же подпрыгнул до 860 места.
А вообще, недавно подумалось, что CodinGame — это один из немногих сохранившихся кусочков старого Интернета. Во-первых, все общаются под Сетевыми именами. А у многих ещё на автарах персонажи старых компьютерных игр (видел даже Rockmanа у кого-то). Во-вторых, техноэлитизм: положение в иерархии на сайте определяется через интеллектуальные показатели: знание алгоритмов, умение писать код и находить решение, а технически безграмотным там делать нечего. Ну и в-третьих, практически сведена к минимуму коммерческая составляющая, что спасает сообщество от деградации.

Прогулка к устью Плотни

4X_Pro
Наконец-то холода закончились, и появилась возможность выбраться на прогулку. На этот раз я решил отправиться к водоёму к югу от Буньково, а затем — к устью реки Плотня. Настроение было просто отличное: солнечный весенний день, совсем недавно появившиеся светло-зелёные листья на деревьях, и ощущение легкости и беззаботности. Ещё когда только подходил к реке, удивился, как много солнечных бликов видно сквозь деревья. Оказалось, что и Клязьма, и Плотня очень разлились из-за последних дождей, и значительная часть луга возле устья Плотни затоплена водой. А ещё там образовался небольшой островок, и кто-то положил доску, чтобы на него можно было перебраться. Я хотел было забраться туда, но доска оказалась слишком ненадёжной, и от этой идеи пришлось отказаться.

Новый конкурс на CodinGame

4X_Pro
В четверг днём успел сделать ещё один небольшой шаг в плане поддержки IndieWeb — написал код для endpoint discovery.
А потом начался конкурс на CodinGame! Задача про засев леса меня очень порадовала! Как и ожидалось, в бронзовую лигу я поднялся в тот же вечер, буквально с двух commitов (точнее, на CodinGame правильнее называть их submitами), написав совершенно простенький алгоритм. А вот дальше немного замедлился. Попытался было написать алгоритм, играющий перебором, но при большой глубине поиска нарывался на таймаут, а при маленькой — оказался на 1700-ых местах из 4000.
Сегодня решил попробовать другой подход. Написал код с набором стратегий, где выбор между ними осуществляется по набору фиксированных правил. Сразу результат улучшился: сначала 1200-ое место, потом, после пары мелких правок, поднялся до 1000 позиции. Но всё равно код не самым оптимальным образом играет в самом начале, и продолжаю думать, что с этим делать. Но бота бронзовой лиги вроде обыгрывает без проблем, так что, скорее всего, в серебряную лигу тоже без проблем поднимусь.

Поездка к Карпятнику

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

Не совсем slow life

4X_Pro
В последние дни вдруг стало хватать 7.5 часов сна. Не знаю, с чем это связано: то ли стал ложиться раньше, то ли уменьшил информационный поток, и поэтому меньше времени требуется на разгрузку мозга. Но даже несмотря на это, время всё равно девается непонятно куда. Вот, например, позавчера выключил компьютер в 23:40, но спать всё равно лёг только чуть раньше трёх часов. А за это время успел только поесть и собрать вещи для поездки на дачу. На следующий день встал в 10:40, а такси для поездки мы с отцом заказали в 13 ровно. А за эти два с небольшим часа успел только поесть, полить цветы и выбросить мусор. Не успел даже посидеть в медитации, как собирался изначально, для успокоения перед поездкой. Куда делось остальное время — загадка… Да и сегодня проснулся в 11:04, и всё, что сделал до 12 часов — это выпил чаю и посозерцал вид из окна.
Всё-таки slow life хороша тогда, когда каждый момент максимально осознан и прочувствован. Например, с некоторыми оговорками туда можно отнести сегодняшнее утреннее созерацание за чашкой чая. А когда время уходит непонятно куда, а сделано мало — это не столько slow life, сколько просто ерунда какая-то. Вопрос только в том, как понять, чем такие огромные потери времени вызваны.

Страницы:
Задать вопрос

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