home.social

#fastapi — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #fastapi, aggregated by home.social.

  1. 3/3

    This is a supply chain story dressed as a CVE. The ecosystem was built too fast. Security assumed it would catch up. It hasn't.

    Digital sovereignty without perimeter defence is just security theatre. If you're running MCP servers and you skip the proxy because 'it adds complexity,' you've already lost.

    haunted.lighthouse.co.im/artic

    #BadHost #CVE202648710 #Starlette #FastAPI #MCP #SupplyChain #CyberSecurity #DigitalSovereignty #ShadowIT #Architecture

  2. We shipped a GenAI card generator for the EO Philadelphia chapter in days, not months. FastAPI + LlamaIndex + GPT-4o-mini + Gemini 3 Pro, turning member photos into branded New Year cards. Proof that small-scope AI tools can land real community impact. go.ombulabs.com/jh9 #GenAI #LlamaIndex #FastAPI #Entrepreneurship

  3. Heartbeat-мониторинг cron-job'ов: dead-man-switch на FastAPI

    Обычный uptime-мониторинг проверяет, отвечает ли сервис на запросы. Cron-job ничего не отвечает — он запускается раз в N часов, делает работу и молча завершается. Если cron перестал запускаться (uptime daemon упал, машина в read-only mode после fsck, disk full) — обычный мониторинг этого не видит. Решение известно с 70-х — паттерн dead-man-switch (он же heartbeat). Я недавно делал heartbeat-эндпоинты для Valpero. Здесь разберу серверную часть на FastAPI + клиентский bash-pattern, и edge-кейсы которые их ломают. В конце готовый код, который можно адаптировать под свой стек.

    habr.com/ru/articles/1035624/

    #cron #heartbeat #deadmanswitch #monitoring #alerting #bash #FastAPI #Celery #devops #linux

  4. Чтобы не выглядело как пет-проект»: как я в одиночку сделал премиальный интерфейс кино-сервиса (с кодом)

    В прошлой статье я рассказывал, каково в одиночку тащить фуллстек-проект, который разросся до кино-соцсети. В комментариях несколько раз спросили про конкретику — «покажи код», «как сделал, что не выглядит как очередной пет-проект». Логично: дизайн — это то, по чему встречают. Поэтому держите вторую часть, уже техническую и с кодом. Без маркетинга, только решения, которые реально сделали интерфейс «дорогим», и пара бэкенд-хитростей в довесок. Сразу дисклеймер: я не дизайнер. Всё нажито методом «смотрю на референсы (Letterboxd, Mubi, KinoPoisk HD) и пытаюсь повторить ощущение». Оказалось, премиальность — это не про дорогие шрифты, а про несколько повторяющихся приёмов. Разберём пять. 1. Акцентный цвет из постера фильма — фича, которая дороже всего «продаёт» Самое заметное решение. Раньше у меня на всех страницах был один статичный фиолетовый акцент — и это выглядело дёшево и одинаково. Идея: пусть каждая страница фильма подсвечивается доминантным цветом его постера. Заходишь на мрачный нуар — интерфейс уходит в холодный синий, открываешь комедию — тёплый янтарь. Страница будто «сделана под этот фильм». Делается без всяких ML, прямо в браузере через canvas: рисуем постер в крошечный буфер 32×48, усредняем цвета (выкидывая чёрные рамки и серость), переводим в HSL и принудительно «насыщаем», потому что постеры часто тусклые. Результат кладём в CSS-переменную — и весь интерфейс подхватывает её.

    habr.com/ru/articles/1037818/

    #Nextjs #React #CSS #glassmorphism #canvas #Web_Push #VAPID #FastAPI #петпроект #vibemuvik

  5. Чтобы не выглядело как пет-проект»: как я в одиночку сделал премиальный интерфейс кино-сервиса (с кодом)

    В прошлой статье я рассказывал, каково в одиночку тащить фуллстек-проект, который разросся до кино-соцсети. В комментариях несколько раз спросили про конкретику — «покажи код», «как сделал, что не выглядит как очередной пет-проект». Логично: дизайн — это то, по чему встречают. Поэтому держите вторую часть, уже техническую и с кодом. Без маркетинга, только решения, которые реально сделали интерфейс «дорогим», и пара бэкенд-хитростей в довесок. Сразу дисклеймер: я не дизайнер. Всё нажито методом «смотрю на референсы (Letterboxd, Mubi, KinoPoisk HD) и пытаюсь повторить ощущение». Оказалось, премиальность — это не про дорогие шрифты, а про несколько повторяющихся приёмов. Разберём пять. 1. Акцентный цвет из постера фильма — фича, которая дороже всего «продаёт» Самое заметное решение. Раньше у меня на всех страницах был один статичный фиолетовый акцент — и это выглядело дёшево и одинаково. Идея: пусть каждая страница фильма подсвечивается доминантным цветом его постера. Заходишь на мрачный нуар — интерфейс уходит в холодный синий, открываешь комедию — тёплый янтарь. Страница будто «сделана под этот фильм». Делается без всяких ML, прямо в браузере через canvas: рисуем постер в крошечный буфер 32×48, усредняем цвета (выкидывая чёрные рамки и серость), переводим в HSL и принудительно «насыщаем», потому что постеры часто тусклые. Результат кладём в CSS-переменную — и весь интерфейс подхватывает её.

    habr.com/ru/articles/1037818/

    #Nextjs #React #CSS #glassmorphism #canvas #Web_Push #VAPID #FastAPI #петпроект #vibemuvik

  6. Чтобы не выглядело как пет-проект»: как я в одиночку сделал премиальный интерфейс кино-сервиса (с кодом)

    В прошлой статье я рассказывал, каково в одиночку тащить фуллстек-проект, который разросся до кино-соцсети. В комментариях несколько раз спросили про конкретику — «покажи код», «как сделал, что не выглядит как очередной пет-проект». Логично: дизайн — это то, по чему встречают. Поэтому держите вторую часть, уже техническую и с кодом. Без маркетинга, только решения, которые реально сделали интерфейс «дорогим», и пара бэкенд-хитростей в довесок. Сразу дисклеймер: я не дизайнер. Всё нажито методом «смотрю на референсы (Letterboxd, Mubi, KinoPoisk HD) и пытаюсь повторить ощущение». Оказалось, премиальность — это не про дорогие шрифты, а про несколько повторяющихся приёмов. Разберём пять. 1. Акцентный цвет из постера фильма — фича, которая дороже всего «продаёт» Самое заметное решение. Раньше у меня на всех страницах был один статичный фиолетовый акцент — и это выглядело дёшево и одинаково. Идея: пусть каждая страница фильма подсвечивается доминантным цветом его постера. Заходишь на мрачный нуар — интерфейс уходит в холодный синий, открываешь комедию — тёплый янтарь. Страница будто «сделана под этот фильм». Делается без всяких ML, прямо в браузере через canvas: рисуем постер в крошечный буфер 32×48, усредняем цвета (выкидывая чёрные рамки и серость), переводим в HSL и принудительно «насыщаем», потому что постеры часто тусклые. Результат кладём в CSS-переменную — и весь интерфейс подхватывает её.

    habr.com/ru/articles/1037818/

    #Nextjs #React #CSS #glassmorphism #canvas #Web_Push #VAPID #FastAPI #петпроект #vibemuvik

  7. Чтобы не выглядело как пет-проект»: как я в одиночку сделал премиальный интерфейс кино-сервиса (с кодом)

    В прошлой статье я рассказывал, каково в одиночку тащить фуллстек-проект, который разросся до кино-соцсети. В комментариях несколько раз спросили про конкретику — «покажи код», «как сделал, что не выглядит как очередной пет-проект». Логично: дизайн — это то, по чему встречают. Поэтому держите вторую часть, уже техническую и с кодом. Без маркетинга, только решения, которые реально сделали интерфейс «дорогим», и пара бэкенд-хитростей в довесок. Сразу дисклеймер: я не дизайнер. Всё нажито методом «смотрю на референсы (Letterboxd, Mubi, KinoPoisk HD) и пытаюсь повторить ощущение». Оказалось, премиальность — это не про дорогие шрифты, а про несколько повторяющихся приёмов. Разберём пять. 1. Акцентный цвет из постера фильма — фича, которая дороже всего «продаёт» Самое заметное решение. Раньше у меня на всех страницах был один статичный фиолетовый акцент — и это выглядело дёшево и одинаково. Идея: пусть каждая страница фильма подсвечивается доминантным цветом его постера. Заходишь на мрачный нуар — интерфейс уходит в холодный синий, открываешь комедию — тёплый янтарь. Страница будто «сделана под этот фильм». Делается без всяких ML, прямо в браузере через canvas: рисуем постер в крошечный буфер 32×48, усредняем цвета (выкидывая чёрные рамки и серость), переводим в HSL и принудительно «насыщаем», потому что постеры часто тусклые. Результат кладём в CSS-переменную — и весь интерфейс подхватывает её.

    habr.com/ru/articles/1037818/

    #Nextjs #React #CSS #glassmorphism #canvas #Web_Push #VAPID #FastAPI #петпроект #vibemuvik

  8. Один за всех: как я в одиночку тащу фуллстек-проект, который незаметно разросся до соцсети

    Начиналось как «сделаю себе сайтик про кино на пару выходных». Закончилось каталогом на десятки тысяч карточек, лентой, профилями, рейтингами, совместным просмотром и кучей фоновых задач. И всё это тащит один человек — я сам себе фронт, бэк, девопс, дизайнер и поддержка. Делюсь сжато: стек и грабли, без воды. Стек выбирал не по хайпу, а по принципу «доеду и не утону в обслуживании»: FastAPI (быстро, асинхронно, автодоки), Next.js на React (SSR из коробки — критично для SEO), PostgreSQL (SQLite кончился на первых же конкурентных записях), Redis для кэша и рейт-лимитов. Nginx + systemd на обычном VPS. Никакого Kubernetes — для одного это способ обслуживать инфраструктуру вместо разработки. Грабли, на которых посидел: • Фоновое состояние в памяти + несколько воркеров = рассинхрон. Пользователи попадают в разные процессы, состояние не шарится. Лечение: либо общее хранилище, либо такие фичи в один воркер. • Права на файлы после сборки. Собрал под одним пользователем, сервис под другим — EACCES и белый экран. Теперь chown в чек-листе деплоя. • node_modules не переезжает Windows → Linux. Только чистая установка на целевой ОС. • dev и prod базы — разные миры. Один запуск скрипта «не туда» — и долго гадаешь, почему данные не меняются (а они меняются, в локальном SQLite, который никому не нужен). • Не запускай два тяжёлых процесса разом. Фоновая генерация + пересборка фронта = OOM-killer молча прибил процесс. Полчаса искал причину. • Кэш сборки трогать нельзя — «почистил на всякий» и сломал инкрементальную регенерацию страниц на сутки. Но самое тяжёлое — не код. Некому передать, если выгорел. Некому сделать ревью и сказать «ты идиот». Легко месяцами катиться не туда. Качели мотивации: сегодня горы свернёшь, завтра «зачем я это начал». Научился просто переживать спады и не принимать в них решений вроде «всё переписать». Что понял за это время: маленькие шаги бьют героизм; скучные бэкапы и чек-листы важнее красивой архитектуры; готовое и работающее лучше идеального ненаписанного. Один человек реально тащит удивительно много — если не воюет сам с собой за идеальность. Не ради пиара, а как живой пруф того, о чём пишу: всё описанное работает прямо сейчас — vibemuvik.ru Можно зайти и потыкать вживую. А вы тащите что-то в одиночку? На каком стеке, как боретесь с выгоранием и бесконечным бэклогом?

    habr.com/ru/articles/1037554/

    #петпроект #фуллстек #солоразработка #FastAPI #Nextjs #PostgreSQL #выгорание

  9. Один за всех: как я в одиночку тащу фуллстек-проект, который незаметно разросся до соцсети

    Начиналось как «сделаю себе сайтик про кино на пару выходных». Закончилось каталогом на десятки тысяч карточек, лентой, профилями, рейтингами, совместным просмотром и кучей фоновых задач. И всё это тащит один человек — я сам себе фронт, бэк, девопс, дизайнер и поддержка. Делюсь сжато: стек и грабли, без воды. Стек выбирал не по хайпу, а по принципу «доеду и не утону в обслуживании»: FastAPI (быстро, асинхронно, автодоки), Next.js на React (SSR из коробки — критично для SEO), PostgreSQL (SQLite кончился на первых же конкурентных записях), Redis для кэша и рейт-лимитов. Nginx + systemd на обычном VPS. Никакого Kubernetes — для одного это способ обслуживать инфраструктуру вместо разработки. Грабли, на которых посидел: • Фоновое состояние в памяти + несколько воркеров = рассинхрон. Пользователи попадают в разные процессы, состояние не шарится. Лечение: либо общее хранилище, либо такие фичи в один воркер. • Права на файлы после сборки. Собрал под одним пользователем, сервис под другим — EACCES и белый экран. Теперь chown в чек-листе деплоя. • node_modules не переезжает Windows → Linux. Только чистая установка на целевой ОС. • dev и prod базы — разные миры. Один запуск скрипта «не туда» — и долго гадаешь, почему данные не меняются (а они меняются, в локальном SQLite, который никому не нужен). • Не запускай два тяжёлых процесса разом. Фоновая генерация + пересборка фронта = OOM-killer молча прибил процесс. Полчаса искал причину. • Кэш сборки трогать нельзя — «почистил на всякий» и сломал инкрементальную регенерацию страниц на сутки. Но самое тяжёлое — не код. Некому передать, если выгорел. Некому сделать ревью и сказать «ты идиот». Легко месяцами катиться не туда. Качели мотивации: сегодня горы свернёшь, завтра «зачем я это начал». Научился просто переживать спады и не принимать в них решений вроде «всё переписать». Что понял за это время: маленькие шаги бьют героизм; скучные бэкапы и чек-листы важнее красивой архитектуры; готовое и работающее лучше идеального ненаписанного. Один человек реально тащит удивительно много — если не воюет сам с собой за идеальность. Не ради пиара, а как живой пруф того, о чём пишу: всё описанное работает прямо сейчас — vibemuvik.ru Можно зайти и потыкать вживую. А вы тащите что-то в одиночку? На каком стеке, как боретесь с выгоранием и бесконечным бэклогом?

    habr.com/ru/articles/1037554/

    #петпроект #фуллстек #солоразработка #FastAPI #Nextjs #PostgreSQL #выгорание

  10. Один за всех: как я в одиночку тащу фуллстек-проект, который незаметно разросся до соцсети

    Начиналось как «сделаю себе сайтик про кино на пару выходных». Закончилось каталогом на десятки тысяч карточек, лентой, профилями, рейтингами, совместным просмотром и кучей фоновых задач. И всё это тащит один человек — я сам себе фронт, бэк, девопс, дизайнер и поддержка. Делюсь сжато: стек и грабли, без воды. Стек выбирал не по хайпу, а по принципу «доеду и не утону в обслуживании»: FastAPI (быстро, асинхронно, автодоки), Next.js на React (SSR из коробки — критично для SEO), PostgreSQL (SQLite кончился на первых же конкурентных записях), Redis для кэша и рейт-лимитов. Nginx + systemd на обычном VPS. Никакого Kubernetes — для одного это способ обслуживать инфраструктуру вместо разработки. Грабли, на которых посидел: • Фоновое состояние в памяти + несколько воркеров = рассинхрон. Пользователи попадают в разные процессы, состояние не шарится. Лечение: либо общее хранилище, либо такие фичи в один воркер. • Права на файлы после сборки. Собрал под одним пользователем, сервис под другим — EACCES и белый экран. Теперь chown в чек-листе деплоя. • node_modules не переезжает Windows → Linux. Только чистая установка на целевой ОС. • dev и prod базы — разные миры. Один запуск скрипта «не туда» — и долго гадаешь, почему данные не меняются (а они меняются, в локальном SQLite, который никому не нужен). • Не запускай два тяжёлых процесса разом. Фоновая генерация + пересборка фронта = OOM-killer молча прибил процесс. Полчаса искал причину. • Кэш сборки трогать нельзя — «почистил на всякий» и сломал инкрементальную регенерацию страниц на сутки. Но самое тяжёлое — не код. Некому передать, если выгорел. Некому сделать ревью и сказать «ты идиот». Легко месяцами катиться не туда. Качели мотивации: сегодня горы свернёшь, завтра «зачем я это начал». Научился просто переживать спады и не принимать в них решений вроде «всё переписать». Что понял за это время: маленькие шаги бьют героизм; скучные бэкапы и чек-листы важнее красивой архитектуры; готовое и работающее лучше идеального ненаписанного. Один человек реально тащит удивительно много — если не воюет сам с собой за идеальность. Не ради пиара, а как живой пруф того, о чём пишу: всё описанное работает прямо сейчас — vibemuvik.ru Можно зайти и потыкать вживую. А вы тащите что-то в одиночку? На каком стеке, как боретесь с выгоранием и бесконечным бэклогом?

    habr.com/ru/articles/1037554/

    #петпроект #фуллстек #солоразработка #FastAPI #Nextjs #PostgreSQL #выгорание

  11. Один за всех: как я в одиночку тащу фуллстек-проект, который незаметно разросся до соцсети

    Начиналось как «сделаю себе сайтик про кино на пару выходных». Закончилось каталогом на десятки тысяч карточек, лентой, профилями, рейтингами, совместным просмотром и кучей фоновых задач. И всё это тащит один человек — я сам себе фронт, бэк, девопс, дизайнер и поддержка. Делюсь сжато: стек и грабли, без воды. Стек выбирал не по хайпу, а по принципу «доеду и не утону в обслуживании»: FastAPI (быстро, асинхронно, автодоки), Next.js на React (SSR из коробки — критично для SEO), PostgreSQL (SQLite кончился на первых же конкурентных записях), Redis для кэша и рейт-лимитов. Nginx + systemd на обычном VPS. Никакого Kubernetes — для одного это способ обслуживать инфраструктуру вместо разработки. Грабли, на которых посидел: • Фоновое состояние в памяти + несколько воркеров = рассинхрон. Пользователи попадают в разные процессы, состояние не шарится. Лечение: либо общее хранилище, либо такие фичи в один воркер. • Права на файлы после сборки. Собрал под одним пользователем, сервис под другим — EACCES и белый экран. Теперь chown в чек-листе деплоя. • node_modules не переезжает Windows → Linux. Только чистая установка на целевой ОС. • dev и prod базы — разные миры. Один запуск скрипта «не туда» — и долго гадаешь, почему данные не меняются (а они меняются, в локальном SQLite, который никому не нужен). • Не запускай два тяжёлых процесса разом. Фоновая генерация + пересборка фронта = OOM-killer молча прибил процесс. Полчаса искал причину. • Кэш сборки трогать нельзя — «почистил на всякий» и сломал инкрементальную регенерацию страниц на сутки. Но самое тяжёлое — не код. Некому передать, если выгорел. Некому сделать ревью и сказать «ты идиот». Легко месяцами катиться не туда. Качели мотивации: сегодня горы свернёшь, завтра «зачем я это начал». Научился просто переживать спады и не принимать в них решений вроде «всё переписать». Что понял за это время: маленькие шаги бьют героизм; скучные бэкапы и чек-листы важнее красивой архитектуры; готовое и работающее лучше идеального ненаписанного. Один человек реально тащит удивительно много — если не воюет сам с собой за идеальность. Не ради пиара, а как живой пруф того, о чём пишу: всё описанное работает прямо сейчас — vibemuvik.ru Можно зайти и потыкать вживую. А вы тащите что-то в одиночку? На каком стеке, как боретесь с выгоранием и бесконечным бэклогом?

    habr.com/ru/articles/1037554/

    #петпроект #фуллстек #солоразработка #FastAPI #Nextjs #PostgreSQL #выгорание

  12. It all started from a curiosity .. and from a new feature.

    In a realtime #SpeechToSpeech project on #AWS, can I use #polly bidirectional streaming with #python ?

    🔮 Spoiler: well, when boto3 doesn't have it (yet), you write it 🏗️

    In the article I describe each choice and the reasons, eager to ship something new 😄

    alessandra.bilardi.net/diary/a

    #DiaryOfALazyDeveloper #docker #fastapi

  13. It all started from a curiosity .. and from a new feature.

    In a realtime #SpeechToSpeech project on #AWS, can I use #polly bidirectional streaming with #python ?

    🔮 Spoiler: well, when boto3 doesn't have it (yet), you write it 🏗️

    In the article I describe each choice and the reasons, eager to ship something new 😄

    alessandra.bilardi.net/diary/a

    #DiaryOfALazyDeveloper #docker #fastapi

  14. It all started from a curiosity .. and from a new feature.

    In a realtime #SpeechToSpeech project on #AWS, can I use #polly bidirectional streaming with #python ?

    🔮 Spoiler: well, when boto3 doesn't have it (yet), you write it 🏗️

    In the article I describe each choice and the reasons, eager to ship something new 😄

    alessandra.bilardi.net/diary/a

    #DiaryOfALazyDeveloper #docker #fastapi

  15. It all started from a curiosity .. and from a new feature.

    In a realtime #SpeechToSpeech project on #AWS, can I use #polly bidirectional streaming with #python ?

    🔮 Spoiler: well, when boto3 doesn't have it (yet), you write it 🏗️

    In the article I describe each choice and the reasons, eager to ship something new 😄

    alessandra.bilardi.net/diary/a

    #DiaryOfALazyDeveloper #docker #fastapi

  16. It all started from a curiosity .. and from a new feature.

    In a realtime #SpeechToSpeech project on #AWS, can I use #polly bidirectional streaming with #python ?

    🔮 Spoiler: well, when boto3 doesn't have it (yet), you write it 🏗️

    In the article I describe each choice and the reasons, eager to ship something new 😄

    alessandra.bilardi.net/diary/a

    #DiaryOfALazyDeveloper #docker #fastapi

  17. Настраиваем CI/CD в GitHub для Python-проекта с нуля

    Настройка CI/CD часто кажется новичкам чем-то сложным и доступным только DevOps-инженерам. На самом деле автоматизировать рутину Python-проекта можно всего за полчаса. В этой статье мы по шагам разберем, как с нуля настроить GitHub Actions для простого FastAPI-приложения: от автоматического запуска тестов и быстрого линтера Ruff до сборки Docker-образа и публикации его в Docker Hub.

    habr.com/ru/articles/1037002/

    #python #github_actions #docker #pytest #автоматизация #fastapi #туториал

  18. Настраиваем CI/CD в GitHub для Python-проекта с нуля

    Настройка CI/CD часто кажется новичкам чем-то сложным и доступным только DevOps-инженерам. На самом деле автоматизировать рутину Python-проекта можно всего за полчаса. В этой статье мы по шагам разберем, как с нуля настроить GitHub Actions для простого FastAPI-приложения: от автоматического запуска тестов и быстрого линтера Ruff до сборки Docker-образа и публикации его в Docker Hub.

    habr.com/ru/articles/1037002/

    #python #github_actions #docker #pytest #автоматизация #fastapi #туториал

  19. Настраиваем CI/CD в GitHub для Python-проекта с нуля

    Настройка CI/CD часто кажется новичкам чем-то сложным и доступным только DevOps-инженерам. На самом деле автоматизировать рутину Python-проекта можно всего за полчаса. В этой статье мы по шагам разберем, как с нуля настроить GitHub Actions для простого FastAPI-приложения: от автоматического запуска тестов и быстрого линтера Ruff до сборки Docker-образа и публикации его в Docker Hub.

    habr.com/ru/articles/1037002/

    #python #github_actions #docker #pytest #автоматизация #fastapi #туториал

  20. Настраиваем CI/CD в GitHub для Python-проекта с нуля

    Настройка CI/CD часто кажется новичкам чем-то сложным и доступным только DevOps-инженерам. На самом деле автоматизировать рутину Python-проекта можно всего за полчаса. В этой статье мы по шагам разберем, как с нуля настроить GitHub Actions для простого FastAPI-приложения: от автоматического запуска тестов и быстрого линтера Ruff до сборки Docker-образа и публикации его в Docker Hub.

    habr.com/ru/articles/1037002/

    #python #github_actions #docker #pytest #автоматизация #fastapi #туториал

  21. Как мы вывели в админку ошибки yt-dlp, которые жили только в логах. Bridge на 200 строк и борьба с alert-fatigue

    История о том, как сделать видимыми ошибки yt-dlp, которые молча умирали в логах воркера. Bridge на 200 строк, классификатор content vs infra, борьба с alert-fatigue. Читать

    habr.com/ru/articles/1036904/

    #ytdlp #fastapi #observability #alertfatigue #мониторинг #python #devops

  22. Как мы вывели в админку ошибки yt-dlp, которые жили только в логах. Bridge на 200 строк и борьба с alert-fatigue

    История о том, как сделать видимыми ошибки yt-dlp, которые молча умирали в логах воркера. Bridge на 200 строк, классификатор content vs infra, борьба с alert-fatigue. Читать

    habr.com/ru/articles/1036904/

    #ytdlp #fastapi #observability #alertfatigue #мониторинг #python #devops

  23. Как мы вывели в админку ошибки yt-dlp, которые жили только в логах. Bridge на 200 строк и борьба с alert-fatigue

    История о том, как сделать видимыми ошибки yt-dlp, которые молча умирали в логах воркера. Bridge на 200 строк, классификатор content vs infra, борьба с alert-fatigue. Читать

    habr.com/ru/articles/1036904/

    #ytdlp #fastapi #observability #alertfatigue #мониторинг #python #devops

  24. Как мы вывели в админку ошибки yt-dlp, которые жили только в логах. Bridge на 200 строк и борьба с alert-fatigue

    История о том, как сделать видимыми ошибки yt-dlp, которые молча умирали в логах воркера. Bridge на 200 строк, классификатор content vs infra, борьба с alert-fatigue. Читать

    habr.com/ru/articles/1036904/

    #ytdlp #fastapi #observability #alertfatigue #мониторинг #python #devops

  25. Как мы за 54 дня собрали ИИ-хаб в мессенджере MAX. Часть 1 — обзор цикла

    54 дня назад у нас была идея — единый чат‑бот, через который можно работать с разными моделями ИИ. Сегодня в проде: бот в мессенджере MAX, 5903 пользователя , ~300 DAU, премиум‑подписка через ЮКассу с автоплатежами, 10+ моделей ИИ под одним интерфейсом, 6 модальностей ввода. Платежи запустили 5 мая 2026.

    habr.com/ru/articles/1036428/

    #n8n #ИИбот #ЮКасса #recurring #54ФЗ #FastAPI #LLM #MAX #RAG #agentic

  26. Как мы за 54 дня собрали ИИ-хаб в мессенджере MAX. Часть 1 — обзор цикла

    54 дня назад у нас была идея — единый чат‑бот, через который можно работать с разными моделями ИИ. Сегодня в проде: бот в мессенджере MAX, 5903 пользователя , ~300 DAU, премиум‑подписка через ЮКассу с автоплатежами, 10+ моделей ИИ под одним интерфейсом, 6 модальностей ввода. Платежи запустили 5 мая 2026.

    habr.com/ru/articles/1036428/

    #n8n #ИИбот #ЮКасса #recurring #54ФЗ #FastAPI #LLM #MAX #RAG #agentic

  27. Как мы за 54 дня собрали ИИ-хаб в мессенджере MAX. Часть 1 — обзор цикла

    54 дня назад у нас была идея — единый чат‑бот, через который можно работать с разными моделями ИИ. Сегодня в проде: бот в мессенджере MAX, 5903 пользователя , ~300 DAU, премиум‑подписка через ЮКассу с автоплатежами, 10+ моделей ИИ под одним интерфейсом, 6 модальностей ввода. Платежи запустили 5 мая 2026.

    habr.com/ru/articles/1036428/

    #n8n #ИИбот #ЮКасса #recurring #54ФЗ #FastAPI #LLM #MAX #RAG #agentic

  28. Как мы за 54 дня собрали ИИ-хаб в мессенджере MAX. Часть 1 — обзор цикла

    54 дня назад у нас была идея — единый чат‑бот, через который можно работать с разными моделями ИИ. Сегодня в проде: бот в мессенджере MAX, 5903 пользователя , ~300 DAU, премиум‑подписка через ЮКассу с автоплатежами, 10+ моделей ИИ под одним интерфейсом, 6 модальностей ввода. Платежи запустили 5 мая 2026.

    habr.com/ru/articles/1036428/

    #n8n #ИИбот #ЮКасса #recurring #54ФЗ #FastAPI #LLM #MAX #RAG #agentic

  29. Как тестировать внешние API в Python: от DI-мока до настоящего HTTP-сервера

    Почти каждый сервис, который мы сегодня пишем, ходит куда-то наружу — платёжный шлюз, биллинг, чужой публичный API. И каждый раз, когда садимся писать тесты на этот код, упираемся в один и тот же вопрос: как протестировать клиента, не привлекая внимания санитаров выходя в реальный мир? Эта статья про то, как выбирать инструмент под эту задачу. Не абстрактно — на одном маленьком, но гордом настоящем сервисе catfact-demo-service , в tests/ которого рядом лежат пять способов протестировать одну и ту же интеграцию. К концу мы их сравним и аргументированно выберем тот, который оставили бы в production-проекте.

    habr.com/ru/articles/1034864/

    #python #pytest #тестирование #aiohttp #mock #интеграционные_тесты #http #dishka #fastapi #asyncly

  30. Как тестировать внешние API в Python: от DI-мока до настоящего HTTP-сервера

    Почти каждый сервис, который мы сегодня пишем, ходит куда-то наружу — платёжный шлюз, биллинг, чужой публичный API. И каждый раз, когда садимся писать тесты на этот код, упираемся в один и тот же вопрос: как протестировать клиента, не привлекая внимания санитаров выходя в реальный мир? Эта статья про то, как выбирать инструмент под эту задачу. Не абстрактно — на одном маленьком, но гордом настоящем сервисе catfact-demo-service , в tests/ которого рядом лежат пять способов протестировать одну и ту же интеграцию. К концу мы их сравним и аргументированно выберем тот, который оставили бы в production-проекте.

    habr.com/ru/articles/1034864/

    #python #pytest #тестирование #aiohttp #mock #интеграционные_тесты #http #dishka #fastapi #asyncly

  31. Как тестировать внешние API в Python: от DI-мока до настоящего HTTP-сервера

    Почти каждый сервис, который мы сегодня пишем, ходит куда-то наружу — платёжный шлюз, биллинг, чужой публичный API. И каждый раз, когда садимся писать тесты на этот код, упираемся в один и тот же вопрос: как протестировать клиента, не привлекая внимания санитаров выходя в реальный мир? Эта статья про то, как выбирать инструмент под эту задачу. Не абстрактно — на одном маленьком, но гордом настоящем сервисе catfact-demo-service , в tests/ которого рядом лежат пять способов протестировать одну и ту же интеграцию. К концу мы их сравним и аргументированно выберем тот, который оставили бы в production-проекте.

    habr.com/ru/articles/1034864/

    #python #pytest #тестирование #aiohttp #mock #интеграционные_тесты #http #dishka #fastapi #asyncly

  32. Как тестировать внешние API в Python: от DI-мока до настоящего HTTP-сервера

    Почти каждый сервис, который мы сегодня пишем, ходит куда-то наружу — платёжный шлюз, биллинг, чужой публичный API. И каждый раз, когда садимся писать тесты на этот код, упираемся в один и тот же вопрос: как протестировать клиента, не привлекая внимания санитаров выходя в реальный мир? Эта статья про то, как выбирать инструмент под эту задачу. Не абстрактно — на одном маленьком, но гордом настоящем сервисе catfact-demo-service , в tests/ которого рядом лежат пять способов протестировать одну и ту же интеграцию. К концу мы их сравним и аргументированно выберем тот, который оставили бы в production-проекте.

    habr.com/ru/articles/1034864/

    #python #pytest #тестирование #aiohttp #mock #интеграционные_тесты #http #dishka #fastapi #asyncly

  33. FlakyDetector 2.0: Как я превратил сырое исследование в продакшен-инструмент с AST, ML и красивым дашбордом…

    Представь: пятница, вечер. Ты запускаешь CI для последнего пулл-реквеста, идёшь наливать кофе, возвращаешься… а билд упал. Один тест. Ты перезапускаешь проходит. «Флаки», — вздыхаешь ты и ставишь лейбл flaky . На следующей неделе история повторяется. Потом ещё раз. Мы привыкли, что нестабильные тесты — это неизбежное зло . Их ловят повторными прогонами, а если повезёт вырезают. Но знаешь, что реально бесит? В 80% случаев корень проблемы можно найти, просто посмотрев на код теста. Я написал инструмент, который это делает автоматически. Без логов CI, без истории прогонов — только AST и машинное обучение. Назвал его FlakyDetector . Первая версия была исследовательским прототипом (про него у меня выходила статья на Хабре ). А теперь — это полноценный продукт: CLI, веб-дашборд, CI-интеграция и даже React-фронтенд. И да, он open source. Давай разберёмся, как это устроено .

    habr.com/ru/articles/1035782/

    #python #ast #catboost #flaky_tests #тестирование #machine_learning #test_smells #fastapi #static_analysis

  34. FlakyDetector 2.0: Как я превратил сырое исследование в продакшен-инструмент с AST, ML и красивым дашбордом…

    Представь: пятница, вечер. Ты запускаешь CI для последнего пулл-реквеста, идёшь наливать кофе, возвращаешься… а билд упал. Один тест. Ты перезапускаешь проходит. «Флаки», — вздыхаешь ты и ставишь лейбл flaky . На следующей неделе история повторяется. Потом ещё раз. Мы привыкли, что нестабильные тесты — это неизбежное зло . Их ловят повторными прогонами, а если повезёт вырезают. Но знаешь, что реально бесит? В 80% случаев корень проблемы можно найти, просто посмотрев на код теста. Я написал инструмент, который это делает автоматически. Без логов CI, без истории прогонов — только AST и машинное обучение. Назвал его FlakyDetector . Первая версия была исследовательским прототипом (про него у меня выходила статья на Хабре ). А теперь — это полноценный продукт: CLI, веб-дашборд, CI-интеграция и даже React-фронтенд. И да, он open source. Давай разберёмся, как это устроено .

    habr.com/ru/articles/1035782/

    #python #ast #catboost #flaky_tests #тестирование #machine_learning #test_smells #fastapi #static_analysis

  35. FlakyDetector 2.0: Как я превратил сырое исследование в продакшен-инструмент с AST, ML и красивым дашбордом…

    Представь: пятница, вечер. Ты запускаешь CI для последнего пулл-реквеста, идёшь наливать кофе, возвращаешься… а билд упал. Один тест. Ты перезапускаешь проходит. «Флаки», — вздыхаешь ты и ставишь лейбл flaky . На следующей неделе история повторяется. Потом ещё раз. Мы привыкли, что нестабильные тесты — это неизбежное зло . Их ловят повторными прогонами, а если повезёт вырезают. Но знаешь, что реально бесит? В 80% случаев корень проблемы можно найти, просто посмотрев на код теста. Я написал инструмент, который это делает автоматически. Без логов CI, без истории прогонов — только AST и машинное обучение. Назвал его FlakyDetector . Первая версия была исследовательским прототипом (про него у меня выходила статья на Хабре ). А теперь — это полноценный продукт: CLI, веб-дашборд, CI-интеграция и даже React-фронтенд. И да, он open source. Давай разберёмся, как это устроено .

    habr.com/ru/articles/1035782/

    #python #ast #catboost #flaky_tests #тестирование #machine_learning #test_smells #fastapi #static_analysis

  36. FlakyDetector 2.0: Как я превратил сырое исследование в продакшен-инструмент с AST, ML и красивым дашбордом…

    Представь: пятница, вечер. Ты запускаешь CI для последнего пулл-реквеста, идёшь наливать кофе, возвращаешься… а билд упал. Один тест. Ты перезапускаешь проходит. «Флаки», — вздыхаешь ты и ставишь лейбл flaky . На следующей неделе история повторяется. Потом ещё раз. Мы привыкли, что нестабильные тесты — это неизбежное зло . Их ловят повторными прогонами, а если повезёт вырезают. Но знаешь, что реально бесит? В 80% случаев корень проблемы можно найти, просто посмотрев на код теста. Я написал инструмент, который это делает автоматически. Без логов CI, без истории прогонов — только AST и машинное обучение. Назвал его FlakyDetector . Первая версия была исследовательским прототипом (про него у меня выходила статья на Хабре ). А теперь — это полноценный продукт: CLI, веб-дашборд, CI-интеграция и даже React-фронтенд. И да, он open source. Давай разберёмся, как это устроено .

    habr.com/ru/articles/1035782/

    #python #ast #catboost #flaky_tests #тестирование #machine_learning #test_smells #fastapi #static_analysis

  37. Как я сделал “Авиасейлз для логистики”: агрегатор заявок из 16+ источников

    В логистике проблема часто не в том, что нет данных. Проблема в том, что данные разбросаны по разным местам. Одни заявки лежат во внутренней системе, другие — в закрытых кабинетах грузоотправителей, третьи — на тендерных площадках, четвёртые приходят через Excel-выгрузки, пятые доступны только через веб-интерфейс. Где-то есть нормальный HTTP-обмен, где-то данные спрятаны за фронтендом, где-то приходится читать DOM-таблицу, а где-то сначала кажется, что всё просто, пока не выясняется, что цена приходит в копейках, маршрут состоит из трёх точек, а тип кузова записан как “тент 20т, верхняя загрузка”. Для менеджера всё это выглядит не как единый рынок грузов, а как набор вкладок в браузере. Открыть один кабинет. Потом второй. Потом третий. Проверить направление. Сравнить цену. Посмотреть дату. Понять, где реф, где тент, где просто “20 тонн”. Не забыть про аукцион, у которого скоро истекает время. Потом всё равно перенести результат в таблицу или открыть внутреннюю панель. В какой-то момент стало понятно: нам нужен не ещё один парсер, а единая витрина. Так появился внутренний агрегатор заявок — условный “Авиасейлз для логистики”.

    habr.com/ru/articles/1035316/

    #логистика #автоматизация #парсинг_данных #агрегатор_заявок #ETL #PostgreSQL #Python #Google_Sheets #FastAPI

  38. Как я сделал “Авиасейлз для логистики”: агрегатор заявок из 16+ источников

    В логистике проблема часто не в том, что нет данных. Проблема в том, что данные разбросаны по разным местам. Одни заявки лежат во внутренней системе, другие — в закрытых кабинетах грузоотправителей, третьи — на тендерных площадках, четвёртые приходят через Excel-выгрузки, пятые доступны только через веб-интерфейс. Где-то есть нормальный HTTP-обмен, где-то данные спрятаны за фронтендом, где-то приходится читать DOM-таблицу, а где-то сначала кажется, что всё просто, пока не выясняется, что цена приходит в копейках, маршрут состоит из трёх точек, а тип кузова записан как “тент 20т, верхняя загрузка”. Для менеджера всё это выглядит не как единый рынок грузов, а как набор вкладок в браузере. Открыть один кабинет. Потом второй. Потом третий. Проверить направление. Сравнить цену. Посмотреть дату. Понять, где реф, где тент, где просто “20 тонн”. Не забыть про аукцион, у которого скоро истекает время. Потом всё равно перенести результат в таблицу или открыть внутреннюю панель. В какой-то момент стало понятно: нам нужен не ещё один парсер, а единая витрина. Так появился внутренний агрегатор заявок — условный “Авиасейлз для логистики”.

    habr.com/ru/articles/1035316/

    #логистика #автоматизация #парсинг_данных #агрегатор_заявок #ETL #PostgreSQL #Python #Google_Sheets #FastAPI

  39. Как я сделал “Авиасейлз для логистики”: агрегатор заявок из 16+ источников

    В логистике проблема часто не в том, что нет данных. Проблема в том, что данные разбросаны по разным местам. Одни заявки лежат во внутренней системе, другие — в закрытых кабинетах грузоотправителей, третьи — на тендерных площадках, четвёртые приходят через Excel-выгрузки, пятые доступны только через веб-интерфейс. Где-то есть нормальный HTTP-обмен, где-то данные спрятаны за фронтендом, где-то приходится читать DOM-таблицу, а где-то сначала кажется, что всё просто, пока не выясняется, что цена приходит в копейках, маршрут состоит из трёх точек, а тип кузова записан как “тент 20т, верхняя загрузка”. Для менеджера всё это выглядит не как единый рынок грузов, а как набор вкладок в браузере. Открыть один кабинет. Потом второй. Потом третий. Проверить направление. Сравнить цену. Посмотреть дату. Понять, где реф, где тент, где просто “20 тонн”. Не забыть про аукцион, у которого скоро истекает время. Потом всё равно перенести результат в таблицу или открыть внутреннюю панель. В какой-то момент стало понятно: нам нужен не ещё один парсер, а единая витрина. Так появился внутренний агрегатор заявок — условный “Авиасейлз для логистики”.

    habr.com/ru/articles/1035316/

    #логистика #автоматизация #парсинг_данных #агрегатор_заявок #ETL #PostgreSQL #Python #Google_Sheets #FastAPI

  40. Как я сделал “Авиасейлз для логистики”: агрегатор заявок из 16+ источников

    В логистике проблема часто не в том, что нет данных. Проблема в том, что данные разбросаны по разным местам. Одни заявки лежат во внутренней системе, другие — в закрытых кабинетах грузоотправителей, третьи — на тендерных площадках, четвёртые приходят через Excel-выгрузки, пятые доступны только через веб-интерфейс. Где-то есть нормальный HTTP-обмен, где-то данные спрятаны за фронтендом, где-то приходится читать DOM-таблицу, а где-то сначала кажется, что всё просто, пока не выясняется, что цена приходит в копейках, маршрут состоит из трёх точек, а тип кузова записан как “тент 20т, верхняя загрузка”. Для менеджера всё это выглядит не как единый рынок грузов, а как набор вкладок в браузере. Открыть один кабинет. Потом второй. Потом третий. Проверить направление. Сравнить цену. Посмотреть дату. Понять, где реф, где тент, где просто “20 тонн”. Не забыть про аукцион, у которого скоро истекает время. Потом всё равно перенести результат в таблицу или открыть внутреннюю панель. В какой-то момент стало понятно: нам нужен не ещё один парсер, а единая витрина. Так появился внутренний агрегатор заявок — условный “Авиасейлз для логистики”.

    habr.com/ru/articles/1035316/

    #логистика #автоматизация #парсинг_данных #агрегатор_заявок #ETL #PostgreSQL #Python #Google_Sheets #FastAPI

  41. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  42. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  43. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  44. Production-стек для мессенджера на 10к пользователей: FastAPI, SQLite в проде и почему монолит

    Это восьмая статья из моей серии про инженерные решения в ONEMIX. До этого было про клиентскую часть мессенджера: кэш сообщений , E2E , WebRTC звонки , Electron , outbox-паттерн . Параллельно про AI-агента Лиру и мнение про вайб-кодинг . Сегодня про серверную сторону. Backend ONEMIX — это один файл main.py на 19603 строки , 379 эндпоинтов, FastAPI + SQLite, держит мессенджер с регистрацией через SMS, звонками через LiveKit, E2E через Double Ratchet, push-нотификациями на iOS и Android. Этот файл я пишу больше года. За это время он эволюционировал из прототипа на 800 строк в production монолит. В статье разберу почему стек именно такой, какие решения оказались правильными, какие я бы поменял если бы начинал сейчас, и где у этого подхода границы применимости. Сразу важная оговорка. У меня не было требования держать 100к одновременных пользователей или 10к RPS. Это бэкенд под мобильное приложение с трафиком который для соло-разработчика разумно поддерживать одному. Если у вас задачи другого масштаба, мой опыт может не подойти.

    habr.com/ru/articles/1034814/

    #fastapi #sqlite #python #монолит #websocket #мессенджер #бэкенд #продакшн #авторизация #миграции

  45. Как мы довели поиск товаров по изображению до 98% совпадений: FastAPI, DINOv2, Qdrant и поиск на фото полки

    Поиск товара по изображению кажется простой задачей — ровно до момента, пока не сталкиваешься с реальным каталогом . В теории все выглядит аккуратно: берем фото, считаем embedding, ищем ближайшие вектора, возвращаем совпадения. На практике начинаются нюансы: у товара несколько изображений, ракурсы отличаются, фон мешает, каталог обновляется постоянно, а бизнес ждет не исследовательский прототип, а сервис, который можно поставить в production. С вами старший программист в Fix Price Константин Репин. И в этом материале разберу, как мы строили сервис визуального поиска товаров, какие инженерные решения реально повлияли на качество и почему текущий результат в 98% совпадений получился не из-за одной удачной модели, а из-за правильно собранного пайплайна.

    habr.com/ru/companies/fix_pric

    #поиск_товаров #FastAPI #dinov2 #qdrant #визуальные_эмбеддинги #векторный_поиск

  46. Как мы довели поиск товаров по изображению до 98% совпадений: FastAPI, DINOv2, Qdrant и поиск на фото полки

    Поиск товара по изображению кажется простой задачей — ровно до момента, пока не сталкиваешься с реальным каталогом . В теории все выглядит аккуратно: берем фото, считаем embedding, ищем ближайшие вектора, возвращаем совпадения. На практике начинаются нюансы: у товара несколько изображений, ракурсы отличаются, фон мешает, каталог обновляется постоянно, а бизнес ждет не исследовательский прототип, а сервис, который можно поставить в production. С вами старший программист в Fix Price Константин Репин. И в этом материале разберу, как мы строили сервис визуального поиска товаров, какие инженерные решения реально повлияли на качество и почему текущий результат в 98% совпадений получился не из-за одной удачной модели, а из-за правильно собранного пайплайна.

    habr.com/ru/companies/fix_pric

    #поиск_товаров #FastAPI #dinov2 #qdrant #визуальные_эмбеддинги #векторный_поиск

  47. Как мы довели поиск товаров по изображению до 98% совпадений: FastAPI, DINOv2, Qdrant и поиск на фото полки

    Поиск товара по изображению кажется простой задачей — ровно до момента, пока не сталкиваешься с реальным каталогом . В теории все выглядит аккуратно: берем фото, считаем embedding, ищем ближайшие вектора, возвращаем совпадения. На практике начинаются нюансы: у товара несколько изображений, ракурсы отличаются, фон мешает, каталог обновляется постоянно, а бизнес ждет не исследовательский прототип, а сервис, который можно поставить в production. С вами старший программист в Fix Price Константин Репин. И в этом материале разберу, как мы строили сервис визуального поиска товаров, какие инженерные решения реально повлияли на качество и почему текущий результат в 98% совпадений получился не из-за одной удачной модели, а из-за правильно собранного пайплайна.

    habr.com/ru/companies/fix_pric

    #поиск_товаров #FastAPI #dinov2 #qdrant #визуальные_эмбеддинги #векторный_поиск

  48. Как мы довели поиск товаров по изображению до 98% совпадений: FastAPI, DINOv2, Qdrant и поиск на фото полки

    Поиск товара по изображению кажется простой задачей — ровно до момента, пока не сталкиваешься с реальным каталогом . В теории все выглядит аккуратно: берем фото, считаем embedding, ищем ближайшие вектора, возвращаем совпадения. На практике начинаются нюансы: у товара несколько изображений, ракурсы отличаются, фон мешает, каталог обновляется постоянно, а бизнес ждет не исследовательский прототип, а сервис, который можно поставить в production. С вами старший программист в Fix Price Константин Репин. И в этом материале разберу, как мы строили сервис визуального поиска товаров, какие инженерные решения реально повлияли на качество и почему текущий результат в 98% совпадений получился не из-за одной удачной модели, а из-за правильно собранного пайплайна.

    habr.com/ru/companies/fix_pric

    #поиск_товаров #FastAPI #dinov2 #qdrant #визуальные_эмбеддинги #векторный_поиск

  49. Production MTProto user-бот на FastAPI + Telethon: WARP для обхода DPI и 5 граблей с Telegram

    В большинстве туториалов по Telegram-ботам всё начинается с одного куска кода: получили токен у @BotFather, поставили python-telegram-bot или aiogram , написали хендлер, deploy. Это Bot API. И в 90% задач этого хватает. А потом приходит задача которую Bot API не закрывает в принципе: программно создать супергруппу под конкретный проект и добавить туда нужных людей по @username , и сделать это десятки раз в день . Bot API такое не умеет даже теоретически - метода «создать группу» там нет, метода «добавить юзера в группу» тоже. Лезете в полную документацию Telegram API искать обход, упираетесь в раздел channels.createChannel / channels.inviteToChannel под MTProto, и начинается совсем другая история - не Bot API, а user-бот через telethon . В этой статье разбираю как мы сделали production MTProto user-бот на FastAPI + Telethon. Под капотом: Cloudflare WARP для обхода DPI (без него с российского VPS просто не подключиться), Singleton-клиент с keepalive, in-memory cache resolve-юзеров, и 5 ограничений Telegram которые знают только те кто лез туда ногами . Реальный production-сервис у клиента в нише строительства/монтажа, обслуживает связку Planfix → Telegram-группы под каждый проект. Сервис написан на Python 3.11. Стек: Telethon 1.43.2, FastAPI 0.136.1, Uvicorn 0.46.0, Pydantic 2.13.4. На VPS под systemd , наружу через Cloudflare Tunnel. Вызывается из n8n через HTTP-ноду.

    habr.com/ru/articles/1034612/

    #telethon #mtproto #telegram #python #fastapi #cloudflare #warp #n8n #socks5 #planfix

  50. Production MTProto user-бот на FastAPI + Telethon: WARP для обхода DPI и 5 граблей с Telegram

    В большинстве туториалов по Telegram-ботам всё начинается с одного куска кода: получили токен у @BotFather, поставили python-telegram-bot или aiogram , написали хендлер, deploy. Это Bot API. И в 90% задач этого хватает. А потом приходит задача которую Bot API не закрывает в принципе: программно создать супергруппу под конкретный проект и добавить туда нужных людей по @username , и сделать это десятки раз в день . Bot API такое не умеет даже теоретически - метода «создать группу» там нет, метода «добавить юзера в группу» тоже. Лезете в полную документацию Telegram API искать обход, упираетесь в раздел channels.createChannel / channels.inviteToChannel под MTProto, и начинается совсем другая история - не Bot API, а user-бот через telethon . В этой статье разбираю как мы сделали production MTProto user-бот на FastAPI + Telethon. Под капотом: Cloudflare WARP для обхода DPI (без него с российского VPS просто не подключиться), Singleton-клиент с keepalive, in-memory cache resolve-юзеров, и 5 ограничений Telegram которые знают только те кто лез туда ногами . Реальный production-сервис у клиента в нише строительства/монтажа, обслуживает связку Planfix → Telegram-группы под каждый проект. Сервис написан на Python 3.11. Стек: Telethon 1.43.2, FastAPI 0.136.1, Uvicorn 0.46.0, Pydantic 2.13.4. На VPS под systemd , наружу через Cloudflare Tunnel. Вызывается из n8n через HTTP-ноду.

    habr.com/ru/articles/1034612/

    #telethon #mtproto #telegram #python #fastapi #cloudflare #warp #n8n #socks5 #planfix