Мда, не успел я порадоваться, что половина тяжелого «года с вирусом» позади, а в жизни на какой-то момент наступило затишье, как вдруг снова посыпались изменения, и за два дня произошло столько всего, что остаётся только за голову хвататься…
Увы, описать всё не получится. Скажу только, что вчера (вернее, уже позавчера) приехали DarLik и П.Т. С отцом они довольно легко нашли общий язык. Отец показал П.Т., как траву косить косилкой и триммером (у П.Т. есть тоже есть дом в деревне, но совершенно необжитой, куда он до этого года и не выбирался). Потом совместными усилиями жарили шашлык. Шашлыка на этот раз было очень много, 12 шампуров, и следить было сложно, да ещё постоянно отвлекались. Но тем не менее, результатом остались все довольны. Поели в беседке, затем решили сходить прогуляться к реке. Но получилось как всегда: пока собрались, уже немного начало темнеть. А путь к реке проходит под ЛЭП с высоким напряжением. DarLik когда-то наслушалась про их вредность, и начала паниковать, что вот это нам навредит, и чуть было не пошла обратно в тот момент, когда были почти уже у цели, оставалось где-то меньше ста метров. Я показал им то место возле поворота реки, где в прошлые годы часто сидел вечерами и смотрел на то, как вдали река появляется из-за поворота и затем плавно движется ко мне, вновь поворачивая уже у этого самого места. Но увы, было поздно, полутемно (шли мы не быстро, много останавливаясь в пути), и мы почти сразу отправились обратно.
Потом выяснилось, что П.Т. — любитель бани. Мы растопили баню, и он ушёл париться (причём уже около полуночи, чем немало меня удивил). Где-то около двух часов ночи от избытка впечатлений всем сильно захотелось спать. Но увы, эмоциональная перегрузка сработала и в обратную сторону: до 6 утра я уснуть не мог.
Проснулся только в 14 часов. Оказалось, что П.Т. и DarLik просыпались утром, но снова заснули и проспали даже дольше меня. Потом мы еще пообщались, в частности, я рассказал им про ИИС и ETFы, так как П.Т. активно интересуется этой темой. Потом они стали собираться домой. В общем, получил позитивную эмоциональную подзарядку. Но когда они уехали, а я стал настраиваться на возвращение к обычной жизни, случилась еще куча совершенно неожиданных событий (связанных уже не с ними), из-за чего день оказался просто огромным. Но это уже отдельная история.
Был в Сети 21 дек. 2024 г., 14:10
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.
- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proЛог жизни
Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.
Долгожданное затишье
Наконец-то жизнь замедлилась до приемлемого уровня, и появилась возможность пожить спокойно. Впрочем, совсем уйти в себя, как это было в 2014 году, не получается. Хотел было заняться написанием «нашего ответа Калинаускасу» по поводу трех этапов жизни для раздела «Мировоззренческое», но так и не сложилось. Зато сделал много другого. Вчера большую часть дня оптимизировал новую версию SiteKnockerBot. Разобрался, как преобразовывать массив байтов в строку без перевыделения памяти, и в итоге добился, что время обработки запроса стало примерно таким же, как в старой. Да и само потребление памяти уменьшилось почти на 30 Мб. Правда, это в версии с отключеной поддержкой GZIP-сжатия ответа серверов.
Еще с подачи ПнБ узнал про IDE под названием CodeLobster. Очень понравилась: есть всё, что мне нужно, и специализирована именно под PHP. Но так и не понял, можно ли использовать её бесплатно больше 30 дней или нет. А также заинтересовался frameworkом под названием Code Igniter. По описанию он мне понравился даже больше, чем Yii, но что-то своё писать пока не пробовал. Возможно, если соберусь делать отдельный движок для децентрализованной соцсети, то буду писать именно на нём.
Сегодня прогулялся немного по территории посёлка, вышел к пруду. Он совершенно зарос, вся поверхность зелёная от ряски. А еще читал «Шестой дозор» (с подачи Kitsune) и прохожу игру Rockman II.
Еще с подачи ПнБ узнал про IDE под названием CodeLobster. Очень понравилась: есть всё, что мне нужно, и специализирована именно под PHP. Но так и не понял, можно ли использовать её бесплатно больше 30 дней или нет. А также заинтересовался frameworkом под названием Code Igniter. По описанию он мне понравился даже больше, чем Yii, но что-то своё писать пока не пробовал. Возможно, если соберусь делать отдельный движок для децентрализованной соцсети, то буду писать именно на нём.
Сегодня прогулялся немного по территории посёлка, вышел к пруду. Он совершенно зарос, вся поверхность зелёная от ряски. А еще читал «Шестой дозор» (с подачи Kitsune) и прохожу игру Rockman II.
Безумный день
День сегодня получился какой-то просто безумный. Мы с Tellой снова решили пересечься и изучать окрестности дальше. Я хотел ей показать водоём на месте бывшего песчаного карьера. На этот раз она уговорила свою маму привезти её на машине. Мы собирались встретиться у соседнего СНТ, посмотреть ближний водоём, над которым я фотографирую закаты, и потом отправиться к тому песчаному карьеру.
Но всё пошло не так. Во-первых, за полчаса до намеченного времени внезапно началась гроза с градом. Во-вторых, Tella всё время висела на связи, из-за чего я никак не мог собраться и выйти в намеченное время. Tellу стало глючить по БИ, плюс она ещё обижалась на то, что вчера резко ушёл в оффлайн, не предупредив её, хотя и знала, что я в жестком недосыпе. В общем, день обещал быть «весёлым».
Когда всё же встретились и доехали до того места, где нужно сворачивать на грунтовую дорогу, стало ясно, что дорога от дождя размокла, превратившись в грязь, и ехать по ней плохая идея. Я предложил, что раз так, то лучше снова отправиться в Заозерье. Но по дороге мама Tellы увидела указатель на Павловский Посад, и решила, что нужно побывать там. Идею все поддержали, и мы поехали туда.
Увы, хоть я не раз проезжал Посад на автобусе, но как-то изучить, что там есть в плане достопримечательностей, кроме колокольни на берегу Вохонки, не приходило в голову. Поэтому отправились в режиме свободного поиска. Немного поблуждав по городу, выехали к монастырю (потом выяснилось, что это был Покровско-Васильевский монастырь), рядом с которым было еще несколько церквей совершенно разных стилей. Правда, почти все они были построены сравнительно недавно, кроме Покровской, и того ощущения тишины и какой-то особой энергии, какое бывает от старых храмов (как, например, в Клину или в Саввино-Сторожевском монастыре), не было. Зато территория возле них отлично благоустроена: множество цветов, а еще растёт даже кипарис и есть птичник с фазанами. В Покровскую церковь мы даже зашли. Она внутри кажется просто огромной, и красиво расписана. А ещё там стоял гроб с покойником, к счастью, накрытый так, что покойника не было видно (и я даже не сразу понял, что это).
Потом ещё покатались по городу, хотели спуститься к Вохонке, но не нашли места подходящего места для парковки. Затем проехали через главную площадь, заехали в часть города за железной дорогой, но ничего особо интересного там не нашли, и решили возвращаться. На обратном пути поехали мимо пруда, расположенного рядом с Большими Дворами (если верить Wikimapia, неофициально его почему-то называют Байкалом). Я хоть и проезжал мимо него несколько раз прежде на велосипеде, как-то всегда оставался равнодушным, считая, что Данилищево озеро куда красивее. А вот Tella была от этого пруда в полном восторге, и решила, что нужно подъехать к нему поближе. И вот мы какое-то время провели на берегу этого пруда. Обычно там толпы отдыхающих, но в этот раз дождь всех разогнал. Зато удалось сделать несколько весьма атмосферных фотографий. И, самое главное, Tella осталась очень довольна поездкой в результате!
Когда я вернулся домой, меня ждал ещё один сюрприз. На этот раз учудила DarLik. Она додумалась связаться с моим отцом и рассказать ему, что они были у меня в гостях, им понравилось, и хотели бы приехать ещё. В первый момент мне хотелось просто зарыться под землю. Но делать нечего: пришлось рассказать, что да, реально есть у меня такие друзья, и они реально приезжали. Отец сначала удивился, потом посмеялся и сказал, что пусть приезжают. Так что ситуация решилась, но успокоиться я не мог до конца дня.
А уже ночью случилось ещё одно происшествие — то ли DDoS-атака на мои сайты, то ли просто заход агрессивного спам-бота. Но это я уже описывал в предыдущем сообщении.
Но всё пошло не так. Во-первых, за полчаса до намеченного времени внезапно началась гроза с градом. Во-вторых, Tella всё время висела на связи, из-за чего я никак не мог собраться и выйти в намеченное время. Tellу стало глючить по БИ, плюс она ещё обижалась на то, что вчера резко ушёл в оффлайн, не предупредив её, хотя и знала, что я в жестком недосыпе. В общем, день обещал быть «весёлым».
Когда всё же встретились и доехали до того места, где нужно сворачивать на грунтовую дорогу, стало ясно, что дорога от дождя размокла, превратившись в грязь, и ехать по ней плохая идея. Я предложил, что раз так, то лучше снова отправиться в Заозерье. Но по дороге мама Tellы увидела указатель на Павловский Посад, и решила, что нужно побывать там. Идею все поддержали, и мы поехали туда.
Увы, хоть я не раз проезжал Посад на автобусе, но как-то изучить, что там есть в плане достопримечательностей, кроме колокольни на берегу Вохонки, не приходило в голову. Поэтому отправились в режиме свободного поиска. Немного поблуждав по городу, выехали к монастырю (потом выяснилось, что это был Покровско-Васильевский монастырь), рядом с которым было еще несколько церквей совершенно разных стилей. Правда, почти все они были построены сравнительно недавно, кроме Покровской, и того ощущения тишины и какой-то особой энергии, какое бывает от старых храмов (как, например, в Клину или в Саввино-Сторожевском монастыре), не было. Зато территория возле них отлично благоустроена: множество цветов, а еще растёт даже кипарис и есть птичник с фазанами. В Покровскую церковь мы даже зашли. Она внутри кажется просто огромной, и красиво расписана. А ещё там стоял гроб с покойником, к счастью, накрытый так, что покойника не было видно (и я даже не сразу понял, что это).
Потом ещё покатались по городу, хотели спуститься к Вохонке, но не нашли места подходящего места для парковки. Затем проехали через главную площадь, заехали в часть города за железной дорогой, но ничего особо интересного там не нашли, и решили возвращаться. На обратном пути поехали мимо пруда, расположенного рядом с Большими Дворами (если верить Wikimapia, неофициально его почему-то называют Байкалом). Я хоть и проезжал мимо него несколько раз прежде на велосипеде, как-то всегда оставался равнодушным, считая, что Данилищево озеро куда красивее. А вот Tella была от этого пруда в полном восторге, и решила, что нужно подъехать к нему поближе. И вот мы какое-то время провели на берегу этого пруда. Обычно там толпы отдыхающих, но в этот раз дождь всех разогнал. Зато удалось сделать несколько весьма атмосферных фотографий. И, самое главное, Tella осталась очень довольна поездкой в результате!
Когда я вернулся домой, меня ждал ещё один сюрприз. На этот раз учудила DarLik. Она додумалась связаться с моим отцом и рассказать ему, что они были у меня в гостях, им понравилось, и хотели бы приехать ещё. В первый момент мне хотелось просто зарыться под землю. Но делать нечего: пришлось рассказать, что да, реально есть у меня такие друзья, и они реально приезжали. Отец сначала удивился, потом посмеялся и сказал, что пусть приезжают. Так что ситуация решилась, но успокоиться я не мог до конца дня.
А уже ночью случилось ещё одно происшествие — то ли DDoS-атака на мои сайты, то ли просто заход агрессивного спам-бота. Но это я уже описывал в предыдущем сообщении.
Первая польза от SiteKnockerBot
Только что впервые наблюдал реальную пользу от новой версии SiteKnockerBot. Внезапно он сообщил о том, что этот мой сайт и сайт IntB перестали быть доступными. Я заглянул на них, обнаружил сообщение об ошибке — не удаётся подключиться к базе. Стал разбираться, в чём дело. Обнаружилось, что упал сервер MySQL из-за нехватки памяти. Перезапустил его, через пару минут ситуация повторилась. После этого заглянул в логи, увидел там кучу запросов с какой-то подсети в Америке. Забанил сразу всю подсеть, и перезапустил MySQL еще раз. Вроде помогло.
Вопрос только в том, что это — DDoS атака против меня или же просто заглючивший спам-бот?
Вопрос только в том, что это — DDoS атака против меня или же просто заглючивший спам-бот?
Встреча с DarLik и П.Т.
Вчера, с третьей попытки, всё же договорились встретиться с DarLik и П.Т. Еще в четверг я написал им, что для того, чтобы в пятницу проскочить (относительно) без пробок, нужно выехать до 15 часов. И ради того, чтобы быть готовым к их приезду, даже сам проснулся раньше обычного. Но увы, в 15 часов DarLik только проснулась и написала «собираемся». Потянулось долгое время ожидания. За это время я не выдержал и поджарил и частично съел шашлык (изначально планировалось, что мы приготовим его совместно). Наконец, в 19:30 DarLik написала, что они проезжают Реутов, и что навигатор показывает, что на месте они будут в 22 часа. От этого я получил жуткий facepalm, так как изначально предполагал, что к этому времени уже наоборот, они будут собираться обратно. Но деваться было некуда…
В итоге к 22 часам они только-только добрались до Ногинска. Ещё через некоторое время DarLik вышла на связь с места, где нужно съезжать с шоссе, чтобы дальше я вёл их по телефону. Сначала вроде всё было нормально, я давал им подсказки. Но потом возник момент, когда по объсянениям стало непонятно, где они. Я предложил DarLik сбросить скриншот карты с отметкой геолокации. Она скинула, я посмотрел, и в первый момент показалось, что они вообще сумели заехать непойми куда, оказавшись на другом берегу пруда. Но через пару минут всё прояснилось: я-то всегда смотрю карту с фиксированной ориентацией (то есть север сверху), а DarLik чаще пользуется режимом навигатора, где карта повернута в том направлении, куда едем. Из-за этого я и подумал, что они заехали куда-то не туда.
И вот я уже бегу к воротам СНТ, чтобы впустить их внутрь. Но времени уже 22:40, стемнело, и возникает новая сложность. Машина, на которой они приехали, здоровенная, и поставить её на участок, сделав крутой поворот с узкого проезда, да ещё и в темноте, не так уж и просто. Сначала заклинило ворота из-за того, что их уже давно не открывали. Потом обнаружилось, что двигатель у машины мощный и громкий, и я очень боялся, что мы перебудим всех соседей, которые потом выскажут своё недовольство этим отцу. Потом чуть было не въехали в один из кустов на участке. В конце концов, я не выдержал и сказал П.Т., что ладно, не стоит стараться поставить машину нормально, стоит она по диагонали на въезде и ладно, всё равно ворота закрывать не требуется, а утром всё равно уезжать. На это П.Т. ответил «теперь машина выполняет функции ворот: никого на участок не пускает». На этом и порешили, и я повёл их осматривать дом и участок.
Дом им очень понравился, особенно беседка. И вообще, они сказали «да ты тут можешь жить как в городе». Я ответил, что летом — да, только вот когда сижу здесь неделю-другую, обязательно находится причина, по которой хочется съездить в город (причём иногда меня выманивает сама DarLik), а зимой всё упирается в отсутствие воды и отопления. Потом какое-то время пообсуждали плюсы и минусы жизни в городе. Я таки угостил их шашлыком, хотя осталось его не так уж много. Им очень понравилось. Затем DarLik решила сходить в машину за электронной сигаретой, но на обратном пути уронила её в траву, и мы не могли её найти. После нескольких минут поиска решили отложить до лучших времен, а именно, до момента когда рассветёт. Поднялись на второй этаж, сидели там и разговаривали, а потом наблюдали рассвет через окно. DarLik даже сделала фото.
Где-то в районе четырех часов П.Т. завёл речь о том, что пора уже собираться. Меня к этому времени уже начало понемногу вырубать от недосыпа, плюс начался некоторый перегруз от общения, как обычно, хотелось уйти в себя, поэтому я поддерживал эту мысль. Но DarLik хотела остаться ещё на какое-то время. И ещё нужно было найти электронную сигарету. Потом я сделал им кофе из отцовских запасов (причем впервые в жизни, сам я кофе не пью), потерянную сигарету всё же нашли, и где-то в 5:20 стали выезжать с участка. Я опять стал загоняться на тему того, что побудим соседей. Но обошлось (впрочем, есть подозрение, что нам повезло и соседи напротив куда-то уезжали на ночь, по крайней мере, у них всё было закрыто). Сначала П.Т. попытался было развернуть машину на площадке возле соседнего дома, но увы, не получилось. Зато чуть было не снесли столб, установленный теми самыми соседями напротив. Они, видимо, решили менять забор, и старый сместили чуть вглубь участка, а на углу этот самый столб для нового. Но я с недосыпа про это забыл и не предупредил П.Т. Но, видимо, высшие силы были на нашей стороне в эту ночь! После этого П.Т. решил выехать задом, не разворачиваясь. Проблема была в том, что у соседей тоже есть проблемы с въездом на их участки, поэтому несколько машин стояли прямо в проезде. И нужно было выезжать, выдерживая курс с точностью до нескольких десятков сантиметров. К счастью, П.Т. справился, но тот момент, когда мы проезжали мимо первой соседской машиной так, что между зеркалами было всего два сантиметра, меня просто трясло, так как зацепи мы её, неприятностей было бы выше крыши. Наконец-то добрались до еще одного места, где можно было легко развернуться и поехали к воротам. Предстояло последнее испытание: выехать за территорию СНТ, не разбудив сторожа. Как выяснилось, это не так уж сложно: сторожа обычно будят собаки, но на машину, выезжающую из посёлка, они просто не реагируют.
После этого я смог вздохнуть с облегчением и отправиться домой. Часам к шести я лёг спать, но заснуть никак не мог. Во-первых, уже ярко светило солнце, во-вторых, сказывалась эмоциональная перегрузка, в-третьих, от открытия ворот всё же остались следы (хоть мы кое-как их замаскировали), и я опасался, что отец их увидит, и начнёт задавать вопросы, чего это мне вдруг потребовалось их открывать. Так я проворочался до приезда отца. Потом всё же смог помедитировать и заснуть.
Увы, проспал я совсем немного. Уже в 12:30 проснулся, и понял, что больше спать не могу. В первый момент после подъема чувствовал себя ужасно, через пару часов вроде бы пришёл в себя, но всё равно весь день ушёл, что называется, мимо. Даже в играх шло всё вкривь и вкось. Вечером вышли с отцом на пробежку, но результат тоже не обрадовал: более чем на минуту хуже, чем в прошлый забег, при том, что устал больше. А после бега вообще не выдержал и заснул, но поспать нормально не смог из-за того, что рядом лежал мобильник, где то и дело сыпались сообщения. Единственный позитивный момент — это то, что удалось сфотографировать ещё один красивый закат!
В итоге к 22 часам они только-только добрались до Ногинска. Ещё через некоторое время DarLik вышла на связь с места, где нужно съезжать с шоссе, чтобы дальше я вёл их по телефону. Сначала вроде всё было нормально, я давал им подсказки. Но потом возник момент, когда по объсянениям стало непонятно, где они. Я предложил DarLik сбросить скриншот карты с отметкой геолокации. Она скинула, я посмотрел, и в первый момент показалось, что они вообще сумели заехать непойми куда, оказавшись на другом берегу пруда. Но через пару минут всё прояснилось: я-то всегда смотрю карту с фиксированной ориентацией (то есть север сверху), а DarLik чаще пользуется режимом навигатора, где карта повернута в том направлении, куда едем. Из-за этого я и подумал, что они заехали куда-то не туда.
И вот я уже бегу к воротам СНТ, чтобы впустить их внутрь. Но времени уже 22:40, стемнело, и возникает новая сложность. Машина, на которой они приехали, здоровенная, и поставить её на участок, сделав крутой поворот с узкого проезда, да ещё и в темноте, не так уж и просто. Сначала заклинило ворота из-за того, что их уже давно не открывали. Потом обнаружилось, что двигатель у машины мощный и громкий, и я очень боялся, что мы перебудим всех соседей, которые потом выскажут своё недовольство этим отцу. Потом чуть было не въехали в один из кустов на участке. В конце концов, я не выдержал и сказал П.Т., что ладно, не стоит стараться поставить машину нормально, стоит она по диагонали на въезде и ладно, всё равно ворота закрывать не требуется, а утром всё равно уезжать. На это П.Т. ответил «теперь машина выполняет функции ворот: никого на участок не пускает». На этом и порешили, и я повёл их осматривать дом и участок.
Дом им очень понравился, особенно беседка. И вообще, они сказали «да ты тут можешь жить как в городе». Я ответил, что летом — да, только вот когда сижу здесь неделю-другую, обязательно находится причина, по которой хочется съездить в город (причём иногда меня выманивает сама DarLik), а зимой всё упирается в отсутствие воды и отопления. Потом какое-то время пообсуждали плюсы и минусы жизни в городе. Я таки угостил их шашлыком, хотя осталось его не так уж много. Им очень понравилось. Затем DarLik решила сходить в машину за электронной сигаретой, но на обратном пути уронила её в траву, и мы не могли её найти. После нескольких минут поиска решили отложить до лучших времен, а именно, до момента когда рассветёт. Поднялись на второй этаж, сидели там и разговаривали, а потом наблюдали рассвет через окно. DarLik даже сделала фото.
Где-то в районе четырех часов П.Т. завёл речь о том, что пора уже собираться. Меня к этому времени уже начало понемногу вырубать от недосыпа, плюс начался некоторый перегруз от общения, как обычно, хотелось уйти в себя, поэтому я поддерживал эту мысль. Но DarLik хотела остаться ещё на какое-то время. И ещё нужно было найти электронную сигарету. Потом я сделал им кофе из отцовских запасов (причем впервые в жизни, сам я кофе не пью), потерянную сигарету всё же нашли, и где-то в 5:20 стали выезжать с участка. Я опять стал загоняться на тему того, что побудим соседей. Но обошлось (впрочем, есть подозрение, что нам повезло и соседи напротив куда-то уезжали на ночь, по крайней мере, у них всё было закрыто). Сначала П.Т. попытался было развернуть машину на площадке возле соседнего дома, но увы, не получилось. Зато чуть было не снесли столб, установленный теми самыми соседями напротив. Они, видимо, решили менять забор, и старый сместили чуть вглубь участка, а на углу этот самый столб для нового. Но я с недосыпа про это забыл и не предупредил П.Т. Но, видимо, высшие силы были на нашей стороне в эту ночь! После этого П.Т. решил выехать задом, не разворачиваясь. Проблема была в том, что у соседей тоже есть проблемы с въездом на их участки, поэтому несколько машин стояли прямо в проезде. И нужно было выезжать, выдерживая курс с точностью до нескольких десятков сантиметров. К счастью, П.Т. справился, но тот момент, когда мы проезжали мимо первой соседской машиной так, что между зеркалами было всего два сантиметра, меня просто трясло, так как зацепи мы её, неприятностей было бы выше крыши. Наконец-то добрались до еще одного места, где можно было легко развернуться и поехали к воротам. Предстояло последнее испытание: выехать за территорию СНТ, не разбудив сторожа. Как выяснилось, это не так уж сложно: сторожа обычно будят собаки, но на машину, выезжающую из посёлка, они просто не реагируют.
После этого я смог вздохнуть с облегчением и отправиться домой. Часам к шести я лёг спать, но заснуть никак не мог. Во-первых, уже ярко светило солнце, во-вторых, сказывалась эмоциональная перегрузка, в-третьих, от открытия ворот всё же остались следы (хоть мы кое-как их замаскировали), и я опасался, что отец их увидит, и начнёт задавать вопросы, чего это мне вдруг потребовалось их открывать. Так я проворочался до приезда отца. Потом всё же смог помедитировать и заснуть.
Увы, проспал я совсем немного. Уже в 12:30 проснулся, и понял, что больше спать не могу. В первый момент после подъема чувствовал себя ужасно, через пару часов вроде бы пришёл в себя, но всё равно весь день ушёл, что называется, мимо. Даже в играх шло всё вкривь и вкось. Вечером вышли с отцом на пробежку, но результат тоже не обрадовал: более чем на минуту хуже, чем в прошлый забег, при том, что устал больше. А после бега вообще не выдержал и заснул, но поспать нормально не смог из-за того, что рядом лежал мобильник, где то и дело сыпались сообщения. Единственный позитивный момент — это то, что удалось сфотографировать ещё один красивый закат!
Переписал SiteKnockerBot на Go
Вчера вечером выполнил еще один пункт из своего списка дел на период загородной жизни: дописал новую версию SiteKnockerBot на языке Go, что позволило выполнять проверки сайтов параллельно. Но закончил весьма поздно, поэтому тестирование на боевом сервере решил отложить на сегодня. Причем, думал, что управлюсь за час-полтора, а остаток дня потрачу на отдых и компьютерные игры. Но увы, я был бы не я, если бы не растянул намеченное дело на всё доступное время. Началось всё с того, что при первом запуске бот просто упал. Причина нашлась довольно быстро: в одной ситуации я поставил defer resp.Close до проверки на то, что нет ошибок. Перекомпилировал, загрузил на сервер, запустил снова. Вроде работает, но то и дело появляются ошибки — невозможно открыть сокет из-за нехватки количества файлов. Пришлось срочно разбираться, как увеличить количество открытых файлов, так как прежде я с этим лимитом никогда не сталкивался. Ещё один запуск: вроде работает, но появляется подозрительно много таймаутов. Уменьшил число goroutines, вроде стало лучше, но опять таймауты есть. Какое-то время пытался играться с числом goroutines и интервалом, через который они порождаются, но увы, таймауты никуда не девались. Пробовал смотреть эти сайты через curl на локальном компьютере — вроде всё нормально, выдаются 301 или 302 редиректы. Думал, что в Go они как-то некорректно обрабатываются, но нет. Разгадка пришла тогда, когда попытался открыть соответствующие адреса в броузере. Оказывается, в таких случаях происходят редиректы на другой адрес, который не отвечает.
И вообще, в базе обнаружилось на удивление много «битых» и подозрительных адресов. Такое ощущение, что чуть ли не четверть пользователей использовало бота для каких-то сайтов-однодневок и подозрительных целей…
После того, как разобрался с таймаутами, снова стал подбирать число goroutines и интервалы. Изначально план был таким: 500 параллельных запросов каждые 150 миллисекунд, что давало 1 миллион проверок за пятиминутный цикл. Но при этом время ответа многих сайтов оказывалось гораздо больше, чем на самом деле. Например, даже 2seconds, где вообще лежит статичная страница, открывался чуть больше 1 секунды. Я стал пытаться уменьшить интервалы до 20—30 мс, уменьшив также и количество параллельных запросов, но увы, либо это не помогало, либо приходилось ставить такие значения, что число проверок за цикл получалось бы равным 200—300 тыс, а не миллиону, как я задумывал изначально. В итоге уже почти смирился с тем, что придётся тремястами тысячами и ограничиться. Но потом решил пойти на крайние меры: интервал между запросами снизил всего до 6 мс, а их число — до 10. Сделав это, я обнаружил, что время снизилось до почти приемлемого: тот же 2seconds загружается за 400 мс, а в среднем время ответа менее на 100 мс больше, чем на старой версии бота. Но увы, даже так получается всего полмиллиона запросов за цикл.
На этом я и решил остановиться. Потом еще какое-то время провозился с настройкой systemd. Почему-то из командной строки новый бот запускался нормально, а через него — нет. Вскоре выяснилось, что systemd запускает старую версию бота, не видя изменений в unit-файле. Так до конца и не понял, почему, но в итоге добился нормальной работы. Потом стал искать, нельзя ли как-то оптимизировать работу HTTP-клиента в Go, наткнулся на проект fasthttp, где обещают гораздо более высокую скорость запросов. Но увы, переписывать бота ещё раз уже нет ресурса — выгорел полностью.
Но в любом случае, я впервые написал что-то достаточно серьёзное и законченное на относительно новом для себя языке — Go. До этого я использовал его только для решения задач на CodinGame, и то очень мало. Впечатления остались очень противоречивые. Понравилась лёгкость распараллеливания, легкость компиляции под другую архитектуру (я сначала собирал бота под x86, забыв, что у меня и на втором VDS стоит 64-битная OS) и то, что он делает полностью статичные бинарники бе всяких so. Правда, у этого есть и обратная сторона: большая прожорливость памяти. PHP-шная версия бота занимала вроде около 30 Мб, а новая — 65, а когда параллельных запросов было больше, то и все 110. Но что реально не нравится, так это использование всяких Readers/Writers для работы с HTTP-ответом (и не только с ним, они там на каждом шагу используются). Ну почему его нельзя получить просто в строку/массив байтов, как в PHP или JavaScript? Зачем эти лишние (и труднодоступные для понимания) сущности? (И тут я подумал, что надо было вообще использовать node.js, а не Go.)
А еще завершение бота — это ещё один выполненный пункт моего списка дел. Причем восьмой из шестнадцати — ровно половина сделана. Хех, как всегда, живу в 3—4 раза медленнее: планировал сделать 16 пунктов за месяц, сделал половину почти за два. Но, пожалуй, теперь стоит устроить несколько дней отдыха, чтобы прийти в себя после всего этого!
И вообще, в базе обнаружилось на удивление много «битых» и подозрительных адресов. Такое ощущение, что чуть ли не четверть пользователей использовало бота для каких-то сайтов-однодневок и подозрительных целей…
После того, как разобрался с таймаутами, снова стал подбирать число goroutines и интервалы. Изначально план был таким: 500 параллельных запросов каждые 150 миллисекунд, что давало 1 миллион проверок за пятиминутный цикл. Но при этом время ответа многих сайтов оказывалось гораздо больше, чем на самом деле. Например, даже 2seconds, где вообще лежит статичная страница, открывался чуть больше 1 секунды. Я стал пытаться уменьшить интервалы до 20—30 мс, уменьшив также и количество параллельных запросов, но увы, либо это не помогало, либо приходилось ставить такие значения, что число проверок за цикл получалось бы равным 200—300 тыс, а не миллиону, как я задумывал изначально. В итоге уже почти смирился с тем, что придётся тремястами тысячами и ограничиться. Но потом решил пойти на крайние меры: интервал между запросами снизил всего до 6 мс, а их число — до 10. Сделав это, я обнаружил, что время снизилось до почти приемлемого: тот же 2seconds загружается за 400 мс, а в среднем время ответа менее на 100 мс больше, чем на старой версии бота. Но увы, даже так получается всего полмиллиона запросов за цикл.
На этом я и решил остановиться. Потом еще какое-то время провозился с настройкой systemd. Почему-то из командной строки новый бот запускался нормально, а через него — нет. Вскоре выяснилось, что systemd запускает старую версию бота, не видя изменений в unit-файле. Так до конца и не понял, почему, но в итоге добился нормальной работы. Потом стал искать, нельзя ли как-то оптимизировать работу HTTP-клиента в Go, наткнулся на проект fasthttp, где обещают гораздо более высокую скорость запросов. Но увы, переписывать бота ещё раз уже нет ресурса — выгорел полностью.
Но в любом случае, я впервые написал что-то достаточно серьёзное и законченное на относительно новом для себя языке — Go. До этого я использовал его только для решения задач на CodinGame, и то очень мало. Впечатления остались очень противоречивые. Понравилась лёгкость распараллеливания, легкость компиляции под другую архитектуру (я сначала собирал бота под x86, забыв, что у меня и на втором VDS стоит 64-битная OS) и то, что он делает полностью статичные бинарники бе всяких so. Правда, у этого есть и обратная сторона: большая прожорливость памяти. PHP-шная версия бота занимала вроде около 30 Мб, а новая — 65, а когда параллельных запросов было больше, то и все 110. Но что реально не нравится, так это использование всяких Readers/Writers для работы с HTTP-ответом (и не только с ним, они там на каждом шагу используются). Ну почему его нельзя получить просто в строку/массив байтов, как в PHP или JavaScript? Зачем эти лишние (и труднодоступные для понимания) сущности? (И тут я подумал, что надо было вообще использовать node.js, а не Go.)
А еще завершение бота — это ещё один выполненный пункт моего списка дел. Причем восьмой из шестнадцати — ровно половина сделана. Хех, как всегда, живу в 3—4 раза медленнее: планировал сделать 16 пунктов за месяц, сделал половину почти за два. Но, пожалуй, теперь стоит устроить несколько дней отдыха, чтобы прийти в себя после всего этого!
День солнцестояния
Сегодня был весьма необычный день: солнцестояние совпало с солнечным затмением. Обычно в дни солнцестояния я пишу о том, что лучшая часть года позади, но в этот раз, пожалуй, воздержусь. А то ведь так и будет… Впрочем, один плюс у этого года всё же есть: я сделал то, что хотел сделать давно — прожил на даче безвылазно с мая до солнцестояния. И ещё неизвестно сколько буду тут сидеть… DarLik так и вовсе предлагает до самых холодов.
Затмения от нас не было видно, но его влияние всё равно чувствуется. И у меня голова соображает плохо, а днём еще была непонятная раздражительнось, и многих знакомых глючит. Сегодня большая часть дня ушла на то, чтобы понять, почему в Go не работает обращение к базе данных не из главной goroutine, а из дополнительных. Только уже ночью нашёл, что завершение главной goroutine приводит к завершению приложения целиком, и остальные goroutines просто не успевают отработать. Впрочем, даже узнав это, проблему решил не сразу: забыл, что у меня в отладочных целях в середине main стоит return, а я пытался добавлять код в конец.
Ещё выбрался на прогулку к ближайшему водоёму, а потом вдоль Клязьмы. В целом прогулкой доволен, но каких-либо сильных впечатлений не осталось. А вечером была очень глючная игра в «Колонизаторов»: 6-ки выпадали реже, чем 9, 10 и 11! В итоге выиграл оранжевый игрок, у которого начальная расстановка была такая, что я думал, что он вообще на последнем месте останется. Но хотя он выигрывал с середины игры, почему-то против меня активно играл красный, часто блокируя мне 8-ку разбойником. В итоге за всю игру я недополучил чуть ли не десять карт ресурсов, что тоже сказалось на результате (я в итоге был вторым).
Затмения от нас не было видно, но его влияние всё равно чувствуется. И у меня голова соображает плохо, а днём еще была непонятная раздражительнось, и многих знакомых глючит. Сегодня большая часть дня ушла на то, чтобы понять, почему в Go не работает обращение к базе данных не из главной goroutine, а из дополнительных. Только уже ночью нашёл, что завершение главной goroutine приводит к завершению приложения целиком, и остальные goroutines просто не успевают отработать. Впрочем, даже узнав это, проблему решил не сразу: забыл, что у меня в отладочных целях в середине main стоит return, а я пытался добавлять код в конец.
Ещё выбрался на прогулку к ближайшему водоёму, а потом вдоль Клязьмы. В целом прогулкой доволен, но каких-либо сильных впечатлений не осталось. А вечером была очень глючная игра в «Колонизаторов»: 6-ки выпадали реже, чем 9, 10 и 11! В итоге выиграл оранжевый игрок, у которого начальная расстановка была такая, что я думал, что он вообще на последнем месте останется. Но хотя он выигрывал с середины игры, почему-то против меня активно играл красный, часто блокируя мне 8-ку разбойником. В итоге за всю игру я недополучил чуть ли не десять карт ресурсов, что тоже сказалось на результате (я в итоге был вторым).
Сумел встать раньше
Сегодня естественным образом проснулся чуть позже 10 часов утра и чувствовал себя относительно бодрым (спать лег где-то около 3:30). Но увы, хотя вначале радовался, что удалось увидеть утро, к середине дня недостаток сна дал о себе знать: ни на чём толком не мог сосредоточиться. Плюс ещё мелкие неприятности с freelance-деятельностью. Так что день прошёл куда-то мимо. Единственный толковый результат — выбрались с отцом на пробежку на 4.5 км. Но и тут без неприятностей не обошлось: отец случайно выключил секундомер почти сразу после старта, когда убирал мобильник в карман. Так что время, за которое мы пробежали, осталось неизвестным. Но сегодня бежалось лучше, чем позавчера: тяжело дался только последний участок пути, вдоль песчаного карьера. И еще утром обновил софт на сервере с socionics.me и ботами. Оказывается, из-за того, что давно этого не делал, устарели корневые сертификаты, поэтому бот не мог достучаться до некоторых сайтов по https (+1 повод не очень хорошо относиться к повсеместному использованию https).
А вот вчера произошло два позитивных события. Во-первых, узнал, что разблокировали Telegram, и теперь я могу заходить на него без всяких средств обхода блокировок. Причем новость о том, что рассматривается такой законопроект, проскочила только в понедельник, и вдруг уже. Интересно, с чего такая оперативность — перед голосованием что ли? Во-вторых, удачно закупился акциями, поймав момент, когда рынок чуть-чуть просел, а сегодня двинулся обратно.
Ещё прошлой ночью смог увидеть планеты Юпитер и Сатурн, что давно хотел сделать, но то была облачность, то время неподходящее. Правда, очень низко над горизонтом, и не уверен, правильно ли я идентифицировал Сатурн, так как в 2018 году он казался мне менее ярким. С другой стороны, возможно, тогда он просто был дальше от Земли.
А вот вчера произошло два позитивных события. Во-первых, узнал, что разблокировали Telegram, и теперь я могу заходить на него без всяких средств обхода блокировок. Причем новость о том, что рассматривается такой законопроект, проскочила только в понедельник, и вдруг уже. Интересно, с чего такая оперативность — перед голосованием что ли? Во-вторых, удачно закупился акциями, поймав момент, когда рынок чуть-чуть просел, а сегодня двинулся обратно.
Ещё прошлой ночью смог увидеть планеты Юпитер и Сатурн, что давно хотел сделать, но то была облачность, то время неподходящее. Правда, очень низко над горизонтом, и не уверен, правильно ли я идентифицировал Сатурн, так как в 2018 году он казался мне менее ярким. С другой стороны, возможно, тогда он просто был дальше от Земли.
Несколько бестолковых дней
В субботу дописал и опубликовал 10 и 11 часть своей биографии. Изначально я рассчитывал сделать это еще в мае, но в реальности, как всегда, это заняло гораздо больше времени. Зато это помогло лучше разобраться в себе. А еще закончил проходить в игре Battle for Wesnoth кампанию The Missing Scepter Case. Это та самая, где есть Warlock Homz и Flotsom the Healer (аналоги Шерлока Холмса и доктора Ватсона, перенесенных в мир этой игры). Когда-то очень давно, кажется, в 2015 или 2016 году, я уже упоминал об этом, собираясь заняться переводом этой кампании, но так и не сложилось.
А последующие дни прошли куда-то мимо. Воскресенье я сознательно решил сделать днём безделья. Тем более, ко мне собирались приехать DarLik и П.Т., но так и не сложилось. Зато об этом узнала Tella и уговорила меня встретиться. Мы договорились с ней в понедельник побывать в деревне Заозерье, осмотреть озеро, местную церковь и кладбище. И большая часть понедельника именно на это и ушла. Увы, погода выдалась мрачной, а озеро уже зацвело, поэтому таких фотографий, как в мае прошлого года, сделать не удалось, но тем не менее, Tellе прогулка очень понравилась!
Вчера прожил в каком-то сонном состоянии. Ничего толком не сделал, только досмотрел шестую неделю курса по теории игр. Ночью попытался лечь раньше, до 4 часов даже, но так и не смог уснуть. Зато дочитал второй том «Двух жизней».
Сегодня тоже был каким-то тормозным. Но помогло то, что вечером с отцом выбрались на пробежку. На этот раз решили бежать не по полю, а сделать круг с возвращением по старой дороге. Это больше по расстоянию, зато бежать проще. В итоге устал сильно, зато чувствую, что наконец-то проснулся и включился в реальность. Или, может быть, пробежка просто подняла давление до приемлемого уровня.
Еще впервые за последние несколько лет достал и включил свой самый старый ноутбук, купленный еще в 2003 году. Тот самый, с которым я прошёл магистерскую и кандидатскую защиты, и который теперь постоянно хранится на даче, даже зимой. Оказалось, что он жив и вполне работоспособен. Правда, стоит на нём древний Arch Linux с LXDE, от которого я уже отвык. Плюс еще когда-то экспериментировал на нём в плане превращения LXDE в аналог Elementary OS в плане внешнего вида.
А последующие дни прошли куда-то мимо. Воскресенье я сознательно решил сделать днём безделья. Тем более, ко мне собирались приехать DarLik и П.Т., но так и не сложилось. Зато об этом узнала Tella и уговорила меня встретиться. Мы договорились с ней в понедельник побывать в деревне Заозерье, осмотреть озеро, местную церковь и кладбище. И большая часть понедельника именно на это и ушла. Увы, погода выдалась мрачной, а озеро уже зацвело, поэтому таких фотографий, как в мае прошлого года, сделать не удалось, но тем не менее, Tellе прогулка очень понравилась!
Вчера прожил в каком-то сонном состоянии. Ничего толком не сделал, только досмотрел шестую неделю курса по теории игр. Ночью попытался лечь раньше, до 4 часов даже, но так и не смог уснуть. Зато дочитал второй том «Двух жизней».
Сегодня тоже был каким-то тормозным. Но помогло то, что вечером с отцом выбрались на пробежку. На этот раз решили бежать не по полю, а сделать круг с возвращением по старой дороге. Это больше по расстоянию, зато бежать проще. В итоге устал сильно, зато чувствую, что наконец-то проснулся и включился в реальность. Или, может быть, пробежка просто подняла давление до приемлемого уровня.
Еще впервые за последние несколько лет достал и включил свой самый старый ноутбук, купленный еще в 2003 году. Тот самый, с которым я прошёл магистерскую и кандидатскую защиты, и который теперь постоянно хранится на даче, даже зимой. Оказалось, что он жив и вполне работоспособен. Правда, стоит на нём древний Arch Linux с LXDE, от которого я уже отвык. Плюс еще когда-то экспериментировал на нём в плане превращения LXDE в аналог Elementary OS в плане внешнего вида.
Неудачная попытка лечь спать пораньше
Вчера вернулся домой с длинной прогулки в уставшем состоянии и подумал: физически устал сильно, важных или срочных дел, которые нужно доделать именно сегодня, нет — хорошая возможность лечь спать пораньше. Но увы, получилось как всегда:
0:20 — решаю «еще слишком рано, еще полчасика почитаю один сайт и пойду спать».
1:30 — вспоминаю, что забыл поужинать
2:10 — желания идти спать не совсем, поэтому снова возвращаюсь к тому сайту
2:40 — обнаруживаю, что уже довольно поздно и надо бы идти спать, но никак не могу заставить себя оторваться
3:45 — всё-таки выключаю Интенет и иду готовиться ко сну
4:25 — ложусь спать.
Хотя формально, в общем-то получилось: обычно я ложусь спать где-то около пяти. Но с другой стороны, к 4:25 уже рассвело, поэтому заснуть получилось далеко не сразу.
0:20 — решаю «еще слишком рано, еще полчасика почитаю один сайт и пойду спать».
1:30 — вспоминаю, что забыл поужинать
2:10 — желания идти спать не совсем, поэтому снова возвращаюсь к тому сайту
2:40 — обнаруживаю, что уже довольно поздно и надо бы идти спать, но никак не могу заставить себя оторваться
3:45 — всё-таки выключаю Интенет и иду готовиться ко сну
4:25 — ложусь спать.
Хотя формально, в общем-то получилось: обычно я ложусь спать где-то около пяти. Но с другой стороны, к 4:25 уже рассвело, поэтому заснуть получилось далеко не сразу.
Страницы:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141