<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" >

  <channel>
    <title><![CDATA[Все посты подряд / Python / Хабр]]></title>
    <link>https://habr.com/ru/hubs/python/posts/</link>
    <description><![CDATA[Python – высокоуровневый язык программирования]]></description>
    <language>ru</language>
    <managingEditor>editor@habr.com</managingEditor>
    <generator>habr.com</generator>
    <pubDate>Sun, 26 Jul 2026 20:25:08 GMT</pubDate>
    
    
      <image>
        <link>https://habr.com/ru/</link>
        <url>https://habrastorage.org/webt/ym/el/wk/ymelwk3zy1gawz4nkejl_-ammtc.png</url>
        <title>Хабр</title>
      </image>
    

    
      
        
    

  

  
  <item>
    <title><![CDATA[Пост @Dozorova_Alyona — .NET (+4) — 25.07.2026 20:28]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1062982/</guid>
    <link>https://habr.com/ru/posts/1062982/?utm_campaign=1062982&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Привет!</p><p>Появилась идея: локальная база знаний, строящаяся по коду проекта на вашем компе и способная человеческим языком отвечать на вопросы по проекту, помогающая джунам быстро вкатиться в суть, а синьорам бегло проверить что они сломают очередным обновлением. Интересно ли было вам таким пользоваться? Помогло ли бы оно?</p><p>Поделитесь в комментариях)</p><p>Upd. Спасибо за комментарий, важная оговорка: проект работает локально на вашем компе, без утечек в инет)</p> <a href="https://habr.com/ru/posts/1062982/?utm_campaign=1062982&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Jul 2026 17:28:56 GMT</pubDate>
    <dc:creator><![CDATA[Dozorova_Alyona]]></dc:creator>
      
      <category><![CDATA[Опрос]]></category><category><![CDATA[идея проекта]]></category><category><![CDATA[мнение народа]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Python (+4) — 25.07.2026 19:43]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1062978/</guid>
    <link>https://habr.com/ru/posts/1062978/?utm_campaign=1062978&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Представлен открытый проект <a href="https://github.com/Osmantic/ODS" rel="noopener noreferrer nofollow">ODS (Osmantic Deployment System)</a>. Это проект, который превращает ПК в&nbsp;приватный ИИ‑сервер. Решение само определяет характеристики ПК, подберёт под&nbsp;них подходящую модель, скачает её и запустит локальный инференс:</p><ul><li><p>все локально и приватно: можно работать с&nbsp;документами, кодом и другими важными данными;</p></li><li><p>через одну панель можно подключить голосовых помощников, агентов вроде Hermes, RAG, поиск, генерацию изображений и десятки других инструментов;</p></li><li><p>без&nbsp;облачного сервиса. Без&nbsp;подписки.</p></li></ul><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/002/690/764/00269076453fe7e8990ffcc6e4e9b016.jpg" width="1280" height="1113"></figure> <a href="https://habr.com/ru/posts/1062978/?utm_campaign=1062978&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Jul 2026 16:43:36 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[ODS]]></category><category><![CDATA[Osmantic Deployment System]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @it_police — Python — 25.07.2026 12:37]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1062904/</guid>
    <link>https://habr.com/ru/posts/1062904/?utm_campaign=1062904&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Агент Ануфрий получил красивый вывод в терминал (отключаемый через конфиг). </p><p>Как всегда, ничего сложного, используются две библиотечки Rich + Prompt Toolkit. Вся эта красота хранится в отдельном модуле <code>console</code>, легко сможете разобраться, переделать, или подчерпнуть что-то для своих проектов. Кода там совсем немного. </p><p>Репозиторий: <a href="https://github.com/Bednyakov/AgentAnufry" rel="noopener noreferrer nofollow">AgentAnufry</a></p><p>Есть идея в отдельной ветке Ануфрия запилить “кибербезопасника”, вырезав все лишнее и напихав скилов под инструменты Kali Linux. Мне кажется, тут LLM может проявить себя с хорошей стороны, если грамотно предоставить инструментарий. </p><p>Возможно что-то похожее уже кто-то реализовывал? Если да, поделитесь информацией об успехах.</p><p>P.S.: Ануфрий - это мой проект простого конструктора для создания собственных ассистентов на Python.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/fcf/ff7/1a6/fcfff71a644162703f781de3f8ee01e1.png" width="1910" height="458"></figure> <a href="https://habr.com/ru/posts/1062904/?utm_campaign=1062904&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Jul 2026 09:37:43 GMT</pubDate>
    <dc:creator><![CDATA[it_police]]></dc:creator>
      
      <category><![CDATA[AI]]></category><category><![CDATA[AI agent]]></category><category><![CDATA[LLM]]></category><category><![CDATA[Python]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @akdengi — Управление продажами (+2) — 24.07.2026 20:16]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1062810/</guid>
    <link>https://habr.com/ru/posts/1062810/?utm_campaign=1062810&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Выкатил релиз 1.3.1 моей простой товароучетной системы с поддержкой Честного Знака:</p><p><a href="https://github.com/akdengi/sklad-cz" rel="noopener noreferrer nofollow">https://github.com/akdengi/sklad-cz</a></p><p>Что нового:</p><ul><li><p>Выбор товарной группы для работы в настройках (одиночный выбор из справочника). Реализованы 22 доступные группы (исключены алкоголь, табак, мех, ветпрепараты и др.)</p></li><li><p>Запрос и отображение баланса денежных средств в ЧЗ на дашборде. Кнопка «Обновить баланс» для ручного обновления.</p></li><li><p>Загрузка данных МОД из API Честный Знак по кнопке.  Автоматическое заполнение адреса и FIAS ID. Предупреждение при отсутствии МОД со ссылкой на ЛК ЧЗ.</p></li><li><p>Сканирование: проверка GTIN КМ для SKU, авто-определение правильного SKU, онлайн-проверка статуса ЧЗ сразу после добавления</p></li><li><p>При импорте теперь выдает детальный отчёт об ошибках с модальным окном и экспортом в CSV (дубликаты, структура, GTIN, статус ЧЗ).</p></li><li><p>Продажа: блокировка поиска по GTIN/Артикулу/EAN для товаров с маркировкой (только поиск по КМ).</p></li><li><p>Склады: улучшенное отображение — таблица SKU с колонками Остаток/Продано.</p></li></ul><p>Далее планирую заняться работой с отчетами: вывод из оборота, аннулирование отчета о выводе и ввод назад в оборот</p><p>А там глядишь и до заказа КМ доберусь и вводе в оборот :)</p> <a href="https://habr.com/ru/posts/1062810/?utm_campaign=1062810&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 24 Jul 2026 17:16:39 GMT</pubDate>
    <dc:creator><![CDATA[akdengi]]></dc:creator>
      
      <category><![CDATA[честный знак]]></category><category><![CDATA[github]]></category><category><![CDATA[python]]></category><category><![CDATA[flask]]></category><category><![CDATA[учет товаров]]></category><category><![CDATA[склад]]></category><category><![CDATA[отчетность]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @nightweb — Веб-разработка (+1) — 24.07.2026 05:44]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1062516/</guid>
    <link>https://habr.com/ru/posts/1062516/?utm_campaign=1062516&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Начал писать тесты для бота. Оказалось не так страшно как думал</p><p>Долго откладывал тесты для своих ботов. Казалось что это боль: нужно мокать API, имитировать апдейты, непонятно с чего начать.</p><p>Начал с малого. Вынес всю бизнес-логику в отдельные функции которые не знают ничего про Telegram. Просто принимают данные, возвращают результат.</p><p>python</p><pre><code># Не так
async def handle_payment(message: types.Message):
    amount = int(message.text)
    if amount &gt; 10000:
        await message.answer("Сумма слишком большая")

# А так
def validate_amount(amount: int) -&gt; tuple[bool, str]:
    if amount &gt; 10000:
        return False, "Сумма слишком большая"
    return True, ""

async def handle_payment(message: types.Message):
    is_valid, error = validate_amount(int(message.text))
    if not is_valid:
        await message.answer(error)</code></pre><p>Теперь validate_amount тестируется обычным pytest без всяких моков. Вызываешь функцию, проверяешь результат.</p><p>Звучит очевидно. Но я долго писал всю логику прямо в хендлерах и потом удивлялся почему тестировать неудобно. Оказывается проблема была не в тестах, а в архитектуре.</p><p>Покрытие пока небольшое, но уже несколько раз тесты поймали регрессию которую я бы заметил только в продакшене.</p><p>Кто тестирует ботов, как организуете?</p> <a href="https://habr.com/ru/posts/1062516/?utm_campaign=1062516&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 24 Jul 2026 02:44:29 GMT</pubDate>
    <dc:creator><![CDATA[nightweb]]></dc:creator>
      
      <category><![CDATA[Python]]></category><category><![CDATA[pytest]]></category><category><![CDATA[тесты]]></category><category><![CDATA[Telegram]]></category><category><![CDATA[бот]]></category><category><![CDATA[архитектура]]></category><category><![CDATA[aiogram]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @akdengi — Программирование (+3) — 23.07.2026 15:21]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1062292/</guid>
    <link>https://habr.com/ru/posts/1062292/?utm_campaign=1062292&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>С момента написания <a href="https://habr.com/ru/articles/1058282/" rel="noopener noreferrer nofollow">прошлой статьи</a> про мою самописную товароучетную систему для работы с маркировкой «Честный Знак», я добавил новых фич и поправил существующие ошибки. <a href="https://github.com/akdengi/sklad-cz" rel="noopener noreferrer nofollow">Основные изменения</a> следующие:</p><ol><li><p> В Остатках в карточке товара появилась кнопка «Списать», позволяя сделать быстрое списание с нулевой ценой и выбором причины: утеря, собственные нужды, производственные цели, безвозмездная передача, отзыв с рынка. Данные нужно подавать также вручную, но для учета полезно.</p></li><li><p>Добавлен вид документа в продаже: поле «Вид док-та» в шапке заказа (Прочее, УПД, Товарная накладная, Акт приёма-передачи, Кассовый чек).</p></li><li><p>Появилась кнопка «Скачать КМ в CSV» в корзине Продаж для скачивания КМ в формате «для ввода/вывода из оборота» для вставке в ЭДО при передаче УПД.</p></li><li><p>Дропдаун «Статус» теперь показывает статус ЧЗ для проданных товаров.</p></li><li><p>Появилась возможность выделить и произвести массовую проверку статуса ЧЗ для выделенных товаров (чекбоксы + кнопка) на вкладках Остатки, Продано, Вывод из оборота.</p></li><li><p>Появилась колонка «Статус в ЧЗ» в таблицах Остатки и Вывод из оборота</p></li><li><p>Сделано автоподтверждение отчёта о выбытии при статусе ЧЗ равном «Выбыл» (RETIRED/WITHDRAWN/WRITTEN_OFF)</p></li><li><p>Сделано сохранение активной вкладки при перезагрузке страницы</p></li><li><p>Введена новая логика быстрой продажи: в шапку заказа: номер заказа, склад списания, дата продажи, добавление нескольких товаров по КМ/артикулу/EAN-13 с ценой за позицию в корзину с одинаковым номером заказа, КМ для Маркетплейсов отображается в корзине и копируется кликом, сделан Live-поиск при вводе кода с полной информацией о товаре.</p></li></ol><p>ПО я писал для своей товарной группы «Игры и игрушки», но оно должно подходить и для других товарных групп потребительских товаров.</p><p>Сразу напишу про API: авторизация по ЭЦП и получение общего статуса по КМ все еще ведется <a href="https://docs.crpt.ru/gismt/True_API/#_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4_%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE%D0%B1%D1%89%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%BD%D0%BE%D0%B9_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE_%D0%BA%D0%B8_%D0%BF%D0%BE_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D1%83" rel="noopener noreferrer nofollow">по 3 версии API</a> Честного Знака, как и например работа с МОД, а что-то уже работает только по 4 версии API (например ввод-вывод из оборота).</p> <a href="https://habr.com/ru/posts/1062292/?utm_campaign=1062292&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 23 Jul 2026 12:21:38 GMT</pubDate>
    <dc:creator><![CDATA[akdengi]]></dc:creator>
      
      <category><![CDATA[честный знак]]></category><category><![CDATA[api]]></category><category><![CDATA[python]]></category><category><![CDATA[flask]]></category><category><![CDATA[sqlalchemy]]></category><category><![CDATA[sqlite]]></category><category><![CDATA[маркировка товаров]]></category><category><![CDATA[автоматизация склада]]></category><category><![CDATA[настольные игры]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @ira-k — Блог компании Яндекс Практикум (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/yandex_praktikum/posts/1056902/</guid>
    <link>https://habr.com/ru/companies/yandex_praktikum/posts/1056902/?utm_campaign=1056902&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Must-read для Python-разработчика: 5 статей от практика с сотнями интервью за плечами&nbsp;</strong></p><p>Делимся подборкой статей от Евгения Бартенева, эксперта курсов Практикума и разработчика с 20-летним опытом.<strong> </strong>А ещё он активно занимается созданием образовательного контента: является автором и техлидом курса <a href="https://practicum.yandex.ru/backend-developer/?utm_source=content&amp;utm_medium=media&amp;utm_campaign=habr_media_RF_Prog_backDe_b2c_Post_Catalog_podborka-python&amp;utm_content=23-07-26" rel="noopener noreferrer nofollow">«Python-разработчик»</a>, пишет статьи и проводит бесплатные мок-интервью для всех желающих <a href="https://boreesych.com/" rel="noopener noreferrer nofollow">в рамках проекта Boreesych</a>.</p><p><a href="https://habr.com/ru/companies/yandex_praktikum/articles/940622/" rel="noopener noreferrer nofollow">Особенности Python, о которых вас точно спросят на техническом собеседовании</a>. Евгений прособеседовал сотни кандидатов и сам неоднократно побывал в роли собеседуемого, поэтому хорошо представляет, какие именно знания проверяют на интервью и где чаще всего проваливаются не только джуны, но и опытные разработчики.&nbsp;</p><p><a href="https://habr.com/ru/companies/yandex_praktikum/articles/960812/" rel="noopener noreferrer nofollow">Особенности Python, о которых вас точно спросят на техническом собеседовании. Часть 2</a>. Евгений выпустил продолжение, так как первая часть вызвала оживлённое обсуждение: в комментариях читатели делились собственным опытом и задавали отличные уточняющие вопросы. В этой части ещё больше подводных камней Python — уже традиционно без абстракций и банальщины.</p><p><a href="https://habr.com/ru/companies/yandex_praktikum/articles/1031556/" rel="noopener noreferrer nofollow">Строки в Python: всё не так просто, как кажется</a>. Начинающим разработчикам строки обычно кажутся едва ли не самым простым, что есть в языке программирования, но для Python это не совсем так. Евгений разбирает, какие бывают строки, чем они отличаются друг от друга, какие возможности дают и какие подводные камни могут встретиться в работе с ними. Здесь и о базовом использовании, и о важных деталях, которые стоит помнить каждому разработчику.&nbsp;</p><p><a href="https://habr.com/ru/companies/yandex_praktikum/articles/956618/" rel="noopener noreferrer nofollow">От джуна к эксперту: как карта навыков и план развития помогают профессиональному росту Python-разработчика</a>. Евгений размышляет, почему «стать мидлом, потом синьором» — плохая цель, которая не помогает расти. Затем рассказывает, что такое план профессионального развития, зачем он нужен и как его использовать на собеседованиях, в обучении и в реальной работе. А также делится примером карты навыков и шаблоном плана.</p><p><a href="https://habr.com/ru/companies/yandex_praktikum/articles/822379/" rel="noopener noreferrer nofollow">Книжная полка разработчика в эпоху интернета и искусственного интеллекта</a>. Евгений объясняет, почему книги остаются незаменимым инструментом для изучения программирования даже в эпоху нейросетей, и делится личной подборкой — как для начинающих разработчиков, так и для тех, кто пишет код не первый день.</p><p>Если хотите освоить профессию Python-разработчика с нуля, сделать это можно на курсе <a href="https://practicum.yandex.ru/backend-developer/?utm_source=content&amp;utm_medium=media&amp;utm_campaign=habr_media_RF_Prog_backDe_b2c_Post_Catalog_podborka-python&amp;utm_content=23-07-26" rel="noopener noreferrer nofollow">«Python-разработчик»</a> в Практикуме. Первые 30 уроков доступны бесплатно: вы попробуете себя в роли разработчика, познакомитесь с образовательной платформой и поймёте, подходит ли вам курс.</p> <a href="https://habr.com/ru/posts/1056902/?utm_campaign=1056902&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 23 Jul 2026 06:30:45 GMT</pubDate>
    <dc:creator><![CDATA[ira-k (Яндекс Практикум)]]></dc:creator>
      
      <category><![CDATA[python]]></category><category><![CDATA[python-разработчик]]></category><category><![CDATA[программирование на python]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @tooshcan4ik — Python — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1061302/</guid>
    <link>https://habr.com/ru/posts/1061302/?utm_campaign=1061302&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Сегодня произошла интересная штука: я встретил вживую новый вид сотрудника - "Оператор ЛЛМ", это как "Оператор ЭВМ", он "жмакает" кнопки, но не понимает зачем.</p><p>Суть: собесил сегодня чувака на инженерную позицию. Туда-сюда, вроде все складно, тимлиду вроде нравится. Потом дали мне слово, как софтверному инженеру, и я задал ровно два вопроса, после которых все стало понятно.</p><p>1 - чувак говорил, что у него есть хоум лаба, но не смог рассказать из чего она состоит (контейнеры/виртуалки/гипервизор).</p><p>2 - чувак показал свой пет-проект, но не смог рассказать как он работает под капотом.</p><p>Почему? - потому что он "кнопкодав", "оператор ЛЛМ" - называйте как хотите.</p><p>Это очень опасная тенденция, все больше людей называют себя "архитекторами" приложений, не понимая основ технологий которые их ЛЛМ пытается применять.</p> <a href="https://habr.com/ru/posts/1061302/?utm_campaign=1061302&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 22 Jul 2026 04:24:46 GMT</pubDate>
    <dc:creator><![CDATA[tooshcan4ik]]></dc:creator>
      
      <category><![CDATA[холивар]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Deal-overcomer — JavaScript (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1061582/</guid>
    <link>https://habr.com/ru/posts/1061582/?utm_campaign=1061582&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Фронтенд для души, бэкенд для людей!</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/ec0/9f5/f1c/ec09f5f1ce4d56bf10d420fbd4df1e37.JPG" alt="Мастер по разводу холивар" title="Мастер по разводу холивар" width="7168" height="5376"><div><figcaption>Мастер по разводу холивар</figcaption></div></figure><p>Были приняты меры погрузиться под воду дабы показать серьезность моих намерений в данной щепетильной теме.</p><p>Фронтенд весь такой разносторонний, креативный, местами легкий, местами настолько сложный что ломаешь голову. Напрашивается клеймо "для любителей".</p><p>Бэкенд наоборот поддерживает порядок и структурность. Меньше экспериментов и больше проверенных решений, самое то для "сделал работу - пошел спокойно домой".</p> <a href="https://habr.com/ru/posts/1061582/?utm_campaign=1061582&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 21 Jul 2026 17:56:02 GMT</pubDate>
    <dc:creator><![CDATA[Deal-overcomer]]></dc:creator>
      
      <category><![CDATA[холивар]]></category><category><![CDATA[холивары]]></category><category><![CDATA[фронтенд]]></category><category><![CDATA[бэкенд]]></category><category><![CDATA[фуллстек]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @DimanODG — LaTeX (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1061060/</guid>
    <link>https://habr.com/ru/posts/1061060/?utm_campaign=1061060&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Всем привет!</p><p>Сегодня поделюсь своим проектом, где использовал возможности открытых моделей LLM для создания автоматизированного конвейера по переводу англоязычных pdf-файлов в русскоязычные pdf. Как человек, интересующийся именно технологиями в области ИИ мне особенно было интересно максимальное приближенное к оригиналу сохранение содержимого переведенного материала, включая схемы, математические  формулы, блоки кода (python) и bash-команд, рисунков (само собой), сохранение сносок, ссылок и пр. метаданных. Целью проекта было применение всевозможных доступных стеков и программ, использующих LLM в конкретной практической задаче. И как оказалось, на первый взгляд, простая задача перевода, с которой современная LLM, созданная и обученная на архитектуре трансформеров справляется на сегодняшний день блестяще, для pdf-формата оказалась не совсем простой (но и не скажу, что особо сложной).</p><p>О выборе программного стека технологий. Здесь во многом все определило глубина моих познаний и практических умений работать с LLM-моделями и тем оборудованием (потребительским, конечно), которое имеется дома. Поэтому, исходя из пары-тройки (пары) вычислительных узлов (ноутбуков) в домашней локалке мой выбор определил следующие программные и аппаратные компоненты.</p><p>Программные компоненты. Прежде всего это среда выполнения wsl. Просто работает в windows, удобна мне как новичку.   В wsl установка обычной env стандартным python. И далее уже конкретные ПО для выполнения задачи перевода pdf на русский. Тут пришлось почитать в сети что есть свободное (исходя из цели использования только открытого ПО и LLM, чтобы оценить уровень их развития). Были опробованы такие программы как Docling,  Marker-pdf и еще какую-то). В итоге, для извлечения из pdf в markdown формат я использовал Marker-pdf. У него имеется целый набор специализированных ocr-моделей для парсинга содержимого pdf. Marker в режиме конвейера осуществляет извлечение в указанную папку все содержимое исходного pdf в виде отдельных jpg-файлов, файла метаданных и итогового англоязычного .md файла. Для обратного процесса конвертации переведенного на русский язык <em>ru.md я использовал WeasyPrint и Pandoc. Мой выбор - Pandoc. Сложнее, но поддержка xeLatex и куча настроек через опции командной строки и переменных окружения wsl. Pandoc - единственное ПО в моем конвейере, которое не использует LLM. И собственно, середина - перевод. Готовый скрипт на python. Перевод разбитых на части (chanks) в endpoint LLM - requests.post. Фишкой является url, который через специальный балансировщик, управляющий вычислительными узлами в локалке отправляется в requests.post. Получается параллельный перевод на нескольких узлах с &nbsp;развернутыми OpenAI-совместимыми LLM. Количество узлов - сколько найдется в домашней ИИ лаборатории))). До и после отправки на перевод в LLM - чистка регулярками от различных костылей и защиты от перевода не нужных элементов (чистка колонтитулов, пагинация, сглаживание двойных переносов строк, изоляция спец. блоков от LLM блоков кода, мат. формул, кода внутри строк, приведение кода к pep8), подготовка переведенного _</em>ru.md к сборке pdf-файла в Pandoc. В итоге - pipeline в 3 шага: Marker-pdf, Скрипт-переводчик на python, Pandoc.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/756/856/d5f/756856d5feecbc8a80ca96bb4854a5c9.png" alt="Основные шаги перевода (marker, python скрипт, pandoc)" title="Основные шаги перевода (marker, python скрипт, pandoc)" width="1206" height="750"><div><figcaption>Основные шаги перевода (marker, python скрипт, pandoc)</figcaption></div></figure><p>Все вместе также можно запустить скриптом bash-сценария: </p><blockquote><p>Использование: ./<a href="http://pipeline.sh" rel="noopener noreferrer nofollow">pipeline.sh</a> &lt;path_to_input_pdf&gt; &lt;output_path&gt; [page_range] </p><p>Пример1: перевод всего Pdf-файла </p><p>./<a href="http://pipeline.sh" rel="noopener noreferrer nofollow">pipeline.sh</a> /mnt/project/raw_data/embeddings.pdf /mnt/project/rendered/embeddings</p><p>Пример1: перевод первых 21 страниц Pdf-файла </p><p>./<a href="http://pipeline.sh" rel="noopener noreferrer nofollow">pipeline.sh</a> /mnt/project/raw_data/embeddings.pdf /mnt/project/rendered/embeddings 0-20</p></blockquote><p>Репозиторий на github <a href="https://github.com/DemonODG/pdf-translator" rel="noopener noreferrer nofollow">DemonODG/pdf-translator: English-to-Russian PDF Translation Pipeline</a>  </p><p>Это мой первый пост на тему применения современных LLM моделей в различных практических задачах. Если это вызовет интерес в более подробном описании данного pipeline - напишу статью поподробнее. </p><p>Всем добра!</p> <a href="https://habr.com/ru/posts/1061060/?utm_campaign=1061060&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 20 Jul 2026 17:01:32 GMT</pubDate>
    <dc:creator><![CDATA[DimanODG]]></dc:creator>
      
      <category><![CDATA[translate api]]></category><category><![CDATA[llm-модели]]></category><category><![CDATA[llm-приложения]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @TrexSelectel — Блог компании Selectel (+4) — 20.07.2026 13:54]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/selectel/posts/1060884/</guid>
    <link>https://habr.com/ru/companies/selectel/posts/1060884/?utm_campaign=1060884&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как управлять окружениями — venv / pip vs pipenv vs poetry?</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/6b0/8d9/d64/6b08d9d64aa9d30b6e722430b3e6d4a8.jpg" width="1191" height="669"></figure><p>Привет, Хабр! Продолжаем нашу рубрику с быстрыми ответами на некоторые часто встречающиеся вопросы. Сегодня разберем такую проблему: проекты постоянно ломаются из-за конфликтов зависимостей. Что выбрать для новых проектов и как сделать так, чтобы код работал одинаково, в том числе в CI?</p><p>Обычно начало всех проблем — смешение глобальных и локальных пакетов или отсутствие фиксированных версий библиотек. Главный совет: у каждого проекта должно быть собственное окружение с явно указанными зависимостями и сохраненным lock‑файлом в репозитории.</p><p>Если говорить о базе, то это связка venv и pip. Плюс она встроена в сам Python. Вы вручную создаете окружение, устанавливаете нужные пакеты и фиксируете их в&nbsp;<code>requirements.txt.&nbsp;</code></p><p>Но подход со временем может стать неудобным — особенно когда в проекте десятки зависимостей и несколько разработчиков. Поэтому, на смену ручным методам пришел Poetry.&nbsp;</p><p>Сейчас это, пожалуй, наиболее сбалансированное решение: он создает и управляет окружениями, отслеживает версии, собирает wheel‑пакеты и умеет публиковать их в PyPI. Lock‑файл (poetry.lock) обеспечивает воспроизводимость сборок, а сам формат&nbsp;<code>pyproject.toml</code>&nbsp;— это стандарт. В итоге вы получаете чистое окружение, детерминированные зависимости и понятное поведение CI.</p><p>Вот пример рабочего цикла:</p><pre><code class="bash">python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install poetry
poetry install
poetry run pytest</code></pre><p>В CI чаще используют схему с экспортом зависимостей:</p><pre><code class="bash">poetry export -f requirements.txt --without-hashes -o reqs.txt
pip install -r reqs.txt
pytest</code></pre><p>Отдельно стоит упомянуть uv — относительно новый инструмент, созданный командой Astral (авторы Ruff). Он написан на Rust и совместим с Python. По сути, это те же функции pip, venv и частично poetry, но быстрее. От Poetry он отличается отсутствием публикации пакетов, но при этом умеет сам устанавливать и менять версии Python через&nbsp;<code>.python-version</code>.&nbsp;</p><p>UV работает с pyproject.toml и имеет собственный uv.lock. Может использоваться вместе с Poetry, но лучше создавать единый uv.lock для строгой воспроизводимости. Для CI это удобно, вы пишите:</p><pre><code class="bash">pip install uv</code></pre><p>Далее есть два варианта:</p><ul><li><p><code>uv venv</code> — создает виртуальное окружение. Это аналог&nbsp;<code>python3.13 -m venv .venv</code>, но работает быстрее и с автоустановкой версии Python.</p></li><li><p><code>uv init</code> — помимо .venv, добавляет шаблон проекта с pyproject.toml для зависимостей, Git-репозиторий и базовые файлы. Идеально для нового проекта.</p></li></ul><p>И окружение в CI полностью совпадает с локальным, а билд воспроизводится без сюрпризов. Но чаще всего комбинируют два решения: Poetry для разработки и uv — для быстрых сборок и деплоймента.</p><blockquote><p>Если хотите освоить инструменты Python, то в Академии Selectel у нас есть отдельная&nbsp;<a href="https://selectel.ru/blog/courses/course-python/?utm_source=habr.com&amp;utm_medium=referral&amp;utm_campaign=academy_post_pythonenv_200726_content" rel="noopener noreferrer nofollow">подборка статей</a>. Там мы рассказываем, как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга.  </p></blockquote> <a href="https://habr.com/ru/posts/1060884/?utm_campaign=1060884&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 20 Jul 2026 10:54:01 GMT</pubDate>
    <dc:creator><![CDATA[TrexSelectel (Selectel)]]></dc:creator>
      
      <category><![CDATA[selectel]]></category><category><![CDATA[python]]></category><category><![CDATA[окружения]]></category><category><![CDATA[зависимости]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @TrexSelectel — Блог компании Selectel (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/selectel/posts/1058620/</guid>
    <link>https://habr.com/ru/companies/selectel/posts/1058620/?utm_campaign=1058620&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как настроить TLS в клиенте Python при HTTPS-запросах?</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/06f/7e1/2c3/06f7e12c335316147483d76e2102be10.jpeg" width="1191" height="669"></figure><p>Бывает так, что после обновления OpenSSL часть HTTPS-вызовов к внешним сервисам падает с ошибкой <code>ssl.SSLError</code>. Сейчас разберемся, как настроить Python, чтобы handshake проходил успешно и соединение оставалось безопасным.</p><p>После апдейтов OpenSSL часто отключают старые протоколы и слабые шифры — старые серверы не проходят handshake. Решение на клиенте — явно создать ssl.SSLContext, задать минимальную версию TLS и, при необходимости, набор шифров, а затем передать этот контекст в HTTP-клиент (например, httpx).</p><pre><code class="python">import ssl
import httpx

ctx = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH)
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
ctx.set_ciphers('ECDHE+AESGCM:!ECDSA:!aNULL:!eNULL')

with httpx.Client(verify=ctx, timeout=10.0) as client:
    r = client.get('https://api.example.com')
    r.raise_for_status()
    print(r.status_code)</code></pre><p>В коде мы указываем <code>TLSv1_2</code> как минимальный порог. Это удобно: если сервер уже поддерживает TLS 1.3, все само заработает на самой новой версии. Но если какой-то внешний сервис еще не успел обновиться, соединение не разорвется, и все продолжит работать на стабильном 1.2. Так мы получаем универсальный код, который не сломается при работе со старыми API.</p><p>Для отладки TLS handshake применяйте&nbsp;<code>openssl s_client -connect host:443 -tls1_2</code>&nbsp;чтобы увидеть, какие шифры поддерживает сервер. Временное ослабление&nbsp;<code>minimum_version</code>&nbsp;даст совместимость, но хуже для безопасности — лучше апгрейдить серверную часть. Сертификаты и ключи храните вне кода (секреты/volumes), не логируйте их, и при работе в контейнерах используйте безопасные механизмы передачи секретов.</p><blockquote><p>Если хотите освоить инструменты Python, то в Академии Selectel у нас есть отдельная&nbsp;<a href="https://selectel.ru/blog/courses/course-python/?utm_source=habr.com&amp;utm_medium=referral&amp;utm_campaign=academy_post_pythontls_170726_content" rel="noopener noreferrer nofollow">подборка статей</a>. Там мы рассказываем, как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга.  </p></blockquote> <a href="https://habr.com/ru/posts/1058620/?utm_campaign=1058620&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 17 Jul 2026 10:00:21 GMT</pubDate>
    <dc:creator><![CDATA[TrexSelectel (Selectel)]]></dc:creator>
      
      <category><![CDATA[selectel]]></category><category><![CDATA[python]]></category><category><![CDATA[tls]]></category><category><![CDATA[ssl]]></category><category><![CDATA[безопасность]]></category><category><![CDATA[requests]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @nightweb — Веб-разработка (+1) — 17.07.2026 09:54]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1060062/</guid>
    <link>https://habr.com/ru/posts/1060062/?utm_campaign=1060062&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Понял asyncio только когда бот начал зависать под нагрузкой</p><p>Писал на Python и честно говоря asyncio воспринимал как магию. Работает и ладно.</p><p>Пока однажды бот не завис.</p><p>Пользователей было немного, штук двадцать одновременно, но один запустил команду которая делала тяжёлый запрос к внешнему API. Пока запрос выполнялся, бот молчал. Остальные подвисли в ожидании.</p><p>Начал разбираться. Оказалось я вызывал синхронную функцию прямо внутри async хендлера. requests.get внутри async def. Это блокирует весь event loop. Все корутины ждут пока эта одна функция не завершится.</p><p>Решение простое: либо заменить requests на aiohttp, либо обернуть синхронный вызов через <a href="http://asyncio.to" rel="noopener noreferrer nofollow">asyncio.to</a>_thread. Второй вариант проще когда менять библиотеку лень:</p><p>python</p><pre><code>result = await asyncio.to_thread(requests.get, url)</code></pre><p>После замены бот перестал зависать. Все одновременные запросы к внешнему API обрабатываются параллельно без проблем, но теперь когда вижу синхронный вызов внутри async функции ощущение что что-то не так.</p><p>Кто сталкивался с похожим, как отлаживали?</p> <a href="https://habr.com/ru/posts/1060062/?utm_campaign=1060062&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 17 Jul 2026 06:54:37 GMT</pubDate>
    <dc:creator><![CDATA[nightweb]]></dc:creator>
      
      <category><![CDATA[Python]]></category><category><![CDATA[asyncio]]></category><category><![CDATA[Telegram]]></category><category><![CDATA[бот]]></category><category><![CDATA[асинхронность]]></category><category><![CDATA[aiogram]]></category><category><![CDATA[опыт]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @TrexSelectel — Блог компании Selectel (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/selectel/posts/1058446/</guid>
    <link>https://habr.com/ru/companies/selectel/posts/1058446/?utm_campaign=1058446&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Что делать, если Python-сервер падает из-за утечки памяти?</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/73d/602/b0b/73d602b0be753ad1908bc01c0d0dbb95.jpg" width="1175" height="661"></figure><blockquote><p>Привет, Хабр! Это наша экспериментальная рубрика, в которой мы даем новичкам быстрые ответы на четкие вопросы. Писать статью будет излишним, а некоторую пользу до аудитории донести, возможно, получится.</p></blockquote><p>Итак, допустим, агент спустя время начинает расти по памяти и в итоге все падает. Где копать и как временно ограничить ущерб, пока ищете утечку?</p><p>Первое, что нужно сделать — измерить и локализовать.&nbsp;<code>tracemalloc</code>&nbsp;показывает, какие строки выделяют больше всего памяти, <code>gc</code> — количество объектов.&nbsp;</p><p>Часто проблема в неограниченных кэшах, списках или в C-расширениях. Сначала стоит включить&nbsp;<code>tracemalloc</code>, дать процессу поработать и снять снапшот:</p><pre><code class="python">import tracemalloc
tracemalloc.start()
# после нагрузки
snapshot = tracemalloc.take_snapshot()
top = snapshot.statistics('lineno')[:10]
for stat in top:
    print(stat)</code></pre><p>Параллельно делайте&nbsp;<code>gc.collect()</code>&nbsp;и логируйте число объектов&nbsp;<code>len(gc.get_objects())</code>, чтобы увидеть рост. На время расследования применяйте эксплуатационные меры: для WSGI-сервисов используйте Gunicorn с&nbsp;<code>--max-requests</code>&nbsp;и&nbsp;<code>--max-requests-jitter</code>, чтобы процессы периодически перезапускались и не накапливали мусор. А в контейнерах ставьте cgroup-пределы (<code>--memory</code>) и настраивайте restart-политику, чтобы платформа автоматически перезапускала упавшие поды.</p><p>Пример запуска Gunicorn:</p><pre><code class="bash">gunicorn myapp:app --workers 4 --max-requests 1000 --max-requests-jitter 50</code></pre><p>Если утечка в C-расширении или сторонней библиотеке, то временно автоматический перезапуск и мониторинг позволяют сохранить сервис работоспособным, пока вы находите корень проблемы и исправляете код.</p><blockquote><p>Если хотите освоить инструменты Python, то в Академии Selectel у нас есть отдельная <a href="https://selectel.ru/blog/courses/course-python/?utm_source=habr.com&amp;utm_medium=referral&amp;utm_campaign=academy_post_pythonserver_130726_content" rel="noopener noreferrer nofollow">подборка статей</a>. Там мы рассказываем, как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга.</p></blockquote> <a href="https://habr.com/ru/posts/1058446/?utm_campaign=1058446&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 13 Jul 2026 09:30:55 GMT</pubDate>
    <dc:creator><![CDATA[TrexSelectel (Selectel)]]></dc:creator>
      
      <category><![CDATA[selectel]]></category><category><![CDATA[python]]></category><category><![CDATA[облако]]></category><category><![CDATA[сервер]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Python (+4) — 10.07.2026 14:48]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1057900/</guid>
    <link>https://habr.com/ru/posts/1057900/?utm_campaign=1057900&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Разработчик Тарун Гупта представил открытый проект <a href="https://github.com/tarunlnmiit/autopilot-jobhunt" rel="noopener noreferrer nofollow">autopilot-jobhunt</a>. Это&nbsp;— ИИ-инструмент, который автоматически ищет вакансии в&nbsp;интернете, сравнивает их&nbsp;с&nbsp;профилем пользователя и&nbsp;присылает наиболее подходящие варианты в&nbsp;Telegram.</p><p>Перед запуском пользователь указывает желаемые должности, требования к&nbsp;работе и&nbsp;условия, которые считает неприемлемыми. После этого система сканирует сайты компаний и&nbsp;площадки с&nbsp;вакансиями, оценивает каждое объявление по&nbsp;степени соответствия резюме и&nbsp;формирует рейтинг.</p><p>По&nbsp;запросу ИИ-инструмент может адаптировать резюме под конкретную вакансию и&nbsp;подготовить сопроводительное письмо. При этом решение не&nbsp;отправляет отклик автоматически: пользователь должен самостоятельно проверить документы и&nbsp;решить, подавать&nbsp;ли заявку.</p><p>Сервис задуман как бесплатный. Для поиска вакансий он&nbsp;использует веб-агента TinyFish, а&nbsp;для анализа&nbsp;— бесплатные модели через OpenRouter. По&nbsp;умолчанию система переключается между Llama, Nvidia Nemotron, Google Gemma 4 и&nbsp;Alibaba Qwen3, если у&nbsp;одной из&nbsp;моделей заканчивается лимит. Вместо OpenRouter можно подключить Claude Code и&nbsp;API Anthropic, но&nbsp;в&nbsp;этом случае понадобится подходящая подписка или оплаченные токены.</p><p>Разработчик отдельно описал меры защиты данных. Файл с&nbsp;настройками и&nbsp;ссылкой на&nbsp;локальное резюме исключён из&nbsp;Git, поэтому его нельзя случайно опубликовать вместе с&nbsp;кодом проекта. Однако содержимое резюме все равно передаётся моделям, подключённым через OpenRouter. Тем, кто не&nbsp;хочет отправлять данные через этот сервис, автор предлагает использовать Claude Code.</p><p>По&nbsp;умолчанию autopilot‑jobhuntt настроен на&nbsp;поиск вакансий для&nbsp;разработчиков, но&nbsp;список профессий, компаний и&nbsp;требований можно изменить&nbsp;— нужно отредактировать файл конфигурации проекта.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/93c/8a0/746/93c8a07466fd8cd6a5edf258c20d2f06.png" width="708" height="801"></figure> <a href="https://habr.com/ru/posts/1057900/?utm_campaign=1057900&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 10 Jul 2026 11:48:31 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[autopilot-jobhunt]]></category><category><![CDATA[ии]]></category><category><![CDATA[поиск работы]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @nightweb — Веб-разработка (+1) — 03.07.2026 10:06]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1055108/</guid>
    <link>https://habr.com/ru/posts/1055108/?utm_campaign=1055108&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p> <strong>Два часа потерял из-за того, что не написал один хендлер</strong></p><p>Делал платежи в Telegram-боте. Нативные, через sendInvoice и ЮKassa.</p><p>Всё настроил: токен от BotFather получил, инвойс отправляется, кнопка оплаты появляется. Пользователь нажимает - и платёж падает с ошибкой. Молча. Без подробностей.</p><pre><code>Payment failed</code></pre><p>И всё. Telegram не говорит что именно не так.</p><p>Полез гуглить. Первая мысль - provider_token неверный. Проверил три раза, скопировал заново. Нет, токен правильный.</p><p>Потом решил что проблема в суммах - они передаются в копейках, не в рублях. 500 рублей = 50000. Перепроверил, у меня было правильно.</p><p>Потом подумал на webhook - может HTTPS не настроен как надо. Потратил минут сорок на проверку сертификата, перенастройку ngrok. Всё работает, но платежи всё равно падают.</p><p>Уже хотел идти спать, случайно наткнулся на строчку в документации:</p><blockquote><p>Your bot must reply to this query in 10 seconds</p></blockquote><p>Это про pre_checkout_query. Когда пользователь нажимает «Оплатить» - Telegram сначала отправляет боту запрос на подтверждение. Бот должен ответить в течение 10 секунд. Если не ответил - платёж автоматически отклоняется.</p><p>У меня хендлера для этого не было вообще. Бот просто молчал.</p><p>Добавил три строки:</p><p>python</p><pre><code>@dp.pre_checkout_query()
async def pre_checkout(query: types.PreCheckoutQuery):
    await query.answer(ok=True)</code></pre><p>Платёж прошёл с первого раза.</p><p>Два часа отладки из-за трёх строк кода которые я не написал.</p><p>Если кто-то тоже делает платежи в Telegram-боте и получает молчаливый отказ - проверьте pre_checkout_query первым делом, до всего остального.</p> <a href="https://habr.com/ru/posts/1055108/?utm_campaign=1055108&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 03 Jul 2026 07:06:04 GMT</pubDate>
    <dc:creator><![CDATA[nightweb]]></dc:creator>
      
      <category><![CDATA[telegram]]></category><category><![CDATA[telegram bot]]></category><category><![CDATA[python]]></category><category><![CDATA[платежи]]></category><category><![CDATA[pre_checkout_query]]></category><category><![CDATA[aiogram]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dKosarevsky — Python (+2) — 02.07.2026 15:10]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1054882/</guid>
    <link>https://habr.com/ru/posts/1054882/?utm_campaign=1054882&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>В дополнение к <a href="https://habr.com/ru/posts/1051172/" rel="noopener noreferrer nofollow">посту</a> по albu-mcp</p><p>В доке Albumentations появился отдельный раздел про мой AlbumentationsX MCP - <a href="https://albumentations.ai/docs/integrations/mcp/" rel="noopener noreferrer nofollow">https://albumentations.ai/docs/integrations/mcp/</a></p><p>Теперь есть официальный integration guide, где показано, как ты можешь подключить MCP-сервер к AI-assistant’у и использовать его для нормального HITL workflow вокруг CV-аугментаций: подобрать pipeline, провалидировать его, отрендерить локальные previews, сравнить baseline и candidate, дать feedback вроде too_noisy:high и экспортировать финальный pipeline.</p><p>Приятно видеть, что проект стал частью экосистемной документации Albumentations. 🙂</p><p>AlbumentationsX MCP это конечно же не замена Python API, а assistant-facing review layer для тех случаев, когда ты хочешь быстрее и безопаснее работать с augmentation pipelines.</p> <a href="https://habr.com/ru/posts/1054882/?utm_campaign=1054882&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 02 Jul 2026 12:10:27 GMT</pubDate>
    <dc:creator><![CDATA[dKosarevsky]]></dc:creator>
      
      <category><![CDATA[mcp]]></category><category><![CDATA[mcp-server]]></category><category><![CDATA[albumentations]]></category><category><![CDATA[augmentation]]></category><category><![CDATA[agents]]></category><category><![CDATA[ai]]></category><category><![CDATA[ai-агенты]]></category><category><![CDATA[deeplearning]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Python (+4) — 02.07.2026 13:58]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1054824/</guid>
    <link>https://habr.com/ru/posts/1054824/?utm_campaign=1054824&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Представлен открытый проект <a href="https://github.com/iamnetuseragent/ghostprovider" rel="noopener noreferrer nofollow">Ghostprovider</a>&nbsp;— терминальный инструмент для&nbsp;быстрого запуска GitHub‑проектов у&nbsp;себя на localhost.</p><p>Принцип работы проекта: предоставляется ссылка на&nbsp;репозиторий, а&nbsp;инструмент сам анализирует проект: ищет Dockerfile, docker‑compose, package.json, requirements.txt, Go/Rust/Python/Node‑признаки, определяет тип приложения и пытается развернуть его в&nbsp;Docker. После запуска показывает локальный URL, контейнеры, логи и дает управлять сервисами прямо из&nbsp;TUI: старт, стоп, рестарт, удаление. По&nbsp;сути это автоматизированная оболочка над git clone, docker build, docker run и docker compose up, только с&nbsp;автоанализом проекта и удобным интерфейсом в&nbsp;терминале.</p><p>Важно: инструмент реально запускает код из&nbsp;чужих репозиториев, поэтому случайные проекты лучше гонять в&nbsp;VM/песочнице и внимательно смотреть Dockerfile/docker‑compose перед запуском. Сам Ghostprovider выглядит прозрачным, но&nbsp;риск всегда в&nbsp;том, что&nbsp;именно вы через него запускаете.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/b2d/ab0/d21/b2dab0d21f704ff180b754162f90cb04.png" width="704" height="802"></figure> <a href="https://habr.com/ru/posts/1054824/?utm_campaign=1054824&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 02 Jul 2026 10:58:48 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[Ghostprovider]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Careviolan — Git (+2) — 29.06.2026 19:48]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1053572/</guid>
    <link>https://habr.com/ru/posts/1053572/?utm_campaign=1053572&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Как я перестал бояться опенсорсить свои поделки</p><p>для тех, кто пишет код в VS Code, не помнит наизусть флаги <code>git filter-repo</code> и считает, что IDE — нормально. Если ты из лагеря «настоящие программисты сидят в vim и пишут всё в Makefile» — просто пролистай<br><br><code>git-private2public</code> как .gitignore, но чтобы сделать зеркало приватного репо одной git push. </p><p><strong>Что это</strong></p><p>CLI-тулза. Держит два репо в синхроне: приватный (ваш рабочий бардак) и публичный (чистая версия). При пуше автоматически вычищает секреты и обновляет публичный mirror.</p><p>Конфиг — папка <code>.gitpublic/</code>, как <code>.gitignore</code>. По одной маске на строку, без YAML.</p><pre><code>.gitpublic/
  config      — source / target / push
  ignore      — что НЕ публиковать
  replace     — что заменить (==&gt; без кавычек)
  scan        — что не должно попасть, иначе падаем
  allow       — но конкретно эти можно пропускать в пуш,  
</code></pre><p>Файла нет → настройки нет. Просто.</p><p>Автопуш через git hook</p><pre><code>pip install git-private2public
cd ~/my-private-repo
git-private2public init
</code></pre><p><code>init</code> создаёт пять пустых файлов с закомментированными примерами. Дальше правите то, что нужно:</p><p><strong>Easy</strong> — только <code>ignore</code>:</p><pre><code>.env
secrets/
*.key
credentials.json
</code></pre><p><strong>Medium</strong> — добавляете <code>replace</code>:</p><pre><code>10.0.0.5          ==&gt; 203.0.113.5
real-token-here   ==&gt; ***
</code></pre><p><strong>Hard</strong> — добавляете <code>scan</code> (защита от факапов):</p><pre><code># scan
regex:github_pat_[A-Za-z0-9_]{30,}
regex:192\.168\.
</code></pre><p>Если в коде найдётся паттерн из <code>scan</code> — <code>publish</code> падает, ничего не пушится.</p><pre><code>git-private2public scan      # dry-run
git-private2public publish   # реальный пуш
</code></pre><p><strong>Автопуш через git hook</strong></p><p>Это та фича, ради которой я и начал. Никакого CI, никаких GitHub Actions.</p><pre><code>git-private2public hook enable
</code></pre><p>Ставит pre-push хук. Теперь обычный <code>git push</code> — отправляет в приватный репо <strong>и</strong> автоматически чистит-пушит в публичный mirror.</p><pre><code>git-private2public hook status    # проверить
git-private2public hook disable   # выключить
</code></pre><p>Работает офлайн, на любом хостинге.</p><p><strong>Почему не <code>git filter-repo</code> или BFG</strong></p><p>Я ими пользовался. Они мощнее, но мне нужны были четыре вещи в одной тулзе:</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/cfc/ed6/7d7/cfced67d7d7b7d28c264a9cbd6e022f9.png" width="1172" height="470"></figure><p>Не нашёл — написал.</p><p><strong>Установка (ещё раз, коротко)</strong></p><pre><code>pip install git-private2public</code></pre><p>Если pip не вариант — single-file: скачал <a href="https://github.com/megamen32/git-private2public/raw/refs/heads/main/git_private2public.py" rel="noopener noreferrer nofollow"><code>git_private2public.py</code></a>, <code>chmod +x</code>, готово (нужны <code>git-filter-repo</code> и <code>pyyaml</code>).</p><p><strong>Ссылки</strong></p><ul><li><p>Репо: <a href="https://github.com/megamen32/git-private2public" rel="noopener noreferrer nofollow">https://github.com/megamen32/git-private2public</a></p></li><li><p>MIT, форкайте, шлите PR</p></li><li><p>README на русском: <a href="https://github.com/megamen32/git-private2public/blob/main/README.ru.md" rel="noopener noreferrer nofollow"><code>README.ru.md</code></a></p></li></ul><p><strong>TL;DR</strong></p><p><code>pip install git-private2public</code> → <code>init</code> → редактируешь <code>.gitpublic/ignore</code> → <code>publish</code>. Если хочешь автопуш — <code>hook enable</code>.git push.  Всё.</p> <a href="https://habr.com/ru/posts/1053572/?utm_campaign=1053572&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 29 Jun 2026 16:48:43 GMT</pubDate>
    <dc:creator><![CDATA[Careviolan]]></dc:creator>
      
      <category><![CDATA[git]]></category><category><![CDATA[publishing]]></category><category><![CDATA[secrets]]></category><category><![CDATA[redacting]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Open source (+4) — 28.06.2026 12:56]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1052868/</guid>
    <link>https://habr.com/ru/posts/1052868/?utm_campaign=1052868&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Представлен открытый сервис Aliens Eye, который ищет всевозможную информацию в&nbsp;соцсетях, на&nbsp;сайтах и других ресурсах, предоставляя полный отчёт:</p><ul><li><p>840&nbsp;различных  OSINT-инструментов для&nbsp;анализа сайтов, соцсетей, других ресурсов, хостингов, доменов и даже физических устройства;</p></li><li><p>все сервисы работают по&nbsp;одному клику. При&nbsp;этом интерфейс интуитивно понятен;</p></li><li><p>отчёты предоставляет в&nbsp;JSON, CSV, HTML и Markdown форматах;</p></li><li><p>без&nbsp;ограничений, без&nbsp;дополнительных установок.</p></li></ul><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/430/e44/088/430e440881ae02531a6949d8f7c3c7bb.png" width="706" height="711"></figure> <a href="https://habr.com/ru/posts/1052868/?utm_campaign=1052868&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 28 Jun 2026 09:56:47 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[Aliens Eye]]></category>
  </item>
  

	
  

  

  

      

      

      

    
  </channel>
</rss>
