FastNews | Никита Пастухов
785 subscribers
63 photos
1 video
119 links
Привет! Я - Никита Пастухов: автор FastStream, опенсорсер, python (и не только) разработчик

Здесь я пишу обо всем, что мне интересно:
- создание продуктов
- личная эффективность
- программирование
- Open Source

Чатик по FastStream: @python_faststream
Download Telegram
Самое интересное: я тут написал какую-то муть про организацию кода библиотек или оно применимо в реальных приложениях? Ну, конечно же применимо! Например, подобным образом вы можете прятать *не очень красивые* Repository из Litestar за своими "красивыми" протоколами и реализациями


# author_repo_protocol.py
from typing import Protocol

class GetAuthorRepo(Protocol):
async def get(self, author_id: int, /) -> Author:
...

class DeleteAuthorRepo(Protocol):
async def delete(self, author_id: int, /) -> None:
...

class AuthorRepo(GetAuthorRepo, DeleteAuthorRepo):
pass

# author_repo_impl.py
from litestar.contrib.sqlalchemy.repository import SQLAlchemyAsyncRepository

class AuthorRepository(SQLAlchemyAsyncRepository[Author]):
model_type = Author


Если все ссылаются на ваш "правильный" протокол, а реализация подмешивается не из litestar модуля, а вашего, собственного!!!, то никто и не узнает, что вы ничего и не писали, а взяли грязь из Litestar и выдали ее за свою. И никто даже не заметит, когда вы ее замените на нормальную реализацию

#программирование #litestar
Изначально я планировал публиковать тут информацию только по FastStream, но кажется, мне есть что сказать и в отрыве от него. Поэтому я создал отдельный канал чисто для FastStream - @faststreamrelease

Там будет техническая информация о релизах. И, может быть, какие-то отдельные заметки о планах на будущее, касающиеся только FS. Что-то интересное будет репоститься и сюда, но основная техническая информация - там

Здесь же будут мои любимые набросы говн на вентилятор, кросспостинг статей с разных ресурсов, анонсы конференций и всякое разное.
👍4
Наконец-то я выполнил свое обещание перед Андреем и выпустил на Habr статью про FastAPI, DI и dishka!

Она лежала в загашнике полгода, добить ее до выпуска силы нашлись только сейчас.

Чтож, надеюсь, это немного поможет в популяризации dishka и культуры разработки в FastAPI сообществе в целом.

https://habr.com/ru/articles/867040/

#программирование #dishka #fastapi
🔥12
Тем временем холивары внутри mypy, которые я невольно спровоцировал, продолжаются. И даже вышли на новый круг эскалации - https://github.com/python/mypy/pull/18270#issuecomment-2551709475

За этим интересно наблюдать и крайне интересно, к какому решению в итоге придут мейнтейнеры😅 Жду с нетерпением, чтобы тоже чуть-чуть покопаться в mypy и поправить другие места на основе решения этого PR

Стоит признать, что у меня действительно не хватило бы экспертизы на правки так глубоко в логике работы анализатора. Хорошо, что за решение проблемы взялись мейнтейнеры и не дали мне завязнуть в этом по уши😁
👍7
Какая жалость, меня не взяли на работу, на которую я даже не подавал заявку😢

Интересно, это Сбер так рекламирует свою HR платформу или просто баги на прод завезли?
😁13🥴3
Кто-нибудь понимает, как мержат проекты в этот ваш awesome-python?

У меня просто мозг взрывается от того, что туда до сих пор не добавил uv (который буквально уже везде используется, даже в самом cpython) - https://github.com/vinta/awesome-python/pull/2605

К слову, FastStream туда тоже так и не добавили😢
💯4
Эффект свидетеля в человеческой психике очень силен.
И часто он даже работает. Например, я периодически спотыкаюсь о косяк нового CI UI в Github (нет кнопки "Approve and run" для запуска CI) и вот, наконец, я себя пересилил и пошел репортить багулину.

Однако, ее уже зарепортили до меня - https://github.com/orgs/community/discussions/143787#discussioncomment-11679662 🎉

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

Как мейнтейнер OSS проектов я призываю всех-всех-всех быть чуть более осознанными и репортить встреченные вами баги сразу же. В общем, не надо как я, надо заводить Issue в ту же секунду😅 Так мы сможем сделать ПО лучше вместе😊

#продуктивность
3
Наконец досмотрел интервью с Ильей Ильиных от Диджитализируй - https://www.youtube.com/watch?v=8NdaPHWSRk4&feature=youtu.be

Прям зарядился, хочу теперь многое сам потыкать😅

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

Во-вторых я был очень удивлен, когда узнал, что действительно существует программист, кто может работать по технике Pomodoro. У меня нет проблем с сотоянием потока, но процесс вкатывания у меня занимает минут 20, а потом я уже запряженный могу херачить несколько часов на одном дыхании. Но "окна" в 20-40 минут для меня - это ад, я банально ничего в них не успеваю (не только код, мне в принципе тяжело впихивать дела в такие слоты, я оперирую большими промежутками времени). Но сейчас я увидел человека, который открыто говорит "я могу спокойно работать по 20-30 минут" - значит, и я смогу?

Особенно понравился лайвхак с "оставить 1 тест красным, чтобы знать, откуда начать в след раз" - попробую взять на вооружение. Без TDD до такой очевидной штуки тяжело додуматься.

В-третьих Илья замотивировал меня хотя бы поехать в шоу-рум и потыкать сплит-клавиатуры. Мне понравилась идея, т.к. человек озвучил все те же проблемы "вкатывания в слепую печать", с которыми регулярно сталкиваюсь и я - необходимость использовать разные руки для шифта и прочих хоткеев. Возможно, сплит-клава меня действительно переучит. А еще история про туннельный синдром меня не на шутку напугала: я тоже начинаю замечать дискомфорт в запястьях после долгой работы за клавиатурой макбука. Если сплит-клава решит и эту проблему - я буду вообще счастлив. В общем, есть идея для подарка себе на НГ🌚 Может быть меня даже ждет третья итерация переезда на vim как полноценную IDE...

В целом, мне вообще понравилась идея про "экзоскелет для написания кода"😂

А вообще - Илья оч крутой! Мне понравился ход его мыслей. Рад, что узнал о таком человеке - и, конечно, подписался на канал @kydavoiti

Надеюсь, пересечемся на каком-нибудь мероприятии лично. Хотелось бы и вживую поразгонять все эти темы😅 А интервью - крайне рекомендую посмотреть!

#TDD #split #продуктивность
🔥4
Ну все, астрологи прогнозируют удвоенное количество духоты на код-ревью PR'ов☺️
7👏4🤯3😁2👍1
В преддверии Нового года я решил оглянуться и посмотреть, как мы провели 2024 - и мы провели его с пользой!

Специально для вас я подготовил небольшой отчет - FastStream 2024 в цифрах!

Примерно так выросли "сухие цифры"

Звезды на Github: 1300 -> 3300
Ежедневные установки: 600 -> 9000
Used by публичные репозитории: 80 -> 390
Контрибуторы: 20 -> 70 (стабильных 0 -> 10)
Уникальные пользователи на сайт документации: 60 -> 800 в день
Коммиты: 331 коммит в main (пару дней пропустили)
Закрытых Issues: 191
Релизы: 0.3.11 -> 0.5.33 (47 релизов - почти каждую неделю)

А в этих релизах нас ждало очень-очень много вкусных вещей, без которых FastStream уже невозможно представить
- Поддержка Confluent
- Поддержка OpenTelemetry
- Поддержка Prometheus
- Поддержка ASGI
- А еще: broker.request синтаксис, динамические subscruber'ы, новые мидлвари, улучшенные роутеры, Response класс, ping'и и healthcheck'и и много-много других важных и не очень изменений

Помимо этого я подготовил 2 доклада на конференции (которые еще почему-то не все посмотрели):
- Мой доклад с PiterPy: https://youtu.be/33bugga930w
- Мой доклад с Podlodka: https://www.youtube.com/watch?v=_P7lgV5bKVw&t=1980s

А еще мой коллега Tvrtko рассказал о FastStream на PyconSK
- https://www.youtube.com/watch?v=mcUEwkvcnKw&t=9s&ab_channel=PyConSK

И проект засветился даже на EuroPython
- https://www.youtube.com/watch?v=5UL71U3NcCg&t=1s&ab_channel=EuroPythonConference

А еще я запустил довольно провокационную статью на Habr, которая вызвала волну дискуссий🌚

Чтож, год получился и правда плодотворный. Давайте теперь пофантазируем, что нас ждет в следующем году?

- Больше брокеров! Однозначно ждем SQS и MQTT!
- Отказ от поголовного использования pydantic и предоставлении альтернативы в виде msgspec или своих сериализаторов
- Выпуск стабильной 1.0.0 версии!
- Построение сообщества контрибуторов (и расширение списка мейнтейнеров), которое может автономно развивать, дорабатывать проект и даже онбордить других участников!
- Больше обучающего материала по FastStream в виде референсных проектов, сложных кейсов в документации, статей и мб даже видео
- Больше активностей в рамках международного сообщества

На самом деле планов гораздо-гораздо больше, но давайте наметим хотя бы план-минимум?😅

Хочется сказать спасибо всему сообществу (какого черта вас так много в чате и на моем канале?😂) за неиссякаемую поддержку, что я чувствовал весь год. Именно вы делаете этот проект таким замечательным и драйвите меня заниматься им каждый день!
13🔥7🎄2🥰1
FastNews | Никита Пастухов
Ну все, астрологи прогнозируют удвоенное количество духоты на код-ревью PR'ов☺️
TDD откладывается...
Просто посмотрите, какую красоту закинул мне тайный Санта прямиком из Британии!
Кто-нибудь вообще шарит за самое базированное фентези?😅
🔥10👍4
Типизация в Python настолько простая, что я до сих пор открываю для себя все новые и новые типы. Например, сегодня я узнал про Collection. Раньше я всегда юзал Iterable/Sequence/[Set | List | Tuple], а теперь в инструментарии появилось еще и промежуточное звено - Collection

Collection - это тот же Sequence, только без __reversed__ и __getitem__. Т.е. если вам нужен тип, который поддерживает итерацию, проверку на in + len - то вот он:


from collections.abc import Collection

def func(data: Collection[int]) -> bool:
for i in data:
...

len(data)

return 1 in data


Раньше я для этих целей использовал Sequence, но это было не совсем верно, т.к. Sequence более строгий тип и накладывает больше ограничений на входные значения, чем реально требуется функции. Так что у меня теперь новый любимый тип!

А вообще - всем крайне рекомендую сверяться вот с этой табличкой при расстановке аннотаций. Во всяком случае, пока не запомните ее наизусть🌚

#программирование
🔥8👍3
Хе-хе-хе, очередная холиварная статья на Хабре moment

https://habr.com/p/872988/

Оказывается, SSR на React - это хорошо, потому что "мы больше не пишем спагетти, да и вообще это настоящий фуллстак"

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

– мб мы экономим ресурсы сервера, вынося логику отрисовки на клиент?
– мб мы можем шарить серверную логику между разными клиентами (мобилка/web/whatever)?
– мб мы можем разделить экспертизу, ускорив разработку за счет узкой специализации?

Да не, бред. Люди просто говнокодили на PHP, а вот принесли SPA - и сразу стала чистая архитектура. Теперь настало время нести эту чистую архитектуру обратно на бекенды через NextJS, так и знайте!

Спасибо добрым фронтендерам, хоть кто-то научит пыхеров писать код🌚
🤣10👍31
Если кто-то хотел потыкать FastStream и у него никак не доходили руки - сейчас у вас есть еще один повод сделать это)

Мы добавили AI ассистент прямо в документацию - https://t.iss.one/faststreamrelease/11

Если вам лень искать что-то по доке - можно спрашивать его, он дает ответ с примером кода и ссылки на конкретные разделы доки, откуда это взято.

Сейчас фича работает в тестовом режиме, поэтому мы (команда airt) и создатели ассистента (Gurubase) будем очень благодарны за любой фидбек от использования

https://faststream.airt.ai/latest/
🔥7👍2🤩1
4424 passed, 16 skipped, 134 deselected, 67 warnings in 635.13s (0:10:35)


А я думал, 4к тестов - это еще мало, а 10 минут на прогон - слишком много. Хорошо, что дядя Кент Бек меня успокоил😅

А какое максимальное количество тестов вы видели на проектах и сколько занимал самый долгий прогон? Расскажите свой кейс в комментах - очень интересно, кто какого дерьмеца хапнул

#TDD
🤯3
FastNews | Никита Пастухов
Наконец досмотрел интервью с Ильей Ильиных от Диджитализируй - https://www.youtube.com/watch?v=8NdaPHWSRk4&feature=youtu.be Прям зарядился, хочу теперь многое сам потыкать😅 Во-первых, я никогда не был сильным поклонником TDD (но тесты писать очень люблю).…
По заветам @kydavoiti уже вторую неделю практикую TDD (результатом доволен, постараюсь написать об этом позже), а еще прикупил себе стальное яйцо в комплект🌚

В целом, Pomadoro действительно отлично работает! Особенно дома, где много отвлекающих факторов и постоянно хочется проверить чатик / телефон...

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

#продуктивность
🔥6
Очередной отличный сервис от Яндекса. Я не могу ни привязать карту, ни пополнить баланс, ни создать новый платежный аккаунт...

Запросы идут бесконечно на какую-то их службу - и отваливаются по CORS. А я счастливо наблюдаю бесконечный лоадер 💯

Access to resource at 'https://trust.yandex.ru/web/otlp/spans/collect' from origin 'https://card-form.diehard.yandex.net' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header has a value 'https://billing.yandex.cloud' that is not equal to the supplied origin.


Спасибо, что заботитесь о моих деньгах и не даете их потратить на всякую чушь в облаке👍
😁7😢2🐳1