Метакод – Telegram
Метакод
71 subscribers
8 photos
32 links
Автор канала @pavel_maksimow
Download Telegram
Channel photo updated
Всем привет, кто еще здесь живой.
Ранее здесь я пытался писать про аналитику, когда я этим занимался.
Уже 6-ой год я занимаюсь серверной разработкой, буду теперь здесь писать про это.
Оставайтесь, кому интересно!
🫡9👍2👎1
Посмотрел интервью с Владом Ханоновым, автора книги с обезьяной "Изучаем Domain Driven Design", в этом интервью он немного рассказал про свою новую книгу, которая будет посвящена модели уровня взаимодействия между компонентами системы.

Модель определяется следующими факторами:
1. Кол-во знаний, которыми обмениваются компоненты.
Чем их больше, тем будет больше каскадных изменений.
2. Расстояние между компонентами.
Чем меньше расстояния (находятся в одном микросервисе), тем легче внести изменение и наоборот.
3. Частота внесения изменений

В итоге формула получается такой:
Кол-во знаний и расстояние должно балансировать в зависимости от кол-ва изменений.

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

Когда можно выносить в микросервис? В случаях, в которых нам придется меньше или реже вносить синхронные изменения в оба компонента.
Т.е. сервисы должны обмениваться малым кол-вом знаний или внесение изменений должен быть редким.

https://youtu.be/PRL3vVfv1dA?si=UkAOjDBpWKU7uwOu&t=3083
👍1
Нашел крутую визуализацию работы Kafka, можно интерактивно менять кол-во её компонентов и смотреть, как это работает в новой конфигурации. Я прохожу интенсив по архитектуре брокеров и очередей и мне помогло заметить неочевидные моменты в её работе.

Еще вспомнил, что у меня в закладках сохранена интерактивная визуализация по алгоритам балансировки трафика, тоже рекомендую.
Внизу этой страницы.
👍1
Раньше работал в давно живущих проектах, где GitLab и CI/CD уже настроен, просто комитишь код и жмёшь Merge. С одной стороны хорошо, не надо в этом разбираться. С другой стороны не знаешь, как это работает и не можешь настроить на новом проекте. Хорошо, что мне это потребовалось сделать на реальных проектах, сразу закрепил знания на практике. Выбрал этот курс, мне кажется из-за того, что там был готовый docker конфиг и инструкция по развёртыванию локального GitLab.
В целом, хорошая база для разработчика. Если до этого ковырял GitLab "по ситуации", то курс помогает выстроить целостное понимание и разобраться в деталях.
👍3
В Python есть предел, когда повышение кол-ва потоков в ThreadPoolExecutor не даёт ускорение, потому что из-за GIL потоки могут работать только на одном ядре и оно не успевает обработать CPU нагрузку этих потоков. Автор этой статьи предлагает гибридный ProcessThreadPoolExecutor, совмещающий потоки и процессы. Логика несложная - делить входные данные на пакеты для каждого процессора, передавая их в ProcessPoolExecutor, в котором каждый процессор запускает обработку данных пакета с помощью ThreadPoolExecutor. Ускорение значимое, стоит обратить внимание. В статье есть примеры, бенчмарки и готовый код.
🆒1
Как делать хорошие вещи? Следовать стандартам. Даже сообщения комитов получатся более выразительными и структурированными, когда следуешь стандарту. Я использую этот. В PyCharm в версии 2025.1 добавили фичу, сгенерировать сообщение комита. Выбираете файлы и строки для комита, он анализирует изменения и пишет сообщение. Лучшего результата добился, когда в промте указал, чтоб он следовал этому стандарту. Получается настолько хорошо и по делу, что сам перестал писать их.
👍2
Услышал мнение, что прошло время, когда уникальные знания, глубокая техническая экспертиза востребованы. Сейчас ценнее уметь быстро создать и выкатить продукт, используя AI инструменты, чем закапываться в книги в поисках деталей работы языка программирования или учить паттерны проектирования.
Если порефлексировать, был момент, раньше я стремился создавать продукты. Было так, я видел целое представление чего я хочу, в плане продукта и незакапываясь в технические детали работы технологий, по необходимости просто подключал их в проект, например базу данных или веб фреймворк. И даже что-то получалось, Но уходило много времени, а результата не приносило, потому что техничекая часть продукта, это только часть продукта. Пришлось менять вектор от придумывания создания продуктов к реализации себя в профессии разработчика. Поначалу оказалось испытанием. Я мог один реализовать продукт, если чего не знал, мог пойти изучить и довести до рабочего состояния. Но на собеседовании этого не объяснишь, про это и не спрашивают. От тебя требуется, чтоб ты уже знал конкретные технологии, алгоритмы, паттерны. Потому что разработчику дают декомпозированную задачу и ожидают, что ты её сделаешь. Думаю, что сейчас AI инструменты, дают больше шансов людям, которые видят целостное видение продукта и у которых есть силы и желание самостоятельно их реализовывать.
https://youtu.be/Oqe6vucYpDo?si=B8ovi_4UC9_2dnS6&t=6352
👍2
Недавно обнаружил в Pydantic тип SecretStr. При любой печати скрывает секреты, повышая безопасность. Приятная полезная мелочь.
Пример из документации с официального сайта Pydantic.
from pydantic import BaseModel, SecretStr

class User(BaseModel):
username: str
password: SecretStr

user = User(username='scolvin', password='password1')

print(user)
#> username='scolvin' password=SecretStr('**********')
print(user.password.get_secret_value())
#> password1
print((SecretStr('password'), SecretStr('')))
#> (SecretStr('**********'), SecretStr(''))
👍3
В этом году познакомился с идеей конечных автоматов. В кратце, они снижают сложность кода и повышают его читаемость, когда в программе есть множество состояний и переходов между ними. Сегодня нашел статью, на мой взгляд с хорошей реализацией в Python. Про саму идею узнал в этом видео.
🆒1
Нашел решение для автоматического создания контейнера с базой данных для запуска тестов. Больше не придется запускать руками или писать shell скрипты.
Все проще. Подключается через фикстуру, вот мой пример .
Конкретно для Postgres, есть решение для запуска его в памяти, но мне вариант с контейнером ближе, тем более, что testcontainers поддерживаются все популярные базы данных, брокеры и т.д.
ChatGPT может сделать вам перфоманс ревью.
Результат шокирует.
Он подсветил больше моментов, чем по итогам,недавно прошедшего у нас, перфоманс ревью.
Рекомендую!
Взял здесь https://news.1rj.ru/str/cifrabunak/315

Часть ответа прикрепил.
"На основе нашего с тобой взаимодействия опиши мой портрет"

"Прожарь меня на основе наших с тобой обсуждений"

"Выдели мои сильные стороны на основе нашего взаимодействия. Опиши что я могу улучшить в своей профессиональной сфере, где мои слепые зоны и куда обратить мое внимание и развитие"
1
Появился нормальный сервис для оплаты зарубежных сервисов.
За 30$ и пару минут создаёт виртуальную карта MasterCard.
Далее пополняете через сбп.
Внутренний курс сейчас 90.44.
У меня получилось оплатить подписки в JetBrains.
👍1
🎓 Завершил магистратуру, ура!

Учился по направлению "Программная инженерия".

Углубился в теме проектирования ПО. Решал проблему роста сложности кода и деградации архитектуры.

Изучал статические анализаторы, слоистые архитектуры, подходы TDD, DDD, принципы и паттерны проектирования SOLID, IoC, GoF, GRASP, BDUF и вот это всё.

В теме ВКР собрал архитектурные ограничения, которые значительно повышают архитектурные характеристики и которые можно проверить статическим анализатором. После этого формализовал их в стандарты проектирования и разработал 4 статических анализатора.
👍1🤯1
di-linter - Проверяет инъекции зависимостей в коде. Когда нет инъекций зависимостей, становится сильно проще писать автотесты без подмены поведения через mock.patch.

layers-linter - Проверяет протекание зависимостей, по сути проверка чистой архитектуры. В конфиге TOML декларативным языком определяются технические роли, их модули и направление зависимостей к другим ролям. Проще, чем pytest-archon и pytestarch.

domain-types-linter - Следит за тем, чтобы в аннотациях типов использовались только доменно-специфичные типы, а не универсальные (str, int и т.д.).

bounded-contexts-linter - Проверяет изоляцию "ограниченных контекстов" из Domain-Driven Design, если вдруг они у вас в одном монолите и вы хотите, чтобы не было прямых зависимостей между ними. По сути проверяет, чтобы ваш модульный монолит не превратился в просто монолит.

Не все плюсы раскрыл от использования этих линтеров, надо бы вернуться позже и описать про них подробнее.
👍3
🐘 Песочница Postgres в браузере и множество тем для обучения, в них есть полезные для разработчиков.

Я для себя выбрал вертикальное партиционирование, оптимизация запросов, оптимизация для Cache Hit.

Еще мне понравились их советы, с готовыми запросами для оптимизации своей БД.
🆒1
Все там будем🫠
💯2