Портрет 4X_Pro
Был в Сети сегодня, 02:53
Мультиблог
4X_Pro
Записки лишнего человека

Сиюминутное и повседневное

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

Поездка к Ростокинскому акведуку

4X_Pro
Недавно решил поучаствовать в фотоконкурсе «Планета Москва» и для него сфотографировать Ростокинский акведук. И в этот четверг мы отправились туда вместе с Tellой.
Сам мост нашли быстро. Но с южного берега, с которого мы пришли изначально, вид открывался не очень впечатляющий, а по галерее на самом акведуке можно ходить только по выходным. К счастью, я предварительно изучил карту и знал, что рядом есть небольшой пешеходный мостик, по которому мы перешли на другой берег. Но оттуда тоже сфотографировать его было непросто: он слишком большой, чтобы вместить его в кадр целиком и показать всю грандиозность. Но тем не менее, я нашел несколько ракурсов, которые показались удачными. Потом мы прошли через одну из его арок, и сделали серию фотографий с другой стороны, а затем решили прогуляться вдоль Яузы вниз по течению. Пройдя немного, нашли тропу с деревянным настилом, уходящую куда-то в глубь болота, и решили сходить по ней. Там обнаружилось немало интересной живности: почти ручного голубя, утку с утятами, и, самое главное, целый выводок ондатр! Они собирали и ели хлеб, который кто-то еще до нас накрошил в болото. Было весьма интересно понаблюдать за ними!
Потом вернулись к Яузе, пошли вдоль нее дальше. Но больше ничего интересного не встретилось. Дошли почти до того же самого моста, где закончилась наша прогулка осенью 2016 года (но вышли к нему с другой стороны). Потом отправились обратно, так как Tellе нужно было успеть в другое место к 19 часам. Хотя будь я один, прошел бы дальше, вдоль Яузы по Лосиному острову, так как уже год собираюсь повторить ту прогулку, но в обратном направлении. На обратном пути сфотографировали еще раз виадук, причем снимали навскидку, но потом именно одна из этих фотографий и оказалась самой удачной.
Сегодня (вернее, уже вчера) стал разбирать сделанные фотографии. Из всех сделанных по композиции мне в итоге понравились три штуки, причем все три — совешенно не те, которые казались удачными, когда снимал. Все же на маленьком экране фотоаппарата все воспринимается иначе… Нотбук что ли с собой таскать в таких случаях, чтобы смотреть сразу? Но увы, даже из этих трех в двух оказался завален горизонт (впрочем, это не сложно выправить), а с еще одной возникла другая проблема: ни я, ни Tella точно не помним, кто эту фотографию сделал (снимали по очереди моим фотоаппаратом). В обычной ситуации это проблем не доставляет: я просто присылаю ей всю серию, и каждый выкладывает те фотографии, которые нравятся. Но вот в случае конкурса все сложнее…

Малая девятоиюльская дисковая катастрофа

4X_Pro
Вчера (вернее, теперь уже позавчера) был какой-то очень неудачный день. Впрочем, начался он вполне хорошо. Проснувшись, я решил возвращаться в Москву в этот же день, а не ждать до вторника, как планировал изначально, но ехать совем поздно вечером, на последней маршрутке из тех, которые заходят в дальнюю часть деревни. А до этого заняться наконец-то написанием книги. И, надо сказать, наконец-то стало получаться что-то более-менее связное. Написать, правда, успел всего одну страницу, где изложил только про то, что такое Путь. Не успел даже перейти к его этапам. Потом начал мыть посуду, и на это потратил больше времени, чем рассчитывал. К тому моменту, когда я закончил, до намеченного времени выхода оставалось всего 7 минут, а еще нужно было сохранить написанное на флешку, собраться, выключить и закрыть все. Пришлось делать это почти бегом. И вот за минуту до намеченного времени времени выхода я закрываю дом, но остается еще отключить воду, закрыть баню и внешнюю калитку. И тут меня глючит на тему того, что я забыл флешку, так как в спешке не помнил, как клал ее в сумку. Открываю дверь, бегу к компьютеру, и обнаруживаю, что ее там нет! Начинаю метаться, и через некоторое время обнаруживаю, что все же она в сумке, но лежит так, что ее почти не видно. Закрываю дом, закрываю все остальное, в спешке ухожу, рассчитывая в дороге пробежать часть пути бегом и нагнать потерянные минуты. И вот уже, отходя от дома, оборачиваюсь и обнаруживаю, что в отцовской комнате на втором этаже не закрыто окно! Я уже был на нервах из-за флешки, а тут у меня случилась настоящая истерика с неконтролируемым потоком мата на несколько минут.
Но делать было нечего: пришлось возвращаться, открывать калитку и дом, подниматься на второй этаж и закрывать это окно. После этого стало ясно, что отыграть потерянное время уже не удастся, и я в самом отвратительном настроении поплеся уже до следующей остановки, с которой маршрутки ходят регулярно, а не несколько раз в день, как с ближней. Расписания я не знал, а время было уже довольно позднее, поэтому всерьез опасался пропустить и следующую электричку и застрять надолго. Но все обошлось. В маршрутке несколько успокоился. Зато пошел сильнейший дождь! К счастью, к тому моменту, когда мы добрались до города, он уже почти закончился, но до вокзала все равно пришлось пробежаться бегом. На следующую электричку я успел, причем даже с большим запасом. Сама электричка оказалась более быстрой, чем та, на которую попал бы с «дальней» маршрутки, и в результате добирался примерно 2:40, что вполне нормально.
Но дома меня ждала еще одна неприятность. Я запустил ноутбук, открыл броузер и в дополнение к тем вкладкам, которые оставались с прошлого раза, наоткрывал еще множество, причем некоторые из них были весьма тяжелыми. В результате броузер сожрал весь свободный объем оперативки. В Linux, похоже, есть какой-то баг при попытке выделить память, когда ее не хватает физически: вместо того, чтобы вернуть приложению ошибку, происходит зацикливание потока где-то в ядре с загрузкой процессора под 100%. (Впрочем, возможно, еще влияет то, что у меня /tmp в RAM-диске находится, и, возможно делается попытка одновременно и увеличить место для него, и выделить память броузеру, что вызывает какие-то конфликты.) Подождав пару минут и попытавшись переключиться в консоль, я понял, что это бесполезно, и стал делать принудительную перезагрузку клавишей питания. Но даже это сработало далеко не сразу!
Но самое худшее было дальше. Обычно после такого происходит выполнение fsck, обнаруживается несколько потерянных файлов, и все. Но не в этот раз! fsck начала ругаться на некорректные контрольные суммы в группах, и отказывалась исправлять диск вообще. Я попытался было задействовать один из резервных суперблоков, но ничего не изменилось.
После нескольких попыток спасти поврежденный домашний раздел я понял, что это бесполезно. На всякий случай сделал его dump в файл, после чего отформатировал. Но даже после этого глюки не закончились. Во-первых, LXDM отказывался пускать меня в систему (потом выяснилось, что, скорее всего, из-за отсутствия каталога Рабочий стол). Пришлось создать нового пользователя, войти под ним, а потом скопировать все созданные файлы в каталог основного. Дальше — еще одна неприятность: перестали разворачиваться на весь экран окна, что очень раздражало. С этим я уже когда-то давно сталкивался, но никак не мог вспомнить, как победил. И только днем во вторник обнаружил причину: рабочие столы на основном экране и экране ноутбука дублировались вместо того, чтобы располагаться рядом. Но в отличие от Windows, который масштабирует больший экран до меньшего, Linux делает это дублирование совсем иначе.
В общем, потерял почти целый день. Но в информационном плане потери незначительны: слетели, в основном, файлы настроек и сохраненные пароли, а также некоторые скрипты, которые я писал либо для CodinGame, либо просто для тренировки при изучении новых языков программирования. Все остальное лежало либо на отдельных разделах, которые не пострадали, либо имеет резервную копию в Сети или на внешнем жестком диске. Но негативных эмоций я получил много!
Впрочем, один позитивный момент все же нашелся. Пытаясь победить проблему с неправильным размером окна, я отключил графическое ускорение в Opera, и удивился, насколько же меньше памяти она стала потреблять! Правда, и отрисовывает чуть медленнее. Правда, мне с моей гиперчувствительностью к скорости работы, даже это «чуть» заметно, поэтому в итоге я аппаратное ускорение включил обратно, но не стал заниматься его оптимизацией, например, принудительным включением нескольких потоков растеризации.

Три дня информационной разгрузки

4X_Pro
Третий день живу в режиме информационной разгрузки. В Интернет выхожу по-минимуму. Причем не потому что так решил, а как-то само собой получается. Тем более сейчас, похоже, то ли биоритмический спад по интеллекутальному и интуитивному (самым важным для меня) биоритмам, то ли сказывается слишком уж сильно сместившийся режим дня. В общем, в голове витают обрывки идей, которые ни во что не выливаются: ни в заметки для сайта, ни в код, ни в книгу.
В пятницу ездил за земляникой, набрал довольно много: целую банку из под кофе примерно за час. Только вот в процессе сбора устал сильно, и обратно ехал в каком-то состоянии полнейшей внутренней пустоты, голова не соображала. В субботу опять же сидел в оффлайне и писал код для одной из задач на CodinGame, но так и не доделал его. Вечером с отцом смотрели футбол. Причем Первый канал, по которому его показывали, у нас на комнатную антенну почему-то не принимает, поэтому решили смотреть через Интернет. Но не все оказалось так хорошо, как я ожидал. Через некоторое время изображение стало слегка подтормаживать, потом тормозить все более и более, и в результате встало совсем. Методом тыка я обнаружил, что если попереключать качество изображения, то трансляция восстанавливается и перестает тормозить. Но по закону мировой подлости, пока удалось это выяснить, как раз забили первый гол, причем мы пропустили и сам момент, и его повтор. Потом матч затянулся, дошло до серии послеигровых пенальти. В результате оказалось, что я просадил все 1.4 Гб траффика, которые у меня оставались, и лишился Интернета. Так что воскресенье получалось оффлайновым днем, а с 9 числа отсчет траффика начинался заново. Казалось бы, прожить один день, тем более выходной, в оффлайне — никаких проблем. Если бы не одно но: по выходным сейчас выдаются задания КСИ, и выполнить их надо как раз до полуночи. Но тут отец меня успокоил, сказав, что у него на SIM-карте есть 2 Гб Интернета, которым он все равно никогда не пользуется. И можно будет выйти через него. Я успокоился, и лег спать.
Но на следующий день ждала новая неожиданность. Я взял отцовскую SIMку, переставил в модем, попытался зайти на сайт КСИ и на Ask, и вдруг оказалось, что траффик не идет. Зашел в личный кабинет, посмотрел обстановку — вроде 2 Гб траффика на месте, баланс положительный, все хорошо. Попытался зайти на свой личный сайт (благо он без https), и получил сообщение о том, что данный тариф не пригоден для компьютеров и планшетов. И это за целых 500 руб в месяц! Гори в аду тот, кто это придумал! Ругался в адрес Мегафона я долго, тщательно и заковыристо. Какая разница, как я хожу: прямо с телефона или с какого-то другого устройства, подключенного к нему? Траффик есть траффик, раз он оплачен, он должен быть доступен! (Интересно, можно ли пожаловаться на подобные бредовые ограничения в ФАС или Роспотребнадзор?)
Но увы, ругань помогала мало. Вспомнив один разговор с sOm3thingAwFul, попытался было поменять TTL, но то ли там все более хитро, то ли я просто не знаю, как правильно задавать TTL на Linux, а посмотреть не было возможности. Пришлось пойти другим путем: выломать SIMку до NanoSIM, поставить в мой планшет и зайти в Сеть с него как с телефона. И проходить задание КСИ уже с планшета. По закону мировой подлости оно в этот раз еще было довольно сложным и требующим кучи расчетов. А второй вопрос вообще заставил меня сильно сомневаться в том, правильно ли я просчитал результаты в первом. Но в любом случае, это лучше, чем пропустить задание вообще. SIMку, правда, потом пришлось склеивать скотчем, чтобы поставить обратно в телефон…
Остаток дня прошел более спокойно. Мы пожарили картошку в костре, потом я сходил прогуляться к реке, на то самое место, где когда-то , сделал очередное фото заката, дочитал книжку о Vue.js, перепрошел игру Rockman IV. И еще размышлял о том, что никак не могу избавиться от привычки пытаться утром как-то планировать день вместо того, чтобы просто ожидать, чего интересного произойдет со мной сегодня, как это было в детском/подростковом возрасте, и как это и должно быть при жизни в иньской модальности.
Еще начал было ложиться раньше, но все равно долго не могу уснуть, и встаю все равно поздно.

Июльская поездка на дачу

4X_Pro
Вчера весь вечер никак не мог решить, ехать сегодня на дачу или нет. Как всегда, мысль о поездке вызвала внутреннее сопротивление. Но, с другой стороны, эта неделя — последняя, на которой ещё есть шансы пособирать землянику. К тому же на следующей неделе я точно не еду.
Как это всегда бывает в ситуациях неопределенности, засиделся в Сети до 4:30, и перед сном решил, что если проснусь с достаточным запасом времени, чтобы успеть на электричку 15:53, и при этом не будет дождя, то всё же поеду.
Когда я проснулся, настроение поменялось: я вполне был готов ехать. К тому же до момента, когда нужно выходить, чтобы успеть на намеченную электричку, было ещё целых два часа, а за окном был вполне солнечный день, и Яндекс-Погода не предвещала дождя в ближайшие два часа. Ещё я вспомнил про то, что надо возвращаться к написанию книги, и решил, что тут, на даче этим будет заняться проще, чем в городе: всё же меньше отвлекающих факторов. В общем, всё указывало на то, что ехать нужно. Но на всякий случай я дополнительно прибегнул к старому, но надёжному способу принятия решений: картам Таро. Выпала Четверка Посохов (Four of Wands), которую я тоже истолковал как однозначно позитивный знак. И стал собираться.
Поездка прошла вполне комфортно, если не считать того, что эта электричка всё же больше загружена, чем та, на которой я обычно заезжаю через Электросталь. Зато с ней стыкуется автобус, который заезжает в дальнюю часть деревни, откуда идти пешком гораздо ближе. И в итоге я добрался за всё те же 2:35, как и через Электросталь, но это с учётом того, что на станцию приехал с запасом в целых 12 минут.
Пока ехал, удивлялся, почему же мне так хочется спать, хотя вроде бы проспал достаточно. Но когда вышел из автобуса, причина стала ясна: с севера надвигалась густая темная туча, и, видимо, организм так реагировал на предстоящую резкую смену погоды. И вот сейчас дождь, вернее даже настоящий ливень, пошел (а пока я писал всё это сообщение, он уже стал заканчиваться).
Теперь сижу и пытаюсь как-то упорядочить мысли и решить, за что и в каком порядке браться. Решил начать с ремонта велосипеда (впрочем, ремонт — это громко сказано, просто подтянул несколько гаек), а потом немного прокатился по поселку.

Бестолковый день

4X_Pro
Какой-то очень дурной и бестолковый день. Вроде бы ничего плохого не происходило, но все из рук валится. То ли погода влияет, то ли интеллектуальный спад по биоритмам, то ли еще что — не знаю. Вернулся сегодня на Клавогонки, и получилось вот что: печатаю быстро, но очень «грязно» даже по своим меркам. В смысле, очень много опечаток, причем, порой очень нелепых. За исключением самого первого заезда, никак не мог поймать ритм, в котором удается печатать чисто. Потом отец вывел из себя, начав «под руку» рассказывать какую-то хрень, связанную с футболом. Как всегда бывает при попытках слушать и печатать одновременно, тут же заболела голова. Ну не совместимые это действия!
Потом пошел на CodinGame, хотел снова попробовать Clash of Code, но из этого тоже ничего хорошего не вышло: два раза из трех просто не успел решить задачи. Точнее, решить-то успевал, но не успевал отформатировать вывод. А время пролетало очень быстро. Видимо, скорость мышления слишком замедлилась.
А еще начался какой-то поток полнейшей тупости на Ask. Прямо хоть каждый второй вопрос в мусорку отправляй. Видимо, у кого-то из анонимов тоже спад умственной активности.

Шашлычная встреча в Перово

4X_Pro
На прошлой неделе на связь со мной вышел С.Ш. (тот самый, который написал книгу) и пригласил на шашлычную встречу, которую он задумал провести возле Большого Перовского пруда. Я некоторое время колебался, но потом согласился. Но потом одна из участниц, которая взялась готовить, решила, что деньги нужно собрать заранее, и перевести ей на карту Сбербанка. Я был против этого: во-первых, Сбербанк засвечивает имя при переводе, что для меня неприемлемо, во-вторых, перевод денег заранее лишал меня возможности принять решение идти/не идти вечером предыдущего дня, как это я обычно делаю. В итоге чуть было не отказался от встречи вообще, но С.Ш. предложил мне такой вариант: он переводит деньги за меня, я отдаю ему наличными. Я согласился.
И вот сегодня отправился на эту встречу. Сначала все же думал «а не зря ли я иду». Пруд этот ничем не примечателен, плюс явно предназначенных мест для шашлыка там нет, в отличие от Измайловского парка и Кусково. Начиналось все вполне обыденно: встретились у метро, дождались всех остальных, отправились на место. Но народ шел как-то на удивление медленно, и мы с С.Ш. сильно ото всех оторвались вперед. Плюс я еще думал идти к этому пруду по Перовской улице, а С.Ш. и Н.П. решили по Кусковской. Из-за этого мы с С.Ш. отделились от остальных. В итоге они пошли дозакупать то, что еще осталось (хотя большую часть всего принесли с собой, кроме угля и воды), а мы — к пруду занимать место. Место выбрали довольно быстро. Но потом пришла Н.П. и уговорила всех сместиться чуть правее (впрочем, я сам сначала тоже там разместиться планировал, но потом передумал, так как слишком близко к другим людям получалось).
И тут возникла первая проблема: тот человек, который обещал принести мангал, к этому времени еще не приехал, и было известно, что приедет не скоро. Но тут А.Ш. проявил свою черную интуицию (хоть он сам себя и белым интуитом считает). Он решил, что если возле этого пруда часто жарят шашлыки, то высок шанс найти кем-то брошенный мангал. К огромному удивлению всех, он оказался прав, и буквально через несколько минут мангал у нас был! Мы с ним начали разводить огонь. Почему-то угли разгорались ну очень плохо, я потратил полгазеты, прежде чем удалось добиться результата. В это время несколько человек, включая С.Ш., ушли куда-то с неизвестной целью, и нас осталось всего шестеро. Мы стали жарить первую порцию курицы. В это время стало видно, что с юго-запада идет очень темная туча, и скорее всего, будет дождь (а еще МЧС все прислал по SMSке, а некоторым и не одну). Стало ясно, что нужно что-то делать. Мы стали перетаскивать вещи еще правее, под более густые деревья, в надежде, что они хоть как-то защитят от дождя. Сумели перенести даже горящий мангал. Правда, переноска сказалась на нем плохо, и через пару минут после приземления он все же развалился. Но тут приехал тот самый человек, который обещал привезти мангал и тент. Надо сказать, очень вовремя! Еще он привез лопатку, с помощью которой мы все угли смогли перебросить в новый мангал. Потом растягивали тент. Это была целая история! Возились минут 10, причем почти все как-то укрылись под тентом, а А.Ш. влез на дерево, чтобы крепить тент оттуда, и мок под дождем, а Н.П. чуть не унесло ветром, так как тент сильно парусил.
И почти сразу, как закончили со всем этим делом, дождь прекратился! Немного поели и сели играть. Разделились на три группы: одна группа (к которой присоединился и я) играла в японский Бенг и Карту Сокровищ, другая — в alias (или что-то подобное), третья — в Манчкин. В Карту Сокровищ я играл впервые, и очень понравилось, несмотря на то, что так и ни разу не получилось занять первое место. Постоянно получалось так, что ходы с отличными результатами чредовались с нулевыми ходами, или же лишался самых ценных карт стараниями других игроков. В Бенг первый раунд сыграли отлично, а во втором я был ронином. Помня о предыдущем опыте, не стал сразу себя выдавать где-то до середины игры, в результате чего меня долго принимали за ниндзя. Да еще и карты шли отличные. Но ближе к концу ситуация поменялась: и хорошие карты закончились, и ниндзя стали выигрывать с огромным отрывом, и пришлось себя выдать, начав атаковать их. Плюс еще на одном ходу сыграл не так, как надо было. Потом снова занялся шашлыком, увидев, что его постаивли жариться, но никто за ним толком не следит. В какой-то момент досыпал угля, и казалось, что все потухло, но несколько минут усиленного раздувания дали свой результат: удалось обойтись без повторного розжига.
Потом просто много разговаривали. Пообщался с человеком, который выступил в роли редактора для книги С.Ш. Еще с одним человеком чуть было не проугался довольно серьезно. Он заявил, что в СССР науки не было вообще, аргументируя это тем, что почти все советские НИИ после развала Союза тут же накрылись. Я ему пытался объяснить, что это не потому что там наука плохая, а потому что люди, привыкшие к госфинансированию, не имеют ни малейшего представления о том, как продавать результаты своего труда в условиях рынка (да еще и не просто рынка, а весьма специфических условий 90-х, где никто не думал о долгосрочном развитии). Он эти мои аргументы назвал бредом. Но без толку. Впрочем, там к спору подключился еще один участник, и вскоре стало ясно, что у первого спорщика вообще о науке весьма своеобразные представления (а еще возникло подозрение, что он, похоже, 3Л по психософии). В итоге спор достаточно быстро съехал на тему, возможна ли наука без математики, и я довольно быстро потерял к этому интерес.
Так досидели где-то часов до 23, несмотря на то, что я ожидал, что разойдемся раньше. Но в итоге я остался очень доволен встречей! Вполне можно сказать, что день прошел не зря!

Возвращение и хорошие новости

4X_Pro
Вчера, отоспавшись и немного придя в себя после переживаний по поводу конкурса, отправился собирать землянику на луг около Клязьмы. Но увы, как выяснилось, съездил напрасно: земляника то ли еще не созрела (а те несколько ягод, которые я нашел в лесу во время прошлой прогулки, были каким-то исключением), то ли уже созревшую обобрали в выходные. В результате вместо этого ограничился просто прогулкой в тот сосновый бор, о котором писал уже не раз.
А сегодня вернулся в Москву. Решил не повторять прошлый неудачный опыт, и ехать вечером. Впрочем, отчасти все же повторил: во-первых, чуть было не опоздал из-за того, что будильник отставал на 10 минут, но на этот раз я заметил еще тогда, когда до нужного времени оставалось еще почти 10 минут, чтобы собраться. Во-вторых, снова пронаблюдал отправление маршрутки из дальней части деревни, не успевая на нее. Только в этот раз я ее там увидеть совершенно не ожидал, поскольку раньше последняя заезжала туда в 12:54. Посмотрел расписание, и выяснил, что оно изменилось: теперь появилось две маршрутки вечером. Эта новость меня обрадовала: до той остановки шагать более чем на километр ближе!
В целом же добрался на удивление хорошо, всего за два с половиной часа, при этом успел на электричку на 10 минут раньше той, на которую собирался попасть изначально.
И вообще, прихожу к выводу, что ездить по вечерам все же лучше. Во-первых, проще успеть сделать что-то до выезда, чем потом настроиться на рабочий лад после него. Во-вторых, можно собраться спокойно и без спешки. Да и не так жарко.

Code of Ctulu: мои итоги очередного конкурса

4X_Pro
В течение этого заезда на дачу почти все время я активно занимался программированием.  Сначала я реализовал одну свою давнюю идею, о которой более подробно напишу через пару дней. А в среду зашел на CodinGame и увидел, что там идет очередной конкурс. Хотя к тому времени прошла уже половина отведенного времени (конкурсы длятся по десять дней обычно), я все же решил попробовать участвовать. Не столько даже ради рейтинга, сколько ради опыта.
Конкурс назывался Code of Ktulu. Сюжет задачи, которую предстояло решить, был такой: четверо исследователей проникли в лабиринт Ктулху и потревожили его сон. Ктулху стал посылать против них своих прислужников, вызывающих ужас и постепенно сводящих с ума. Цель заключалась в том, чтобы управляя одним из исследователей, продержаться дольше остальных. Но каких-либо способов активной борьбы с монстрами не предусмотрено, поэтому нужно было придумать алгоритм, который позволял как можно дольше убегать по лабиринту. При этом здоровье (точнее, величина, называемая sanity) там понемногу убывает при каждом ходе, но если держаться группой, то медленее, чем по одиночке.
На первый взгляд кажется, что решать такую задачу нужно с помощью алгоритмов, аналогичных шахматным: просчитывать возможные варианты развития событий на несколько ходов вперед, отсекая заведомо бесперспективные варианты, и затем выбирать лучший. И начал писать код. Но прежде я никогда ничем подобным не занимался, равно как и алгоритмами поиска путей в лабиринтах, поэтому на продумывание и написание программы ушло два дня. Только к пятнице я получил нечто законченное. Зашел на сайт, запустил, и вдруг обнаружил, что мой персонаж без видимых причин дохнет через несколько ходов. Сначала не мог понять, что происходит. Потом выяснилось, что там очень жесткие ограничения на время, за которое программа должна произвести расчет и дать ответ: секунда для первого хода и по 50 мс на все последующие. И мой алгоримт в это время просто не укладывался. Я попытался переделать расчеты так, чтобы они использовали библиотеку NumPY, в надежде, что это ускорит работу, но эффект был незначительный. В какой-то момент я заметался, не зная, что делать, так как перекладывать написанный алгоритм на C, Go или какой-то еще компилируемый язык не хотелось (да и не факт, что это помогло бы). Потом решил действовать иначе: сел и быстро, буквально за 15 минут, набросал другую программу, которая была гораздо примитивнее: она находила ближайшего монстра и строила маршрут, который позволял его обойти по самой длинной траектории.
Как это ни странно, такой простенькой программы хватило для того, чтобы сразу же проскочить все три «дубовые» лиги (Wooden league), и подняться примерно на сотое место из 280 в бронзовой. Но на этом его возможности были исчерпаны: при переходе в следующую лигу меняются правила, в частности, появился новый вид монстров с другим способом атаки, против которых этот алгоритм оказался неэффективен.
Что делать дальше, было непонятно. Но потом я вспомнил, как для другой игры использовал подход, который называю «гравитационным»: каждому объекту приписывается некое числовое значение, характеризующее желательность взаимодействия с ним, которое уменьшается с расстоянием, а дальше считается сумма воздействий на точку, где находится игрок, от всех объектов и происходит движение по градиенту. За субботу и начало воскресенья я сделал такой алгоритм. Но увы, когда запустил, ждало разочарование: сначала алгоритм показал даже худшие результаты, чем предыдущий — 170 место во все той же бронзовой лиге. Я стал разбираться, в чем дело. Обнаружил несколько глупых багов (например, путаницу координат x и y), а также то, что в пограничных ситуациях мой персонаж начинает метаться из стороны в сторону. Я там делал так, что выбор, куда идти, зависел от того, где находится ближайший монстр: если далеко, то идти к ближайшему глобальному максимум на карте, если ближе — искать локальный максимум в окрестности заданного размера (или величину, которая меньше него на значение не более N, но при этом находится ближе), если совсем близко — то выбирать клетку с наибольшим значением для следующего хода. Оказалось, что метания вызваны тем, что средний и последний варианты дают противоречивые результаты.
Где-то к 23 часам воскресенья я со всем этим более-менее разобрался. И вот после одного из запусков режима тестирования «все против всех в данной лиге», наступил момент когда мой алгоритм поднялся вроде бы на первое место, но увы, не удержался там, и когда все бои завершились, откатился где-то к первой десятке. Я начал играться с настройками некоторых параметров (например, радиусов, где применяются разные способы принятия решения), пытаться добавить мелкие доработки, но становилось только хуже: из первой десятки стал падать в первую сотню. Где-то часам к четырем я откатил все изменения, поизучал ситуации, в которых этот алгоритм проигрывает, и понял, что иногда он принимает решение идти «на таран» на монстра тогда, когда в этом нет никакой необходимости. Думать, как это исправить на уровне алгоритма, уже не было времени (конкурс заканчивался в 11 утра в понедельник), поэтому поступил так: взял тот предыдущий алгоритм избегания противника, и стал использовать его в тех случаях, когда у моего персонажа есть куда отступать (то есть нет окружения со всех сторон). Результаты улучшились: я стал устойчиво попадать на второе место в своей лиге. Но на первом месте там стоит бот, сделаный самими разработчиками игры, а условием прохода в следующую лигу являтся именно победа над ним. А вот этого никак и не получалось.
Каких-либо идей, что еще можно добработать за оставшиеся несколько часов, не было. Все, что оставалось делать — это играться с несколькими глобальными параметрами, например, радиусами, от которых зависит способ принятия решения или коэффициентом, который влиял на то, насколько алгоритму будет важно находиться рядом с другими игроками. Но увы, каждая проверка кода в режиме «все против всех» занимает достаточно большой промежуток времени (порядка 5—10 минут в зависимости от загруженности сервера). И где-то часам к шести я начал приходить к выводу, что все бесполезно, и уже собирался было идти спать. Но постоянно говорил себе «сейчас попробую еще вот такое сочетание показателей, и пойду». Но потом хотелось проверить другое сочетание, за ним еще одно, и так длилось примерно до 8 часов утра. Тогда, запустив в очередной раз просчет, я почти сразу обратил внимание, что результаты на этот раз вроде бы лучше: подъем в таблице идет быстрее. Когда было посчитано около 70% всех игр, я оказался на первом месте. Но такое случалось уже не первый раз, и я знал, что это бывает обманчиво. Так и вышло: когда расчет дошел где-то до 84-85%, я снова сполз на второе. В районе 90% снова началась серия побед, снова — первое место, но было понятно, что оно очень и очень непрочно. И вот до окончания расчетов оставалось всего 4 игры. Две из них заканчиваются поражениями (причем по-моему, на четвертом месте). Я ожидаю, что вот-вот в любую минуту упаду на вторую строчку таблицы, но нет, все еще первый. И остается еще две игры. И обе заканчиваются полной победой! Есть, есть серебрянная лига!
Дальше я дождался, когда определится моя позиция в серебряной лиге. В ней я казался примерно 230 место из примерно 570. На этом я и решил закончить, пойти отсыпаться и приходить в себя.
В общем, впечатление о конкурсе у меня двоякое. С одной стороны, это интересно, и заставляет пробовать новое и лучше изучать то, что уже знаю (так, например, сейчас бы я совершенно иначе сделал алгоритм расчета пути по лабиринту, и, скорее всего, не имел бы проблем с таймаутом), с другой — слишком уж затратно в эмоциональном и физическом плане. Кроме того, когда я занят конкурсом, начинают вставать другие дела (тот же freelance), что тоже несколько напрягает. Кроме того, я чуть было из-за этого конкурса не пропустил очередные задания КСИ. Еще прихожу к выводу, что мне имеет смысл поучаствовать в Clash of Code — программировании небольших задач на скорость на том же CodinGame, чтобы приучить себя не думать долго при написании кода и реже лазить в справочники по стандартным функциям, больше полагаться на свою память.

После дня солнцестояния

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

День поглощения информации и ночная прогулка

4X_Pro
Сегодня у меня просто день поглощения информации какой-то. Утром увидел рассылку ЖЖ с лучшими публикациями последней недели, и начал день с их чтения. Потом — решил поискать примеры использования NLPTK, нашел пару статей по этой теме на Хабре, и застрял там. Заодно узнал о проекте OpenCorpora, в котором, возможно, поучаствую. Потом на том же Хабре узнал про Progressive Web Apps и Flutter, а затем заинтересовался вопросом, какой язык программирования перспективнее: Dart или Kotlin. Четкого и однозначного ответа на этот вопрос не нашел, и остался при мнении, что все же последний.
А вечером, точнее, уже ночью, отправился на прогулку. Ночи сейчас очень светлые и очень тихие: соловьи уже умолкли (хотя сразу после этого заезда я еще одного или двух слышал), лягушки тоже, а сверчков еще не слышно. И только трескучие крики какой-то ночной птицы нарушают эту тишину и шум шоссе в некоторых местах слышен. Как обычно, дошел до насыпи, посмотрел с нее на звезды. Их сейчас видно не так уж и много: небо слишком светлое. Зато хорошо были видны Юпитер и Сатурн. А еще я решил все же пойти на поле, и попробовать увидеть Марс. Пока шел, увидел ежа. Точнее, сначала услышал в кустах какое-то шуршание и странное фырканье. Посветил туда фонариком, и обнаружил, что это еж. Как это ни странно, он меня особо не испугался, только вот слишком яркий свет ему не нравился. Он был так близко, что я мог бы попытаться его поймать, но не стал.
Добравшись до поля, я увидел Марс. Он был достаточно низко над южным горизонтом, гораздо ярче Сатурна (я почему-то ожидал, что по видимой яркости они будут примерно равны), а по цвету он вполне оправдывал название Красной планеты! Минут пять я постоял, наблюдая все три планеты сразу и чувствуя полноту Бытия и гармонию с миром, потом пошел обратно. Но чтобы сократить путь, решил зайти в поселок через главные ворота. В результате разбудил собак, а они, в свою очередь, разбудили сторожа, который стал допытываться, кудя я иду и чего это я так поздно шляюсь.

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

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