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

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


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

t.me/4x_pro

Лог жизни

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


Неприятности продолжаются

4X_Pro
В пятницу забил на все, и на какой-то момент показалось, что жизнь улучшилась. А сегодня опять все плохо! Какое-то непонятное сочетание усталости и злости на все вокруг без видимых причин. И опять все из рук валится. На CodinGame сыграл несколько clashей. Сначала все было хорошо, поднялся с 95 до 74 места. А потом сначала затупил на одной задаче по реверсу, а потом прилетела неадекватно сложная задача в shortest mode, которую даже просто за 15 решить сложно, не говоря уж об оптимизации. И тут же свалился обратно на 94-ое, аннулировав тем самым все достигнутое.
Да еще отец достает ерундой разной. Хочется звуконепроницаемую дверь с двумя замками как минимум в комнату поставить!
Зато от злости наконец-то принял решение удалить Ask. А то в последнее время там доля нормальных вопросов упала до 20%, если не меньше, остальное — полнейший дебилизм. Да и криво работающие уведомления в приложении тоже давно уже доставали.
В общем, нужно уходить в спячку до конца декабря!

Осенние проблемы и неприятности

4X_Pro
Наступила настоящая осень с серыми и мрачными днями, и это тут же сказалось на настроении. Раздражает все! В частности, то, что вчера, несмотря на то, что хотел наладить режим и выключить компьютер в 3:10, засиделся в Сети до 3:45, а спать лег каким-то образом все равно в 5 ночи. Тем не менее, сегодня заставил себя встать в 11:15, и теперь все валится из рук.
Еще опять посыпались проблемы. Всего пару дней назад я думал, что все, столкнул очередную freelance-задачу и теперь свободен, и уже почти было собрался прожить месяц в режиме «в Интернет только с МЦК», но тут посыпались неприятности. Сначала попытались подкинуть еще одну задачу, потом по завершенной задаче вылезло несколько мелких, но очень противных доработок. А потом вдруг написал один мой давний знакомый, с которым мы пытались сделать одну доработку его сайта в январе, но дело забуксовало, а теперь он о нем вспомнил.
А самое главное, что голова совсем не соображает, и поэтому ничего не могу делать: осенняя погода давит на психику. Весной или летом бы я все то же самое воспринял бы как мелкие неприятности, да и только. А сейчас все кажется мрачным и беспросветным. Причем вот что забавно: раньше я от жизненных неприятностей пытался убежать в Сеть, а сейчас ситуация меняется на обратную: хочу спрятаться в оффлайне, от всяких наведенных «надо», идущих из Сети.

Две прогулки: Кусково и Пресня

4X_Pro
Вчера отправился на длинную прогулку в Кусково. Как обычно, вышел из дома позже, чем хотел, где-то после 16 часов. Зато дошел до моста из Новогиреево в Кусково как раз в тот момент, когда закатное солнце отражается в рельсах железной дороги, проходящей под мостом, создавая удивительную игру света. И даже удалось это сфотографировать! Помнится, года два я собирался это сделать, и вот получилось. Правда, фотография все равно не передает полноту впечатлений.
А когда я дошел до Большого Дворцового пруда, уже начало темнеть. Я немного посидел на берегу. Подумал о том, что вот, какой уже раз прихожу сюда с мыслью «нужно бросить все и начать настоящую жизнь», где будет больше прогулок и впечатлений, а внимание не будет постоянно расфокусировано Интернетом. С другой стороны, также хочется заняться капитально своим сайтом и сайтовым движком. Но потом возвращаюсь домой и все снова получатся как обычно: поток жизни захватывает меня и тащит неизвестно куда.
Потом я еще прогулялся вдоль дальнего берега пруда и канала, а затем отправлся домой. Перехода по мостику над ж/д станцией Кусково нашел забавную надпись: «Народ проснись!» и ответ другим цветом и шрифтом: «Еще пять минуточек!». Сфотографировал ее и выложил в Instagram.
Сегодня с Tellой отправились в парк Красная Пресня. Туда собирались съездить очень давно, еще то ли с весны, то ли даже с прошлого года, но все никак не складывалось. Парк очень небольшой, но в целом произвел хорошее впечатление, несмотря на то, что некоторые его части сейчас отгорожены забором и недоступны. Необычен он прудом, который в нем имеется: по сути дела, это даже не пруд, а достаточно широкий канал необычной формы с несколькими мостами. В канале плавало немало уток, которые при виде нас сначала оживились, но когда поняли, что еды не будет, утратили к нам всякий интерес. Еще запомнилась необычная подсветка и вид на башни Москва-Сити, верхняя часть которых исчезала где-то в тумане. Еще был момент, когда чуть не поругались с Tellой из-за того, что она затронула неприятную для меня тему, а я на это резко отреагировал фразой «фильтруй базар!».
На обратном пути попали под холодный и неприятный дождь. А сейчас я в каком-то странном состоянии, и весь остаток дня ни на чем не могу сосредоточиться…

CodinGame: конкурс A*Craft завершился

4X_Pro
Сегодня закончился конкурс A*Craft на CodinGame. В отличие от предыдущих, он длился всего два с половиной дня и был не на игры, а на оптимизацию: нужно было расставить стрелки на карте так, чтобы сделать суммарный путь роботов по ней максимальным. Я занял 150-ое место из 2456! (Правда, примерно последние 500 участников — те, кто зарегистрировался, но даже не попытался прислать хоть какой-то код, и поэтому получившие 0 очков.) Это гораздо лучший показатель, чем во всех предыдущих конкурсах. Если считать в относительных показателях, то до этого мне максимум удавалось подняться до 84%, а в этот раз — до 93%, что близко к моему верхнему порогу амбициозности!
И это несмотря на то, что толком на конкурс не настроился, и до воскресенья подходил к нему как-то лениво. Впрочем, задачи по оптимизации даются мне проще сами по себе. Кроме того, код был основан примерно на том же рекурсивном алгоритме, который я впервые пытался применить еще в Code of Ctulu. Написал я его достаточно быстро, но потом обнаружился какой-то совершенно непонятный баг, на борьбу с которым ушла половина воскресенья. А причина оказалась банальной: я дважды использовал одно и то же имя result в одной функции, но подразумевая при этом две совершенно разных переменных: одну для поиска максимума, вторую — для хранения значения, которое будет возвращено из функции. В результате вместо максимума возвращался последний результат.
Из-за этого я только вечером воскресенья обнаружил, что хотя алгоритм хорошо справляется с картами из узких длинных коридоров, но дает довольно посредственные результаты на картах с большими смежными областями. Для таких карт я задумал было еще один алгоритм с совершенно другим подходом, но так его и не реализовал. Во-первых, не хватало времени, чтобы тщательно его обдумать и вытащить из зоны неуверенности. Во-вторых, нашел один случай, когда первый алгоритм (который рекурсивный) давал неоптимальный результат. Сначала казалось, что ошибка простая и ее удастся устранить быстро. Но все оказалось не так: я провозился с ней до глубокой ночи. А потом выяснилось, что ошибка действительно примитивная: я забываю вызвать .copy() при рекурсивном вызове функции, в результате чего вместо копии карты для поиска на следующем шаге передается ее исходный вариант и результаты поиска пути в разных направлениях начинают влиять друг на друга. Странно, что на остальных картах это работало! Причем выяснилось, что если на каждом шаге создавать копию карты, это занимает много времени, и в итоге на многих тестах начинается вылет по таймауту. Пришлось применить «костыльное» решение: написать условие, по которому принимается решение, делать копию или нет.
Поэтому вместо второго алгоритма сделал простую проверку: если карта с большими смежными областями, и роботов много, то для последних строить путь только до ближайшей уже размещенной стрелки. И, как это ни странно, это дало определенный результат: вместо 5400 очков, которые я набирал изначально, стало получаться 5700! А вот исправление того бага с копией дало всего лишь жалких 17 очков (впрочем, их оказалось достаточно, чтобы подняться еще на несколько мест).
Но вообще, наверное, надо было писать не на Python, а на PHP. Там и код быстрее выполняется (если в PHP 7), и копии массивов создаются автоматически (так что я бы не возился полдня с первым багом и, может быть, успел бы и второй алгоритм реализовать), причем в режиме copy-on-write, что тоже дало бы неплохую оптимизацию. Но увы, нельзя применять в качестве ключей для хеша связки из нескольких значений (то, что в Python называется tuples). Впрочем, при желании это можно было бы легко обойти.
Но в любом случае, я доволен результатом!

Почти выздоровел

4X_Pro
Наконец-то выздоровел. Причем сегодня еще сумел встать раньше 11 часов, впервые за последние два месяца, и застать момент, когда солнце еще заходит в окно моей комнаты. Все же утро создает совсем другое настроение!
Еще задумался, что в последнее время живу в каком-то совершенно расхлябанном режиме: день проходит за днем без каких-либо четких целей. И никак не могу понять, что это: то ли обретение той самой свободы и жизни без забот, о которой я мечтал в 2000-х годах, то ли я сорвался с жизненных рельс и лечу куда-то в пропасть, и кончится все это плохо.
Пожалуй, только вчерашний день был некоторым исключением: я отключил Интернет на ноутбуке, что дало возможность написать две заметки: про взросление, и про то, как импортировать контакты со старого мобильника по Bluetooth. Но на это ушел почти весь день: закончил я где-то в 22 часа, потом даже на CodinGame не успел зайти.
В общем, все больше и больше задумываюсь, что все же надо перейти на режим жизни «в Интернет — только из метро». Так как при включенном Интернете время летит вообще вникуда, и ни на чем толком сосредоточиться не получается.

Болею

4X_Pro
В субботу меня угораздило заболеть. Как обычно, из-за сквозняков, которые возникли из-за постоянно открытого окна из-за слишком теплой погоды. (Из-за этого даже задумался, есть ли возможность сделать принудительную вентиляцию в квартире так, чтобы можно было держать окна закрытыми.) Причем если обычно в таких случаях я болтаюсь на грани между болен и здоров, то в этот раз разболелся всерьез. В субботу был сильный насморк, а вчера полезла вверх температура, и, судя по всему, шел какой-то воспалительный процесс. Сегодня, наоборот, чувство какого-то внутреннего холода. Из-за этого вчера почти весь день прошел мимо. Да и сегодня тоже как-то ни на чем не могу сосредоточиться.
А еще разозлила некая Эвелина Странная, зачем-то зашедшая на мою страницу ВК. Она считает себя ЛИИ-ЛВЭФ, но при этом озвучивает гаммийско-ускорительские позиции, аналогичные тем, которое в свое время высказывала Harriet Specter aka HH. Терпеть не могу подобное! И теперь думаю, что сделать: забанить сразу или промолчать, в надежде, что сама сбежит.

Отличный день

4X_Pro
На удивление сегодня получился отличный день! Проспал очень допоздна, а встав, долго думал, что лучше сделать — досмотреть вебинар про протокол IPv6 или отправиться на прогулку в Измайловский парк. В итоге решил, что погода может поменяться, а вебинар никуда не денется, и выбрал второе. Решил дойти до острова на Серебряно-Виноградном пруде, на котором не бывал со злополучного 2013 года. В парке замечательно! Золотая осень в самом разгаре. Сделал по дороге несколько фотографий деревьев, потом — поснимал на самом острове. Обратно тоже решил идти пешком, в результате в сумме прошагал целых 12 км, в результате чего довольно ощутимо устал.
Вечером объяснял отцу, который купил новый телефон, как пользоваться Android и перенес ему контакты со старого. (Кстати, сделать это оказалось не так-то просто.) Потом прошел несколько Clash of Code и поднялся с 127 до 61 места. Причем очень легко, голова соображала просто супер! Затем поиграл в World of Tanks и выполнил дневную норму в 5 безошибочных заездов на Клавогонках.
Не успел только две вещи: досмотреть-таки этот вебинар, и написать пару заметок в другие разделы своего мультиблога (уже который раз это откладываю).

Малоинтересный период жизни

4X_Pro
Опять не успеваю писать в блог. Впрочем, слишком поздно встаю, и из-за этого вообще много чего не успеваю. Да еще осень и сокращение светового дня давит на психику… К тому же до вчерашнего дня ничего особо интересного не происходило. Тренируюсь то в Клавогонках (и там довел среднюю скорость в безошибочном режиме до 399 знаков/минуту), то в Clash of Code, где поднялся было до 90 места, но после пары весьма эпичных промахов «отъехал» до 140 места, и только сегодня немного отыгрался. Обнаружил интересную закономерность: если пытаться идти на Клавогонки сразу после CodinGame или наоборот, резльутаты получаются в разы хуже. Видимо, задействуются какие-то взаимоисключающие области мозга.
Пожалуй, исключением был только весьма активный диалог с Миком в ЖЖ, по итогам которого я несколько прояснил свою позицию про то, что такое «хорошее взросление» и «плохое взросление», о чем, наверное, сделаю скоро запись в мировоззренческий раздел. (Эх, сколько же у меня задуманного, но недописанного накопилось! Только вот мотивации сесть и дописать мало.)
Вчера после достаточно долгого сидения дома выбрался в Измайловский парк, к Лебедянскому пруду. Сделал там фотографию почти с той же точки, что и ту, которая долгое время была у меня заставкой на рабочем столе. Но поскольку снимал осенью, а не в яркий слонечный день, по атмосфере новая фотография получилась совсем иной.
Сегодня встал очень поздно, проспав более десяти часов. И за остаток дня толком ничего не успел, а вечером сходили с Tellой на фильм «Тайна дома с часами». Фильм мне очень понравился, пожалуй, один из лучших, что я смотрел за последнее время. Возможно, потому, что в нем поднимается одна из главных тем третьего уровня развития личности — поиск себя и своих внутренних ресурсов.
Еще в последнее время уже второй раз пишут с вопросами про подключение Google Pay. Дело в том, что год назад я опубликовал статью про то, как это делается. Но описал там только настройки на client-side, так как в серверной части все зависит от используемой CMS и платежного шлюза. Тогда надеялся, что буду одним из первых, написавших на эту тему, и вылезу в ТОП.  И теперь мне пишут то по поводу OpenCart, то по поводу Joomla, но я-то ни с тем, ни с другим дела почти не имел. Плюс, подразобравшись более детально в этой теме, понял, что небольшим магазинам нет смысла настраивать его непосредственно у себя на сайте вообще, а проще использовать агрегатора платежей. Но вот объяснять это каждый раз как-то напрягает…

Еще одна встреча по настольным играм

4X_Pro
В четверг долго думал, как лучше поступить: съездить последний раз в этом году на дачу или отправиться в субботу на настольные игры. По-хорошему, первый вариант был бы правильнее. Но перспектива холодной ночевки как-то не радовала, да и несколько дней не очень быстрого Интернета — тоже. Поэтому остался, несмотря на то, что из-за этого год получился без послденего заезда и связанных с ним размышлений и своего рода подведения итогов.
А настолки прошли как-то неоднозначно. Сначала разок сыграли в «Пес попутал». Впервые видел эту игру. Она чем-то похожа на «Кондотьеров» по игровому процессу, но, на мой взгляд, не столь захватывающая. Занял там второе место, причем в результате довольно жесткой борьбы, собрал 7 объектов, тогда как лидер — 8. Потом играли в «японский бенг», но вот в него я сегодня играл на удивление плохо, делал много явных ляпов. Потом сыграли пару конов в «Средневековую академию». Вот там я реализовал ту стратегию, которую продумывал с прошлой встречи. И результат не заставил себя ждать: первое место в первом кону, и второе — во втором. Хотя там я тоже пару раз сделал пару явных ляпов, дважды набрав на некоторых раздачах по 4 из 5 карт одной масти.  Но сумел использовать их в свою пользу. Только вот на втором кону никак не мог определиться между финансами и драконоборчеством, вкладывал и туда, и туда понемногу, и в результате на финансах оказался предпоследним (-5 очков), а на драконе — 3-ьим (всего 4 очка).
А потом сыграли в «Бэнг» обычный, но там меня вынесли на первом же круге (как-то там на удивление мало и карт, и жизней дается), еще до того, как до меня дошел ход. Впрочем, потом игра затянулась, стало ясно, что придется расходиться, не доиграв, и в итоге признали ничью. И, надо сказать, вовремя это сделали: на МЦК мы с Н.П. пришли за две минуты до прибытия последнего поезда, а Н.П. потом еще пришлось бежать на метро. Но в целом я доволен в эмоциональном плане, только не понимаю, что со мной происходило, почему вдруг столько ошибок, хотя вроде бы даже выспался и утром был бодрый (правда, потом ехал почти час в трамвае с плохой вентиляцией, от чего начала болеть голова).
Более того, уже ночью, придя домой, сумел показать неплохие результаты и в Code Clash на Codingame.

Терлецкий парк и размышления о погоне за признанием

4X_Pro
Сегодня, воспользовавшись кратковременным улучшением погоды, выбрался прогулятся в Терлецкий парк после почти недели безвылазного сидения дома. Обычно я хожу туда тогда, когда времени на большую прогулку нет, делаю круг вдоль Первого и Декоративного прудов и возвращаюсь домой. Но сегодня торопиться было некуда, поэтому обошел почти весь парк целиком. Прошел сначала, как обычно, к Первому пруду, от него — к Четвертому (на современных картах он называется Ольховым). Посмотрел на исток Черного ручья, затем вышел вообще к самой дальней точке парка — перекрестку Шоссе Энтузиастов и Свободного проспекта, потом вернулся к Третьему пруду, зашел на его остров (который когда-то был полуостровом). Постоял там над водой, поразмышлял о жизни, и затем отправился по дороге, которая считается остатками Владимирского тракта.
По дороге сделал несколько фотографий дубов с начинающими желтать листьями, нашел пару удачных ракурсов, с которых не снимал прежде, хотя думал, что уж где-где, а в Терлецкой дубраве точно знаю все. Еще в очередной раз подумал о том, что надо придти сюда как-нибудь на прогулку утром. От этой мысли перешел к тому, что с одной стороны, хотелось бы ходить на прогулки чаще, но с другой, стоит начать гулять несколько дней подряд, как тут же появляется паника по поводу «не успеваю!». (Или даже «не успеваааююю!», как сказала бы Kitsune. Впрочем, она со временем дружила, в отличие от меня.)
Причем не раз я говорил себе, что все, бросаю заниматься чем-то ради признания и результатов, и буду делать что-то только ради удовольствия, и тогда совершенно не важно будет, сколько времени у меня это займет. Но увы, все попытки приводили к тому, что проходила пара дней, и то, чем я занимался ради Познания и удовольствия, превращается в новый способ достижения результатов и признания. Или же просто переставало быть интересным. Например, весной я забросил типологии и занялся своим сайтом. Придумал почти десяток тем, по которым хотел бы высказаться, и все — сразу появилось новое направление, в котором захотелось получить признание — блоггерство. И сразу же начались переживания по поводу того, что тем много, а процесс написания идет как-то слишком уж медленно.
Или тот же самый CodinGame. Сначала я пришел туда, в основном, для получения опыта и расширения знаний в алгоритмике. Но стоило подняться до TOP-5000 в общем рейтинге, как тут же стал задумываться над тем, что надо войти в TOP-1000 и получить звание «Вавилонская башня», которое дают за решение задач на 15 разных языках программирования. Сегодня, кстати, сделал еще шаг в этом направлении: решил одну задачу middle-сложности на Java, которая стала 12 по счету языком. Причем, как всегда, не обошлось без невнимательности. Задача была на подсчет количества возможных путей в лабиринте. Алгоритм я сделал быстро (он похож на тот, который летом делал для Call of Ctulu), но на больших объемах данных не укладывался в отведенное время. Часа два ломал голову, пытаясь понять, что там можно закешировать и оптимизировать. А потом заметил, что в условии скзаано, что движение по лабиринут возможно только вправо и вниз, что исключало множество путей. После этого тут же все тесты были пройдены.
И даже попытку устроить себе период ограниченного доступа в Интернет только из метро/МЦК, про что писал недавно, тоже стал воспринимать как еще один нетривиальный способ попытаться получить общественное внимание.

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

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