TGViewer
Channel Public Channel
Николай Хитров | Блог

Николай Хитров | Блог

@nkhitrov_blog

Личный бложик про IT новости, инструменты из мира python и различные методологии по типу DDD, TDD, OOP vs FP и прочие модные абревиатуры

Tg: @nkhitrov
Github: https://github.com/nkhitrov
Subscribers
3.06K
Photos
200
Videos
10
Links
293
Recent Posts 19 shown
Post #557 1.02K
У меня, как у спикера, есть одна серьезная проблема - я слайды очень часто доделываю прям в последний момент. Бывало так, что завершил презу уже в момент, когда меня следующим объявляли. Знали бы вы как это напрягает организаторов... Но я нашел чела, который пошел еще дальше. Он пишет тезисы прямо на сцене во время выступления☕️

Особенно забавно от индуса слышать фразу
coding is like violence - if does not work use more of it

https://youtu.be/llGgO74uXMI?si=V26Da9pJnrWEyeKT&t=5394
YouTube Core Design Principles for Software Developers by Venkat Subramaniam Please subscribe to our YouTube channel @ https://bit.ly/devoxx-youtube Like us on Facebook @ https://www.facebook.com/devoxxcom Follow us on Twitter @ https://twitter.com/devoxx Writing code is easy. Writing good quality code is an entirely different…
  • 😁 17
  • 🔥 7
  • 👀 3
  • 🤩 1
  • 💊 1
Post #556 1.9K
Пытаюсь добавить в arch-blueprint различные метрики связей. Решил добавить сначала классическую метрику fanin/fanout.

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

Посмотрю потом в сравнении с другими метриками, есть несколько более интересных. А какие бы вы использовали?
  • 🤯 11
  • 😁 1
  • 🎉 1
Post #555 2.61K
Когда начал раскатку нового микросервиса, который вынесли из монолита

Давайте вместе поддержим Колю и пожелаем ему удачи! Ему сейчас очень нужна поддержка (моральная и психологическая) 💪😎👋

p.s. при выполнении деплоя ни один разработчик (пока) не пострадал. не повторяйте на продакшене без присмотра тимлида!
  • 😁 44
  • ❤ 11
  • 👏 3
  • 🌚 3
  • 🔥 1
  • 😍 1
Post #554 2.33K
🔍Тестовое собеседование на Middle Python с разработчиком из Яндекса завтра вечером

Уже завтра вечером в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика.

Как это будет:
📂 Хачатур, старший разработчик в Яндексе, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Хачатур будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Хачатуру

Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.

Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot

Реклама.
О рекламодателе.
  • 👍 7
Post #553 1.52K
Помните, что каждый рекламный пост это один счастливый вечер с пивом для меня🍺
Но вообще открытые собесы это тема. К моему удивлению, канал читает много начинающих разработчиков. Просто для кругозора полезно посмотреть и даже/особенно (!) плохие, неудачные собесы. Мне в свое время это помогло составить методичку для себя по проведению собеседований
  • ❤ 10
Post #552 1.57K
Перфокарты и откуда на самом деле взялись User Story

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

Первые упоминания историй появились в 1997 году, когда Кент Бек принёс их на проект Chrysler C3 в Детройте, а в 1999 описал в книге «Extreme Programming Explained». Перфокарты к тому времени уже лет пятнадцать как вышли из употребления, так что версия красивая, но выдуманная.

Скорее всего, байка выросла из того, что истории и правда писали на картонках. Только не на перфокартах, а на обычных библиотечных карточках размера 3x5 дюйма. Мартин Фаулер, работавший тогда бок о бок с Беком, отдельно уточнял, что они предпочитали именно такие. Перфокарта IBM была 7⅜ x 3¼, то есть картонный прямоугольник примерно того же порядка. Спустя двадцать лет две эти картонки в народной памяти слиплись в одну.

Ну а слово story тут в самом прямом смысле, про рассказывание историй. Бек заметил, что пользователи сами охотно рассказывают про софт всякое вроде «я ввожу индекс, а город и штат подставляются сами, даже кнопку нажимать не надо». Такой рассказ создаёт у слушателя картинку продукта. Тогда почему бы не рассказывать все эти истории еще до того как написан код?

Кстати, привычный формат «As a… I want… so that…» тоже придумал не Бек. Он вообще говорил просто story, слово user добавили уже после первых книг по XP. Шаблон родился в лондонской компании Connextra и был показан в 2001 году на XPDay в докладе «Tuning XP». Ну а популярным его сделал Майк Кон книгой «User Stories Applied» в 2004.

Сегодня словосочетание user story люди частенько ассоциируют со Scrum. Хотя на самом деле сториков там нет и никогда не было. Вместо этого использовался термин Product Backlog Item. Но несмотря на то, что сторики пришли из XP, они приклеились к скраму просто потому что популярно было и то, и другое. Хотя возможно в этом еще Jira постарались своим интерфейсом...

А какие айтишные байки слышали вы? Напишите в комментах
  • ❤ 8
  • ✍ 3
  • 🔥 3
  • 👍 2
Post #550 2.06K
Зачем может быть нужна типизация в тестах?

В последние годы python проекты сплош и рядом обмазаны тайпингом. Мы очень много внимания уделяем основному коду, но при этом в тестах мы продолжаем разбирать словари и строки.
По-моему опыту и опыту коллег, с кем общаюсь, в средне статистическом бэкенде на python тесты на API выглядят примерно вот так:
async def test_api(http_client: TestClient) -> None:
payment: PaymentDB = ...
result = await http_client.get(f"/api/payments/{payment.id}")
assert result.status_code == 200
assert result.json() == {"id": payment.id, "status": payment.status}

У нас есть какой-то http клиент, мы им делаем запросы. Урлы собираем прямо в теле теста, подставляем параметры сущностей, которые запрашиваем.

В конце смотрим статус коды, парсим json и либо прямо в теле теста разбираем поля словаря, либо передаем этот словарь в функции-ассерты.

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

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

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

Все это терпимо, да, но лакшери жизни иногда тоже хочется. И вот в рамках эээксперимента я написал надстройку в одном из пет проектов для blacksheep, которая дает типизацию тестовому клиенту


Вот так выглядит объявление метода, который мы будем тестировать:
class PaymentsController(ApiController):
_get_payment: GetPaymentQuery

@router.get("/{payment_id}")
async def get_payment(self, payment_id: int, user: UserIdentity) -> PaymentResponse:
payment = await self._get_payment.execute(...)
return PaymentResponse(id=payment.id, status=payment.status)

А вот так выглядит тест с типизированным клиентом:
class TestGetPayment(CasesTest[PaymentsController]):
async def test_api(self) -> None:
payment: PaymentDB = ...
# mypy понимает, что в result находится PaymentResponse
result = await self.controller.get_payment(payment_id=payment.id, user=self.DI)
# а тут он уже найдет ошибку, потому что id с типом int
# error: Non-overlapping equality check
# (left operand type: "int", right operand type: "Literal['12']")
assert result.id == "12"

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

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

И приятный бонус, мы не гоняем объекты в json туда-обратно. Когда тестов переваливает за 2к это тоже играет роль на скорости и потреблении цпу. Особенно если ранеры у вас не такие мощные как личная машинка...

Однако тут не обошлось без минусов. Из очевидных - если мы поменяем через алиасы имена полей в ответе, поменяем path, method, то такой тест не упадет. Мы сломаем контракт, но не узнаем об этом.

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

Напишите в комментах, каким способом можно закрыть эту проблему с непойманным изменением контракта?
И как вам в целом такой подход с "типизированным" клиентом?
  • 👍 20
  • 👎 10
  • 🤔 3
  • ❤ 1
Post #548 2.19K
Любители event driven есть? Согласны, узнали?🌚
  • 🤣 33
  • ❤ 2
  • 😢 2
  • 🙈 2
  • 😁 1
  • 💯 1
Post #547 3.08K
Не имей один канал, имей еще два с другим ритмом жизни... (с)

Если вы еще по какой-то причине не отписались от этого канала, скорее всего вам понравятся еще вот эти несколько, которые мы собрали вот в эту папку.

По сути это каналы про python, open source, разработку AI штук для AI штук и все что около этого. Можно сказать, сообщество любителей питонов и пива🍺

Так что в случае с этой папкой за контент я могу ручаться, каждого автора знаю и сам читаю (ну ладно, почти всех)

И да, скоро будут нормальные посты, как только я завершу распил монолита, а после выйду из победного запоя. За последние несколько месяцев в блокнотике набралось много контента, осталось дело за малым - оформить его...
  • 🔥 14
  • ❤ 3
  • 😁 1
Post #546 2.99K
Николай Хитров | Блог Решил сгонять на ИТ пикник, в кой то веке получилось по датам. Нашел идеальное место, как раз для моих старческих косточек🌚
Зацените АППАРАТ. Еще 15 копеек, аж плакать хочется... У нас уже по идее выросло поколение, которое и не видело их...
  • ❤ 11
  • 💯 4
  • 🔥 2
  • 👍 1
Post #545 2.75K
Решил сгонять на ИТ пикник, в кой то веке получилось по датам. Нашел идеальное место, как раз для моих старческих косточек🌚
  • 😁 21
  • ❤‍🔥 4
  • 🌚 3
  • ❤ 2
  • 👍 1
Post #544 2.7K
HardFest от создателей CodeFest

17 октября в Екатеринбурге команда CodeFest делает HardFest. Как понятно из названия, ребята хотят сделать более узконаправленную тематику, без разброса по параллельным трекам на разные темы. И очень хотят собрать сильных инженеров в одном месте

Сама конференция не такая большая как CodeFest, до 800 человек. В программе хотят видеть доклады про архитектуру, распределённые системы, эксплуатацию, AI/ML-инфраструктуру, железо... Но не в формате «смотрите, какую технологию мы попробовали» или «мы сделали как написано в документации», а с разбором реальных граблей и рассказом о том, как именно подходили к решениям, между чем выбирали, чем жертвовали и стоило ли оно вообще того по итогу.

Собстно, давайте поможем с поиском спикеров! Я знаю, у нас тут есть много сильных инженеров, которым точно есть что рассказать. И давайте без вот этих отговорок в стиле "да мне как-то нечего, ниче интересного". У нас уже немало примеров таких персонажей, теперь вон ходят выступают везде😎

Так что обязательно подаем заявки — CFP открыт до 17 августа. А еще сама конференция пройдет в таком замечательном городе как Екатеринбург. Плюс один повод принять участие👍
  • 👀 4
  • 👍 1
  • 🔥 1
Post #542 2.73K
Работа работой, но не забывайте иногда выходить на улицу и трогать траву руками
  • 🔥 64
  • ❤ 13
  • 👍 8
  • 🥰 2
Post #541 3.3K
Иногда мне хочется плюнуть в лицо тому, кто придумал k8s. Катишь релиз, он половину подов выкатывает и затем делает rollback. Почему? Да потому что. Как это узнать? Ну иди там в events ковыряйся или логах каждого пода или еще как-нибудь, мне п***й. Сам найдешь.

Очень. Удобный. Интерфейс. Все. Для. Людей.☕️
  • 💯 21
  • 🗿 9
  • ❤ 7
  • 😁 4
  • 🥴 3
  • 👍 2
  • 🤝 2
  • 💊 1
Post #540 3.89K
Николай Хитров | Блог В комментариях нормально накидали разных вариантов, приходите завтра в 20:00 по мск, будем разбирать https://www.youtube.com/live/yDeIQ85wlKk?si=BDy8kW6aqZ_v5xZ7
Мы начали, залетайте!
  • ❤ 3
  • 👍 2
Post #539 3.97K
Николай Хитров | Блог Соцопрос: кто ваш любимый DI фреймворк в python? На днях обсуждали с Пашей @s3rius_san библиотеки и затронули тему DI. Он когда-то написал свою версию Depends из fastapi специально для своего фреймворка taskiq. Чтобы привычный уже многим интерфейс, но с "нормальной"…
В комментариях нормально накидали разных вариантов, приходите завтра в 20:00 по мск, будем разбирать

https://www.youtube.com/live/yDeIQ85wlKk?si=BDy8kW6aqZ_v5xZ7
YouTube Разбираемся с DI в python О чем будет стрим? - Посмотрим код и архитектуру DI библиотек - Поспорим за идеологию вокруг инъекции зависимостей, контейнеры или не контейнеры - Вспомним как было хорошо в питоне до появления DI и почему оно все так поменялось - Выпьем пива со всеми желающими…
  • 👍 16
  • ❤ 6
Post #538 3.16K
Pycon 2026

Чисто из названий я пока приметил для себя несколько докладов, с остальными разберемся на месте

Первое, что зацепило, это доклад про новый фреймворк django modern rest (привет Никита). Я пока не видел production использования, надеюсь, спикеры расскажут про такой опыт. Все еще не люблю джангу, но люблю то, что делает Никита😁

Интересно посмотреть про мониторинг сборщика мусора. В прошлых годах были доклады с прикольными кейсами об этом, может появилось что-то новенькое😏

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

Еще увидел Сережу в спикерах, но он не написал тезисы🙄
Осуждаю, но надо хотя бы морально поддержать тогда

Я на конфе тоже буду, в этот раз просто как участник. Ставьте напоминашку в календарь и обязательно приходите. Послушаем доклады, попьем пива, покричим что django говно😎

https://pycon.ru/
pycon.ru PyCon Russia июль 2027, Москва — самая крупная конференция Python в России Самая большая и душевная конференция для python-разработчиков
  • ❤ 9
  • 👍 7
Post #537 2.56K
Соцопрос: кто ваш любимый DI фреймворк в python?

На днях обсуждали с Пашей @s3rius_san библиотеки и затронули тему DI. Он когда-то написал свою версию Depends из fastapi специально для своего фреймворка taskiq. Чтобы привычный уже многим интерфейс, но с "нормальной" реализацией

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

Собстно у меня к вам всем предложение. Напишите в комментах, ваш самый любимый DI (или его отсутствие). Мы почитаем исходники и документацию каждого из них, а затем поделимся никому ненужными мнениями на стриме на нашем новом канале Вялые Питоны
  • 👍 8
  • 🔥 1
Older posts →

About this channel

How can I read @nkhitrov_blog without a Telegram account?
TGViewer shows the public web preview Telegram publishes for Николай Хитров | Блог: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does Николай Хитров | Блог have?
Николай Хитров | Блог (@nkhitrov_blog) has 3.06K subscribers on Telegram, refreshed roughly every 30 minutes.
Does Николай Хитров | Блог know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →