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

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


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

t.me/4x_pro

Лог жизни

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


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

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. Четкого и однозначного ответа на этот вопрос не нашел, и остался при мнении, что все же последний.
А вечером, точнее, уже ночью, отправился на прогулку. Ночи сейчас очень светлые и очень тихие: соловьи уже умолкли (хотя сразу после этого заезда я еще одного или двух слышал), лягушки тоже, а сверчков еще не слышно. И только трескучие крики какой-то ночной птицы нарушают эту тишину и шум шоссе в некоторых местах слышен. Как обычно, дошел до насыпи, посмотрел с нее на звезды. Их сейчас видно не так уж и много: небо слишком светлое. Зато хорошо были видны Юпитер и Сатурн. А еще я решил все же пойти на поле, и попробовать увидеть Марс. Пока шел, увидел ежа. Точнее, сначала услышал в кустах какое-то шуршание и странное фырканье. Посветил туда фонариком, и обнаружил, что это еж. Как это ни странно, он меня особо не испугался, только вот слишком яркий свет ему не нравился. Он был так близко, что я мог бы попытаться его поймать, но не стал.
Добравшись до поля, я увидел Марс. Он был достаточно низко над южным горизонтом, гораздо ярче Сатурна (я почему-то ожидал, что по видимой яркости они будут примерно равны), а по цвету он вполне оправдывал название Красной планеты! Минут пять я постоял, наблюдая все три планеты сразу и чувствуя полноту Бытия и гармонию с миром, потом пошел обратно. Но чтобы сократить путь, решил зайти в поселок через главные ворота. В результате разбудил собак, а они, в свою очередь, разбудили сторожа, который стал допытываться, кудя я иду и чего это я так поздно шляюсь.

Еще о страхе перед выступлениями

4X_Pro
Пару дней назад осознал, откуда у меня берется торопливость и страх пауз при выступлениях/съемке на камеру. Вспомнил, что в 5—6 классах у меня нередко бывала такая ситуация: на уроке английского, когда учительница меня спрашивала что-то, я начинал в голове строить ответ, делал это достаточно медленно, и к тому моменту, когда достраивал и начинал открывать рот, чтобы сказать, она успевала решить, что я просто ничего не знаю, и спрашивала следующего. (Кстати, хороший пример различия восприятия рационалов/иррационалов по соционике, да и каталогов из КЛ — тоже.) А потом меня дома ругали за плохие оценки (тем более, что отец был просто помешан на важности двух предметов: английского и физики). И, по всей видимости, где-то в бессознательном отложилась установка «молчать нельзя, а то лишат слова вообще».

О программировании и личной неэффективности

4X_Pro
В последние дни как-то совершенно не хочется ничего писать в блог. Возможно, потому что особо не о чем, кроме того, что в последние дни снова стало возвращаться чувство гармонии с миром, включенности в жизнь, полноты Бытия.
В пятницу занимался изучением frameworkа Flask для Python. В отличие от большинства PHP-шных, он мне очень понравился. Фактически, там создается Web-сервер прямо в самом скрипте, и все соединения обслуживаются одним процессом, что позволяет использовать общую память (прадва, есть и обратная строна: любая утечка ресурсов тут же будет давать о себе знать). Очень удобно для тех случаев, когда нужны динамические скрипты, но при этом связка Apache+PHP является слишком тяжелой.
Framework оказался на удивление простым. Фактически, нужно написать несколько строчек кода инициализации + навесить декоратор на функцию-обработчик того или иного URL. Правда, я чуть было не сломал мозг в начале, не понимая, почему же код примера не работает. Оказалось, нужно еще было добавить app.run(), который почему-то во всех примерах отсутствует. (Хотя, возможно, дело в версиях.)
Правда, получилось как всегда: в то, как работать с frameworkом, я въехал быстро, но весь день откладывал и откладывал попытку попробовать сделать на его основе что-то свое. И первый скрипт с его использованием запустил только на следующий день, в субботу. Эх, а ведь когда-то были времена, когда я, узнав что-то новое, сразу же начинал пробовать это в действии! Интересно, как их вернуть? А не ждать непонятно чего, как сейчас…
Кстати, и с freelance-задачей, о которой я уже упоминал, ситуация та же самая: сегодня днем в голове сложилось четкое понимание, что и как нужно сделать, но вот никак не соберусь взять это и сделать.

Опять распыляю силы

4X_Pro
В последние дни опять такое чувство, что меня разрывает на куски между множеством всего, что я хотел бы сделать, но при этом ни одно из этих желаний не дотягивает до полноценного «хочу», ради которого можно было бы все бросить и заняться прямо сейчас. Плюс еще постоянно вылезают какие-то мелочи, которые я на самом деле делать совершенно не хочу, но надо, в основном, тот же freelance. И получается так: висит какое-нибудь «надо», я из-за него откладываю остальные дела, но из-за внутреннего протеста против планов заняться никак не могу до самого позднего вечера. И получается, что дело, на которое нужно минут 20—30, реально приводит к тому, что из-за него вникуда уходит целый день.
Сегодня в попытках хоть как-то избавиться от этого снова уехал за город (а еще из-за отключения горячей воды). И теперь снова думаю над вопросом, чем же заниматься в жизни, если учитывать следующее:
1) Я не умею легко и быстро, играючи, излагать свои мысли ни на бумаге, ни тем более устно, любой процесс написания (даже вот этого текста) для меня именно муки творчества.
2) У меня нет коммуникативных навыков (и по идейным причинам нет желания их приобретать), что накладывает довольно много ограничений.
3) Чтобы быть замеченным в условиях современного «мира наизнанку», нужно либо делать что-то совсем необычное, что вызывало бы удивление и желание об этом рассказать, либо заниматься целенаправленной раскруткой. Но раскрутка, во-первых, вызывает у меня глубокое внутреннее неприятие, во-вторых, создает необходимость коммерциализировать свою деятельность. Но коммерциализация сразу же повышает уровень ответственности за сделанное. А вот ответственность-то я брать на себя не хочу.
Впрочем, недавно произошло нечто, что можно считать указанием высших сил на то, что делать. На встрече по настольным играм я пересекся с давним знакомым С.Ш. и узнал, что он, оказывается, написал и издал небольшую книгу, причем тоже по саморазвитию. Он подарил мне один экземпляр. Увы, ничего особо прорывного я из его книги не узнал, она будет полезна, в основном, школьникам 8—9 классов, и то не всем, а только тем, кому ближе янская модальность жизни. И самое главное, он повторяет типичную ошибку нашего времени: подает янскую модальность жизни как единственно возможную.
Но сам факт того, что раз у него получилось (причем книга по объему раза в два меньше, чем я задумывал для своей), мотивирует меня пытаться тоже. Тем более, что на мой взгляд, есть немало тем, которые он либо не раскрыл в достаточной мере, либо написал слишком мало конкретики.

Настольные игры и мелкие неприятности

4X_Pro
Сегодня сходил на настолки, которые проводились на той же квартире, что и в январе. Изначально хотел было прийти к 15 часам, но, как водится, сначала проспал, потом прособирался, и до места доехал только в 17:15. Как только пришел, сразу же позвали играть в «Нечто». Сыграли несколько конов, но в этот раз почти все время побеждали мирные. Сам я Нечто был только один раз, причем в тот кон смог сделать всего один ход, остальное время были то пересадки, то смена направления, то выпадала паника. Впрочем, потом одной участнице вообще «повезло»: она была нечто, но за всю игру ход до нее не дошел. Отчасти с моей подачи: я сидел рядом с ней, и на своем ходу сделал смену направления движения. Еще дважды были моменты, когда подавляющее большинство было уверено, что в роли Нечто снова оказался я, но это было не так.
Потом еще сыграли в японский вариант Бэнга. Очень понравилось, хотя в первый кон я сразу выдал свою роль (а играл я ронином, который один против всех), в результате многие сыграли против меня. Второй раз играл за самураев, но там получилось так: ниндзя и и ронин объединились (плюс еще сидели еще очень удачно) и весьма эффективно сыграли против сегуна, устранением которого игра и закончилась.
В общем, очень сегодняшней игрой доволен, жалею только об одном: не поиграли в Кондотьеров и в обычный Бэнг (хотя в последнйи — была возможность).  Заигрались примерно до 0:25. Я собирался вернуться по МЦК, поэтому думал, что по времени не особо критично. И вот тут-то и начались неприятности. Я не поверил своей белой интуиции, которая требовала оторваться ото всех и идти на МЦК как можно быстрее, а пошел со всеми до метро. Но народ шел медленно, и в результате к МЦК добрался только в 0:46. Сотрудники у входа сказали мне, что подходит последний поезд в нужную мне сторону. Я бросился бежать, но там длинный переход, и когда я бежал по нему, увидел, что поезд уже стоит на станции. Я пытался успеть на него изо всех сил, но увы, не хватило где-то 20—25 секунд на то, чтобы спуститься вниз. Кто же знал, что МЦК закрывается раньше часа ночи!
Вообще, какой-то период постоянного опоздания последней минуты…
Было очень обидно и что не успел, и что напрасно потратил поездку на вход в МЦК. Но делать было нечего, пришлось идти обратно к метро, благо оно еще было открыто. Было ясно, что на свою линию я не успеваю никак, и придется ехать на ночном автобусе. Было два варианта: ехать до Лубянки, а оттуда идти пешком до Китай-Города, или же пытаться поймать последний поезд на пересадке Чистые Пруды — Сретенский Бульвар, а на автобус пересаживаться на Римской. Уже совсем было приготовился выйти на Чистых Прудах, но в последний момент передумал и поехал на Лубянку. Там вдруг понял, что не знаю, сколько по времени идти от нее до южного выхода из КГ (а автобусы уходят именно от него) и запаниковал по этому поводу. Но, как выяснилось, зря: до нужного места добежал  с запасом в 8 минут до отправления автобуса. Но домой добрался только в 2 часа ночи и в последний момент немного попал под дождь.

Испытание электросамоката

4X_Pro
Днем прошел еще задание №14 в КСИ. Но увы, на этот раз оно мне не понравилось совершенно. Простые и понятные вопросы, и в то же время какие-то совершенно неадекватные ответы: такое ощущение, что ни одного правильного нет в принципе. В общем, никакого удовольствия…
Сегодня DarLik уговорила меня покататься на электросамокатах. Идею эту она предлагала уже пару недель, но меня как-то не очень это интересовало, тем более для этого нужно было регистрироваться в приложении и загружать туда паспортные данные и скан паспорта, в отличие от велосипедов, где для проката достаточно просто зарегистрироваться на сайте и оплатить суточный абонемент.
Мы договорились встретиться в 18 часов, но получилось как всегда: и я немного прособирался, и она опоздала. Потом еще зашли в McDonalds, посидели какое-то время там. Обсудили предстоящий маршрут. Я предлагал ехать от Трубной по Бульварному кольцу и далее к Третьяковской, но в итоге решили наоборот: от Третьяковской к Трубной, а если не будем успевать, то доедем только до Чистых Прудов.
И когда мы уже собирались было отправиться на Третьяковскую, DarLik вдруг спросила меня, взял ли я с собой паспорт. Оказалось, что он необходим для получения самоката. Вот ведь идиотизм: я же загружал его при регистрации, почему нельзя вывести фото оттуда, и проверять по нему? Паспорта у меня, естественно, не было. Я хотел было забить на всю эту затею вообще, но DarLik уговорила быстро съездить домой, взять паспорт и поехать на Третьяковскую.
Пока мы все это проделали, было уже почти 21 час. На Третьяковской мы без особых проблем получили самокаты, но заняло это почти 10 минут. Совершив пару небольших кругов по площади близ входа в метро, мы отправились в путь.
В первый момент было довольно непросто привыкнуть к новому способу перемещения. Во-первых, самокаты достаточно тяжелые, во-вторых, с места они не стартуют, нужно сначала растолкаться, а уже потом переходить на электропривод. В третьих, на брусчатке ощутимо трясет, да и вообще неровности дороги отзываются очень и очень ощутимо. Но вот мы вырвались из толпы близ Третьяковской на более-менее свободные улицы, покрытые асфальтом. Тут ехать стало гораздо приятнее. Но сильно мешало то, что при пересечении улиц приходилось соскакивать, сводить самокат, а потом заново расталкиваться.
Более-менее комфортно ехать я приспособился только к тому моменту, когда мы пересекали реку по Большому Устьинскому мосту. На нем я впервые разогнался до довольно приличной скорости, но мешали какие-то металлические желоба, уложенные на нем в нескольких местах: на них очень ощутимо подбрасывало.
Дальше мы без особых проблем проехали мимо сквера Яузские ворота и выбрались на Бульварное кольцо. На нем ждала неприятная неожиданность: дорожка в середине бульвара была не асфальтовой, а гравийной. Ехать по ней было не очень приятно, поэтому приходилось ехать по узкой полосе плитки вдоль бордюра, постоянно рискуя задеть его либо ногой, либо колесом.
В общем, получить по-настоящему удовольствие от езды получилось только в самом конце, уже у Чистых прудов, где и дорога хорошая, и разгоняться я уже приучился. Но там было слишком многолюдно. До Трубной мы не поехали, так как я слишком опасался, что не успеем уложиться в оплаченный час. Но потом выяснилось, что времени у нас было с запасом, вполне могли бы и успеть… Но увы, я слишком переживаю в ситуациях, когда есть ограничения по времени.
Подводя итог, можно сказать следующее: электросамокат реально ускоряет перемещение по городу примерно в 2 раза: 3.5 км мы проехали за 37 минут, при этом еще сначала ехали медленно, плюс еще около памятника Расулу Гамзатову несколько минут постояли, изучая окружающие здания через Wikimapia. Но в то же время, поездка на электросамокате требует концентрации внимания на дороге, все остальное просто перестаешь замечать. Да и просто покататься — слишком дорого, а  для постоянных поездок (в частности, чтобы доезжать от дома до МЦК) выгоднее купить достаточно какой-нибудь достаточно простой.

Доделки и работа над сайтом

4X_Pro
После трех дней, проведенных наполовину вне дома настал момент, когда идти никуда не надо. Весь день сижу дома и понемногу разгребаю накопившиеся долги и недоделки. Но процесс идет довольно медленно, слишком много отвлекаюсь… Как всегда, делаю что угодно, кроме того, что должен по плану.
Зато занялся всерьез своим сайтом. Посмотрел ситуацию на нем через Google.Webmaster, обнаружил множество ошибок 404, возникших из-за переезда сайта. Часть дня потратил на их исправление, а также прописывание тегов для тех записей, для которых они исчезли. Еще узнал об одной мелкой ошибке IntB: я заголовок Content-Type выдавал как Content-Type: text/html; charset="utf-8", что, как выяснилось, неправильно: кавычек быть не должно. Причем узнал это от техподдержки сервиса pr-cy.ru, куда написал bug report, считая, что это их сервис как-то неправильно воспринимает мой сайт и ругается на кодировку.
Будем надеяться, Яндекс это оценит, а то заходы с него упали до минимума в последнее время.
Еще узнал, что оказывается, любой желающий может зарегистрироваться на Яндекс.Дзен и писать статьи для этого сервиса, получая большое количество читателей. Возникнет какая-нибудь интересная идея для статьи — попробую!

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

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