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

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

Чатик по FastStream: @python_faststream
Download Telegram
Немного Алтайских видов вам из отпуска

Очень рекомендую к посещению! Невероятные виды – горы, степи, мощные реки, кедровые леса, МАРС🤯 Золотая осень – это восторг. Доволен выбором сезона на 200%. А еще это очень мистические места, где живут шаманы, люди верят в духов, а на скалах раскиданы рисунки 4000летней давности. Что-то в этом есть.

Я впервые в этом регионе, поэтому взял обзорный тур – очень много в дороге, зато смотрим все-все-все по чуть-чуть.

Но уже наметил для себя две следующие точки на Алтае, куда поеду целенаправленно:
- альплагерь для подготовки к восхождениям @aktrucamp
- трекинговый тур в южный район

А планы на ближайшие три дня: уехать в лес без связи, колоть дрова, топить печку и мыться в бане🌚 (это тоже часть тура, ага)
2🔥30👍8❤‍🔥52
Как не пилить фичи, которые никому не нужны? Модель Кано в разработке.

Вот и отпуск прошел, пора возвращаться к работе...

Сейчас я работаю над AG2 и пытаюсь make this project great again. В общем, составляем родмап для фич.

И в этом мне сильно помогает модель Кано, которую я изначально подсмотрел у Дорофеева. Максим в своей книге адаптировал 5 категорий "фич" под продуктивность. Но это только подтверждает состоятельность методолгии – ведь ее можно применять к любой области!

Итак, 5 категорий фич (задач) по Дорофееву (Кано):

🤩 1. Ублажители (Delighters)
Это те самые "вау-фичи". Их никто не ждет, но их минимальное наличие вызывает восторг.

- Пример: AI-ассистент в документации, который отвечает на вопросы. Или забавная анимация загрузки. FastStream, который сам генерирует документацию для сервиса.
- Суть: Пользователь не расстроится, если их нет (он их может даже не ожидать), но будет в восторге, если они есть. Хотя, может быть и сильным конкурентным преимуществом.

2. "Должно быть" (Must-be)
Это базовые, ожидаемые вещи. Если они работают хорошо, этого никто не замечает. Но если они сломаны — удовлетворенность пользователя падает до нуля.

- Пример: Кнопка "Сохранить" действительно сохраняет. pip install вашего пакета работает без ошибок. API отдает валидный JSON.
- Суть: Их наличие не радует, но их отсутствие или плохая работа — это катастрофа. Это фундамент, на котором все строится.

🚀 3. "Больше — лучше" (Performance)
Здесь все просто: чем лучше реализация, тем выше удовлетворенность.

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

🤷‍♂️ 4. Нейтральные (Indifferent)
Пользователям на них все равно. Вы можете потратить недели на их реализацию, но никто этого не оценит.

- Пример: 15-й способ кастомизации цвета кнопки в настройках, которым воспользуются 0.01% пользователей.
- Суть: Чистая трата ресурсов. Главная задача - научиться распознавать их до начала разработки.

🤬 5. Реверсивные (Reverse)
Фичи, наличие которых ухудшает пользовательский опыт. Да, и такое бывает.

- Пример: Обязательная регистрация для того, чтобы воспользоваться простейшей утилитой. Слишком сложный и запутанный UI там, где все могло быть просто.
- Суть: Это выстрел себе в ногу. Такие фичи не просто не приносят пользы — они вредят.

Как это применить на практике?

Эта модель — мощный инструмент для приоритизации и принятия решений. Прежде чем бросаться кодить очередную гениальную идею, спросите себя:

- Это "ублажитель", который можно сделать потом, или "должно быть", без которого все развалится?
- Мы сейчас улучшаем метрику "больше — лучше" или пилим "нейтральную" фичу, которая никому не нужна?
- А не создаем ли мы "реверсивную" фичу, которая только усложнит жизнь пользователю?

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

А теперь вопрос в зал: какая самая бесполезная или даже "реверсивная" фича, которую вам приходилось делать?🌚

#программирование #продуктивность #карьера #дорофеев
1👍12🔥71
FastNews | Никита Пастухов
В полку AI IDE прибыло –Amazon выпустили своего конкурента Cursor https://kiro.dev/ UPD: я упустил еще одну IDE'шку https://www.trae.ai/🤯 Теперь у нас есть на выбор Cursor, Windsurf, Kiro, Trae, Codebuddy, Claude Code, Aider. Посмотрим, как рынок поделится…
Оказывается Open Router выкладывает у себя на странице ранкинги - там можно посмотреть, на какие модели через них идет больше всего запросов, что может помочь сориентироваться, какую модель для каких целей юзать

А еще - там есть ранкинг LLM тулов (IDE плагины, CLI утилиты, библиотеки и тд)🤯 А вот это уже прикольнее, т.к. там можно подсмотреть какие-нибудь прикольные тулы, о которых ты не знал.

Например, я увидел, что можно попробовать юзать Kilocode вместо Continue в качестве AI плагина для VSCode🚀 (continue безбожно лагает по моему опыту)
👍5😢1🏆1
Так, я уже третий день сижу разбираюсь с библиотеками, протоколами и прочей LLM и агентным тулингом. И просто накипело😑

Пожалуйста, позовите меня на какой-нибудь митап ныть про то, как все плохо, когда
1) нет стандартов
2) нет библиотек для работы с экспериментальными стандартами
3) то, что есть - написано MLщиками или LLM
4) ничего друг с другом не стыкуется

Я потратил около 6ти часов, чтобы запустить хоть что-то осмысленное поверх A2A, т.к. документации нет, примеры кода в samples устарели, а те, что запустились - так и сыплют ошибками и варнингами в рандомных местах😭

Если вы думаете, что "умные ребята из Google уже написали все библиотеки, мне просто нужно сделать pip install" - ЭТО ТАК НЕ РАБОТАЕТ. По крайней мере для меня💀
Please open Telegram to view this post
VIEW IN TELEGRAM
🤬123
Как работает MCP

MCP - это очень простой протокол, который изменил мир. По сути, MCP - это RPC (Remote Procedure Call) для LLM, где "процедурами" выступают поставщики контекста. Весь обмен построен на стандартизированных JSON-сообщениях. ЭТО ПРОСТО HTTP РУЧКИ С ОПРЕДЕЛЕННЫМ ПОРЯДКОМ ВЫЗОВА

В протокол MCP вовлечены 3 действующих лица:

- MCP Server - HTTP (и не только) приложение, которое поддерживает обращения по протоколу MCP. Например, в IDE включены некоторые MCP-тулы по работе с файловой системой / историей коммитов / etc. Но вы можете поднять любые удаленные MCP серверы и просто указать их для работы.
- MCP Client - приложение, которое хочет работать с MCP сервером. Например, IDE-ассистент, CLI-утилита, или даже ChatGPT (ему тоже можно дать доступ к MCP)
- LLM провайдер - это "голова" вашего MCP клиента. Туда клиент передает вопросы и получает ответы (или команды на запуск MCP)

Основной флоу: Знакомство, Запрос, Ответ

Представим, что вы подключили к Chat GPT MCP сервер для арифметики. И задаете ему вопрос: "Сколько будет 2 + 2 * 2?" (я пропущу пару шагов, чтобы не усложнять)

Шаг 1: Tool Discovery (Знакомство)

Как только вы начинаете диалог, MCP Client (Chat GPT) опрашивает MCP Server'ы, чтобы узнать, что те вообще умеют. MCP Server отвечает сообщением типа ContextProvider.

Это как если бы сервер сказал клиенту: "Привет, я сервер. Вот мой Swagger / OpenAPI. Ты можешь вызывать вот такие эндпоинты".


// Сообщение от MCP Server -> MCP Client
{
"jsonrpc": "2.0",
"result": {
"tools": [{
"name": "calculator_arithmetic",
"title": "Calculator",
"description": "Perform mathematical calculations including basic arithmetic, trigonometric functions, and algebraic operations",
"inputSchema": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "Mathematical expression to evaluate (e.g., '2 + 3 * 4', 'sin(30)', 'sqrt(16)')"
}
},
"required": ["expression"]
}
},
]}
}


Что здесь происходит:

* name: calculator_arithmetic — уникальное имя операции.
* title + description: Человекопонятное описание, чтобы LLM поняла, что эта штука делает и когда ее стоит вызывать.
* inputSchema: А вот и "сигнатуры функций". Это, по сути, JSON Schema, описывающая, какие параметры принимают методы этого сервера.

Теперь LLM Client отправит это сообщение вместе с вашим вопросом прямо в GPT. И GPT уже знает, что он может вызвать операцию calculator_arithmetic, если понадобится что-то посчитать.

Шаг 2: Request (Запрос контекста)

Агент анализирует ваш вопрос и решает, что для ответа ему нужно вызвать операцию calculator_arithmetic с параметром expression равным 2 + 2 * 2.
Агент формирует и отправляет MCP Client сообщение ContextRequest. Client понимает, что LLM хочет вызвать MCP сервер и передает ему это сообщение.


// Сообщение от Агента (LLM) -> MCP Server
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "calculator_arithmetic",
"arguments": { "expression": "2 + 2 * 2" }
}
}


Это и есть тот самый "вызов функции".

Шаг 3: Response (Ответ)

MCP Server получает этот запрос (HTTP запрос), делает свое дело и возвращает результат MCP Client'у. А тот отправляет его обратно LLM.


// Сообщение от MCP Server -> MCP Client
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{
"type": "text",
"text": "6"
}]
}
}


Теперь LLM "мозг" решает – готов ли он дать окончательный ответ или нужно вызвать еще парочку MCP

И вот так MCP Client менеджит команды LLM "мозга" на выполнение разных запросов к MCP серверам. Так мы приделали к "мозгу" "руки". С помощью MCP нейронки могут общаться с внешним миром - спрашивать данные, выполнять действия во внешних системах и тд.

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

#MCP #протоколы #LLM #AI
👍123🙏2👌1
Кстати, чтобы написать свой простейший MCP сервер очень просто:


from fastmcp import FastMCP

mcp = FastMCP("Demo 🚀")

@mcp.tool
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b


FastMCP - это небольшая обертка над библиотекой Starlette, которая позволяет легко создавать MCP серверы - тут вы видите и title, и description, и inputSchema каждого метода.

#MCP #протоколы #LLM #AI
👍9🔥2😁2
Спасибо dependanbot за такую "классную" поддержку uv

https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference#package-ecosystem-

А я все думал, почему у меня локфайл не обновляется?😕

Вот скажите, почему pip - pip, pip-compile - pip, даже poetry - pip, но uv - uv!?🤬
🥴11😭21
FastNews | Никита Пастухов
Моя система эффективности: как я выбрался из выгорания и начал перформить Как и обещал вчера, делюсь своим списком "рецептов", которые помогают мне быть не просто продуктивным, а именно эффективным. Это не волшебная таблетка, а система, которую я выстраивал…
Моя система планирования

В комментах меня спросили, как я веду ежедневник и планирую задачи. Вопрос отличный, потому что я очень ленив. Заставить эту тушу работать - та еще задачка🌚 Поэтому рассказываю про подход, который помогает совмещать фуллтайм, парт-тайм, Open Source, личную жизнь и не сойти с ума.

Сразу скажу: я фанат бумаги и списков. И дело не только в эстетике.

Существует РЕАЛЬНОЕ подтверждение тому, что запись целей от руки напрямую влияет на вероятность их достижения. Dr. Gail Matthews из Доминиканского университета выяснила, что люди, которые записывают свои цели, достигают их на 42% чаще, тех, кто держит их в голове. И в принципе чаще тех, кто их не формулирует вообще. Вот ссылка на резюме исследования

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

Наверное, поэтому моя система на 90% аналоговая. Хотя мне просто нравится писать от руки. Итак, основные принципы:

1️⃣ Вечерний ритуал: Анализ и план на завтра (каждый день)

Каждый вечер я трачу 15-20 минут, чтобы подвести итоги дня в ежедневнике:
- Что сделал? - просто радуемся галочкам
- Что планировал, но не сделал? - выкидываем или переносим на другой день
- Что помешало? - анализируем, почему не получилось закрыть список. Если задача часто переносится - переформулируем
- План на завтра - смотрим, что уже записано в ежедневнике. Докидываем задачи из беклога или головы

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

2️⃣ Воскресная синхронизация: Стратегический обзор недели

Каждое воскресенье я открываю свой календарь и блокнот. Это время для расстановки задач на предстоящую неделю:
- Жесткие встречи - все, что привязано к конкретному времени (митинги, записи к врачу, митапы, доставки), достается из календаря и переносится в ежедневник
- Ритуалы - выделяю время под спорт, изучение чего-то нового, личные проекты. Не "два раза в неделю займусь спортом", а конкретно: "Вторник, 19:00 — зал", "Пятница, 8:00 — пробежка".
- Цели на неделю - достаю из беклога задачи, которые хочу "подвигать" за неделю

3️⃣ Рабочий спринт: Тактический планер-помидорка

Когда я сажусь за работу (утром на основной или вечером за свои проекты), я не смотрю в огромный список дел. Я беру отдельный лист или страницу и выписываю 3-4 задачи на ближайший спринт (1.5-2 часа). Напротив каждой ставлю примерное количество "помидорок" (25-минутных слотов), которые планирую потратить.

Это превращает аморфный список дел в конкретный, выполнимый план на сейчас.

4️⃣ Сверка с курсом (в течение дня)

Каждые 1-2 часа я быстро заглядываю в свой ежедневник или планер-помидорку. Это помогает понять, то ли я вообще делаю. Если я не знаю, что делать дальше — ответ всегда там.

Главный результат всего этого — разгрузка мозга🧠

Самое главное тут - разгрузить мозг от "блин, мне еще надо сделать Х во вторник, не забыть бы". Я всегда знаю, что делать сегодня, завтра и в четверг. Где-то примерно, где-то в конкретные часы. Но ничего помнить и думать не надо. Ну и аналитика очень важна - если ты постоянно делаешь не то, что планируешь, то это повод задуматься, что тебя отвлекает.

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

А как вы планируете свое время? Я слышал что-то про GTD, но сильно не углублялся.

#продуктивность #планирование #саморазвитие
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍17🔥12👏31❤‍🔥1
Шок-контент - Django 6.0 (господи, я последний раз на третьей писал), которая выйдет в декабре, релизит built-in Celery🤯

https://docs.djangoproject.com/en/dev/topics/tasks/

Кажется, Celery убьют не с той стороны, с которой все ждали😂

Ладно, это не совсем Celery, но очень похоже.

А еще они планируют дропать python3.10 и 3.11 - кто-нибудь объясните мне, почему я поддерживаю все живые версии питона в FastStream?
🔥11😁9🤯6
Как зарабатывать на OpenSource

Когда люди удивляются "а почему ты ничего не зарабатываешь на Open Source? - я вспоминаю вот этот пост. Ни одна из 40 автомобильных компаний, использующих curl не донатит curl😢

Но я решил копнуть чуть глубже и собрать статистику по другим крупным и важным инфраструктурным проектам

1️⃣ Django — "У нас есть фонд!"

У Django, казалось бы, все хорошо. Есть Django Software Foundation (DSF), корпоративные члены, прозрачная страница для сбора средств.

- Спонсоры: Есть несколько "Corporate Fellows" (например, Divio, Sentry), которые платят $2-8k в год. Есть и более мелкие спонсоры.

В 2022 году бюджет DSF составил около $250,000. В 2025 году пока что собрали только 40% от запланированного бюджета. Эти деньги идут на оплату одного-двух фуллтайм-мейнтейнеров, организацию конференций и инфраструктуру. Это бюджет проекта, на котором работают Instagram, Spotify и Dropbox.

2️⃣ Pytest - полная прозрачность

Pytest использует Open Collective, где все финансы видны как на ладони.

- Бюджет: собрано за все время - 80000$, годовой бюджет - 12000$, ежемесячных стабильных поступлений - 390$
- Спонсоры: Есть крупные доноры вроде Bloomberg и Microsoft, но большая часть — это небольшие пожертвования от компаний и частных лиц.

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

3️⃣ FastAPI (tiangolo) - человек-оркестр

Здесь спонсорство идет не фонду, а напрямую одному человеку — Себастьяну Рамиресу.

- Спонсоры: На GitHub у него ~140 спонсоров. А еще "золотые спонсоры" получают плашку в документации. Так что Себастьян продает еще и рекламу таким образом. Сумма не раскрывается, но по моим прикидкам - что-то около 8000$ в месяц.

Весь фреймворк, которым пользуются в Uber, Netflix и Microsoft, держится на плечах одного человека. Это колоссальное давление и огромный "bus factor". Видимо, всех все устраивает.

4️⃣ MkDocs-Material (squidfunk) - Open Core бизнес-модель

Основной функционал бесплатен, но есть "Insiders" - платная версия для спонсоров с эксклюзивными фичами.

- Спонсоры: Более 400 спонсоров на GitHub. 15000$ в месяц. Это один из самых успешных примеров индивидуального спонсорства.

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

5️⃣ FastStream

За все время я получил около 8600 рублей пожертвованиями от пользователей. Спасибо вам за пиво!❤️

В итоге мы видим гиганскую пропасть между ценностью Open Source для бизнеса, и финансовой поддержкой, которую он получает взамен. Даже самые успешные проекты балансируют на грани. Их бюджеты - это не зарплаты топ-менеджеров в FAANG. Это зарплата одного-двух инженеров, которые тащат на себе инфраструктуру, от которой зависят триллионы долларов.

Казалось бы, 500$ в месяц от компании - это ничто. Но 10 таких компаний могут обеспечить фуллтайм-работу одного инженера. Представьте, насколько качественным может быть такой OSS продукт?

А что делать? Ничего. Работает же.

#OpenSource #карьера #экономика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍41😢3344😁1🤡1💅1
Пятничный мем, который больше всего понравился мне на этой неделе

Хотя, мне он кажется не совсем точным - сейчас все больше внедряют AI тулы именно для кодревью, а не написания кода

Типа такого - https://www.coderabbit.ai/

Поэтому моя ситуация выглядит обратно этому мему - я прислал PR, а на меня орет куча нейронок и прочих инструментов😭
😁151🤔1💯1🙉1
Суббота - отличный день, чтобы зарелизить что-нибудь! Не пятница же🌚

Например:

FastStream 0.6 (ага, спустя год) - https://github.com/ag2ai/faststream/releases/tag/0.6.0

FastDepends 3.0.0, в котором Pydantic стал опциональным - https://github.com/Lancetnik/FastDepends/releases/tag/3.0.0

taskiq-faststream 0.3 с поддержкой FastStream 0.6 - https://github.com/taskiq-python/taskiq-faststream/releases/tag/0.3.0

dishka-faststream 0.5 - интеграция дишки переехала в отдельный пакет - https://github.com/faststream-community/dishka-faststream/releases/tag/0.5.0

Кстати, часть репозиториев, связанных с FastStream перехали в новую организацию на GitHub - FastStream Community🚀

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

А пока - идем пробовать новые фичи и засыпать меня баг репортами😢
Please open Telegram to view this post
VIEW IN TELEGRAM
2723🔥10👍4👏1
Оказывается, если вы хотите подчеркнуть, что ваш контент "NOT BY AI", то для вас уже сделали специальный trademark - https://notbyai.fyi/

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

Просто удивительно, на чем только люди не делают деньги
😁1091👍1🌭1
Еще один пранк, который вышел из-под контроля😅

Изначально идея была в том, чтобы просто отправлять нотификашки об Issue в телегу и я попросил @smqwe12 сделать GitHub Action. Теперь же этот проект оброс кучей фич и пополз по гитхаб репозиториям

Кстати, один из каналов, куда бот репостит Issues – @opensource_findings_python

Если хотите включиться в Open-source и не знаете, с чего начать - просто подпишитесь. Там можно найти простейшие задачки на +1/-1 PR'ы в cpython, FastStream, dishka, Litestar и другие проекты

А на relator поставьте звездочку на Github😎

https://t.iss.one/rupython_channel/32
20🤣3🤮1💩1
FastNews | Никита Пастухов
Еще один пранк, который вышел из-под контроля😅 Изначально идея была в том, чтобы просто отправлять нотификашки об Issue в телегу и я попросил @smqwe12 сделать GitHub Action. Теперь же этот проект оброс кучей фич и пополз по гитхаб репозиториям Кстати, один…
Сегодня @smqwe12 решил закрыть все долги и наконец-то выпустил продолжение статьи про организацию кода вашего приложения! Теперь про тесты👍

Практическое тестирование приложений

Тут как раз Dishka + FastStream + Litestar, бизнес-логика не на котиках. В общем, самое оно, чтобы взять как пример для написания тестов типового приложения с dishka (и FastStream🔥, ага)! Так что - все бегом читать! Будем холиварить в комментах, т.к. я сам пока пролистал до середины и не со всем согласен😅

Если кто-то пропустил, то:
1️⃣ Первая часть статьи - Пишем универсальный прототип бэкенд-приложения: Litestar, FastStream, dishka
2️⃣ Сам репозиторий на Github с полным кодом

А в комментах предлагаю подкинуть тему для следующей статьи автора, попробуем заставить его работать вместе🌚 Меня заставлять писать статьи бесполезно, я уже почти год торчу TDD
Please open Telegram to view this post
VIEW IN TELEGRAM
24🤮3👍2💩2🗿2
Наконец-то мне больше не придется искать "ту самую фигню с фотки" на маркетплейсе самостоятельно

https://openai.com/index/introducing-chatgpt-atlas/

Да, у нас уже был браузер от Perplexity, но его я так и не потыкал. Да и в OpenAI больше верю, если честно

Осталось разобраться, как заставить эту штуку выглядеть нормально
🤮105😁3🤨2😢1👀1🗿1