Разработка ПО и Backend систем.

Позднее Ctrl + ↑

Режем ветки или сокращение использование ветвления

Качество видео слабое, запись старая

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

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

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

if something:
    if something_else:
        # do

писать

if something and something_else:
  # do

Отказ от else ветки условий сюда же. Из недавного на ревью:

if current not in cache:
  # do
else:
  # do

меняем на

if current not in cache:
  # do
  return / continue
# do else

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

SqlAlchemy в ETL процессах

На прошлой неделе затягивал алхимию в dag-скрипты для airflow. Так как AF не хостится на нашей стороне, а доставляется до заказчика, хотелось обойтись без использования внутренних соединений с БД(я про connections внутри AF) и написания SQL-запросов в plain-тексте дабы сохранить единообразие кодовой базы с обычными нашими сервисами по максимуму.

По мимо того, что вместо второй версии пришлось использовать 1.4, а это потянуло за собой использование более старых версий mypy и затягивания плагинов для алхимии, ну и переписывание моделей на старый лад, столкнулся с интересным приколом: alembic начал ругаться на то, что у меня для одной метадаты в нескольких моделях одинаковые названия таблиц.

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

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

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

Дешевое и приятное решение, почаще бы таких :)

Есть у меня такой фетиш...

Есть у меня такой фетиш раз в три-четыре месяца обновлять конфиги для своего редактора(пишу я в neovim). Фетиш этот вынужденный, так как раз в 3-4 месяца обязательно что-нибудь ломается. Приколов с конфигом, который казалось бы написал один раз и изредка допиливаешь, если нужно что-то подтюнить, было масса.

Позавчера я подключал tailwind для проекта, подключил 4 версию. У меня отвалились подсказки редактора по классам стилей, подумал, что раз обновилась библиотечка, то нужно обновить плагин для подсказок этой чудесной либы. Решил за одно обновить все плагины, так как сейчас пользуюсь LazyVim(менеджер плагинов), сделать это достаточно просто.

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

С — стабильность :)

P.S. Обновил конфиг (ссылка на него), описание поправлю в процессе, кому интересно поглядеть — прошу :)

Потерянный прием в структурах данных

Решил систематизировать навыки по объектно-ориентированному анализу и проектированию(это про то, как проектировать ПО на основе АТД и их взаимодействия), наткнулся на следующий хороший прием для линейных структур данных(список, массив), как понятие курсора.

Курсор всегда указывает на какой-либо узел, если список(возьмем его для примера) не пуст. Есть набор операций, который применяется к узлу курсора(такой узел называют текущим). На картинках как раз эти методы, есть еще remove, который не поместился в скрин.

И как-то сильно гибче по использованию становится такой контейнер: двигай себе курсор от головы к хвосту или наоборот, вставляй значения в таком порядке, в котором тебе вздумывается, удаляй, меняй, все в атомарных командах есть.

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

Да, в драйверах подключения к БД, да в той же алхимии, понятие курсора есть. Почему не упомянуть его в курсах по алгоритмам — вопрос, прикольно ведь.

Баланс жизни и работы

Пока искал статью Товеровского, решил почитать мысли Бирмана касательно баланса между жизнью и работой. У самого было странное ощущение от фразы «work life balance», ибо разделение работы, где ты тусишь треть своего дня(хотя скорее всего больше), от жизни в целом выглядит как-то странно. Тут наши мысли совпали, но мне приглянулся еще комментарий Жени Арутюнова , картинки украл из статьи.

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

HL++2024 Что посмотреть (часть 1)

Какие доклады посетил и могу сказать, что доклад был интересен, какие посетить хотел, но не посетил, что буду смотреть в записи. Посетить все в живую было и остается нереальным, поэтому записи в хорошем качестве — спасение.
Записи докладов будут в открытом доступе летом 2025 года, при желании можете просмотреть плейлист летом :)

Сделаю в нескольких частях во избежание лонгрида.

Погнали.

Что посетил
Архитектура хранилища ВКонтакте. Достаточно лайтовый доклад о том, как ВК развивал хранилище от первых версий до текущей(в докладе говорится про два этапа, но есть ощущение, что их было больше). Рассказали о том, как на архитектуру повлияла частота просмотра старых файлов, как данные размазываются по ЦОДам и как с помощью XOR восстановить данные после инцидентов(отдельный доклад об использовании XOR в хранилище ВК видел в отдельном докладе года 3-4 назад, можете найти в сети). Без заумностей, для разгона самое то.
Миллионы часов: поиск копий в VK Видео. Доклад уже чуть более запаристей, но все еще доступен для понимания. В целом слабо понимаю(и понимаю :) как работает поиск по видео, в докладе как раз про это и про то, как размеченные данные для поиска умещали в оперативную память.
Надежность на масштабе в 45 млн клиентов — инструменты и практики цифрового банка. Так я и не понял если честно, полезен оказался для меня этот доклад или не очень. Мне он показался больше маркетинговым, поэтому рекомендовать не хочу.

Что хотел посетить и буду смотреть в записи
Аномалии под нагрузкой в PostgreSQL 2.0. Ну куда же без любимой БД и ее оптимизации. Спикера ранее не видел, поэтому без каких-либо ожиданий, но посмотреть все же хочу.
Динтаблицы YTsaurus — и ещё одна СУБД от Яндекса. Надеюсь доклад будет больше техническим, чем маркетинговым. Как никак аналог Hadoop.
Движок распределённого SQL в СУБД Picodata: принцип его работы, принятые архитектурные решения и сравнение с аналогами. В целом интересно, что за новая БД такая и для чего ее можно будет использовать. Тут немножко кишок, возможно будет занудно и скучно, я предупредил :)
Valkey 8 — релиз форка Redis про performance. Как известно, свежие версии редиса теперь проприетарные, а яндекс начал лить патчи для valkey. Для ознакомления с инструментом.

Полезная новостная лента

Оригинальный пост в tg по ссылке еще с новогодних праздников, выкладываю немного с запозданием :)

Салаты кончились, вино выпито, сидим формируем себе полезные новостные рассылки.
Кто хочет сделать себе подобную рассылку с материалами из интересующих вас областей, то для темы дизайна систем рекомендую ребят из blog.bytebytego.com (можете ознакомиться с их роликами вот тут, это проект автора вот этой знаменитой книжки.

Когда будете подписываться на рассылку, то указывайте мою рефералку. Посмотрим, насколько полезные плюшки ребята предлагают.

https://blog.bytebytego.com/?r=52wdox&utm_campaign=referrals-subscribe-page-share-screen&utm_medium=web

Как я на HL сгонял часть 2

Окружение
Все так или иначе пришли с одной целью — что-то узнать:

  • 💻 Кто-то узнать про новые продукты, которыми можно решать задачи(например Picodata, Valkey, otterbrix);
  • 💻 кто-то про проекты, куда бы он хотел устроиться;
  • 💻 а кто-то пришел собственно ради докладов :)

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

Здесь я вижу три выгоды для себя:

  1. Ты можешь прикинуть свой уровень в сравнении с окружением.
  2. Из разговоров можно понять, в чем ты плаваешь и что тебе подтянуть.
  3. Собственно с людьми можно пообщаться, чтобы выяснить интересующую тебя инфу.

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

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

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

Внутреннее устройство баз данных от ШАД

Нашел хорошие лекции от ШАДа по внутреннем устройству и принципам систем хранения, Александр Боргардт из @duckstax решил выложить их в открытую.

Обычно материалы по базам данных строятся вокруг изучения PG и что-то упоминается про Mongo и ClickHouse.
Что бросилось в глаза, кроме лекций про протоколы и JIT, так это рассмотрение Picodata в качестве индустриальной БД наряду с Cassandra & Tarantool. Picodata молодой инструмент, о котором кстати много говорили на прошедшем HL, поэтому есть ощущение, что ребята от курса к курсу актуализируют программу.

К своим хомячковым запасам материалов я добавил, теперь несу благодать в массы 🤓

https://t.me/SmotrovDev/37

Присоединяйтесь к блогу в телеграмме :)

Ранее Ctrl + ↓