← на главную

Лайвлупинг, медиапродакшн и все эти ваши компьютеры

Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром

Важные теги: Мои видео и другие работы, Забрать своё из облаков, Кровавый Энтерпрайз на коленке

Сервис isDayOff для нужд автоматизации

Несколько лет использую в работе сервис isDayOff, который позволяет проверить дату на принадлежность к нерабочему дню, согласно официальным указам и распоряжениям.

Я очень люблю автоматизацию, особенно — автоматический контроль за соблюдением правил и договоренностей в системах. Человеческий фактор невозможно полностью исключить, зато можно заставить дотошных и не устающих роботов контролировать, что человек сделал всё правильно. Однако, здесь кроется одна проблема — человеки, в отличие от роботов, уходят на выходные и государственные праздники. Согласно Первому закону робототехники, робот не может причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред. А что может быть противней, чем тикет на исправление некритической проблемы, прилетевший в выходные? Да, можно запрограммировать, чтобы тикеты не прилетали в субботы и воскресенья — но что делать с праздниками и переносами выходных?

isDayOff простой как автомат Калашникова, и легко встраивается в скрипты и пайплайны автоматизации. В простейшем виде через https://isdayoff.ru/today можно узнать, является ли текущий день рабочим, ну а дополнительные параметры к запросу могут дать информацию о любой дате в прошлом и будущем (в разумных пределах) и даже о праздниках в соседних странах (поддерживаются Белоруссия, Казахстан и Украина).

База сервиса активно поддерживается и приводится в соответствие законам, когда принимаются решения о переносах праздников и выходных. Чтобы не потерять функционал при возможном отключении сервиса (а в дивные новые времена обо всём начинаешь думать в разрезе «а что если забанят»), я обычно стараюсь в проектах использовать локальную базу на год вперед, сдампленную с сайта, и обновляющуюся ежемесячно — заодно, локальная копия базы снижает нагрузку на сервис, зачем зря напрягать бесплатное отличное решение.

В целом всё просто и понятно. Например, в виде без кеширования запрос обычно посылаю через подготовленную функцию, с логикой обработки ситуации когда сервис недоступен

С учетом простоты решения, его легко встраивать и в других ситуациях, когда требуется контролировать рабочий статус даты — уведомления, расписание резервного копирования, подсчёт количества рабочих дней до наступления дедлайна перезагрузки по обновлениям системы, и так далее.

Слава роботам!

 1   2 дн   PowerShell   КЭНК

Забрать своё из облаков: обновление вКачатора

Допилил небольшое, но важное дополнение для скрипта обогащения дампов профиля ВКонтакте. Эксплуатация предыдущей версии выявила существенный недостаток: видео с YouTube, импортированные в ВК, в разных разделах сайта фигурируют с разными ID (и разными URL). Выходит странненькое — по этим разным ссылкам открывается один и тот же объект (страницца) ВК, с теми же комментариями, лайками, и прочими атрибутами соцсети, и конечно же встроенный в объект ролик YouTube там тоже один и тот же, но ссылки на этот объект разные. И например, добавленное на стену видео, и то же видео, посланное в диалоге, будут иметь разные адреса. Поэтому старая версия скачивала, и складывала в папку видео несколько раз, что расходовало лишнее место (а у меня в избранные как-то попала даже девятичасовая прямая трансляция выхода в открытый космос с МКС).

Идеально было бы научить скрипт сразу узнавать такие дубликаты по адресам, и не скачивать повторы вовсе, но как это сделать я придумать не смог. Зато можно скачать через yt-dlp оригинал с ютуба, и по его метаданным распознать дубль, сравнив с метаданными уже скачанных видео. Так и поступил — теперь скрипт сохраняет в простой json информацию по всем уже скачанным файлам, и при закачке дубля не сохраняет его на диск, заменяя ссылки в дампе на уже скачанный экземпляр. На моем дампе это значительно сократило объём выгрузки.

Обновлённая версия уже на гитхабе: https://github.com/alexbatishchev/kenk-vk-enricher

ЧТО У ВАС? — отчетный концерт театральной студии «Груша»

Уже много лет дочка занимается в театральной студии «Груша». Организаторы и вечные двигатели процесса — совершенно турбореактивная семья режиссеров и актёров, которые запустили в желдоре и окрестностях целую сеть театральных кружков под единым брендом. Как они успевают заниматься с таким количеством детей и взрослых, и параллельно вести столько проектов, я лично не очень понимаю. Но вот в апреле на сцене ДК «Восход» синергию этого движения можно было увидеть воочию. Работы разных коллективов собрали в театрализованное представление под общей канвой.

Цитирую афишу: «Планета Земля в опасности. По решению Вселенского совета ее могут уничтожить. Почему так произошло, что случилось? Кто же придет на помощь, кто может поменять решение космического суда? Вы увидите театрализацию стихов советских поэтов, скоморошью сказку „Ворона“ Вятской губернии, юмористические истории племени Ту и совершите путешествие в прошлое. В концерте принимают участие воспитанники театральной студии „Груша“ (руководитель Вера Коюшева).»

Получилось весьма пёстро, но цельно, интересная общая концепция и яркие номера внутри её. Отдельный кайф — видеть в работе таких уже взрослых детей своих школьных друзей, и смотреть на счастливых родителей. Да и сама площадка, районный ДК где 25 лет назад мы сами играли по каморкам тяжелый рэп с матом на гитарах Аэлита и примочках Лель — мощнейший телепорт во времени и цунами ностальгии. Еще в который раз впечатляюсь как удивительное дело театрального перевоплощения дается непрофессионалам — детям и взрослым, и как из простого знакомого с детства стихотворения можно сделать целую историю, сыграть и показать его с неведомой стороны и неожиданными художественными приёмами. Актёрам и режиссеру — восторг и восхищение.

По просьбе Веры я традиционно снял представление на видео.

Отчетный концерт театральной студии «Груша» прошел 23 апреля 2023
Студия «Груша» вконтакте: https://vk.com/grushatheatre

Powershell и странненькое с TimeSpan

Авторы Powershell, с одной стороны, многое в своём творении придумали системно и логично. С другой стороны, постоянно натыкаешься на странности, объяснения которым в области логики не найти.

Любимый пример — класс TimeSpan, временной промежуток, отрезок времени между двумя датами. У объектов этого класса есть несколько свойств, отражающих заданный объектом промежуток времени в разных единицах измерения. И в перечне этих свойств неочевидная логика авторов языка проявляется в полной красе.

Вот свойства Hours, Minutes, Seconds, Milliseconds. Интуитивно думаешь, что это — значение промежутка времени в часах, минутах, секундах, и миллисекундах. Довольно быстро наступаешь на эти грабли, и узнаёшь, что это кое-что другое, а именно количество часов в рамках дня, минут в рамках часа и тому подобное. То есть, если промежуток времени у вас в 1 день и 1 час, то Hours — не 25, а 1. А если между датами прошло 2 часа и 10 минут, то свойство Minutes будет не 2*60+10, а просто 10. Зачем это надо? Ну, наверное для чего-то может пригодиться, хотя я ни разу за много лет эти свойства не использовал. Зато, сколько ошибок в скриптах из-за неверного их понимания я встречал на стековерфлоу и в прочих местах в интернетах!

Окей, столкнувшись с этим (или прочитав заранее в документации, что вряд ли), ты спустя какое-то время познаешь TotalHours, TotalMinutes, TotalSeconds и TotalMilliseconds, с той самой очевидной логикой «полное количество часов между датами» и так далее. Если между моментами времени прошло два с половиной часа, то это будет 2.5 TotalHours, 150 TotalMinutes и 9000 TotalSeconds. Ура, теперь-то всё понятно, можем смело фигачить!

И вот в этот момент, к полному сил и умиротворённому программисту, из-за угла подходят в кепках и адидасе братюни Days и TotalDays, и объясняют, что понятий он не знает, и вообще зря на раён зашел. Ибо Days — это в в натуре полное количество дней (а не как можно было бы по аналогии предполагать, количество дней в рамках года). А TotalDays — это да, это полное количество дней, дробь (типа, аккуратно посчитанное, вкуриваешь?). А Days — грубо посчитанное. Но полное. Почему? Короч, так надо. Кстати, дай позвонить!

И вот, сидишь, смотришь на это, и думаешь — а оно зачем вообще так?? Потом вздыхаешь, материшься, сверяешься с документацией ещё раз, пишешь в коде правильное.

Может показаться, что этот пост написан с целью излучить в пространство бессильную злобу — но на деле, это просто справочник. Я буду ходить сюда каждый раз, когда буду юзать TimeSpan, потому что запоминать подобное — просто портить себе мозг.

Дорогой Вася! Если тебе надо посчитать промежуток времени, юзай TotalDays, TotalHours, TotalMinutes, TotalSeconds и TotalMilliseconds, помни что они — вещественные, и означают то, что тебе нужно. А про другие свойства TimeSpan забудь!

А для вас — картинка, иллюстрирующая всю дичь TimeSpan

Слава роботам!

Сети в к8s

Цикл заметок о сетях в Kubernetes от Mark Betz переводился на хабре несколькими участниками. Поэтому в нормальный единый цикл заметки не объединены, но поиском по имени оригинального автора их можно найти. А можно воспользоваться этим списком:

Тренировки по алгоритмам от Яндекса

Вписался несколько недель назад в марафон-контест от Яндекса — лекции по алгоритмам, задачки-домашки, и финальный этап, где за 3 часа нужно решить заключительный блок задач. Совместил приятное с полезным — вспомнил чудесные школьные годы и олимпиады по информатике в троицком Байтике, прокачал знания алгоритмов и систематизировал то, что давно стало привычным в работе, но не было уложено в красивые рамки и точные формулировки «О большое», набил руку в питоне и просто покайфовал, катая трактора по каменистым полям, связывая гвоздики верёвочками и высчитывая идеальные схемы бюджетного питания в выдуманных столовых. Было очень хорошо.

Лекции и задачи доступны и после окончания контеста — более того, тема регулярная, и в новых итерациях старые темы уже не разбирают (ну или не так подробно на них останавливаются), так что если нравится складывать буквы на экране в задания роботам, которые четко (и за установленное время) считают всякие штуки, рекомендую ознакомиться.

Плейлисты с лекциями и разборами домашек на ютубе:
Сезон 2022:

Сезон 2023:

Архивируем почту из Gmail в Thunderbird

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

Подход Google дал значительную свободу в управлении почтой, но он принципиально противоречит классическому, когда у письма в почтовом ящике есть четкое место в иерархии папок. К сожалению, даже спустя почти два десятилетия удобного способа работы с Gmail из оффлайн клиентов не появилось — слишком плохо парадигма ярлыков ложится в общепринятый подход, на который рассчитаны универсальные клиенты. Для них одно (для Gmail) письмо с несколькими ярлыками — это несколько экземпляров письма, лежащих в разных папках, и это полнейшая шизофрения.

По совокупности нескольких факторов я выбрал для синхронизации и хранения локального архива почты Thunderbird. При действиях над письмами особый подход гугла показывает себя тут во всей красе.

Во первых, письма классически дублируются в разных папках, если в Gmail на них навешаны несколько ярлыков. Во-вторых удаление писем работает совершенно непредсказуемо: например, письмо может удалиться из одной папки и остаться в другой. Или полностью удалиться изо всех папок в Thunderbird включая корзину — но остаться болтаться в корзине веб-интерфейса Gmail (с ярлыками «Корзина» и остальными кроме первого, из папки которого вы его удаляли). А ещё, Thunderbird показывает папку All Mail — и значит по умолчанию пришедшие письма будут показаны два раза и во Входящих, и в ней. Но удалять письма из All Mail нельзя — они «воскресают» после повторной синхронизации, потому что по логике гугла в All Mail лежит всё и всегда, даже если оно без ярлыков.

Знатная бредятина и непонятное? Это ещё не всё. Описанное поведение — при умолчальных настройках Gmail и Thunderbird. А есть еще и другие варианты — поведение гугла при работе через IMAP описывается разделами в настройках «Когда я помечаю сообщение в IMAP как удаленное» и «Когда сообщение помечается как удаленное и стирается из последней видимой папки IMAP», а сам Thunderbird по умолчанию перекладывает письма в папку удалённые Gmail, но может их и стирать у себя (и передавать команду IMAP на сервер). Надо ли упоминать, что splitbrain с ярлыками тут тоже играет и внятного сценария получить не выйдет, письма продолжат дублироваться и воскресать? На самом деле, область исследований тут на небольшую диссертацию, возможно кто-то когда-то победит.

Хорошо, что мне от Thunderbird была нужна только архивация Gmail в оффлайн (и дальнейшая работа с архивом всей почты скопом) — щас расскажу как это победил.

Усмиряем ярлыкобесие

Итак, необходимо архивировать почту — то есть отбирать по какому-то критерию письма в ящике, синхронизированном с Gmail , и переносить их в отдельную локальную папку внутри базы Thunderbird. Для него это стандартная команда Archive, и с классическими почтовыми сервисами всё работает адекватно — письмо перекладывается в новую папку, из исходной папки пропадает, на сервере удаляется.

С Gmail команда Archive не работает: Thunderbird копирует письмо в заданную в настройках архивирования папку, однако из папки All Mail (Вся почта) оно не удаляется (точнее, пропадает и появляется вновь). Перетаскивание писем через drag-n-drop работает так же — они переносятся в локальную папку, а после синхронизации воскресают в All Mail. Поведение неинтуитивное, пользователи в интернетах ноют и получают рекомендации руками копировать письма, потом их удалять из All Mail, а потом еще и удалять из корзины внутри веб-интерфейса gmail. Но мы заставим работать роботов.

В Thunderbird есть механизм правил, где можно задать фильтр писем и действия, которые применяются над ними (можно применять правила на выделенные в интерфейсе письма или на папку целиком). Благодаря этому механизму запилен такой сценарий:

  • сделано правило для всех писем, подходящих под архивацию (я архивирую всё, что не отмечено звёздочкой в gmail, и это условие отбора)
  • первым действием в правиле копируются отобранные письма в локальную архивную папку
  • вторым действием в правиле отобранные письма удаляются

Командой в интерфейсе Thunderbird применяем правило на папку All Mail, а после его отработки нужно завершить шаманство, применив команду очистки Empty Trash на папку Thunderbird Корзина — именно так, потому что если зайти в Корзину и удалить письма, Gmail это благополучно игнорирует по своей безумной логике, и IMAP-некромант продолжит свой безумный танец. Почему очистку корзины и удаление писем из неё Thunderbird преобразует в разные для Gmail операции — вопрос к разработчикам Mozilla, это неинтуитивно но ок, просто запомним как мантру.

Кстати, еще один нюанс — переписки (chats), которые gmail хранит в себе, он не отдает в виде сущностей «почтовое сообщение» через IMAP (в отличие от заметок, например). Благо, их у меня в архиве совсем немного (и я не уверен что вообще сейчас этот сервис), но подметил что при синхронизации они недоступны. Выгружу один раз руками.

Такие дела. Слава роботам!

ArrayList и производительность массивов в Powershell

Powershell — язык весьма великодушный к программистам, почти всё в нём делается легко, интуитивно, и не требует особой подготовки и продумывания от автора кода. Однако, при выходе на объемные задачи начинают выстреливать некоторые вещи, которые для удобства изначально выполнены неэффективно.

По одной из задач мне требовалось обрабатывать большие объемы данных (сотни тысяч и миллионы строк таблиц). На тестовых множествах всё работало хорошо, но на прод данных скрипт начинал работать непозволительно долго. Я провел профилирование и выяснил, что с ростом количества данных всё больше времени (с нелинейным ростом) начинает занимать операция добавления элемента в архив.

$array = $array + $newElement — что может быть интуитивней? Оказалось, массивы в Powerhsell это имутабельные объекты, и поэтому предыдущий код фактически создает новый неизменяемый объект из всех элементов предыдущего массива и одного нового. Конечно, на больших объемах массивов такая операция будет занимать всё больше времени, и нелинейный рост вполне объясним. Этой неэффективности лишен специальный тип данных ArrayList — это тот же массив, разве что элементы добавлять самым очевидным способом через «плюс» в него нельзя.

Вот код, на котором я проверил время работы цикла из добавления N случайных строк к массивам в умолчальном варианте и варианте ArrayList

На 10 тысячах операций результаты примерно похожи — отличаются в десятки процентов. Но уже на сотне тысяч разница — на порядок. При этом время работы через ArrayList растет линейно вместе с количеством циклов, а у классических массивов — экспоненциально

Вот такие тонкости вскрываются спустя годы работы с языком. С другой стороны, это хорошо характеризует его в положительном плане — сколько за это времени гигабайт csvшек и джейсонов было перелопачено без этих ваших ArrayList?!

 297   4 мес   PowerShell

Казанинг-2021

Этот пост провалялся в черновиках почти два года. Но я решил всё же завершить его и опубликовать в январе 2023

Начало

Вторую часть майских праздников в 2021 году было решено пустить на авантюрный автопробег по Приволжскому федеральному округу. На самом деле рассматривались и другие направления, но в итоге победил маршрут, обеспечивающий умеренные прогоны равномерно по дням, и набор городов, которые заинтересовали. Финальный трек получился такой: Москва — Муром — Козьмодемьянск — Йошкар-Ола — Казань — Нижний Новгород — Гороховец — Москва

Муром и Козьмодемьянск

Выехать из Москвы постарались пораньше, но всё равно несколько раз застревали в пробках на Горьковке, иногда слушаясь экспромтов Алисы и обьезжая их короткими или длинными крюками. На одном из таких объездов, уходя от пробок на обьездной Владимира, оказались неподалёку от Мурома — и спонтанно решили заехать, пообедать и осмотреться.

Городок показался небольшим, но уютным. Неустроенная набережная с такими же авто-туристами и котами, причесанный под праздники центр, местная торговля, кафешка с высоким рейтингом из трипадвизора, оригинальная еда и изящная ошибка официантки, чуть не стоившая нам полуторной стоимости обеда. Прогулялись, размялись и двинули дальше.

Только к 8 часам вечера примерно добрались до Козьмодемьянска. На подъезде к городу машину атаковали майские жуки — как оказалось в последующие дни, это время для них самое летабельное — и летальное в плане встречи с нашей машиной. По возвращении из тура я долго вымывал их высохшие остатки из решетки радиатора и укромных уголков бампера.

Про сам город я слышал давно от подруги, проведшей в нём часть детство — она даже предлагала экскурсию от родственников, которые там живут. Ещё город зацепил географией — я решил что до него как раз будет комфортно дохать за первый день, проникнуться марийской атмосферой, и на следущий день паромом через Волгу телепортироваться в Йошкар-Олу.

Скинув вещи в классном номере свежей гостиницы, пошли гулять и ужинать, предварительно сверив наши интернет-исследования о местных заведениях с информацией тетеньки-хостесс. В итоге обошли по кругу весь Центральный микрорайон, удивились вывескам с незнакомыми словами и разговору на совершенно непонятном языке (и это между молодыми ребятами в винном магазине!), нашли совершенно намертво закрытыми в вечер пятницы два кафе из интернетов, дошли до рекомендованной администраторшей пиццерии — но там в 10 вечера уже завершила работать кухня (очевидно, повара отправились на виллы роскошествовать на заработанные непыльным трудом миллионы). Благо, в поисках кафе мы благоразумно заглянули в Пятёрочку, а поэтому ужин краковской колбасой в комнате отеля скрасил фиаско — хоть и не смог полностью сгладить обиду.

Утром доехали до пристани чтобы выяснить режим работы парома — найденный в интернетах телефон не отвечал (вообще тотальное несовпадение интернетов и реальности уже тогда стало очевидным). Выяснив, что с переправой проблем нет, мы все же решили прокатиться по городу, поглазеть на улицы и заглянуть в музей марийской культуры под открытым небом. Приехали на парковку, подошли к запертым воротам — соседняя калитка приоткрылась, высунулся бородатый мужик, и буквально цитируя легендарный мем сообщил нам что музей не работает, и вообще нас тут не звали. Это стало последней каплей: очевидно, любовь с городом не сложилась, и нам пора расстаться.

Переплыли на пароме Волгу (идёт 20 минут, человек 30р, машина 440), за это время к нам присоседились двое местных, попросили подкинуть до своих деревень что по дороге. В салоне разговорились, в целом всё как везде — разруха, делать нечего, лес воруют, вот и с транспортом тоже беда, приходится на попутках. Местные собирают ягоды и грибы, сдают, этим и живут. Мужика высадили километров через 30, тётушка проехала дальше и вышла на перекрестке ловить другую машину — в сторону от нашей трассы ей еще километров 50 оставалось. Кстати, зимой в районе Козьмодемьянска реку переходят пешком или на авто, а в межсезонье переправы нет вообще, не ожидал.

В Марий-эл впервые по дороге поймали местное радио — непонятно вообще ни слова кроме русских заимствований и фамилий, натурально «хырлым бырлым карбума редактор Елена Сидорова бармаше курбейды». Забавно и очень непривычно — считай, от Москвы день пути и такая экзотика!

Йошкар-Ола

Довольно быстро домчали до Йошкар-Олы — там планировали погулять, пообедать, и к вечеру уже быть в Казани. Центр города перекрыт на репетицию торжеств, всюду музыка, украшения и люди (в основном дети и молодёжь) в разнообразной форме — так понимаю, участники парада. Немедленно сфоткались с йошкиным котом.

Прошлись маршрутом из статьи Тинькофф журнала — об особенностях дизайна центра города я был осведомлён, а вот Натали сильно удивлялась прянично-сувенирным кварталам, ярким краскам и клону Спасской башни , посмотрели на город с колеса обозрения (новёхонькое, с кондиционером и подогревом), прошлись через набережную, квартал Брюгге и мимо арены до ресторана национальной кухни из рекомендаций.

Выяснилось что место Трактир Тёплая Речка ультрапопулярное, и нам как не бронировавшим столик в итоге отдали целый отдельный кабинет на втором этаже: еду пришлось ждать долго, зато сидели по-царски. Национальная кухня оказалась вполне себе знакомой русской, с местами необычными ингредиентами или названиями — не вареники, а Подкоголи, жаркое в горшочке — обычный картофель и овощи с мясом в бульоне, но с лосятиной, и так далее. Удивил салат из битой репы, с яблоками, сметаной и кедровыми орехами — действительно необычный и продукт и комбинация вкусов.

Нужно отметить что мы уезжали из дождливой Москвы и не особо рассчитывая на погоду, но и в первый день (большей частью проведённый за рулем) и во второй день в Йошкар-Оле нас сопровождало яркое солнце. Но сидя в трактире, мы увидели черные грозовые тучи, и поспешили ретироваться. В темпе прошлись обратно до до набережной, сфоткали Спасскую башню и сели в авто и рванули в Казань.

Дорога вышла отличная, за исключением последнего участка — как оказалось потом, там нормальная трасса, но в тот день была большая пробка и Алиса предложила объехать — и мы ровно то же самое время медленно петляли по промзонам между железной дорогой и Волгой, среди дач и белых приор. В итоге доехали, запарковали машину на следующие дни во дворе отеля, и пошли гулять по Казани

Казань

Натали давно хотела попасть в город, я в Казани уже был (#Казанинг) — тем интереснее было ловить флешбеки и сравнивать ощущения. Первый вечер отдали гулянию по улице Баумана: слушали музыкантов, уворачивались от самокатчиков, заглядывали в магазины чакчаков и айфонов, прокатились перегон на метро. Кафешки начали закрываться, в итоге мы сели в какую-то шашлычку — мне понравилось, а Натали опять с едой не повезло (это вообще был тренд путешествия, который сумел преломить только Нижний Новгород). Добрели до отеля, по дороге видели как в соседнее здание, заговорщически оглядываясь и звоня в домофон, зашла ночная бабочка — все бы норм, но весь следующий день из окон особняка раздавались песни кришнаитов, и теперь мне очень интересна судьба этой девушки. Отель Берисон так себе (особенно после Козьмодемьянска) — но мы видали и хуже. Без задних ног упали спать.

Во второй день гуляли по городу, купеческому району, завтракали в элитном кафе с крутонами ручной работы.
После вернулись на Баумана, поднялись на колокольню, провели пару часов в музее советского быта (моя бесконечная любовь), взяли самокаты и прокатились сначала по крутой вебдванольно-хипстерской набережной, а потом через дамбу к дворцу бракосочетания Казан. Поднялись наверх и позалипали на удивительно жарком для весны солнце. Вернулись пешком в район отеля.

Вернулись в отель, отдохнули и отправились ужинать в (предположительно) крутой ресторан на верхнем этаже одного из местных небоскрёбов. Ужин был прекрасен, отчаянное караоке в исполнении посетителей — зубодробительным, но в целом посидели неплохо. Вызвали такси, приехал чуднОй парень-мизантроп, мы потерпели его матюки до ближайшей знакомой улицы, и сбежали пешком в отель

Нижний Новгород

На следующий день рванули из Казани обратно в сторону Нижнего. Город встретил нас тотальной перекопкой и озабориванием всего и всея (сказалась подготовка к юбилею), усугублёнными дождём и туманом. Заселились в гостиницу, пошли гулять, перепрыгивая через траншеи и обходя лужи, добрались до пешеходной улицы (буквально уничтоженной перекладкой брусчатки, которую — и я помню это — совсем недавно положили). Кое как добрались до Кремля, который — о сюрприз — тоже был перегорожен, сбежали из него на набережную в надежде посмотреть салют.

О, эта эпическая история про салют. Дело в том, что действие сюжета проходит в пору Неумолимой И Типа Действенной Борьбы с Ковидом Всеми Тупыми Способами (НИТДБКВТ). Напомню, на дворе майские, майские это салют, салют это толпа, толпа — это опасность заражения (тут провал в логике если честно, ибо толпа она на свежем воздухе). Какое решение принимает администрация города? Может отменить салют совсем? Может, понять тупость вводимых ограничений? Нет, она принимает единственно верное по неведомой логике решение — скрыть место запуска салюта. В итоге, весь город равномерно распределяется по набережным (коих в Нижнем в результате слияния Волги и Оки немало), и стоит, напряженно вглядываясь и вслушиваясь сквозь стопроцентно непроглядный туман, где же, ссука, обещанный салют (и будет ли он вообще).

Салют в итоге был, совсем не в нашем районе — мы стояли на Верхне-Волжской набережной, а пуляли в районе Оки. Мы, вместе с тысячами таких же бедолаг, разглядели в молоке тумана далекие отсветы и глухие бульканья, и разочарованные ушли восвояси. А ушли мы в кафе Три апельсина — и это, ребята, был фурор. Кафе ожидаемо было переполнено, но нам милостиво без записи выделили столик и предупредили что всё готовится медленно, на что мы попросили что-то готовое чтоб не ждать — и в итоге чертовски насладились салатами в китайском стиле и невероятным (лучшим во всей моей жизни, я серьезно) фирменным десертом Три апельсина. Вспоминаю этот ужин регулярно.

На следующий день с утра вернулись на Большую Покровскую, позавтракали в одном из кафе, прыгнули в машину и поехали. По дороге я решил сквозануть знанием местных красот и показать Натали вид с высокого берега набережной — увы, в переулках по пути нас встретила бесконечная строительная техника, забор и знак кирпич. Я понял, что город не готов показать себя,и сдался. Помчали в сторону дома

Гороховец

По пути к Москве заехали к родственникам в Гороховец — посидели с семьёй в гостях у крёстной и двоюродной сестры, забежали в гости к племяннице, посмотрели на её невероятную плантацию фиалок и домашний зоопарк. Было хорошо

На дальнейшем пути проехали через эпический ливень — наверное, самое лихое из дождей что мне встречалось на дороге: трасса тупо встала потому что ехать было нереально. Пообедали в придорожном кафе тру-шашлыком для дальнобойщиков (огромные кремированные куски мяса на кости, пластиковые тарелки и столы с клеёнкой). На подъезде к Москве поймали пробки, и уже затемно ввалились домой.

Итого

За пять дней знатно накрутил спидометр, понял что дальние путешествия с надёжным напарником это совсем нестрашно, страна интересная и очень разнообразная даже в пределах нескольких сотен километров.

В очередной раз убедился что больше 3-4 часов за рулем проводить физиологически не могу — тотально падает концентрация и тупо расфокусируются глаза. Ну когда в запасе напарник, способный подменить на час-другой, это всё не беда.

Было очень хорошо

Ранее Ctrl + ↓