Портрет 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
Вчера пришлось встать достаточно рано, несморя на то, что засиделся до 6 утра, так где-то в районе 12 часов должен был прийти мастер по холодильнику. В результате встал в состоянии жесткого недосыпа. Мастер пришел примерно в 12:30 и починил холодильник довольно быстро, меньше чем за час. Потом я собирался пообедать и поехать на встречу с настолками. Но из-за недосыпа и одной начавшейся переписки в Сети прособирался аж до 16:30. В результате на месте я был только после 17 часов.
На встрече играли в японский вариант Бенга. Ожидая, когда игра закончится, и можно будет присоединиться, я решил немного поесть. За это время пришло еще несколько человек, и мы решили разделиться: часть продолжила играть в Бенг, часть — решила поиграть в Нечто, а один из участников встречи стал собирать народ на «Кондотьеров». Я сначала не мог определиться между Бенгом и «Кондотьерами» (тем более в них, кроме меня, набралось всего только двое желающих), и решил поступить так: один раз в «Кондотьеров», потом — в «Бенг». И, надо сказать, не зря. У меня наконец-то получилось выиграть! Дело было так: сначала я проиграл несколько боев и счет стал 3:1:0. Потом в одном бою разыграл нетривиальную комбинацию: сначала кинул карту зимы (она понижает действие всех белых карт до единицы), заставив одного из противников спасовать, посколку у него карты были неподходящие для такой игры. Второй выставил красную десятку (на не зима не действует) и думал, что я буду пытаться ее перебить обычными картами + барабанщиком, а он, пока я буду это делать, оставшимися белыми картами доберет необходимое число очков. Но у меня была еще карта весны (она отменяет зиму, возвращает обычный порядок подсчета карт + дает бонус самой сильной), которую я кинул на последнем ходу, и в итоге выиграл. При этом и я, и он потратили все карты, и случилась перераздача колоды, что дало мне возможность бороться дальше на следующих ходах. Потом я, сделав пас, дождался, когда противники, борясь друг с другом, потратят много карт, после чего легко взял еще две территории. Счет стал 3:2:3, причем у меня была возможность получить четыре смежных территории и выиграть досрочо (там нужно было захватить либо 6 территорий всего, либо 4 смежных). Но тут я сам себя перемудрил: снова сыграл зачем-то первым ходом карту зимы, хотя в этот раз мне это было не особо выгодно, а карты весны для отмены на этот раз у меня не было. В результате тот раунд я проиграл, а следующую битву победивший назначил на южном конце карты, подальше от моих смежных территорий. Одну территорию я тогда взял достаточно легко. А вот дальше снова сам себя перемудрил. Выложил, кажется, 24 очка, а дальше пасовал, видя, что у противника всего три карты (причем одна из них точно не десятка) и 7 очков на столе, решив приберечь красную десятку и еще пару карт на следующий раунд. Но увы, у противника оказался барабанщик, удвоивший силу его карт, и он смог меня превзойти, но при этом потратил все свои карты. Счет стал 5:2:4 (или 5:3:4, не помню точно). Но на следующем раунде я легко выиграл у второго противника (первый сидел без карт), при этом потратив все свои карты и спровоцировав очередную перераздачу. Итого 5:2:5, и у нас полный комплект карт. На этом раунде мне повезло: и карты пришли хорошие, и я на стал чудить, как в двух предыдущих, а грамотно все разыграл и в итоге победил! Впервые в жизни в этой игре!
Потом играли в «Средневековую академию». Но в этот раз игра как-то у меня не пошла. Решил сосредоточиться только на долгосрочных целях — придворной службе и драконоборчестве, забив на библиотеку, за которую, если там оказаться на последнем месте, дают -3 балла штрафа каждый ход. Отчасти я рассчитывал компенсировать это через воинские искусства, за которые каждый ход можно получать те же 3 балла, но увы, там тоже возникла жестокая борьба (так как играли вшестером, что, кстати, могло сказаться на балансе, так как игра рассчитана на 5 человек), поэтому не получилось. В итоге собрал на библиотеке -16 очков (последний раунд я там все же сделал ход, и оказался не последним). А еще на последнем раунде сложилась следующая ситуация: на драконоборчестве я был на втором месте и от меня на один ход отставал третий игрок. При этом у меня есть маленькая карта (2 хода) по драконоборчеству и карта воинских искусств, но сыграть я должен только одну. Причем этот игрок ходит последним после меня. И получается три возможных варианта развития ситуации: либо у него нет вообще драконоборческой карты, и тогда он меня не обгонит, либо есть, но большая (3, 4 или 5), и тогда он меня обгонит в любом случае, либо есть 2, и тогда он меня обгоняет только в том случае если я сыграю свою. Но если я сыграю не эту карту, а другую, то имею шанс получить еще 1 или 2 балла. В итоге я, исходя из соображений вероятности, сыграл именно второй вариант. И тут оказалось, что у последнего игрока как раз таки есть драконоборческая карта на 2 хода. В итоге там я вместо 10 очков получаю всего 4, на воинских искусствах не получаю ничего (там меня обошли за счет бонусных ходов) и оказываюсь на самом последнем месте с 15 очками. Было очень обидно! Если бы я подстраховался, то было бы 21 очко, и я оказался бы как минимум 4-ым (так как еще были игроки, которые набрали 16 и 18 баллов), а может быть и третьим, с учетом того, что последний игрок получил бы на 6 очков меньше (не помню, сколько он набрал в итоге). Я надеялся, что сыграем еще раз, и я смогу отыграться, но увы, все как-то резко решили расходиться. Впрочем, потом еще часть народа, в том числе и я, задержались: заговорились с хозяином встречи сначала об игре в мафию, потом — об одной придуманной им самим очень специфической игре. И на это ушло еще почти 40 минут.
В итоге домой я добрался уже после 23 часов. Но за остаток дня почти ничего не успел, кроме небольшой тренировки на Клавогонках и пары Clash of Code на CodinGame. Причем в последних участвовал с одной единственной целью — не терять позицию в рейтинге (там нужно участвовать каждый день, чтобы ее удерживать). Причем первое место занял там всего один раз, а остальное время довольствовался вторым-третьим: сказывался недосып. В итоге позиция в рейтинге сначала чуть подросла, потом вернулась примерно к исходной.

Очередные неприятности

4X_Pro
Только я собирался написать о том, что вроде бы жизнь стала налаживаться, как тут же посыпались новые неприятности. Первая неприятность пришла с SAPE. Когда-то давно я повелся на рекламу там, решил попробовать нарастить ссылочную массу crowd-ссылками для socionics.me и sociomodel.ru. Создал две кампании, выставил бюджет, а потом внимание переключилось на конкурс в CodinGame и другие дела, и больше я на SAPE не заходил. А сейчас зашел, и выяснилось, что бюджет указывался не разовый, а ежемесячный, и в итоге я благополучно слил доход с SAPE за все эти три месяца (хорошо хоть там в минус уйти нельзя). Да еще и не сразу нашел, где это можно отключить, пришлось в техподдержку писать, и оказалось, что это у них вообще на отдельный сайт вынесено.
Впрочем, небольшой плюс от этого есть: в Яндексе Sociomodel от этого реально улучшил свои позиции, и посещаемость с 230—240 поднялась до 280. Но если учесть, что в лучшие времена было 400, то все печально. Правда, просадка вызвана тем, что Google наложил какие-то санкции, видимо, счел сквозную ссылку на Socionics.Me продажной, и сейчас траффика оттуда почти нет. Впрочем, даже в Google определенные улучшения имеются: с пятой страницы сайт выполз на начало четвертой.
Вторая неприятность пришла от банка Авангард. Я хотел там закрыть банковскую карту, которую раньше использовал для оплаты метро, так как есть вторая, привязанная к этому же счету, а в метро уже почти полгода езжу по Тройке. Причем помнил про это, и даже собирался написать в банк, чтобы узнать, можно ли отказаться от ее продления, не ходя в банк. Но оказалось, что у этого банка с техподдержкой можно связаться только по голосовой связи, а написать — то ли нет возможности вообще: ни адреса поддержки на сайте, ни чата в приложении на планшете! Плюс я еще неправильно помнил срок ее действия, и думал, что она у меня действует до конца ноября (соответственно, отказ от продления нужно сделать до 1 октября), а оказалось, что нет, срок действия — до конца октября. И вчера прилетело уведомление, что карта перевыпущена. Как говорится, -600 золота, -1 к боевому духу.
Но самая крупная неприятность случилась сегодня: сломался холодильник. Причем, судя по тому, еще вчера или даже позавчера, судя по тому, насколько разморозились продукты. Возможно причиной этого был скачок напряжения несколько дней назад, когда электричество вырубилось где-то минут на 30 по всему подъезду (или может даже дому). Написал об этом отцу SMS (он, по законам мировой подлости, как раз сегодня на дачу уехал), он вызвал мастера. А в качестве временной меры пришлось срочно все укладывать в пакеты и тащить на Пустую квартиру, благо там есть еще один холодильник. Но три часа на все это потерялось напрасно.
Да и вообще год идет как-то очень тяжело. Если раньше тяжелыми годами были нечетные после високосного, а четные — вполне благоприятными, то в этот раз получается как-то наоборот. Прошлый год был относительно благополучным, а вот в этом то и дело начинаются периоды неприятностей…

Головинские пруды и день информационной разгрузки

4X_Pro
Сегодня решил устроить себе день информационной разгрузки: встать, и, не выходя в Интернет, отправиться посмотреть Головинские пруды. Съедить к ним я хотел чуть ли не с момента открытия МЦК, но осенью 2016 года отложил это до следующей весны или лета, а в 2017 году как-то не сложилось. И теперь, понимая, что если не съезжу в сентябре или начале октября, это опять останется на следующий год (поздней осенью или зимой, конечно, тоже можно съездить, но впечатления будут совсем не те), вчера решил, что поеду туда сегодня.
Я решил встать в 11:15 по будильнику, чтобы приехать в середине дня, а не вечером, как это обычно бывает. Но хотел как лучше, а получилось как всегда: спать лег где-то в 4:30, просыпался очень тяжело, и более-менее в себя пришел только к 12 часам. Но собраться быстро не получилось: из дома вышел только в 14:50, и до сих пор не могу понять, куда делись эти почти три часа. Все, что я сделал за это время — это только пообедал и написал предыдущую заметку про конфликт приоритетов. Даже в Интернет не выходил! Причем все это время испытывал раздражение, так как опять чувствую, что ничего не успеваю, плюс еще совершенно не хочу на следующей неделе ехать на дачу, да еще вчера день пошел не по плану.
И вот с такими мыслями я отправился в путь. В дороге тоже не включал Интернет, а хотел поразмышлять, но из-за недосыпа ничего в голову не лезло. Поэтому просто смотрел в окно на город и постепенно начинающие желтеть деревья — первые признаки наступающй осени.
Выйдя со станции Коптево, я оказался возле входа в усадьбу Михалково, расположенную около прудов. По территории она гораздо меньше, чем Кусково или Кузьминки, но довольно необычная: стены и постройки — насыщенного красного цвета с множеством шпилей и башенок. Смотрится красиво, хоть и создает ощущение некоторой заброшенности и медленного разрушения. Внутрь я заходить не стал, а обошел усадьбу слева, и вот впереди показались пруды. Я вышел почти прямо к мосту, разделяющему Большой и Малый Головинские пруды. Мост достаточно высокий, и с него хорошо фотографировать. А пруды немного заросшие: хватает и кувшинок, и всякой другой растительности, но тем не менее, находятся желающие во всем этом купаться! Перебравшись по мосту, я решил обойти сначала Малый пруд, потом Большой. Но пройдя вдоль Малого пруда до второго моста (точно такого же, кстати, как и первый) обнаружил, что в пруд ведет канал, и прошел еще и вдоль него до берега Верхнего Головинского пруда. Затем перешел на другой берег канала и верулся к той же точке, к которой вышел в самом начале. Место действовало на меня очень успокаивающе и умиротворяюще, и несмотря на обилие людей вокруг, я чувствовал себя очень комфортно. И к тому времени, когда завершил первый круг, все утренние переживания ушли куда-то на второй план, я был настроен на мирный и созерцательный лад.
Затем я снова перешел по мосту и отправился на этот раз вдоль Большого Головинского пруда. На его берегу растет несколько впечатляющих старых дубов. Если верить табличке, попавшейся мне на пути, им более трехсот лет, и они помнят еще первых владельцев Михалково! Потом, обойдя пруд чуть меньше, чем наполовину, я вышел к месту, где из него выходит Головинский канал. Там довольно большой перепад высот, и вода несется вниз по наклонному желобу, пенясь и грохоча почти как в настоящем водопаде! Причем берега канала застроены домами, и не завидую я местным жителям, которые вынуждены слушать это и днем и ночью. Я решил пройти еще и вдоль канала до того места, где он сливается с рекой Лихоборкой. Кстати, если верить информации в Сети, канал и был построен для того, чтобы повышать уровень воды в Лихоборке, а через нее и в Яузе, чтобы сделать последнюю судоходной. По дороге попался мост, возле которого был еще один почти такой же водопад. По этому мосту я перешел на другой берег, и оказался возле устья небольшой речки, которая выходит из трубы и сразу же впадает в канал. Ее я ошибочно принял за Лихобороку. (Потом, посмотрев карту, выяснил, что на самом деле она называется Норишка, а Лихоборка находится несколько дальше, до того места я таки не дошел.) Она примечательна цветом воды: он ярко-желтый, чем сильно отличается от воды в канале. Чуть дальше обнаружилось устье еще одной речки, примерно такой же по размерам, но уже  с обычным цветом воды. Затем я вернулся на правый берег канала и по нему пошел обратно к пруду. Не знаю почему, но те места создают ощущение застревание во времени. Но не в какой-то древности, как в Переславле, а где-то в 70-х или 80-х годах. И, к сожалению, с характерной приметой того времени — множеством алкашей во дворах и на скамейках. Живя в спокойном и благополучном Перово, уже отвык видеть их в таком количестве!
Вернувшись к Большому пруду, пошел дальше вдоль его берега, но полный круг завершать не стал, а свернул, чтобы посмотреть еще два малых пруда, расположенных рядом с усадьбой, которые так и называются — Михалковские. Но в них чего-либо особо интересного не обнаружилось, кроме того, что они сильно напомнили мне Радужные пруды в Кусково. Потом прошел еще раз вдоль усадьбы, но уже с другой стороны, и отправился обратно на станцию Коптево. По дороге домой еще рассматривал вариант заскочить на квартирник с настолками (сегодня он снова проводился еще раз), так как все равно проезжал мимо. Написал организатору, много ли народа и во что играют и до скольких вообще собираются сидеть. Но он так и не ответил к тому моменту, когда я проезжал нужную станцию, и поэтому я сразу отправился домой.

Объективные и субъективные приоритеты и недовольство

4X_Pro
В последнее время часто чувствую какое-то непонятное недовольство. Но вчера вроде бы удалось осознать его причины. Проблема в слишком большом рассогласовании объективной и субъективной системы приоритетов и невозможности их соединить.
Та система приоритетов, которую я называю объективной, построена на том, каким я хотел бы быть, некий образ идеального я с точки зрения декларируемых ценностей. Выглядит она примерно так:
  1. Несение в массы своей идеологии (в частности, работа над книгой)
  2. Наполнение контентом своих сайтов, а также помощь окружающим в компьютерных вопросах
  3. Работа над IntB, технические доработки своих сайтов, другие разработки
  4. Freelance и выполнение других обязательств перед окружающими
  5. Возможность проявить себя (конкурсы, соревнования, поиск халявы и тому подобное)
  6. Познание (научные, научно-популярные материалы, и книги по IT-темам)
  7. Созерцание (прогулки и поездки в одиночестве)
  8. Художественные книги и фильмы
  9. Компьютерные игры
  10. Общение с людьми
Если же построить субъективную систему приоритетов, то есть такую, которая основана на чувстве удовлетворенности от прожитого дня (или наоборот, неудовлетворенности от недостатка), то получится примерно следующее:
  1. Компьютерные игры
  2. Возможность проявить себя (конкурсы, соревнования, поиск халявы и тому подобное)
  3. Созерцание (прогулки и поездки в одиночестве)
  4. Художественные книги и фильмы
  5. Познание (научные, научно-популярные материалы, и книги по IT-темам)
  6. Наполнение контентом своих сайтов, а также помощь окружающим в компьютерных вопросах
  7. Общение с людьми
  8. Работа над IntB, технические доработки своих сайтов, другие разработки
  9. Несение в массы своей идеологии (в частности, работа над книгой)
  10. Freelance и выполнение других обязательств перед окружающими
Собственно, с этим проиворечием и связан мой сбитый режим сна. По какой бы из этих двух шкал я не оценивал день, результатами по второй обычно оказываюсь не удовлетворен (за очень редкими исключениями), и поэтому из всех сил цепляюсь за уходящий день в попытках «догнать», успеть хоть что-нибудь сделать по верхним ее пунктам. И даже часто успеваю, но ценой того, что ложусь спать в 4—5 часов утра.
Кроме этого есть еще расходы времени, которые можно назвать антиценностыми. В первую очередь это время, проведенное в социальных сетях, общение в ЛС с людьми, уровень доверия у которых ниже 30 (именно в ЛС, на форумах и т.п. оно не расценивается как потеря времени), и потребление мусорной информации. А также выполнение тех действий, на которые я согласился потому что не хватило решимости отказаться.

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

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 дней конкурса, так что игра продолжается!

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

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