Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.
Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.
В последнее время часто чувствую какое-то непонятное недовольство. Но вчера вроде бы удалось осознать его причины. Проблема в слишком большом рассогласовании объективной и субъективной системы приоритетов и невозможности их соединить. Та система приоритетов, которую я называю объективной, построена на том, каким я хотел бы быть, некий образ идеального я с точки зрения декларируемых ценностей. Выглядит она примерно так:
Несение в массы своей идеологии (в частности, работа над книгой)
Наполнение контентом своих сайтов, а также помощь окружающим в компьютерных вопросах
Работа над IntB, технические доработки своих сайтов, другие разработки
Freelance и выполнение других обязательств перед окружающими
Возможность проявить себя (конкурсы, соревнования, поиск халявы и тому подобное)
Познание (научные, научно-популярные материалы, и книги по IT-темам)
Созерцание (прогулки и поездки в одиночестве)
Художественные книги и фильмы
Компьютерные игры
Общение с людьми
Если же построить субъективную систему приоритетов, то есть такую, которая основана на чувстве удовлетворенности от прожитого дня (или наоборот, неудовлетворенности от недостатка), то получится примерно следующее:
Компьютерные игры
Возможность проявить себя (конкурсы, соревнования, поиск халявы и тому подобное)
Созерцание (прогулки и поездки в одиночестве)
Художественные книги и фильмы
Познание (научные, научно-популярные материалы, и книги по IT-темам)
Наполнение контентом своих сайтов, а также помощь окружающим в компьютерных вопросах
Общение с людьми
Работа над IntB, технические доработки своих сайтов, другие разработки
Несение в массы своей идеологии (в частности, работа над книгой)
Freelance и выполнение других обязательств перед окружающими
Собственно, с этим проиворечием и связан мой сбитый режим сна. По какой бы из этих двух шкал я не оценивал день, результатами по второй обычно оказываюсь не удовлетворен (за очень редкими исключениями), и поэтому из всех сил цепляюсь за уходящий день в попытках «догнать», успеть хоть что-нибудь сделать по верхним ее пунктам. И даже часто успеваю, но ценой того, что ложусь спать в 4—5 часов утра. Кроме этого есть еще расходы времени, которые можно назвать антиценностыми. В первую очередь это время, проведенное в социальных сетях, общение в ЛС с людьми, уровень доверия у которых ниже 30 (именно в ЛС, на форумах и т.п. оно не расценивается как потеря времени), и потребление мусорной информации. А также выполнение тех действий, на которые я согласился потому что не хватило решимости отказаться.
Постепенно возвращаюсь к нормальной жизни после конкурса. В субботу сходил на встречу по настолкам. На этот раз пришло всего 4 человека. Организатор встречи даже расстроился из-за этого. Зато поиграли хорошо! Сначала два раза сыграли в «Кондотьеров» (давно хотел поиграть в эту игру, но на предыдущих встречах как-то не находилось желающих). Но «Кондотьеры» — игра сложная. Я никак не могу найти баланс между двумя крайностями: либо потратить все карты на победу любой ценой, и потом следующую битву или две сидеть без карт (и, соответственно, без возможности что-то сделать), либо наоборот, играю слишком пассивно. Потом переключились на новую для меня игру — «Средневековая академия». Эта игра гораздо проще, и построена на распределении ресурсов между семью направлениями, причем в некоторых из них важно оказаться первым глобально (то есть за три или даже все шесть раундов), в некоторых — локально (то есть в текущем раунде), а в некоторых — наоборот, важно не оказаться последним или предпоследним. В первый раз я не сразу понял некоторые особенности игры, поэтому оказался последним с отрывом в одно очко от третьего. Во второй раз получилось так, что мог бы занять второе место, но не учел того, что в результате дополнительных ходов один из игроков обгонит меня в самом конце (хотя мне даже это пытались подсказать), и в результате недополучил 7 очков, которые запросто мог бы получить, и оказался третьим. К третьей игре я уже учел все это, понял, как играют остальные игроки, и занял первое место. Причем мог бы закончить с большим отрывом, но один из игроков попытался обойти меня на драконоборчестве, и пришлось потратить дополнительные ходы в последнем раунде на спасение ситуации там, хотя изначально я планировал использовать их на взятие дополнительных 6 очков в другой области. В воскресенье отправился в Зарядье. Основной целью было посмотреть на результаты конкурса «Планета Москва», которые выставлены там в галерее на Китайгородской стене. Потом решил зайти в сам парк, посмотреть его самую дальнюю часть (юго-западный угол) с болотной растительностью. Так уж получилось, что во все предыдущие приходы туда я как-то до него не добирался. Но увы, это оказалось не самой удачной идеей: Зарядье по воскресеньям просто переполнено людьми. Оттуда решил пройти пешком к Третьяковской. Какой же огромный контраст: стоило выбраться из толпы, перейти мост и дойти до Водоотводного канала, как тут же возникло ощущение спокойствия, неспешности и чувства гармонии с городом! Еще нашел необычный фонтан без какого-либо ограждения. Просто кусок улицы с дырками в плитке, из которых бьют струи воды! Причем высота струй меняется, иногда исчезают полностью, и тогда невнимательный прохожий рискует получить непредвиденное купание. Что любопытно, хотя я бывал в этом месте в позапрошлом году, то ли этих фонтанов не было, то ли я просто не обращал на них внимание. А вчера отсиживался дома. Растолкал те накопившиеся задолженности перед жизнью, о которых писал раньше, но появились новые. А еще на Ask получил очень интересный вопрос про то, что я транслирую своей жизнью сейчас, заставивший основательно задуматься.
Прошлое воскресенье и понедельник я провел в очень подавленном состоянии. На конкурсе CodinGame дела шли очень плохо: несмотря на все мои попытки усовершенствовать алгоритм, я скатывался все ниже и ниже в рейтинге, и никак не мог понять, почему это происходит. Вроде ошибок нет, алгоритм играет нормально, а я все равно раз за разом проигрываю. Еще и чата узнал, что есть люди, которые вообще написали полноценный симулятор этой игры у себя на компьютере и провели на нем моделирование множества игр, на основании чего для каждой карты определили коэффициент ее полезности. Стало ясно, что с моим простеньким алгоритмом выбора карт с такими тягаться не по силам. Попробовал даже быстро написать новый вариант (уже пятый по счету), но и в нем результаты отличались не сильно. Во вторник я прекратил все эти попытки, а стал искать среди уже отправленных версий те, на которых мне еще удавалось подняться хотя бы до середины лиги. И в итоге нашел такую, которая позволила снова подпрыгнуть до 202 места. Среда и четверг ушли на испытание в этой версии некоторых идей, которые возникли в воскресенье и понедельник. Еще я пытался поиграться с функцией выбора карт на этапе начальной раздачи. Но все было безрезультатно: либо изменения были несущественны, либо наоборот, я начинал падать вниз. Кроме того, так и оставался вопрос с тем багом, про который я уже писал. Почему-то при его наличии результаты получались в разы лучше, чем при его отсутствии, хотя с точки зрения здравого смысла должно было быть все наоборот. Еще пытался изучить статистику и понять, на каких именно раскладах я проигрываю, но все что удалось — это сделать предположение, что проигрыши идут на раскладах, где guard-карт мало, а противник набирает много «тяжелых» карт. Наконец, наступил последний день конкурса — пятница. Тут мне пришло в голову (опять же, под влиянием чата) применить метод Монте-Карло, то есть выбирать ход случайно, моделировать возможный ответ противника, исходя из соображения, что он будет бить только в guard-карты и моего игрока, и оценивать результат, выбирая в итоге тот, у которого оценка оказалась лучшей. На удивление быстро я переделал под него свой старый код, но увы, такой подход тоже оказался совершенно безрезультатным: я по-прежнему оказывался на дне серебряной лиги. Вообще, если в предыдущих конкурсах было понятно, что делать, как играть, чтобы выиграть, но у меня не хватало знаний описать это математически и закодировать, то в этом — все наоборот. Я мог написать практически любую стратегию, но никак не мог понять, как вообще надо играть, чтобы выигрывать. В частности, как именно происходит захват стратегической инициативы, когда у одной из сторон на столе оказывает на три или более карт больше, после чего дальнеший ход игры, фактически, предрешен. А не понимая этого, я мог делать функцию оценки только вслепую из общих соображений типа «health points и показатели карт на столе моего игрока должны давать плюс, health points и карты противника — минус». И, судя по всему, главный недостаток моего алгоритма заключался в том, что слишком часто он решал выложить новую карту вместо того, чтобы бить в противника. И еще я не учел ассиметричности игры, того, что оказавшись вторым по очередности хода, нужно играть иначе, чем первым (хотя как именно «иначе» — не понимаю до сих пор). Из-за этого у меня было много результатов, когда я у одного и того же противника первым игроком выигрываю, вторым — проигрываю. Еще непростой выбор был в конце между двумя версиями кода, одна из которых была хорошо протестирована, а другая — меньше, но вроде бы давала лучший результат. В итоге менее чем за минуту я все же выбрал вторую. И вроде бы не прогадал: 203 место в серебряной лиге, 590-ое в общем зачете. То есть с небольшой погрешностью повторил свои результаты предыдущих конкурсов. В общем, что можно сказать в итоге: переписал код целых семь раз, получил массу опыта и интересных идей, попробовал делать то, о чем прежде имел весьма смутные представления, впервые стал целенаправленно применять функциональный подход и оценил его преимущества, да и вообще стал чувствовать себя в Python так же уверенно, как и в PHP. Но увы, в плане результатов я ожидал все же большего…
Недавно осознал, что же вызывает у меня существенный дискомфорт и не дает чувствовать себя полноценно счастливым. Это постоянное чувство внутреннего опоздания, отставания от графика, того, что я реализую задуманное гораздо позже, чем мог бы. Стал анализировать, откуда оно берется, и понял, что в голове у меня есть образ некоего почти идеального я. Того, есть четкие приоритеты между «хочу» и «надо», кто умеет работать по плану, и не отвлекаться на постороннее. Соответственно тот почти идеальный я, задумав какую-либо идею, либо сразу же приступил бы к ее исполнению, либо, при наличии более важных дел, типа работы/учебы, закончил бы сначала все эти дела, а потом все равно взялся бы за задуманное. У реального меня все получается иначе. Во-первых, постоянные конфликты между «хочу» и «надо бы», которые я описывал в отдельном сообщении. Во-вторых, если я пытаюсь приступить к реализации и попадаю в зону неуверенности, где не знаю, как действовать, тут же срабатывает защитная реакция: мозг немедленно находит, на что переключиться. Причем то, на что я переключился, кажется безумно увлекательным, даже если я при этом умом понимаю абсолютную бесползеность этого занятия. Так проходит день, а на следующий мотивация уже исчезает. В результате к начальному замыслу я возвращаюсь только через пару недель, или даже месяцев, а некоторые идеи так и вовсе годами лежат (так, например, соционическую социальную сеть я задумал в 2009, более-менее возможность заняться ее реализацией появилась в 2011, но реальный пуск состоялся в 2017). И поэтому когда я все же делаю задуманное, недовольство остается: «я должен был сделать это еще N недель назад!». Даже с этой заметкой именно так и получилось: я начал писать ее 4 августа, и хотел закончить в тот же день. Самое интересное, что тот почти идеальный я, который все делает по плану и вовремя, когда-то реально существовал. Таким я был в школе и первых двух курсах Института. Потом же все поменялось… С другой стороны, тот идеальный я жил все же в совсем других условиях. Долгосрочные цели тогда были внешние: что-то делать меня заставляло не собственное желание, а учбеное расписание. Кроме того, задачи ставились, в основном те, для которых уже были даны все необходимые знания. Сейчас же почти у всех задач есть та или иная новая для меня часть, где неоходимые знания приходится приобретать на ходу и самостоятельно. И в третьих, тогда главным мотивирующим фактором был страх перед неопределенностью «ой, что же будет, если завтра я пойду не готовым». А потом он в какой-то момент он сменился пониманием «да ничего особо такого, просто потом все равно придется делать и сдавать, просто добавятся лишние проблемы». Несколько лет назад (где-то с 2009 по 2013 годы) я активно искал способы вернуться к тому прежнему себе, но, безрезультатно. Любые попытки что-то планировать и исполнять эти планы приводили к мощному внутреннему протесту, на подавление которого жизненных сил тратилось в разы больше, чем на само дело. Потом решил пойти другим путем — отказался от планирования вообще, заняв позицию «что сделаю, то и хорошо». Отчасти это помогло, но вот это ощущение вечно опаздывающего все портит…
Опять весь день прошел в конкурсах. На CodinGame перепробовал почти все идеи, которые у меня были, но прорывных результатов ни одна не дала. Максимум что удалось — это подняться до 202 места в серебряной лиге, но сейчас снова скатился. И никак не могу понять, что делать: то ли стратегию игры менять, то ли начального распределения. Вечером прошел очередное задание КСИ. На старте посмотрел: дается всего 20 минут. Подумал, что задание будет легким. Увы, это оказалось не так. Задание состояло из трех вопросов, и первый действительно был элементарным. А вот второй оказался кошмаром. Требовалось решить кучу уравнений уровня 6 класса средней школы, сложить результаты и выбрать соответствующий ответ. Вроде прорешал быстро. Но ответ получился такой, какого в списке вообще не было. Стал срочно все перепроверять, и таки ошибка обнаружилась. Эх, всегда у меня с математикой так было: вроде все понимаю, что и как считать, так где-нибудь да ошибусь. В результате на перепроверку потратил еще несколько минут. Наверное, следовало бы воспользоваться какой-нибудь онлайн-системой для решения уравнений, например, WolframAlpha, но я только сейчас узнал о том, что такое есть. А последний вопрос оказался на анализ информации. В спокойном состоянии я легко бы на него ответил, но времени на ответ осталось всего две с половиной минуты, так что не было возможности точно убедиться, что я нашел верное решение. Так что не знаю, каким в итоге окажется результат. Но зато интересно было наблюдать за собой, за тем, как ускоряется мышление в таких ситуациях. Еще на том же CodinGame решил одну простенькую задачу на новом для меня скриптовом языке Lua. В целом язык мне понравился: какая-то своеобразная смесь Python и JavaScript. Только вот не хватает готовых функций типа filter и reduce, к которым я уже успел привыкнуть. А вечером на какой-то момент вышел на улицу посмотреть на звезды. Сейчас небо по ночам уже темнеет полностью, и звезд видно гораздо больше. Какое же это потрясающее зрелище в ясные дни! А еще задумался, почему же ночное небо вызывает такое чувство восхищения…
Сегодня отправился на прогулку в сосновый бор за дальним СНТ, чтобы немного переключиться с конкурса на что-то другое. Добрался туда, впечатлился покоем и неспешностью природы, сел на бревно и ушёл в свои мысли... И вдруг пришло осознание, что у меня сейчас нет четкого понимания, кто я. И многие проблемы и переживания именно с этим и связаны. Раньше оно было. Я воспринимал себя как человека, оставшегося осколком старого мира, который живёт по принципу «пусть мир поломался, но я буду оставаться правильным, несмотря ни на что». Где под оставаться правильным понималось собирать знания и жить по принципам разумности и экономии, не гонясь за деньгами, не заниматься целенаправленным «формированием связей» и саморекламой (это то, что я больше всего ненавижу, пожалуй), и делать только то, во что веришь и соблюдать правила ради самих правил и того, чтобы чувствовать себя порядочным человеком. Этому даже своё название «упорядочиватель мира». И было четкое противопоставление «я» и «они» (то есть «ускорители жизни», принявшие правила нового «мира наизнанку», в частности, лицеисты). Сейчас же оказалось, что, во-первых, из-за избытка информации у меня самого снизилась тяга к знаниям. Во-вторых, «ускорители» живут так не потому что им навязали, а им реально в удовольстве жить с таким уровнем интенсивности и ответственности. В третьих, даже в этом «мире наизнанку» толковый специалист может найти себе место (Правда, психологические затраты, связанные с поиском, никуда не деваются. Равно как и то, что умение собрать что-то из готовых компонентов иногда ценится даже больше, чем умение сделать что-то совсем с нуля). Но самое ужасное заключается в том, что у большинства людей нет потребности в экономии и оптимизации — того, идеи о чем я и пытался нести в мир. Более того, в ряде случаев я и сам ловлю себя на том, что поступаю непотаминально. Из-за всего этого у меня пропало понимание, кто я, и что несу в этот мир, с чем и связаны многие переживания.
Пара дней активного кодинга и отладки, и вот результат: я прорвался в серебряную лигу в Legends of Code and Magic! Причем получилось весьма своеобразно: сначала я обнаружил в программе один баг: неправильно считалась оставшаяся мана. Исправил его, и внезапно получил существенное ухудшение результатов игры, хотя с точки зрения логики и здравого смысла результат должен быть обратный: в неправильном варианте просчитывается куча лишних вариантов, которые на самом деле сыграть не могут, и поэтому шансов найти хороший вариант игры существенно ниже. Стал разбираться, в чем дело, и понял, что у меня слишком неэффективная функция оценки игрового состояния. Переделал ее, и даже с исправленной версией программы стал подниматься в бронзовой лиге до примерно 200-ого места. Поэкспериментировал с еще парой мелочей, и удалось в отдельные моменты подняться до сотых позиций, а вот дальше — никак. И тут вдруг я обнаружил, что мой алгоритм на этапе выбора карт всегда берет нулевую карту, и никогда никакую другую. Оказалось, что когда я в последний раз переписывал алгоритм, я не учел одной особенности этапа раздачи карт: на нем идентификаторы всегда карт равны -1. В результате в функцию выбора карты передавалось их не три штуки, как должно было быть, а только одна, самая первая. Как только я это исправил, сразу же легко поднялся в серебряную лигу. В отличие от прошлого конкурса, Code of Ctulu, когда прорыв состоялся в последние часы конкурса, когда я уже ни на что не наделся, на этот раз таких зашкаливающих эмоций, когда я был готов орать на весь поселок от радости, не было. А была просто удовлетворенность от достигнутого результата. Кстати, в серебряной лиге старт тоже оказался неплохим: сразу же поднялся на 350 место из 500, после того, как чуть поправил функцию оценки — до 310. А впереди еще 7 дней конкурса, так что игра продолжается!
Второй день живу в состоянии сильного эмоционального спада. Хотя в целом вроде бы все хорошо, есть множество мелких поводов для переживаний. Например, хоть я отладил свою программу для очередного конкурса на CodinGame, результаты она показала не просто плохие, а очень плохие: удалось подняться всего на 70 позиций. В группе с конкурсами по программированию тоже прироста никакого. Плюс переживания по поводу слишком низких результатов в предыдущих конкурсах. Неужели я уперся в потолок своих возможностей? И даже Ask не радует совершенно. А остатки жизненной энергии отбирают мелкие невыполненные обещания. Это самое противное… Именно из-за такого я когда-то и начал мечтать о мире без сроков и планов: в моменты таких спадов хочется «нырнуть в реку времени», уйдя со связи отовсюду, откуда возможно. И не тратить жизнь на то, что мне не интересно. Но увы, не получается… Только к сегодняшнему вечеру ситуация хоть как-то улучшилась. Сначала прогулялся вдоль реки, посмотрел закат. Потом вернулся домой, проспал минут 30, после чего начал более-менее приходить в себя. В частности, придумал новый алгоритм для конкурса, и даже частично его реализовал. В отличие от предыдущего, который построен на «если так, выбирай стратегию такую», тут просто перебор возможных ходов. К моему удивлению, когда все сложилось в голове, получилось весьма аккуратно и компактно.
С неявной подачи одного из анонимов на Ask.fm посчитал событийные гороскопы для двух дней моей жизни, в которых произошли два важных для меня конфликта: Декабрьская трагедия (14 декабря 2001 года) и Черная весть (26 апреля 2013). Каково же было мое удивление, когда получились две очень похожих картины: в одном доме оказываются две планеты и северный лунный узел, в противоположном — еще три планеты, и еще одна — где-то отдельно (при этом Уран, Нептун и Плутон я не учитывал). Правда, сами дома — разные: Декабрьская трагедия — VI и XII, Черная весть — II и VIII. Потом попробовал посчитать еще несколько дат, не столь драматичных (вдруг это довольно типовой расклад), но там ничего подобного не наблюдается, планеты оказываются расставленными более равномерно.
Неделя прошла в каком-то потерянном состоянии. То ли результат того, что режим дня сбился, то ли спад жизненной энергии после поездок и связанных с ними психоэмоциональных перегрузок, то ли близость солнечного затмения повлияла. Впрочем, после СПб в прошлом году несколько дней то же самое было. Все, что я за эти дни сделал — это написал записи в блог о поездках, выложил фото, и опубликовал свою группу «Конкурсы для программистов». Даже на CodinGame ресурсов не хватило. А сегодня снова отправился на дачу. Несмотря на то, что уехал оттуда всего 8 дней назад, кажется, что прошла целая вечность. Плюс еще на самой даче тоже много чего изменилось, так как отец сделал за это время мини-ремонт. Причем несмотря на то, что встал поздно, перед поездкой успел еще пройти очередное задание КСИ. Еще в очередной раз убедился: новый опыт — это путь к новым идеям. В частности, когда я описывал поездку в Переславль, возникла мысль сделать новый тип раздела для IntB — travel blog, где фотогалерея с краткими описаниями фото будет сочетаться с картой маршрута, выводимой на основе Яндекс.Карт или Google.Maps. Или же просто заложить такую возможность в обычную фотогалерею… Причем сначала я думал сохранять сериализованные данные в отдельный столбец в таблице для расширенной информации, а сейчас прихожу к выводу, что лучше просто делать дополнительные теги разметки. Только вот когда это сделаю — не знаю. Тяжело все-таки жить в мире с избыточным выбором возможностей: хватаюсь то за одно, то за другое, и ничего не довожу до конца.
Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме.
После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе.
Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю.
Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.