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

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


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

t.me/4x_pro

Лог жизни

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


Последние дни лета

4X_Pro
Постепенно возвращаюсь к нормальной жизни после конкурса. В субботу сходил на встречу по настолкам. На этот раз пришло всего 4 человека. Организатор встречи даже расстроился из-за этого. Зато поиграли хорошо! Сначала два раза сыграли в «Кондотьеров» (давно хотел поиграть в эту игру, но на предыдущих встречах как-то не находилось желающих). Но «Кондотьеры» — игра сложная. Я никак не могу найти баланс между двумя крайностями: либо потратить все карты на победу любой ценой, и потом следующую битву или две сидеть без карт (и, соответственно, без возможности что-то сделать), либо наоборот, играю слишком пассивно. Потом переключились на новую для меня игру — «Средневековая академия». Эта игра гораздо проще, и построена на распределении ресурсов между семью направлениями, причем в некоторых из них важно оказаться первым глобально (то есть за три или даже все шесть раундов), в некоторых — локально (то есть в текущем раунде), а в некоторых — наоборот, важно не оказаться последним или предпоследним. В первый раз я не сразу понял некоторые особенности игры, поэтому оказался последним с отрывом в одно очко от третьего. Во второй раз получилось так, что мог бы занять второе место, но не учел того, что в результате дополнительных ходов один из игроков обгонит меня в самом конце (хотя мне даже это пытались подсказать), и в результате недополучил 7 очков, которые запросто мог бы получить, и оказался третьим. К третьей игре я уже учел все это, понял, как играют остальные игроки, и занял первое место. Причем мог бы закончить с большим отрывом, но один из игроков попытался обойти меня на драконоборчестве, и пришлось потратить дополнительные ходы в последнем раунде на спасение ситуации там, хотя изначально я планировал использовать их на взятие дополнительных 6 очков в другой области.
В воскресенье отправился в Зарядье. Основной целью было посмотреть на результаты конкурса «Планета Москва», которые выставлены там в галерее на Китайгородской стене. Потом решил зайти в сам парк, посмотреть его самую дальнюю часть (юго-западный угол) с болотной растительностью. Так уж получилось, что во все предыдущие приходы туда я как-то до него не добирался. Но увы, это оказалось не самой удачной идеей: Зарядье по воскресеньям просто переполнено людьми. Оттуда решил пройти пешком к Третьяковской. Какой же огромный контраст: стоило выбраться из толпы, перейти мост и дойти до Водоотводного канала, как тут же возникло ощущение спокойствия, неспешности и чувства гармонии с городом! Еще нашел необычный фонтан без какого-либо ограждения. Просто кусок улицы с дырками в плитке, из которых бьют струи воды! Причем высота струй меняется, иногда исчезают полностью, и тогда невнимательный прохожий рискует получить непредвиденное купание. Что любопытно, хотя я бывал в этом месте в позапрошлом году, то ли этих фонтанов не было, то ли я просто не обращал на них внимание.
А вчера отсиживался дома. Растолкал те накопившиеся задолженности перед жизнью, о которых писал раньше, но появились новые. А еще на Ask получил очень интересный вопрос про то, что я транслирую своей жизнью сейчас, заставивший основательно задуматься.

Legends of Code and Magic: итоги

4X_Pro
Прошлое воскресенье и понедельник я провел в очень подавленном состоянии. На конкурсе CodinGame дела шли очень плохо: несмотря на все мои попытки усовершенствовать алгоритм, я скатывался все ниже и ниже в рейтинге, и никак не мог понять, почему это происходит. Вроде ошибок нет, алгоритм играет нормально, а я все равно раз за разом проигрываю. Еще и чата узнал, что есть люди, которые вообще написали полноценный симулятор этой игры у себя на компьютере и провели на нем моделирование множества игр, на основании чего для каждой карты определили коэффициент ее полезности. Стало ясно, что с моим простеньким алгоритмом выбора карт с такими тягаться не по силам.
Попробовал даже быстро написать новый вариант (уже пятый по счету), но и в нем результаты отличались не сильно. Во вторник я прекратил все эти попытки, а стал искать среди уже отправленных версий те, на которых мне еще удавалось подняться хотя бы до середины лиги. И в итоге нашел такую, которая позволила снова подпрыгнуть до 202 места. Среда и четверг ушли на испытание в этой версии некоторых идей, которые возникли в воскресенье и понедельник. Еще я пытался поиграться с функцией выбора карт на этапе начальной раздачи. Но все было безрезультатно: либо изменения были несущественны, либо наоборот, я начинал падать вниз. Кроме того, так и оставался вопрос с тем багом, про который я уже писал. Почему-то при его наличии результаты получались в разы лучше, чем при его отсутствии, хотя с точки зрения здравого смысла должно было быть все наоборот. Еще пытался изучить статистику и понять, на каких именно раскладах я проигрываю, но все что удалось — это сделать предположение, что проигрыши идут на раскладах, где guard-карт мало, а противник набирает много «тяжелых» карт.
Наконец, наступил последний день конкурса — пятница. Тут мне пришло в голову (опять же, под влиянием чата) применить метод Монте-Карло, то есть выбирать ход случайно, моделировать возможный ответ противника, исходя из соображения, что он будет бить только в guard-карты и моего игрока, и оценивать результат, выбирая в итоге тот, у которого оценка оказалась лучшей. На удивление быстро я переделал под него свой старый код, но увы, такой подход тоже оказался совершенно безрезультатным: я по-прежнему оказывался на дне серебряной лиги.
Вообще, если в предыдущих конкурсах было понятно, что делать, как играть, чтобы выиграть, но у меня не хватало знаний описать это математически и закодировать, то в этом — все наоборот. Я мог написать практически любую стратегию, но никак не мог понять, как вообще надо играть, чтобы выигрывать. В частности, как именно происходит захват стратегической инициативы, когда у одной из сторон на столе оказывает на три или более карт больше, после чего дальнеший ход игры, фактически, предрешен. А не понимая этого, я мог делать функцию оценки только вслепую из общих соображений типа «health points и показатели карт на столе моего игрока должны давать плюс, health points и карты противника — минус». И, судя по всему, главный недостаток моего алгоритма заключался в том, что слишком часто он решал выложить новую карту вместо того, чтобы бить в противника. И еще я не учел ассиметричности игры, того, что оказавшись вторым по очередности хода, нужно играть иначе, чем первым (хотя как именно «иначе» — не понимаю до сих пор). Из-за этого у меня было много результатов, когда я у одного и того же противника первым игроком выигрываю, вторым — проигрываю.
Еще непростой выбор был в конце между двумя версиями кода, одна из которых была хорошо протестирована, а другая — меньше, но вроде бы давала лучший результат. В итоге менее чем за минуту я все же выбрал вторую. И вроде бы не прогадал: 203 место в серебряной лиге, 590-ое в общем зачете. То есть с небольшой погрешностью повторил свои результаты предыдущих конкурсов.
В общем, что можно сказать в итоге: переписал код целых семь раз, получил массу опыта и интересных идей, попробовал делать то, о чем прежде имел весьма смутные представления, впервые стал целенаправленно применять функциональный подход и оценил его преимущества, да и вообще стал чувствовать себя в Python так же уверенно, как и в PHP. Но увы, в плане результатов я ожидал все же большего…

Жизнь в вечном опоздании

4X_Pro
Недавно осознал, что же вызывает у меня существенный дискомфорт и не дает чувствовать себя полноценно счастливым. Это постоянное чувство внутреннего опоздания, отставания от графика, того, что я реализую задуманное гораздо позже, чем мог бы. Стал анализировать, откуда оно берется, и понял, что в голове у меня есть образ некоего почти идеального я. Того, есть четкие приоритеты между «хочу» и «надо», кто умеет работать по плану, и не отвлекаться на постороннее. Соответственно тот почти идеальный я, задумав какую-либо идею, либо сразу же приступил бы к ее исполнению, либо, при наличии более важных дел, типа работы/учебы, закончил бы сначала все эти дела, а потом все равно взялся бы за задуманное. У реального меня все получается иначе. Во-первых, постоянные конфликты между «хочу» и «надо бы», которые я описывал в отдельном сообщении. Во-вторых, если я пытаюсь приступить к реализации и попадаю в зону неуверенности, где не знаю, как действовать, тут же срабатывает защитная реакция: мозг немедленно находит, на что переключиться. Причем то, на что я переключился, кажется безумно увлекательным, даже если я при этом умом понимаю абсолютную бесползеность этого занятия. Так проходит день, а на следующий мотивация уже исчезает. В результате к начальному замыслу я возвращаюсь только через пару недель, или даже месяцев, а некоторые идеи так и вовсе годами лежат (так, например, соционическую социальную сеть я задумал в 2009, более-менее возможность заняться ее реализацией появилась в 2011, но реальный пуск состоялся в 2017). И поэтому когда я все же делаю задуманное, недовольство остается: «я должен был сделать это еще N недель назад!». Даже с этой заметкой именно так и получилось: я начал писать ее 4 августа, и хотел закончить в тот же день.
Самое интересное, что тот почти идеальный я, который все делает по плану и вовремя, когда-то реально существовал. Таким я был в школе и первых двух курсах Института. Потом же все поменялось… С другой стороны, тот идеальный я жил все же в совсем других условиях. Долгосрочные цели тогда были внешние: что-то делать меня заставляло не собственное желание, а учбеное расписание. Кроме того, задачи ставились, в основном те, для которых уже были даны все необходимые знания. Сейчас же почти у всех задач есть та или иная новая для меня часть, где неоходимые знания приходится приобретать на ходу и самостоятельно. И в третьих, тогда главным мотивирующим фактором был страх перед неопределенностью «ой, что же будет, если завтра я пойду не готовым». А потом он в какой-то момент он сменился пониманием «да ничего особо такого, просто потом все равно придется делать и сдавать, просто добавятся лишние проблемы».
Несколько лет назад (где-то с 2009 по 2013 годы) я активно искал способы вернуться к тому прежнему себе, но, безрезультатно. Любые попытки что-то планировать и исполнять эти планы приводили к мощному внутреннему протесту, на подавление которого жизненных сил тратилось в разы больше, чем на само дело. Потом решил пойти другим путем — отказался от планирования вообще, заняв позицию «что сделаю, то и хорошо». Отчасти это помогло, но вот это ощущение вечно опаздывающего все портит…

Конкурсы и итоги дня

4X_Pro
Опять весь день прошел в конкурсах. На CodinGame перепробовал почти все идеи, которые у меня были, но прорывных результатов ни одна не дала. Максимум что удалось — это подняться до 202 места в серебряной лиге, но сейчас снова скатился. И никак не могу понять, что делать: то ли стратегию игры менять, то ли начального распределения.
Вечером прошел очередное задание КСИ. На старте посмотрел: дается всего 20 минут. Подумал, что задание будет легким. Увы, это оказалось не так. Задание состояло из трех вопросов, и первый действительно был элементарным. А вот второй оказался кошмаром. Требовалось решить кучу уравнений уровня 6 класса средней школы, сложить результаты и выбрать соответствующий ответ. Вроде прорешал быстро. Но ответ получился такой, какого в списке вообще не было. Стал срочно все перепроверять, и таки ошибка обнаружилась. Эх, всегда у меня с математикой так было: вроде все понимаю, что и как считать, так где-нибудь да ошибусь. В результате на перепроверку потратил еще несколько минут. Наверное, следовало бы воспользоваться какой-нибудь онлайн-системой для решения уравнений, например, WolframAlpha, но я только сейчас узнал о том, что такое есть.
А последний вопрос оказался на анализ информации. В спокойном состоянии я легко бы на него ответил, но времени на ответ осталось всего две с половиной минуты, так что не было возможности точно убедиться, что я нашел верное решение. Так что не знаю, каким в итоге окажется результат.
Но зато интересно было наблюдать за собой, за тем, как ускоряется мышление в таких ситуациях.
Еще на том же CodinGame решил одну простенькую задачу на новом для меня скриптовом языке Lua. В целом язык мне понравился: какая-то своеобразная смесь Python и JavaScript. Только вот не хватает готовых функций типа filter и reduce, к которым я уже успел привыкнуть.
А вечером на какой-то момент вышел на улицу посмотреть на звезды. Сейчас небо по ночам уже темнеет полностью, и звезд видно гораздо больше. Какое же это потрясающее зрелище в ясные дни! А еще задумался, почему же ночное небо вызывает такое чувство восхищения…

Вопрос идентичности

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

CodinGame: прорыв в серебряную лигу

4X_Pro
Пара дней активного кодинга и отладки, и вот результат: я прорвался в серебряную лигу в Legends of Code and Magic!
Причем получилось весьма своеобразно: сначала я обнаружил в программе один баг: неправильно считалась оставшаяся мана. Исправил его, и внезапно получил существенное ухудшение результатов игры, хотя с точки зрения логики и здравого смысла результат должен быть обратный: в неправильном варианте просчитывается куча лишних вариантов, которые на самом деле сыграть не могут, и поэтому шансов найти хороший вариант игры существенно ниже.
Стал разбираться, в чем дело, и понял, что у меня слишком неэффективная функция оценки игрового состояния. Переделал ее, и даже с исправленной версией программы стал подниматься в бронзовой лиге до примерно 200-ого места. Поэкспериментировал с еще парой мелочей, и удалось в отдельные моменты подняться до сотых позиций, а вот дальше — никак.
И тут вдруг я обнаружил, что мой алгоритм на этапе выбора карт всегда берет нулевую карту, и никогда никакую другую. Оказалось, что когда я в последний раз переписывал алгоритм, я не учел одной особенности этапа раздачи карт: на нем идентификаторы всегда карт равны -1. В результате в функцию выбора карты передавалось их не три штуки, как должно было быть, а только одна, самая первая.
Как только я это исправил, сразу же легко поднялся в серебряную лигу. В отличие от прошлого конкурса, Code of Ctulu, когда прорыв состоялся в последние часы конкурса, когда я уже ни на что не наделся, на этот раз таких зашкаливающих эмоций, когда я был готов орать на весь поселок от радости, не было. А была просто удовлетворенность от достигнутого результата. Кстати, в серебряной лиге старт тоже оказался неплохим: сразу же поднялся на 350 место из 500, после того, как чуть поправил функцию оценки — до 310.
А впереди еще 7 дней конкурса, так что игра продолжается!

Жизненный кризис

4X_Pro
Второй день живу в состоянии сильного эмоционального спада. Хотя в целом вроде бы все хорошо, есть множество мелких поводов для переживаний. Например, хоть я отладил свою программу для очередного конкурса на CodinGame, результаты она показала не просто плохие, а очень плохие: удалось подняться всего на 70 позиций. В группе с конкурсами по программированию тоже прироста никакого. Плюс переживания по поводу слишком низких результатов в предыдущих конкурсах. Неужели я уперся в потолок своих возможностей? И даже Ask не радует совершенно. А остатки жизненной энергии отбирают мелкие невыполненные обещания. Это самое противное… Именно из-за такого я когда-то и начал мечтать о мире без сроков и планов: в моменты таких спадов хочется «нырнуть в реку времени», уйдя со связи отовсюду, откуда возможно. И не тратить жизнь на то, что мне не интересно. Но увы, не получается…
Только к сегодняшнему вечеру ситуация хоть как-то улучшилась. Сначала прогулялся вдоль реки, посмотрел закат. Потом вернулся домой, проспал минут 30, после чего начал более-менее приходить в себя. В частности, придумал новый алгоритм для конкурса, и даже частично его реализовал. В отличие от предыдущего, который построен на «если так, выбирай стратегию такую», тут просто перебор возможных ходов. К моему удивлению, когда все сложилось в голове, получилось весьма аккуратно и компактно.

Немного астрологии

4X_Pro
С неявной подачи одного из анонимов на Ask.fm посчитал событийные гороскопы для двух дней моей жизни, в которых произошли два важных для меня конфликта: Декабрьская трагедия (14 декабря 2001 года) и Черная весть (26 апреля 2013). Каково же было мое удивление, когда получились две очень похожих картины: в одном доме оказываются две планеты и северный лунный узел, в противоположном — еще три планеты, и еще одна — где-то отдельно (при этом Уран, Нептун и Плутон я не учитывал). Правда, сами дома — разные: Декабрьская трагедия — VI и XII, Черная весть — II и VIII.
Потом попробовал посчитать еще несколько дат, не столь драматичных (вдруг это довольно типовой расклад), но там ничего подобного не наблюдается, планеты оказываются расставленными более равномерно.

Некоторые итоги недели

4X_Pro
Неделя прошла в каком-то потерянном состоянии. То ли результат того, что режим дня сбился, то ли спад жизненной энергии после поездок и связанных с ними психоэмоциональных перегрузок, то ли близость солнечного затмения повлияла. Впрочем, после СПб в прошлом году несколько дней то же самое было. Все, что я за эти дни сделал — это написал записи в блог о поездках, выложил фото, и опубликовал свою группу «Конкурсы для программистов». Даже на CodinGame ресурсов не хватило.
А сегодня снова отправился на дачу. Несмотря на то, что уехал оттуда всего 8 дней назад, кажется, что прошла целая вечность. Плюс еще на самой даче тоже много чего изменилось, так как отец сделал за это время мини-ремонт. Причем несмотря на то, что встал поздно, перед поездкой успел еще пройти очередное задание КСИ.
Еще в очередной раз убедился: новый опыт — это путь к новым идеям. В частности, когда я описывал поездку в Переславль, возникла мысль сделать новый тип раздела для IntB — travel blog, где фотогалерея с краткими описаниями фото будет сочетаться с картой маршрута, выводимой на основе Яндекс.Карт или Google.Maps. Или же просто заложить такую возможность в обычную фотогалерею… Причем сначала я думал сохранять сериализованные данные в отдельный столбец в таблице для расширенной информации, а сейчас прихожу к выводу, что лучше просто делать дополнительные теги разметки. Только вот когда это сделаю — не знаю. Тяжело все-таки жить в мире с избыточным выбором возможностей: хватаюсь то за одно, то за другое, и ничего не довожу до конца.

Переславль — город, потерявшийся во времени

4X_Pro
Запись сделана 7 августа, но только сейчас собрался ее опубликовать.
Наконец-то пришел в себя после всех переживаний по поводу поездки, и смог найти время ее описать.
Добрались мы на удивление хорошо: даже на 7 минут быстрее, чем предполагалось по расписанию. В дороге я то смотрел в окно, где сосновые леса чередовались с полями, то пытался уйти в трансовое состояние, чтобы хоть как-то компенсировать недосып. И, надо сказать, это получилось: когда подъехали к Переславлю, я почувствовал себя вполне бодрым и довольным жизнью. Но тут дурную шутку сыграла погода. Когда мы выезжали, было солнечно, но где-то к середине пути небо полностью заволокло тучами, а вскоре пошел сильный дождь. Яндекс.Погода показывала весьма неутешительный прогноз: дождь будет продолжаться еще два часа.
Поэтому приехав в город и высадившись из автобуса, мы какое-то время не знали, что делать. Сэр Мик совершенно не хотел идти под дождь, и поэтому предложил забить на все планы и ехать дальше,  в Ярославль. Мне эта идея нравилась чуть более чем никак, так как получалось, что у меня до обратного поезда будет, в лучшем случае, час. Но и остаться одному, и отправиться осматривать Переславль в одиночестве тоже как-то было напряжно. Тем не менее, мы пошли к кассе и посмотрели расписание, но сломали себе мозги и забили на эту идею (чего стоит только фраза «Время отправления из пункта назначения»). Потом выяснилось, что нормальное расписание, где было указано время прохождения автобусов через сам Переславль, было на противоположной стене. Пока все это происходило, дождь прекратился. И мы вернулись к первоначальному плану, отправившись вдоль главной улицы (точнее, главными в городе можно назвать несколько улиц, последовательно переходящие одна в другую: Советская, Крадовского, Московская).
"Читать далее… Осторожно, траффик: несколько десятков мегабайт фото"

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

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