Портрет 4X_Pro
Был в Сети 30 дек. 2024 г., 17:04
Мультиблог
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
Сегодня проснулся гораздо раньше обычного, так как вернулся к тому, чтобы спать в холоде. В результате день получился длинный, но довольно бестолковый. Сел было писать заметку про то, как избыточный выбор обесценивает все, но как всегда, бессознательное взбунтовалось против планов. В заметке потребовалось вспомнить автора книги «Парадок выбора», я стал искать эту книгу у себя в планшете. В итоге наткнулся на совсем другую — «Человек убежденный» Эрика Хоффнера. Ее я скачал очень давно и благополучно забыл, а сейчас начал читать с огромным интересом, поскольку в ней затрагивается одна из важнейших для меня тем: как происходит возникновение и распад массовых движений. В общем, примерно полдня ушло на эту книгу.
А вечером решил еще пару задач на CodinGame на языке Lua. Но в нем я сейчас сильно разочаровался. Многие вещи приходится делать вручную. Например, там нет готового split. Да и вообще, работа со строками ужасно сделана. В общем, реально язык хорош только там, где экономия ресурсов важнее всего остального. А в других случаях лучше писать на Ruby (вот этот язык мне в последнее время нравится все больше и больше) или на Python.
Еще было бы интересно провести тестирование производительности — сравнить Ruby, Lua, PHP и Python на каких-нибудь типовых задачах типа чисел Фибоначчи или решения систем уравнений, но вряд ли до этого дойдут руки.

Жизнь вроде бы налаживается

4X_Pro
До субботы всё было совсем плохо, а потом, как это ни странно, жизнь начала налаживаться. Сменился эмоциональный фон. А за воскресенье и понедельник столкнул большую часть из тех доделок, о которых писал в предыдущих сообщениях. Ещё съездил в гости к Р.Л., доделали кое-что и по его сайту.
И вообще, не раз уже замечал, что если растянуть проблему во времени, она проблемой быть перестаёт, решение рано или поздно находится, а необходимая для его реализации энергия — накапливается (или я получаю ее от людей, заинтересованных в решении).
На CodingGame решил ещё одну оптимизационную задачу (правда, решение пока далеко от идеала и позволило подняться только в TOP-70%) — Code vs Zombies. И в общем рейтинге поднялся примерно до 1230 места.
А сегодня с DarLik ходили в кино. Посмотрели фильм «Репродукция», где поднимается тема клонирования и переноса сознания. Хотя сначала я отнесся к идее сходить на этот фильм без энтузиазма, но в итоге совершенно не жалею, что посмотрел. Даже несмотря на некоторые явные нелогичности в фильме.
Ещё вчера совершил сеанс технонекромантии — оживил свой старый планшет, купленный в 2015 году. В нем от долгого хранения в разряженном состоянии начал портиться аккумулятор. И получалось вот что: на этапе перехода от зарядки малым током к обычной планшет пытался включить экран, чтобы показать индикатор. Но экран начинал потреблять столько энергии, что уровень заряда тут же снова падал ниже критического, и планшет отключался. Часа два я держал его на зарядке и надеялся, что это как-то решится. А потом пришлось прибегнуть к хитрости: вскрыть планшет и отключить экран вообще. Физически вынуть шлейф из разьема. Я не верил, что это даст результат, и ожидал, что все, планшет придется признать сдохшим, но, к огромному моему удивлению, это сработало! Но увы, в процессе вскрытия случилась другая неприятность: отломились провода от динамика, который приклеен к задней крышке. Так что устройство теперь в вечном беззвучном режиме. Потом ещё удалил с него KingRoot (весьма вредная утилита, которая кроме основной задачи — получения root-прав, пытается делать кучу ненужного: то систему оптимизировать, то рекламу на экране блокировки показывать).

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

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, но я-то ни с тем, ни с другим дела почти не имел. Плюс, подразобравшись более детально в этой теме, понял, что небольшим магазинам нет смысла настраивать его непосредственно у себя на сайте вообще, а проще использовать агрегатора платежей. Но вот объяснять это каждый раз как-то напрягает…

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

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