Итоги Года 2024


28.12.2024Итоги Года


Итоги прошлых лет: 20232022202120202019

Встретив этот год в Амстердаме, продолжив в Роттердаме и закончив Гаагой, я вернулся домой в Варшаву. Год выдался прямым продолжением начатого в 2023 – подтвержденное умение водить автомобиль, достойные достижения личного проекта, рост домена, за который я отвечаю в компании, и работа над телом в спортивном зале.

Проекты года

Я теперь челик на саппорте! Нужно поддерживать зоопарк разнообразия проектов с 2019 года. Что-то продолжаю хостить самостоятельно, что-то требует обновления из-за, например, устаревшего GitHub Actions раннера или, вышедшей новой версии Python. Добавлять по крупному мастодонту каждый год становится всё сложнее. Не успеваешь занять лидерскую позицию прошлым проектом. В этом году мне удалось этого добиться!

Основные

🦋 The AT Protocol SDK

Максимально советую ознакомиться с таким же разделом в Итогах Года 2023. Там я рассказываю, как этот проект появился и что из себя представляет. Здесь же расскажу о развитии и достижениях!

За этот год была реализована проверка подписей JWT токенов, необходимых для реализации авторизованных пользовательских алгоритмических лент. Кодогенерация из обновленных схем превратилась в нажатие одной кнопки на GitHub’e! Пайплайн автоматически подтянет новые изменения, запустит генераторы, почистит код и оформит это всё в Pull Request, готовый для мерджа! Был реализован синтаксический сахар вокруг операций над структурами. Так каждая структура (оригинальное название record), заимела CRUD методы, что максимально облегчило работу с API. Улучшено переиспользование сессий, добавлена куча новых примеров по отзывам пользователей, поля моделей стали содержать constraints, появился режим строгой валидации для реализации серверной части. Исправлены коллизии между неймспейсами, спровоцировавшие обратно несовместимые изменения, и многое другое!

Перейдем к достижениям. Разводить на буквы не буду. Давайте по фактам:

  • Проект на главной странице официальной документации Bluesky: https://docs.bsky.app/
  • Проект используется в официальных примерах кода для работы с Bluesky API на Python
  • Проект в списке проектов для работы с AT Protocol: https://atproto.com/sdks
  • Проект, в качестве пилота программы AT Protocol (гранты на развитие), получил пожертвование в размере 1к USD от Bluesky (всего было отобрано 3 проекта): Официальный блог пост, TechCrunch.
  • 24 контрибьютора, 460 звёзд, 560 Open Source проектов на GitHub, использующие SDK, 150k+ скачиваний в месяц, что входит в TOP 7k среди всех пакетов на PyPI (всего Python)

Сам же Bluesky подрос. У многих медиа и сервисов появился официальный аккаунт. Например, у GitHub :) Кроме этого, сеть обзавелась логотипам, а Discord, GitHub и другие добавили красивую привязку Bluesky аккаунта в профиль. Я зарегистрировался там, когда было всего 17к пользователей. Сейчас же зарегистрировано больше 25 миллионов! Такой рост значительно повлиял на нагрузку всей сети, а следовательно, теперь читать все события в режиме реального времени стало сложнее. И тут мы плавно подходим к новой главе!

🏎️ Python IPLD

Да-да, всё ещё рекомендую вернуться в итоги 2023 года и прочитать, что это, зачем и почему. Тут я расскажу об увлекательном, многоитерационном приключении по оптимизации кодирования-декодирования, дабы выжать все возможные соки и запустить Python в космос.

Изначально, как  это в экосистеме было. Кто-то написал реализацию кодирования-декодирования DAG-CBOR на чистом Python. Я пришёл, посмотрел, как медленно и пошёл писать биндинг на Rust. Написал, буквально на глаз увидел огромный рост производительности, на этом и остановился. Так было до тех пор, пока один уважаемый человек не написал на коленке свой собственный декодер на чистом C с прямым использованием Python C API. Дык он мало того, что написал, так ещё и бенчмарками обмазал и начал сравнивать как раз с двумя другими существующими реализациями. На Python и моей, на Rust. Вот так и пришло озарение, что моя Rust поделка, несомненно бьет по скорости Python, но в разы проигрывает C!

Так и началась моя личная гонка, продолжительностью в месяца два-три. Проект обзавёлся кодированием (до этого было только декодирование), чтоб бенчиться на одинаковом уровне по фичам с другими библиотеками. Юнит тесты, свои бенч тесты, флейм чарты, да даже CI, что бенчит каждый PR и отправляет репорт комментарием! С таким серьёзным набором уже можно начинать оптимизировать.

Все оптимизации были разбиты на 6 независимых релизов. Так же стоит отметить, что David Hewitt, мэинтейнер pyo3, неоднократно помогал мне разобраться с просадками производительности и особенностями его проекта. За что ему спасибо и огромный респект! Все свои сессии оптимизаций я записывал на видео и выкладывал в Live канал в Telegram. Это часы, если не десяток-два материала.

Вот общие вещи, которые помогли сравняться по производительности с реализацией на C, а местами даже где-то обогнать (список идет в хронологическом порядке):

  • Удаление лишних промежуточных структур, замена типа с Vec на &[u8] (при получении из памяти Python) – х2 буст
  • Банальный рефакторинг с упором на уменьшение количества аллокаций и дропов – х2 буст
  • Своя оптимизированная реализация декодирования сложных типов, таких как: список, словарь и т.д, а также, более быстрые проверки типов в порядке от быстрых к медленным и правильная работа с bytes, подарили местами аж х20 буст (минимум х4)!
  • Исправления реализации кодирования чутка его замедлили. Например, ключи должны быть отсортированы, дубликаты не допускаются и прочее съело 3-7% скорости. Однако, другие микро оптимизации, например, факт того, что ключи словарей могут быть только строками, вернули, а местами и улучшили производительность в итоговом релизе.
  • Следующим шагом в бой пошла PGO! И моё первое знакомство с ней, как и использование. Удачно тогда подвернулся митап в Варшаве на эту тему. После которого, я сразу же и реализовал +20% буста с полной автоматизацией под разные архитектуры и ОС.
  • Собственная реализация CAR декодера помогла избавиться от необходимости в использовании executor – +11% буст
  • В этот же момент времени, команда pyo3 выпустила грандиозное бета обновление, где полностью переделали управление памятью. Раньше pyo3 имел внутренний механизм подсчета ссылок объектов и занимался их менеджментом. Что создавало неплохой такой оверхед. Я был первым, кто попробовал их Bound API и с помощью команды pyo3, которая отревьювила мой код, получил +10% к декодированию и +30% к кодированию!
  • Исправленная работа с int, использовав i64 вместо i128, убрала лишние конвертации – +24%
  • Дальше случился застой. Я не видел, куда можно оптимизировать в безопасном Rust’e. Поэтому, я начал изучать секреты реализации на C и работу с ffi через unsafe блоки. 
  • И тут случился новый прорыв по производительности! Во-первых, оказалось, что по спецификации не следует декодировать CID (Content ID) в его строковое представление и можно оставлять в сыром bytes виде! А во-вторых, я начал вызывать ffi напрямую, в обход микро оверхедов pyo3 на обработку ошибок и других сахарков. Избавление от декодирования CID дало +91% к скорости, а пачка из 5 ffi оптимизаций дала от +5% до +13% каждая!

Сейчас, сравнявшись с C реализацией, я подуспокоился и временно закончил с дальнейшей оптимизацией. Это было до жути интересно и кидало мне вызов! Для пользователей моей SDK эти оптимизации прошли бесшовно (в одну команду для обновления пакета). Я несказанно доволен проделанной работой! Рад, что смог обеспечить такую магию behind the scene и помочь всем справиться с новой нагрузкой сети на Python.

Красивые картинки со сравнением скорости, все примененные оптимизации и сколько они дали буста, а так же сам код этих оптимизацией лежит тут: https://github.com/MarshalX/python-libipld/releases. Каждый релиз покажет вам разницу до-после скорости. А под каждым PR’ом есть репорт, сколько скорости добавило то или иное изменение.

Прочие

🕷️ Telegram Crawler

В этом году плотнее поигрался с LLM, интегрировал в свою повседневную жизнь. Добавил генерацию списка изменений Telegram в проект @tgcrawl. По идеи, модель должна была идеально справиться с поставленной задачей – у тебя есть unified diff, опиши словами по пунктам, что изменилось для тех,  кто не бум-бум или кому лень открывать GitHub. Однако, модель весьма часто галлиционирует и придумывает. Удаленное считает за добавленное и прочее. Сам же код – это 400 строк stateless бота, где под stateless я имею ввиду хранение информации непосредственно в самих сообщениях, без базы данных. Большая часть кода занимает оптимизацию размера контекста, разбиение на несколько запросов, предпросчет количества токенов и денег, что займёт генерация и выбор наиболее подходящего ответа. Идея родилась ровно тогда, когда Telegram выпустил сворачиваемые блоки цитат, которые вмещают в себя много текста и изначально выглядят весьма компактно. Релиз произошел вместе с релизом новой версии телеги. Проект стартовал с пометкой бета. С ней же сейчас и находится. Подтверждение генерации всё ещё требует моего вмешательства. Однако, недавно процесс превратился в “опубликовать”, вместо “генерировать”, проверить, что там не хлам, “опубликовать”. Следующий этап это – эвристически отмечать заведомо дорогие, сбойные сообщения. (что не редкость из-за лагов-багов тележки и как они деплоятся). Из интересного тут связка двух ботов. Один является слушателем, другой, тот что редактирует сообщения, добавляя блок с цитатой. Так получилось добавить ”AI” максимально сбоку. А использовать только основной токен не вышло бы, потому что пост в канал публикуется под этим же токеном. Из-за чего, при прослушивании обновлений, обновление о новом посте не придёт. Потому это мы его и создали.

Это форк чат-бота, дабы доступ к LLM был максимально под рукой и для нескольких человек одновременно. В боте есть всё: от анализа картинок до text-to-speech. Поддержка цепочек ответов на сообщения, как разные контексты: speech-to-text для видео, голосовых сообщений и кругляшей. Самое приятное тут – набор плагинов. Тут стоит поговорить о гениальности function calling и о том, как это адаптировала Apple.

Модель сама в интернет не сходит, на часы не посмотрит, да и в точности подсчетов может облажаться. Зато она может понять из контекста и описании функции, что тут бы её результат выполнения мог бы пригодиться для дальнейшего ответа. Так давайте объявим функции рядом в системным промптом, дадим ей название (“get_website_content”), человеческое описание (“взять содержимое сайта”), аргументы (“url - ссылка для получения контента”)! Теперь, когда мы попросим модель сократить информацию, статьи и приложим ссылку, она сама вызовет нашу функцию, так как посчитает, что для дальнейшего ответа нужно сначала получить данные для сокращения. Но кто же выполнит это функцию? Наше приложение! То есть наш бот, который служит, как прокси между пользователем и моделью. Модель сделает типичные RPC, который мы должны обработать, вызвать функцию с аргументами, которые LLM сама сгенерирует (даже подобьёт по желаемый RFC или тип/формат данных). Мы берём контент сайта любым подходящим способом и добавляем его в контекст, как ответ функции! После чего, модель сгенерирует окончательный ответ, основываясь на вопросе пользователя и ответе функции. Самое интересное, это когда функций становится больше! И теперь эти функции могут превращаться в цепочки вызовов, где одна функция зависит от другой! Например, мы даем ссылку на статью о численности населения в Польше и просим проверить, что количество населения совпадает. Для этого модель вызовет функцию получения контента с сайта, найдет информации о численности населения, потом вызовет функцию WolframAlpha с вопросом о численности населения Польши и сравнит ответ вольфрама со статьей!

Это два разных контеста (65 и 67 ID). В первом – я явно сказал сходить по сайту, во втором – добыть информацию самостоятельно. Поэтому модель решила воспользоваться функцией Google Search API.

Количество плагинов ограничено только максимальным размером контекста и вашим кошельком. Ведь каждый новый контекст изначально уже будет тратить кучу токенов только для объявления ваших функций. Имейте ввиду, что модель должна быть натренирована на поддержку function calling. Любая другая модель, без данной фичи, будет перформить хуже.

А теперь, что же там Apple? На WWDC они очень долго распинались о том, как их модель будет персональна, будет понимать вас и ваше окружение в айфоне. Так, а как же? А легко – сотнями таких функций, где каждый разработчик приложения может объявить свои функции! И это оооочень похоже на то, что у нас есть в приложении Shortcuts (Быстрые команды). Там мы можем использовать блоки сторонних приложений для выполнения действий, конфигурировать автоматизации. В ближайшем будущем теперь Siri сама сможет вызывать похожие по смыслу действия в ответ на ваши голосовые команды! Более того, Apple сама добавит кучу своих команд на уровне системы. Так, например, Siri всегда сможет получить доступ к тому что в данный момент у вас на экране. Сделать скриншот, проанализировать, ответить. Ждём где-нибудь в апреле 2025…

👨‍💻 Работа года

Как вы помните, а если не помните, то я напомню, что я работаю в Cycode. Мы занимаемся кибербезом и предоставляем кучу различных решений по сканированию кода на уязвимости, забытые секреты, мисс конфигурацию и прочее. Кроме этого, нашей сильной стороной является менеджмент всех этих десятков тысяч обнаружений среди миллионов строк кода и тысяч ваших репозиториев. Я занимаюсь Developer Experience доменом и являюсь там, по сути, одним единственным разработчиком. У меня очень простая и понятная задача – писать всё, что пишется для сторонних разработчиков, куда можно интегрировать наш продукт. Пришёл я туда почти 2 года назад на невспаханное поле. Из всего, что было, это CLI не в самом стабильном состоянии. Теперь же, полтора года спустя, у нас есть поддержка всех самых популярных IDE:

  • Intellij IDE Plugin – все продукты от JetBrains, коих там ну, около 20, включая Android Studio. По стеку тут Kotlin, для UI – отвратительно-терпимый Swing (терпим только из-за патчей и хелперов от самих JB вокруг него).
  • Visual Studio Extension – как для старых VS, 2015-2019, так и для VS 2019+. Столько лет не трогал Windows и вот, она меня настигла! Язык C#, для UI – WPF. Вкусил всю любовь Microsoft к GUID и XML.
  • VS Code Extension – куда же без VS Code и всех его форков (привет Cursor, VSCodium, etc)! И даже Theia IDE от Eclipse (полностью опенсурсная реализация VS Code. Оказывается Microsoft не все модули заопенсурсили…). Язык TypeScript, для UI обхожусь чистым JS и HTML. Electron ведь…

Продолжаю питонячить, работая над CLI и агентом для кубов. Экосистема растёт, всё больше клиентов адаптируют плагины в своих командах. Прогресс с нуля заметен, ещё бы, хех! Расти тоже понятно куда. Больше интеграций. IDE, CI/CD и всё остальное, где есть плагины и куда можно встроиться с клиентской стороны.

В марте Cycode купил Bearer – Open Source сканнер на уязвимости с помощью статического анализа кода. Произошла реструктуризация, появилась новая команда, а в неё оказался и я. Теперь у меня в команде аж три native speaker’a! Количество использования английского в работе возросло многократно. Забавы ради, летом перепрошел EF SET:

  • Январь 2023 - C1 (68/100). 71 чтение и 61 слушание.
  • Июнь 2024 - C2 (72/100). 71 чтение и 72 слушание.

По-прежнему ничего не учу, говорю абы как, но проблем это никому не доставляет. Работа работается, проекты проектятся, контент потребляется, коммуникация в путешествиях происходит.

GitHub года

С тех пор, как GitHub теперь не только место моих личных проектов, но и рабочих, я считаю, он заслуживает отдельную секцию в итогах. Буквально просто записать несколько значений и сравнить с предыдущим годом. Но я не думал, что это будет не так просто. Прошлогодний GitHub Wrapped, что я использовал, помер. Парниша переехал на бесплатный Mongo Atlas и максимально быстро уперся в лимит 512мб. Знаете, как узнал? Благодаря его return str(exception) в ответе сервера. Проблеме уже больше неделе. В ту самую неделю, когда wrapped нужен больше всего! Пришлось развернуть локально его проект. Со фронтом проблем не возникло, а у бэка свои приколы… Строка подключения к монге оказалась захардкожена. Только пароль вынесен в .env. Изучая дальше код, в попытках его запустить, оказалось, что он собирает Personal Access Tokens всех пользователей, что авторизовались на его сервис и потом переиспользует эти токены для неавторизованных пользователей! Просто берет и случайным образом выбирает PAT, делает от вашего лица запросы на GitHub API, чтоб обработать чей-то запрос. Не помню, чтоб меня о таком предупреждали при входе на сайт. Особо порадовало, как он “логирует” (просто делает print) каждый запрос, выдавая в консоль PAT пользователей. Вишенка на торте – эндпоинт, который позволяет удалить запись из базы, если вы знаете GitHub User ID: https://api.githubtrends.io/auth/redirect/delete/USER_ID. Вот такой вот репозиторий на 14к звёзд…

GitHub Wrapped 2023 -> 2024:

  • Total Earned Stars: 2k+ -> 3k+
  • Contributions: 1245 -> 1115
  • Pull Requests: 356 -> 419
  • Reviews: 39 -> 78
  • Active Days: 224 -> 264
  • Longest Streak: 22 -> 28
  • Longest Gap: 18 -> 6
  • Weekend Activity: 25% -> 17%
  • Most Used Languages: Python, TypeScript, Kotlin, Go -> Python, TypeScript, C#, Kotlin, Rust
  • Lines Changed per day: 228 -> 202
  • LOC Additions: +56k -> +57k
  • LOC Deletions: -27k -> -24k

Contributions упали за счёт того, что я перестал пук-сренькать коммитами. Все мои репозитории теперь запрещают коммитить в main, а при слиянии ПРов разрешен только один способ - squash. До этого был merge, поэтому и коммитов считалось больше. Выросли ревью, выросли ПРы, уменьшилась активность в выходные. В целом, активность теперь более-менее равномерно размазана по всему году. А не так, что, условный май 2023, улетел в космос по активности из-за старта atproto SDK. Добавились новые языки.

Раньше график был размазан: с 6 до 9 утра, чуть ли не равномерно (привет удалёнка). Почему-то в 6 утра побольше активности. Теперь же всё начинается в 9 утра с пиком активности на середину дня. Потом перерыв от работы и личные проекты, во всей видимости XD (привет гибрид).

🏋️‍♂️ Спорт года

Давайте, отбросив побочные активности типа: байдарок по Висле, фестивалей, квест комнат, сфокусируемся на начатом год назад – спортивном зале. Есть изменения, есть улучшения, есть достижения! Неизменным остался весь купленный шмот в прошлом году,  сам тренажерный зал и моё посещение его. 

Два самых главных изменения это – уход от тренера и изменение графика с типом тренировок. С графиком всё элементарно – я начал ходить 3 дня в неделю вместо 2. А с тренером я сильно затянул. Изначально цель была изучить технику выполнения и как не навредить себе. Плюс экскурсия по снаряжению/машинам и менеджмент нагрузок. Однако, отсутствие необходимости думать и погружаться в тему, поместило меня в слишком комфортную зону. Ты не составляешь себе план, не думаешь о группах мышц, не думаешь о весах. Ты – не часть процесса. Абсолютно всё на аутсорс тренеру. Но тут я перестал ощущать прогресса, а сам прогресс нигде не фиксировался. Складывалось ощущение, что и у самого тренера. 

Недолго поискав промежуточный вариант до полной самостоятельности, я нашел приложение, что составляет тренировки! Изначально, оно основывается на заполненной анкете, ваших показаниях тела. Вы выбираете доступный набор машин и эквипа и следуете плану. На рекомендации упражнений можно влиять, ставя лайки или дизлайки. Можно руками заменить упражнение и оно само предложит на необходимую группу мышц. Высчитывания весов, их плавное повышение и редактирование тоже имеется. Там же и видео с правильной техникой выполнения упражнений. Но самое главное – это лог ваших подходов! Я бы всем порекомендовал начать записывать что, сколько раз, и по сколько подходов вы делаете. Не только для того, чтоб не забыть и случайно не взять вес поменьше, но и для того, чтобы видеть прогресс спустя недели-месяцы, ставить личные рекорды! Это невероятно важно. Приложение называется Fitbod.

Переходя к типу тренировок это: push, pull, legs split. Понедельник: бицепс и спина, вторник: трицепс, плечи, грудь, а в пятницу, перед выходными, день ног. С пищевыми добавками экспериментировать перестал. Остался только протеин да таблетки с кофеином, на случай, если не проснулся. Протеин изолят только потому, что меньше ощущается сам вкус протеина и легче растворяется в воде.

За этот год мне удалось скинуть 15кг, где большая часть это жир. Я провёл 130 часов за 102 тренировками. Среднее время тренировки 76 минут и это значение растёт последний месяц. Среда стала самым популярным днём недели по количеству тренировок. Судя по количеству тренировок, 102 не сходится с 156 (52 недели по 3 раза). Но тут есть нюанс, что изменение графика произошло где-то в конце весны. Нуу и пропуск дня ног никто не отменял. Консистеность неплоха, но можно улучшить в следующем году.

Силовые медленно, но уверенно растут. Жаль, что логировать я их начал только в октябре, watchOS 11 представила новую фичу – training load. Оцениваешь, как сильно выложился на тренировке, потом получаешь график – как, насколько ты загружен. Условно можно подстроить расписание под данный показатель, дабы быть уверенным в том, что тело восстановилось. Ну или что ты не сачкуешь. Не нашёл для себя эту функцию сильно полезной. Ничего так не скажет об восстановлении, как ваше ощущение своего организма.

🏆 Достижение года

Вот как бы популярность и заслуги atproto SDK – чем не достижение. Или вот, взять работу – +2 полноценных плагина и теперь 4, в ногу идущие, проекта по фичам без отставания друг от друга. Тоже замечательное достижение. А похудение на 15кг. Но самым-самым важным я считаю сдачу теоретического экзамена ПДД на английском, сдачу практического экзамена на польском, получение водительского удостоверения и приобретение первой машины! Давайте обо всём по порядку.

Сдача на права

Началось всё осенью 2023 года. Нужды в самих водительских правах, как таковой, не было. Просто было бы неплохо уметь водить. Брать машину в аренду в путешествиях. Сдача на права рассматривалась, как прикольное развлечение в жизни. В качестве модификаторов сложности, была выбрана ручная коробка передач, учёба в большом городе, теория на английском языке, самостоятельное изучение ПДД, практический экзамен в другом районе города, а не в том, где было наезжано много часов. 

За прошлый год я успел начать процесс получения прав, записаться в автошколу и отъездить 30 обязательных часов. Теория шла туго. Автошкола предоставила  доступ к e-learning платформе, где с помощью слайдов с минимальным количеством текста и большими картинками, пытались объяснить все правила. Сама платформа была ужасным плагином для WordPress, где некоторые эндпоинты сервера просто пятисотили и не запоминали мой прогресс пройденных слайдов, уроков, разделов. Из-за того, что доступ к платформе был ограничен по времени, а я понимал, что не закрою этот вопрос за оставшееся время, было принято решение расчехлить питон, джс и чутка HTML, дабы воссоздать их платформу изучения у себя локально. Принцип прежний – слайды. Забэкапив базу знаний, я отложил дело в дальний ящик, так как пришла зима, где я никак не собирался продолжать сдачу экзаменов в снег.

С приходом весны появилась мотивация закончить начатое и убрать этот груз с плеч. Ведь за мной всё ещё висел активный профиль кандидата в водители в гос системе и часто задавались вопросы от тренера, коллег, родственников и друзей про статус сдачи. Я для себя понял, что слайды – это вот вообще не моё. Слишком мало информации на экране в один момент времени, слишком медленная навигация. Тогда я достал питона ещё раз и уже по осеннему бэкапу сделал идеальное для себя представление информации – 11 PDF файлов-занятий с нумерацией каждого слайда, где на каждой странице помещалось по 3-5 слайдов с миниатюрной картинкой и упором на текстовое содержание.

Дальше дело за привычным – iPad, импорт PDF в Goodnotes, Apple Pencil для работы с текстом. И вот тогда вся теория была закрыта за майские праздники. Буквально 5 дней плодотворных выходных. Безусловно, вся теория подкреплялась прохождением тестов в замечательном мобильном приложении (Prawo Jazdy от Ray), где я сразу же приобрел премиум для отключения рекламы. Приложение содержит абсолютно все вопросы с государственного экзамена. Всего 2086(!!!) уникальных вопросов, где часто встречается видео с видеорегистратора. Смотришь, понимаешь ситуацию по знакам, машинам и тд на дороге, читаешь вопрос, отвечаешь можно/обязан/правда ли. Я начинал решать билеты и у меня они не пошли… 66 тестов по 32 вопроса каждый, где первые ~25 ответа Да/Нет, остальные – выберите один правильный ответ из трёх. Поэтому, я просто пошёл прорешивать темы на знаки, на приоритеты, на регулировщиков и пр. Так я хотя бы раз встретил и ответил правильно на 1709 вопросов, что только 82% от всех вопросов.

Увидев, как хорошо я щелкаю mock экзамены (по правилам госэкзамена с ограничением по времени на каждый вопрос и общее время) в том же приложении, понял, что пора:

  • 29 апреля начинаю ботать ПДД
  • 5 мая сдаю внутренний экзамен автошколы. 69 из 74 баллов (68 проходной XD)
  • жду обновление моих данных от автошколы в государственной базе
  • регистрируюсь на госэкзамен, жду очередь
  • 14 мая сдаю госэкзамен. 73 из 74 баллов

Осталось совсем чуть-чуть, практический экзамен и готово! Беру дополнительные 2 часа езды 23 мая. Ведь я это… полгода назад, как последний раз за рулём сидел. Нужно понять текущий навык езды. И как оказалось, стало только лучше! Работа со сцеплением и передачами никогда такой хорошей ещё не была!

На этот раз инструктора выбрал на польском, ведь не собирался нанимать синхронного переводчика, что сидел бы на заднем сиденье во время экзамена... Кринж же… Поэтому заранее подтянул словарный запас на тему ПДД. Повороты, развороты, полосы, светофоры, сцепление, тормаз, названия приборов. Всё я это знал только на английском. Новый инструктор был доволен моей ездой, за исключением двух вещей, которые он умудрился мне исправить за одно занятие:

  • Неумение быстро крутить руль, правильно перехватывая руки.
  • Выжатое сцепление на светофоре.

С первым мы справились просто на площадке, где я ездил вперед-назад, делая резкие повороты влево-вправо, оттачивая перехват руля. А со вторым мне просто сказали, что вот, для тебя желтый сигнал светофора придумали. Как загорится желтый, тогда и выжимай сцепление, включай первую передачу. И сработало! Итоговая рекомендация была только одна: взять ещё 2-3 урока прям перед самой сдачей.

Довольный пошёл становиться в очередь на госэкзамен. Тут она уже не несколько дней, а несколько недель… В моём случае пришлось ждать где-то 22 дня. За два дня до экзамена взял ещё одно занятие и прям перед днём экзамена последнее, с новым инструктором (второй был занят). Он был очень удивлён, как я хорошо вожу автомобиль и пытался узнать, точно ли я нигде никогда раньше не водил автомобиль где-нибудь загородом или типа того. Мы с ним повторили на польском всё, что под капотом автомобиля, все световые приборы (это часть практического экзамена) и попрощались. На следующий день, 20 июня, я без проблем сдал практику, а еще через день заполнил заявление на изготовление водительского удостоверения. После чего улетел из страны и забрал пластик аж 15 июля!

Каршеринг

Вооот она, вооот она моя первая самостоятельная езда! Удивительно, но факт: в Польше даже с только что выданными европейскими правами можно без проблем взять каршеринг. Нет никаких ограничений по “опыту” езды, который все измеряют датой выдачи пластика…

Так вот, мой первый каршеринг был на автоматической коробке передач! Я минут 10 сидел и с помощью ChatGPT разбирался, как тронуться с места. Было понятно ровно ничего. Как завести машину-то без педали сцепления? Как включить заднюю передачу, дабы выехать с парковочного места? Да просто-напросто, как снять машину с электронного ручника?! Это всё было в новинку, как и сама аренда машины. Всё прошло супер хорошо. Куча эмоций, нового опыта. Однако, автоматическая коробка передач меня сильно разочаровала. Я чувствовал себя ненужным для управления данной машины… Всё вождение свелось к крути баранку да газку поддавай.

Второй каршеринг был уже от другого оператора и на ручной коробке, но первая езда с пассажиром не в виде инструктора! И опять проблемы сразу после того, как сел в машину. Новый способ включения задней передачи был изучен за ещё 5-10 минут… Теперь я изучил всех покемонов (приподнять/нажать/потянуть). Всё прошло гладко. Ну так, иногда вместо третьей передачи втыкал первую, но это раз-два было XD. Один раз заглох. Посетил и туннели, и оживленные улицы Варшавы, и мосты. Бортовой компьютер оценил мою технику езды в 4.4 из 5, а скорость в 3.8 из 5 (получается местами превышал, но так, в рамках допустимого).

Своя машина

Ну вот честно, не собирался покупать! Правда думал, что каршеринг – это сила. Буду пользоваться только им. Учиться ездить на нём (напомню, что научиться водить и делать это нормально – моя основная цель). Но мне хватило двух поездок в самых популярных сервисах, чтоб понять, что это нереально. До машины вечно нужно дойти пару сотен метров, а то и больше. Машина может просто взять и пропасть с места, где ты её запарковал. Удерживать, оплачивая всё время простоя, пока я в офисе, тоже не вариант. Зоопарк машин, разные коробки передач, разное техническое состояние – никакой стабильности. Так никогда не привыкнешь, чтоб начать получать удовольствие от езды. 

Близилось мое двадцатипятилетие, нужно было выбирать себе подарок. Меня метало от Fiat Tipo до какой-нибудь купешки BMW 4 серии. Но тут я узнал о существовании Miata… просто из TikTok мемом про фары-глазки NA. А когда я увидел ND! Я загорелся покупкой. Вот это мне надо! Я охарактеризовал свою потребность в машине тремя словами: fun, toy, joy. Мне не нужно возить картошку, мне не нужно возить кого-то. Мне нужна машина для кайфа, где я смогу наслаждаться ездой и наезжать километры стажа. И я вообще не прогадал! Взял на твёрдой крыше для польской зимы и конечно же исключительно ручной коробке передач. Её прямое подключение работает просто, как затвор оружия. Сущий кайф! А езда с откинутой крышей в прекрасный летний день дарит широчайшую улыбку на лице!

За ~4 месяца езды я стал куда увереннее. Проехал 320км сразу после покупки до дома, переобулся на зиму, наехал на ногу человеку (он был в специальной обуви, не кипишуем), поцарапал чутка пластик спереди, разряжал аккум в ноль на второй день владения машиной и прикуривался от такси на третий. Незабываемый ОПЫТ, включая сам процесс покупки, регистрации и страхования автомобиля.

Не обошлось и без минимального тюнинга. Стоковая антенна уродлива (IMHO) и торчит куда выше крыши – под замену. До - что - после:

Следующее – это освещение в салоне. Стоковый, тусклый, желтый свет ну никак мне не нравился. Поменял на белый LED. Потом – это обрезанный mini jack в AUX, дабы заглушить автоматическое включение радио, ну и последнее – это полочка в бардачок. Всё.

Новинки года

🥚 Бритая голова

Был обладателем шикарно выбритой головы с мая по сентябрь! Поднадоела эта тема с волосами. С ними ужасно потеет голова в зале, голову сложнее мыть, голову надо чаще мыть. Волосы нужно стричь, волосы нужно расчесывать, волосы нужно укладывать. А что с лысой головой? Подбревай отросшие миллиметры раз-два в неделю да трать горошину шампуня, чтоб кожу головы помыть (на самом еще используй головные уборы или SPF). Никогда не был лысым в осознанном возрасте. Всегда мог только на ощупь представлять форму своего черепа и его особенности. Теперь я знаю, какой офигенной костью я обладаю на затылке и абсолютно спокойно отношусь к очередному бритью! Возможно, даже повторю следующим летом.

🎵 Музыкальные фестивали

С путешествиями в этом году куда попроще. Откисал в Польше, но летом посетил Финляндию и Венгрию. Оба визита исключительно ради музыки. Беруши обязательны. Loop опробованы мной, другом и мамой. У меня Experience 2 + Loop Link для как раз фестивалей – музыку слышно прекрасно, в ушах после не звенит, даже если максимально близко стоять к сцене. У мамы – Quiet 2 для повышения качества сна. Фидбек максимально положительный.

Финляндия – Neonya!! Party: HARDER X FASTER

Lineup: USAO (JP), Kobaryo (JP), JAKAZiD (UK), Savage States (JP), Alek Szahala, No Hero, Mättö Mättö Män

Под такое мы колбасим. В этой стране был неприлично долгий световой день летом. И именно в этой стране я увидел Cybertrack вживую. Шпроты база. Весьма прогрессивная страна.

Венгрия – Bass Paradise

Lineup: Subtronics, Friction, Eliminate, Virtual Riot, Andromedik, Modestep да и куча других.

Качает нормально. Термальные ванны чек. У меня кроме видео ничего нет, а вставку видео мой шедевросайт не поддерживает :( возможно когда-нибудь доеду до Defqon.1 или Tomorrowland.

📺 Девайс года

Никогда бы не подумал, что это будет Apple TV. Никогда не пользовался телевизорами, никогда не интересовался Smart TV. Как же я дошёл до этого? А очень просто – Apple убрала возможность использовать iPad, как Home Hub для умных девайсов типа лампочек. Обновляешься до новой iPadOS – теряешь hub. Так мне понадобилось новое устройство. А роль хаба может выполнять либо Apple TV, либо HomePod. Удивляемся, что HomePod не продаётся в Польше и сразу же едем за Apple TV. 

Я бы и не подумал даже, что этот 1080 телик, оставшийся от прошлых владельцев квартиры, может выдавать более-менее нормальную картинку! Последний раз, когда я включал его при заселении (года четыре назад), всё изображение было жмыхнуто какими-то шумами, странными точками контрастности. Сложно объяснимо, но была полная каша. Как оказалось, в настройках телика был просто какой-то включен режим для пожилых или типа того… А после калибрации TV с помощью телефона произошла вообще магия! Теперь у меня появился новый способ просмотра YouTube и Netflix, создания атмосферы дома. iPad теперь валяется, вечно разряженным, на тумбочке и используется исключительно тогда, когда нужно поработать Apple Pencil. 

Интеграция с умным домом и AirPods, поддержка нескольких пользователей – шик. Покупалось, как коробочка, что будет лежать и поддерживать автоматизацию в доме, а эксплуатируется по полной для потребления контента!

Софт года

OpenWrt, Tailscale, iSponsorBlockTV. Всё, расходимся XD

Не весь мой умный дом ладит с 5ггц WiFi, а роутер от провайдера, хоть и поддерживает 2.4, но использует одинаковое имя. Некоторым устройствам от такого плохо и они теряют соединение. Поэтому, мне нужно было как-то отделить точки доступа друг от друга. На роутере от провайдера сделать можно ровно ничего, поэтому был приобретен ASUS RT-AX53U, установлен OpenWrt, в том числе ради открытия ранее неизведанного мира и началось. HTTPS DNS Proxy сюда, AdBlock на уровне роутера сюда. Всякие трюки-оптимизации пакетиков в добавок (типа SQM) сюда, изоляция гостевой точки доступа от основного дома сюда. 

А как управлять роутером удаленно? VPN! Ставим Tailscale (работает над WireGuard) непосредственно на сам роутер, броадкастим локальные IPшники и вдобавок разрешаем использовать роутер, как exit node! Ставим Tailscale на все свои девайсы и кайфуем. Теперь, даже лежащий дома Windows ноутбук, необходимый для разработки под Visual Studio на работе, доступен откуда угодно в VPN через Remote Desktop без непосредственной установки VPN клиента на него! Для удобства зафиксировал для него конкретный локальный IP. 

iSponsorBlockTV вообще гениален. Сила краудсорсинга помечает сегменты рекламы в видео, а этот скрипт эмулирует работу внешнего пульта, который автоматически пропускает нежелательные сегменты на TV.

В заключении

Прямо час моей славы, а не итоги! Успешный успех! Всё, как в современных социальных сетях. Год вышел правда сочным, взрослым и поставил точку в куче дел, горжусь. 

Мало того, что я всё успел, так ещё и прилично так позадротил в игры! В Tarisland – на телефоне, в Hypixel – на ноуте, и в Trackmania – на Steam Deck’e! Часов 450 точно наиграно. 

Финальный факт: i like the way you kiss me был прослушан 345 раз (топ 0.001% слушателей в мире).

Сделайте свой следующий год ЛУЧШЕ, ЧЕМ ЭТОТ!!! ✨

Итоги прошлых лет: 20232022202120202019

Недавние посты


31.12.2023 Итоги Года

Итоги Года 2023

© marshal.by 2024

Исходный код

Сайт работает на Gatsby + prismic и опубликован на GitHub.