<?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>Fri, 05 Jun 2026 18:51:27 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[Пост @dugalb — Python — 04.06.2026 07:56]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1043412/</guid>
    <link>https://habr.com/ru/posts/1043412/?utm_campaign=1043412&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Почему подсчёт металлопроката на фото нельзя решить простым CV: инженерный эксперимент</strong></p><p>В задачах строительного контроля и складского учёта регулярно возникает практическая проблема: необходимо автоматически определить количество элементов в пачке металлопроката (трубы, профили, швеллеры) по фотографии.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/c6e/55a/f3d/c6e55af3d76a1ea4d4b879e58e52adab.png" width="1155" height="650"></figure><p>На практике это до сих пор часто выполняется вручную — с типичными ошибками: — перекрытие элементов в пачке — сложное освещение на площадке — различие типов профилей — человеческий фактор при массовом пересчёте</p><p>Была проверена базовая идея: можно ли обойтись без нейросетей и решить задачу классическими методами компьютерного зрения.</p><p>Использован упрощённый CV-конвейер:</p><ul><li><p>локальное размытие изображения (11×1 и 1×11) </p></li><li><p>сравнение пикселей с локальным средним уровнем </p></li><li><p>выделение областей повышенной интенсивности</p></li><li><p>формирование бинарной маски потенциальных торцов</p></li></ul><p>Метод не требует обучения модели и работает на CPU.</p><p><strong>Результаты</strong></p><p>Метод действительно даёт первичный сигнал, но имеет существенные ограничения:</p><ul><li><p>быстро отсекает явно пустые или нерелевантные области</p></li><li><p>не разделяет плотные пачки профилей</p></li><li><p>чувствителен к освещению и теням</p></li><li><p>даёт ложные срабатывания на посторонние объекты</p></li></ul><p><strong>Вывод</strong></p><p>Классические методы CV могут использоваться только как предварительный фильтр.</p><p>Для практической задачи подсчёта металлопроката требуется: — детекция объектов (YOLO-подходы) — либо сегментация с учётом перекрытий — адаптация под разные типы профилей</p><p>Если у вас есть похожие задачи на производстве или складе — интересно обсудить реальные условия: — типы проката — качество фото — сценарии учёта</p><p>P.S. Код базового эксперимента — это около 20 строк на OpenCV. Если нужен код — дайте знать в комментариях, выложу полный сниппет с фильтрацией. Но спойлер: для реальной работы его недостаточно.</p> <a href="https://habr.com/ru/posts/1043412/?utm_campaign=1043412&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 04 Jun 2026 04:56:11 GMT</pubDate>
    <dc:creator><![CDATA[dugalb]]></dc:creator>
      
      <category><![CDATA[opencv]]></category><category><![CDATA[python]]></category><category><![CDATA[matplotlib]]></category><category><![CDATA[компьютерное зрение]]></category><category><![CDATA[computervision]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dugalb — Python — 04.06.2026 07:29]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1043408/</guid>
    <link>https://habr.com/ru/posts/1043408/?utm_campaign=1043408&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Автоматизация расчётных схем: Python против ручного оформления</strong></p><p>Иногда на построение расчётной схемы уходит больше времени, чем на сам расчёт.</p><p>Нужно показать балку, нагрузки, размеры, оформить картинку для отчёта или пояснительной записки. И вот уже запускается ЛИРА, CAD или другой тяжёлый софт ради схемы, которую можно описать несколькими параметрами.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/2f2/97d/cec/2f297dcecedd4faa992d1b9e5529696a.png" width="1280" height="720"></figure><p>Есть и другой подход — генерировать такие схемы программно на Python через Matplotlib.</p><p>Вместо ручного рисования задаются:</p><p>• координаты опор;</p><p>• сосредоточенные силы;</p><p>• распределённые нагрузки;</p><p>• размеры и подписи.</p><p>Меняется исходное значение — схема перестраивается автоматически за доли секунды.</p><p>На изображении пример консольной балки(часть балки для МНП - расчета по Маколею или методу начальных параметов) с нагрузками 75 кН и 20 кН/м. Вся графика построена кодом. Никакого ручного оформления, масштабирования и выравнивания стрелочек.</p><p>Что нравится больше всего — оформление перестаёт быть отдельной задачей. Можно сосредоточиться на механике и проверке гипотез, а не на поиске нужной кнопки в интерфейсе.</p><p>Кстати, сам скрипт занимает меньше 30 строк кода.</p><p>Если хотите продолжения — напишите, какую схему или эпюру вы бы автоматизировали в первую очередь. Потребуется код — предупредите, подготовлю.</p> <a href="https://habr.com/ru/posts/1043408/?utm_campaign=1043408&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 04 Jun 2026 04:29:15 GMT</pubDate>
    <dc:creator><![CDATA[dugalb]]></dc:creator>
      
      <category><![CDATA[сопромат]]></category><category><![CDATA[python]]></category><category><![CDATA[matplotlib]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Python (+4) — 29.05.2026 07:39]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1040916/</guid>
    <link>https://habr.com/ru/posts/1040916/?utm_campaign=1040916&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Открытый проект <a href="https://github.com/solvercaptcha/solvecaptcha-python" rel="noopener noreferrer nofollow">Python library for interacting with the Solvecaptcha API (captcha‑solving service)</a>&nbsp;— это легковесная библиотека на&nbsp;Python, которая проходит самые популярные проверки через Solvecaptcha. </p><p>Обходит большинство самых мощных и популярных капч: </p><ul><li><p>reCAPTCHA v2&nbsp;и v3;</p></li><li><p>Cloudflare Turnstile;</p></li><li><p>FunCaptcha (Arkose Labs); </p></li><li><p>GeeTest и GeeTest v4; </p></li><li><p>Amazon WAF; </p></li><li><p>KeyCaptcha; </p></li><li><p>Grid, ClickCaptcha, Rotate, Canvas; </p></li><li><p>обычные текстовые и графические капчи, в&nbsp;том числе аудио.</p></li></ul><p>Библиотека небольшая, работает стабильно, разработчики её поддерживают, добавляя новые виды капч. Можно настраивать таймауты решения капч, чтобы имитировать поведение человека.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/7d6/a4f/05d/7d6a4f05dc6ea700bf58e26fc8afdd2a.jpeg" width="1280" height="870"></figure> <a href="https://habr.com/ru/posts/1040916/?utm_campaign=1040916&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 29 May 2026 04:39:54 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[Solvecaptcha API]]></category><category><![CDATA[Solvecaptcha]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @andrey_chuyan — DevOps (+1) — 27.05.2026 12:28]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1040016/</guid>
    <link>https://habr.com/ru/posts/1040016/?utm_campaign=1040016&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/ab9/cb7/650/ab9cb76502e30681d7ee84fd05ec0c1b.jpg" width="1331" height="751"></figure><p>Привет, коллеги! 👋 Уже в это воскресенье, 31 мая в 10:00, устроим мощный заряд знаний! ⚡️ За 4 часа своими руками поднимем стек мониторинга, настроим дашборды и оповещения! 📊🔔</p><p>Для кого это будет полезно:<br>- разработчики 💻<br>- аналитики 📈<br>- системные инженеры 🔧</p><p>Все подробности здесь: <a href="https://debugskills.ru/articles/labs/prometheus-grafana/" rel="noopener noreferrer nofollow">https://debugskills.ru/articles/labs/prometheus-grafana/</a></p> <a href="https://habr.com/ru/posts/1040016/?utm_campaign=1040016&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 27 May 2026 09:28:27 GMT</pubDate>
    <dc:creator><![CDATA[andrey_chuyan]]></dc:creator>
      
      <category><![CDATA[grafana]]></category><category><![CDATA[prometheus]]></category><category><![CDATA[observability]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @vibecodingai — Python (+1) — 26.05.2026 14:29]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1039580/</guid>
    <link>https://habr.com/ru/posts/1039580/?utm_campaign=1039580&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>🐍 Python Roadmap 2026: наконец-то  актуальная карта изучения Python.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/646/2fe/1cf/6462fe1cfb92c08c6140efd797bde21c.jpg" width="1024" height="1280"></figure><p>На <a href="https://github.com/justxor/pythonroamap2026" rel="noopener noreferrer nofollow">GitHub выложили большой русскоязычный роадмап</a> по Python на 2026 год - от первых скриптов до уровня Middle+/Senior.</p><p>&nbsp;Маршрут собран под современный Python:</p><p>- Python 3.13+</p><p>- free-threaded mode без GIL</p><p>- JIT</p><p>- uv вместо боли с pip/venv/poetry</p><p>- ruff, pyright, pytest, hypothesis</p><p>- async-first подход</p><p>- типизация</p><p>- CPython внутри</p><p>- web, базы, ML/AI, DevOps и архитектура</p><p>В роадмапе есть нормальная последовательность: сначала окружение и база, потом идиомы, ООП, типы, стандартная библиотека, асинхронность, тестирование, внутренности CPython, web, базы данных, AI-направление, продакшн и архитектура.</p><p>На каждом этапе есть задачи, чеклисты, примеры кода и бесплатные ресурсы. То есть это не мотивационная простыня, а маршрут, по которому реально можно идти несколько месяцев и видеть прогресс.</p><p>Для джунов  хороший роадмап закрыть дыры.</p><ul><li><p><a href="https://github.com/justxor/pythonroamap2026" rel="noopener noreferrer nofollow">Github</a></p></li></ul><p>#junior #python </p> <a href="https://habr.com/ru/posts/1039580/?utm_campaign=1039580&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 26 May 2026 11:29:39 GMT</pubDate>
    <dc:creator><![CDATA[vibecodingai]]></dc:creator>
      
      <category><![CDATA[python]]></category><category><![CDATA[python3]]></category><category><![CDATA[roadmap]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @senya_t — Natural Language Processing (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1039284/</guid>
    <link>https://habr.com/ru/posts/1039284/?utm_campaign=1039284&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Всем привет, нужны рекомендации и советы по следующим вопросам:</p><ol><li><p>Порекомендуйте бесплатные ресурсы для подготовки к собеседованиям по аналитике. </p></li><li><p>Если найдётся кто-то, кто работал над галлюцинациями и достоверностm. информации, сгенерированной LLM, поделитесь опытом.</p></li></ol> <a href="https://habr.com/ru/posts/1039284/?utm_campaign=1039284&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 25 May 2026 17:58:01 GMT</pubDate>
    <dc:creator><![CDATA[senya_t]]></dc:creator>
      
      <category><![CDATA[ai]]></category><category><![CDATA[llm]]></category><category><![CDATA[собеседования]]></category><category><![CDATA[аналитика]]></category><category><![CDATA[анализ данных]]></category><category><![CDATA[аналитика данных]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @SvetaDT — Блог компании Doubletapp — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/doubletapp/posts/1038764/</guid>
    <link>https://habr.com/ru/companies/doubletapp/posts/1038764/?utm_campaign=1038764&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как запускать маркетинговые спецпроекты с помощью мини-приложений в VK, Telegram и Макс&nbsp;</strong></p><p>Mini Apps уже давно не просто «обертка для бота», а полноценная платформа для запуска спецпроектов, игровых механик и промо-активностей, которые&nbsp; часто используются в маркетинге.&nbsp;</p><p>Сегодня Mini Apps и боты — это полноценные платформы для:</p><ul><li><p>игровых механик</p></li><li><p>программ лояльности</p></li><li><p>event-маркетинга</p></li><li><p>UGC-кампаний</p></li><li><p>проектов с прямыми эфирами</p></li><li><p>AI-сценариев</p></li><li><p>интерактивного контента.</p></li></ul><p>В этой подборке – статьи команды Doubletapp о запуске и, проектировании мини-приложений на разных платформах, а также реализации проектов наших клиентов.&nbsp;</p><p><strong><a href="https://habr.com/ru/companies/doubletapp/articles/917286/" rel="noopener noreferrer nofollow">От кнопки до продакшена: как мы делаем Telegram Mini Apps</a></strong></p><p>В туториале разработчики разобрали все стадии создания мини аппа:</p><ul><li><p>как настроить проект</p></li><li><p>как создать фронтенд на React с поддержкой Telegram SDK</p></li><li><p>как реализовать бэкенд на Python (Django)</p></li><li><p>как связать все компоненты и развернуть приложение.  </p></li></ul><p>Пройдите все этапы вместе с авторами — и получите базу для запуска собственного Mini App в Telegram. </p><p><strong><a href="https://habr.com/ru/companies/doubletapp/articles/1013494/" rel="noopener noreferrer nofollow">Fame to Flame: как мы за два месяца собрали VK Mini App на 80 000 пользователей и собственный видеостриминг</a></strong></p><p>Интересный кейс про создание VK Mini App для танцевального чемпионата — с загрузкой пользовательского видеоконтента, голосованием, розыгрышами призов, anti-fraud системой и высокой нагрузкой.</p><p>Хороший пример того, как мини-приложения превращаются из маркетинговой механики в полноценную event-платформу.</p><p><strong><a href="https://habr.com/ru/companies/doubletapp/articles/928874/" rel="noopener noreferrer nofollow">Меньше нагрузки — больше запросов: искусство кеширования API</a></strong></p><p>Маркетинговые спецпроекты часто живут короткое время, но получают резкие всплески нагрузки: запуск рекламы, стрим в реальном времени, конкурсы, голосования и UGC-механики.</p><p>В статье backend-разработчик Doubletapp показывает, как правильно строить API caching и снижать нагрузку на инфраструктуру без потери производительности.</p><blockquote><p>Если вы планируете запуск собственного Mini App в Telegram, VK или Макс — команда <a href="https://doubletapp.ai/miniapp/?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=podborka_mini_apps" rel="noopener noreferrer nofollow">Doubletapp</a> поможет пройти путь от идеи и UX-сценариев до production-инфраструктуры и масштабирования под высокие нагрузки.&nbsp;</p></blockquote> <a href="https://habr.com/ru/posts/1038764/?utm_campaign=1038764&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 25 May 2026 12:00:01 GMT</pubDate>
    <dc:creator><![CDATA[SvetaDT (Doubletapp)]]></dc:creator>
      
      <category><![CDATA[боты]]></category><category><![CDATA[mini apps]]></category><category><![CDATA[mini app]]></category><category><![CDATA[mini apps telegram]]></category><category><![CDATA[mini apps python react]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @vibecodingai — Машинное обучение (+2) — 24.05.2026 10:35]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1038620/</guid>
    <link>https://habr.com/ru/posts/1038620/?utm_campaign=1038620&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Microsoft выложила в open source AI Engineer Coach - плагин, который оценивает, насколько адекватно вы работаете с агентами и не сливаете токены в пустоту.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/fe3/11c/3d1/fe311c3d15cf84a07b302180374a36c1.jpg" width="1280" height="1182"></figure><p>По сути, это локальный тренер по агентному кодингу. Он смотрит на ваши сессии, показывает, какие агенты использовались, сколько ушло токенов, где промпты были нормальными, а где вы просто заставляли дорогую модель делать работу, которую можно было решить проще.</p><p>Отдельно плагин проверяет 45 анти-паттернов. Например, если вы не используете plan mode, гоняете мощные модели на мелкие задачи, повторяете одни и те же действия руками или плохо готовите проект под работу агентов - он это подсветит.</p><p>Есть и практичная часть: AI Engineer Coach анализирует, готов ли проект к агентному кодингу, есть ли нужные файлы и инструкции, находит повторяющиеся промпты и помогает превращать их в скиллы. Плюс внутри есть роадмап по вайбкодингу и ачивки, чтобы было понятно, куда расти дальше.</p><p>Всё работает локально и бесплатно. Microsoft отдельно подчёркивает, что данные никуда не отправляются.</p><p>Выглядит как полезная штука для тех, кто уже живёт в Claude Code, Codex, Cursor и похожих инструментах, но хочет понять, где реально ускоряется, а где просто красиво сжигает контекст.</p><p><a href="https://github.com/microsoft/AI-Engineering-Coach" rel="noopener noreferrer nofollow">https://github.com/microsoft/AI-Engineering-Coach</a></p> <a href="https://habr.com/ru/posts/1038620/?utm_campaign=1038620&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 24 May 2026 07:35:55 GMT</pubDate>
    <dc:creator><![CDATA[vibecodingai]]></dc:creator>
      
      <category><![CDATA[машинное+обучение]]></category><category><![CDATA[искусственный интеллект]]></category><category><![CDATA[ai]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @vibecodingai — Машинное обучение (+3) — 19.05.2026 13:54]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1036862/</guid>
    <link>https://habr.com/ru/posts/1036862/?utm_campaign=1036862&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><a href="https://github.com/justxor/MachineLearningRoadmap" rel="noopener noreferrer nofollow">Большой русскоязычный roadmap по машинному обучению</a>: от первого <code>import numpy</code> до LLM, RAG, fine-tuning, AI-агентов и MLOps и лучших примеров вабкодинга.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/195/ea9/e63/195ea9e63ecba8748bbf87335b09b3f8.jpg" width="853" height="1280"></figure><p>Внутри нормальная структура: что учить, в каком порядке, зачем это нужно и что должно получиться на практике после каждого этапа.</p><p>Roadmap разбит на 7 треков:</p><ol><li><p>Фундамент: Python, математика, статистика, инструменты</p></li><li><p>Классический ML: scikit-learn, табличные данные, метрики, валидация</p></li><li><p>Deep Learning: PyTorch, CNN, RNN, training loop</p></li><li><p>LLM и трансформеры: attention, KV-cache, RAG, LoRA, агенты</p></li><li><p>Generative AI: изображения, видео, аудио, мультимодальность</p></li><li><p>MLOps и прод: Docker, Kubernetes, CI/CD, monitoring, serving</p></li><li><p>Специализация: CV, NLP, RecSys, RL, Safety</p></li></ol><p>Roadmap не продаёт иллюзию “обучил модель - стал ML-инженером”.</p><p>В реальной работе много времени уходит на данные, метрики, деплой, мониторинг, воспроизводимость и разбор ошибок. Модель - только часть системы.</p><p>Хорошая мысль из roadmap: LLM не делает джуна сеньором. Она ускоряет того, кто уже понимает базу. Без базы человек просто становится оператором Copilot, который не может объяснить, почему всё сломалось.</p><p>По времени тоже без сказок:</p><ol><li><p>0-3 месяца: Python, математика, классический ML</p></li><li><p>3-6 месяцев: Deep Learning и PyTorch</p></li><li><p>6-12 месяцев: LLM, RAG, fine-tuning, AI-агенты</p></li><li><p>12+ месяцев: MLOps, прод, масштабирование, специализация</p></li></ol><p>Тут же собрано 7 болших бесплатных курсов по машинному обучению, математике и вайбкодингу!</p><p>Если давно хотели зайти в ML системно, а не прыгать между роликами про ChatGPT, Stable Diffusion и “топ-10 библиотек”, это хороший ориентир.</p><p><a href="https://github.com/justxor/MachineLearningRoadmap" rel="noopener noreferrer nofollow">https://github.com/justxor/MachineLearningRoadmap</a></p> <a href="https://habr.com/ru/posts/1036862/?utm_campaign=1036862&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 19 May 2026 10:54:14 GMT</pubDate>
    <dc:creator><![CDATA[vibecodingai]]></dc:creator>
      
      <category><![CDATA[машинное+обучение]]></category><category><![CDATA[искусственный интеллект]]></category><category><![CDATA[python]]></category><category><![CDATA[data]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Rembish — Открытые данные (+3) — 18.05.2026 17:19]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1036516/</guid>
    <link>https://habr.com/ru/posts/1036516/?utm_campaign=1036516&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Вы когда-нибудь задумывались о том, насколько связен наш мир? Насколько сложно пересечь границу между странами? И вообще сколько их, этих граничных переходов? А насколько хорош аэропорт Вашего города - в сколько стран или направлений из него можно улететь? А есть ли паромы и периодические водные маршруты между двумя государствами? А ходят ли поезда из одной страны в другую, или ветка уже давно заброшена?</p><p>Это кажется простой задачей, пока мы находимся в Европе или, к примеру, в Северной Америке. Но начинает быть очень интересным исследованием, когда мы переместимся в Африку, Центральную Азию или, положим, в Южную Америку. А в Карибском бассейне вдруг окажется, что этим маленькие острова и не связаны настолько хорошо между собой.</p><p>А если включить в это уравнение закрытость границ, визовые и паспортные ограничение, то внезапно окажется, что задачка-то и не из лёгких.</p><p>Именно поэтому и возник проект Портулан: <strong><a href="https://portolanmap.com" rel="noopener noreferrer nofollow">portolanmap.com</a></strong>. Чтобы показать доступность территорий для внешнего мира. Ведь хотелось бы, чтобы границы были только у нас в головах, но на деле нам приходится считаться с границами государств и территорий.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/f2e/ad9/8df/f2ead98df2bfadd0b264d4d991b0400c.png" alt="Заглавный экран карты" title="Заглавный экран карты" width="1323" height="939"><div><figcaption>Заглавный экран карты</figcaption></div></figure><p>Аэропорты, терминалы паромов, сеть железных дорог, включая международные. Визы, посольства, базовая информация по странам. Всё вместе и в очень залипательном формате.</p><p>Под капотом - Python-pipeline для сбора и нормализации данных, Svelte/MapLibre GL на фронтенде, статическая раздача через Cloudflare без бэкенда и баз данных.</p> <a href="https://habr.com/ru/posts/1036516/?utm_campaign=1036516&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 18 May 2026 14:19:20 GMT</pubDate>
    <dc:creator><![CDATA[Rembish]]></dc:creator>
      
      <category><![CDATA[gis]]></category><category><![CDATA[python]]></category><category><![CDATA[maplibre]]></category><category><![CDATA[maplibre gl]]></category><category><![CDATA[open data]]></category><category><![CDATA[геоданные]]></category><category><![CDATA[аэропорты]]></category><category><![CDATA[карта мира]]></category><category><![CDATA[страны]]></category><category><![CDATA[маршруты]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @kobubu — Искусственный интеллект (+2) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1032794/</guid>
    <link>https://habr.com/ru/posts/1032794/?utm_campaign=1032794&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>В фильме Пассажиры 2016 г. впервые показано, как ии-ассистент сливает чувствительную информацию другим пользователям и рушит их жизни</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/f17/752/268/f17752268b8a5670243fbf725457896a.png" alt="ИИ-агент готовится слить твой секрет другому пользователю" title="ИИ-агент готовится слить твой секрет другому пользователю" width="530" height="298"><div><figcaption>ИИ-агент готовится слить твой секрет другому пользователю</figcaption></div></figure><p>Прикольный эпизод из фильма Пассажиры 2016 г., который точно описывает один из механизмов работы агентов. По сюжету, герой по ошибке пробуждается один из 5000 человек на корабле, который летит на далекую планету, и понимает, что он проснулся слишком рано, а до пункта назначения лететь еще  90 лет. Единственный его собеседник - андроид-бармен Артур.</p><p>Героя мучает совесть, но он все же будит спящую пассажирку, чтобы ему было не так скучно лететь. Однако прежде чем ее разбудить, он просит Артура хранить в секрете то, что это он ее разбудил. Говоря в терминологии ии-агентов, пользователь и агент на этом месте заключили контракт о чувствительной информации.</p><p>Затем во время празднования ДР героини в баре она сообщает Артуру, что между ними нет секретов. Артур, как хороший ии-агент, переспрашивает у героя, так ли это, и тот подтверждает, не особо задумываясь. В этот момент ии-агент получает указание, что эта информация больше не является чувствительной, что сразу же рушит счастье героя. Пардон за спойлер, если что.</p><p><a href="https://t.me/ML_Goose" rel="noopener noreferrer nofollow">Телеграм канал автора</a>, где он что‑то пишет про&nbsp;ML, NLP и разработку  </p> <a href="https://habr.com/ru/posts/1032794/?utm_campaign=1032794&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 08 May 2026 05:56:48 GMT</pubDate>
    <dc:creator><![CDATA[kobubu]]></dc:creator>
      
      <category><![CDATA[ии-агент]]></category><category><![CDATA[ии-агенты в бизнесе]]></category><category><![CDATA[ии]]></category><category><![CDATA[ии и машинное обучение]]></category><category><![CDATA[ии чат-бот]]></category><category><![CDATA[ии-ассистент]]></category><category><![CDATA[ии помощник]]></category><category><![CDATA[ии-модель]]></category><category><![CDATA[ии бот]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @asrelo — Python — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1030730/</guid>
    <link>https://habr.com/ru/posts/1030730/?utm_campaign=1030730&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>В TOML нет <code>null</code>. У меня — есть (только для Python)</strong></p><p><strong>TLDR: </strong>TOML — удобный формат конфигураций, но ему не хватает поддержки <code>null</code>. Создатели языка осознанно отказались и отказываются добавлять <code>null</code>. Я столкнулся с этой проблемой при слиянии TOML-конфигураций в своём Python-проекте и решил её, форкнув популярные библиотеки и добавив в них поддержку значения <code>null</code>  : <a href="https://pypi.org/project/tomli-null/" rel="noopener noreferrer nofollow">tomli-null</a> (парсер) и <a href="https://pypi.org/project/tomli-w-null/" rel="noopener noreferrer nofollow">tomli-w-null</a> (генератор).</p><p><a href="https://toml.io/" rel="noopener noreferrer nofollow">TOML</a> — популярный с недавних пор язык конфигурационных файлов, <s>сочетающий</s> избегающий проблемы других языков:</p><ul><li><p>TOML стандартизован, имеет типы данных, позволяет кодировать вложенные структуры (привет, INI);</p></li><li><p>TOML относительно прост и парсится без хитростей (привет, YAML),</p></li><li><p>синтаксис TOML легко читаем, поддерживает комментарии и не имеет нюансов вроде ошибок от далёких скобок и лишних запятых (привет, JSON).</p></li></ul><p>TOML, согласно <a href="https://toml.io/en/v1.1.0" rel="noopener noreferrer nofollow">спецификации</a>, "стремится быть минимальным форматом для файлов конфигурации, который легко читается благодаря очевидной семантике". С "минимальностью" языка в принципе можно поспорить — там и отдельные типы для даты/времени (4 штуки, 3 из них имеют варианты синтаксиса), и сахар в числовых литералах вроде <code>0xFF00_0000</code>, и непростой синтаксис для ключей (чтобы допускать и сочетать простые ключи, составные ключи, произвольные ключи в кавычках).</p><p>Но вот что я совершенно не ожидал и проглядел, когда выбирал TOML основным форматом для человеко-редактируемых структур данных в своём проекте, — что <strong>в TOML нет <code>null</code></strong>. Вообще. Это осознанное решение создателей языка. Разные аргументы против <code>null</code>, прозвучавшие за это время:</p><ul><li><p>"<em>Если значение не определено, пару ключ-значение просто нужно не указывать.</em>" <em>Нужно</em>, не <em>можно</em>.</p><p>Случаи, когда в приложении значение по умолчанию отличается от <code>null</code>, игнорируются.</p></li><li><p>"<em><code>null</code> создаёт неоднозначность между значением <code>null</code> и отсутствием пары ключ-значение.</em>"</p></li><li><p>"<em>Если мы разрешим <code>null</code>, это повлияет на всю систему типов; например, целое число теперь будет не "целое число", а "</em><a href="https://github.com/toml-lang/toml/issues/146#issuecomment-14217902" rel="noopener noreferrer nofollow"><em>целое число или null</em></a><em>".</em>"</p><p>???</p></li><li><p>"<em>Если очень нужно, вы можете использовать специальные значения по своему усмотрению: <code>0</code>, <code>-1</code>, <code>""</code>, <code>"null"</code>, <code>[]</code>, <code>{}</code>. Ещё можно использовать дополнительные поля для обозначения наличия значения (типа <code>{ present=true, value=100500 }</code>, или <code>null_values = ["key_a", "key_c"]</code>).</em>"</p><p>Гора разнообразных костылей с барского плеча, на пустом месте добавляющие кучу боли для интероперабельности, спасибо.</p></li></ul><p>Ответственных за спецификацию <a href="https://github.com/toml-lang/toml/issues/30" rel="noopener noreferrer nofollow">годами</a> <a href="https://github.com/toml-lang/toml/issues/802" rel="noopener noreferrer nofollow">просят</a> <a href="https://github.com/toml-lang/toml/discussions/1037" rel="noopener noreferrer nofollow">добавить</a> <code>null</code> в будущей версии, ответственные ушли в глухой отказ.</p><p>Для меня наличие <code>null</code> в подобном языке было само собой разумеющимся, я даже не думал об этом, когда разрабатывал сложный проект на Python, где файлы TOML пишутся и читаются человеком, пишутся и читаются программами, сливаются друг с другом. Когда я наконец-то напоролся на практике на отсутствие <code>null</code> (при слиянии конфигураций), менять всё на YAML было уже слишком поздно, а костыли добавили бы слишком много сложности.</p><p>Поэтому я форкнул пару библиотек и добавил в них поддержку <code>null</code> самым очевидным образом, не нуждающимся даже в примерах — просто литерал <code>null</code> на стороне TOML соответствует <code>None</code> на стороне Python.</p><ul><li><p><a href="https://pypi.org/project/tomli-null/" rel="noopener noreferrer nofollow">tomli-null</a> — парсер, форк <a href="https://pypi.org/project/tomli/" rel="noopener noreferrer nofollow">tomli</a> (<code>tomli</code> включена в Python 3.11 как <a href="https://docs.python.org/3/library/tomllib.html" rel="noopener noreferrer nofollow">tomllib</a>);</p></li><li><p><a href="https://pypi.org/project/tomli-w-null/" rel="noopener noreferrer nofollow">tomli-w-null</a> — генератор, форк <a href="https://pypi.org/project/tomli-w/" rel="noopener noreferrer nofollow">tomli-w</a>.</p></li></ul><p>(100% покрытие тестами прилагается само собой.)</p><p>P.S. PyPI очень... <em>интересным </em>образом показывает информацию об авторах из пакета, несколько раз напоролся, пока пытался убрать автора оригинальных библиотек из поля "для связи" на сайте.</p> <a href="https://habr.com/ru/posts/1030730/?utm_campaign=1030730&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 02 May 2026 20:32:20 GMT</pubDate>
    <dc:creator><![CDATA[asrelo]]></dc:creator>
      
      <category><![CDATA[TOML]]></category><category><![CDATA[Python]]></category><category><![CDATA[конфигурация]]></category><category><![CDATA[open source]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @denis-19 — Open source (+4) — 01.05.2026 20:06]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1030514/</guid>
    <link>https://habr.com/ru/posts/1030514/?utm_campaign=1030514&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Представлен открытый проект <a href="https://github.com/olalie/tapmap" rel="noopener noreferrer nofollow">TapMap</a>, который следит за всеми подключениями на интерактивной карте и показывает, к серверам в каких странах отправляет запросы ПК пользователя. </p><p>Проект сканирует приложения, сервисы, страны и порты за последние 30 дней. При этом данные никуда не улетают — всё локально на компьютере.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/790/d90/ef7/790d90ef73a6457396065f94f66922cb.gif" width="1916" height="1076"></figure> <a href="https://habr.com/ru/posts/1030514/?utm_campaign=1030514&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 01 May 2026 17:06:55 GMT</pubDate>
    <dc:creator><![CDATA[denis-19]]></dc:creator>
      
      <category><![CDATA[TapMap]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @zdanevich-vitaly — Rust (+4) — 30.04.2026 08:28]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1029870/</guid>
    <link>https://habr.com/ru/posts/1029870/?utm_campaign=1029870&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Я давний пользователь <a href="https://github.com/vitaly-zdanevich/geeknote" rel="noopener noreferrer nofollow">Geeknote</a> - это cli для <a href="https://evernote.com/" rel="noopener noreferrer nofollow">Evernote</a>. Несколько лет назад проект застрял на втором Питоне - и никто не хотел его портировать на третий. Я ждал что кто-то займётся этим - но пришлось самому - так что я форкнул, починил, и даже связался с Виталием Роденко - одним из создателей Geeknote и администратора на PyPI, чтобы получить право туда пушить. За десяток лет я видел как Geeknote переходил из одни руки в другие - и как он забрасывался, и через несколько лет находился новый мантейнер. Было забавно осознать, что теперь и я стал мантейнером программного продукта, который всегда установлен на все мои машины.</p><p>Как и большинство из нас, я стал пробовать LLM - как замену поиску, для анализа кодов, советов, и вот наконец - несколько проектов - даже не читая кода - только давая команды и тестируя результат. Известная шутка - переписать на Rust. Почему бы у нет - Geeknote не велик - около пяти тысяч строк на Питоне, что я и попробовал - через <strong>Codex gpt-5.5</strong>. Несколько десятков итераций, "добавь это", "добавь то", "пропали теги", "пропала анимация" - и за несколько часов я получил рабочий Geeknote на Rust, назвал его <a href="https://gitlab.com/vitaly-zdanevich/reeknote" rel="noopener noreferrer nofollow">reeknote</a>. </p><p>Результат: быстрее работает, раза в два. Теперь буду им пользоваться.</p><p>P.S.: CLI хороши для перфоманса, SSH, быстрее разработка без GUI, а ещё похоже и для LLM - можно попросить сохранить ответ в Evernote. Как и прочие интеграции, в том числе в скриптах.</p> <a href="https://habr.com/ru/posts/1029870/?utm_campaign=1029870&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 30 Apr 2026 05:28:25 GMT</pubDate>
    <dc:creator><![CDATA[zdanevich-vitaly]]></dc:creator>
      
      <category><![CDATA[evernote]]></category><category><![CDATA[geeknote]]></category><category><![CDATA[cli]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dugalb — Интерфейсы (+2) — 28.04.2026 23:25]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1029316/</guid>
    <link>https://habr.com/ru/posts/1029316/?utm_campaign=1029316&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Что&nbsp;такое magicgui и зачем он нам?</strong></p><p><strong><a href="https://github.com/pyapp-kit/magicgui" rel="noopener noreferrer nofollow">magicgui</a> </strong>— это Python‑библиотека для&nbsp;быстрой разработки простых интерфейсов. Если нужен сложный интерфейс с&nbsp;кастомной вёрсткой и нестандартным поведением&nbsp;— лучше взять PyQt‑Pyside. Когда задача обернуть функцию в&nbsp;окошко за 5&nbsp;минут&nbsp;— magicgui справится.</p><p>В&nbsp;настоящее время&nbsp;<strong>magicgui</strong>&nbsp;поддерживает следующие бэкэнды:</p><ul><li><p><a href="https://www.qt.io/" rel="noopener noreferrer nofollow">Qt</a>&nbsp;(через&nbsp;<a href="https://pypi.org/project/PySide2/" rel="noopener noreferrer nofollow">PySide2</a>&nbsp;/&nbsp;<a href="https://pypi.org/project/PySide6/" rel="noopener noreferrer nofollow">PySide6</a>&nbsp;или&nbsp;<a href="https://pypi.org/project/PyQt5/" rel="noopener noreferrer nofollow">PyQt5</a>&nbsp;/&nbsp;<a href="https://pypi.org/project/PyQt6/" rel="noopener noreferrer nofollow">PyQt6</a>&nbsp;)</p></li><li><p><a href="https://ipywidgets.readthedocs.io/en/latest/" rel="noopener noreferrer nofollow">Виджеты Jupyter</a></p></li></ul><p>API организовано на&nbsp;двух уровнях:</p><figure class="bordered full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/81a/715/c93/81a715c93a49425ee6f7e71fef4a6675.png" alt="слои API magicgui" title="слои API magicgui" width="834" height="1158"><div><figcaption>слои API magicgui</figcaption></div></figure><p>Верхний уровень&nbsp;— магия типов. Декораторы <a class="mention" href="/users/magicgui">@magicgui</a>, <a class="mention" href="/users/guiclass">@guiclass</a>, автоопределение виджетов по&nbsp;аннотациям.</p><p>Нижний уровень&nbsp;— ручная сборка из&nbsp;готовых <a href="https://pyapp-kit.github.io/magicgui/widgets/" rel="noopener noreferrer nofollow">виджетов </a>(SpinBox, Slider, PushButton).</p><p><strong>Примеры работы: </strong><a href="https://pyapp-kit.github.io/magicgui/generated_examples/" rel="noopener noreferrer nofollow">https://pyapp‑kit.github.io/magicgui/generated_examples/</a></p><p><strong>Github: </strong><a href="https://github.com/pyapp-kit/magicgui" rel="noopener noreferrer nofollow">https://github.com/pyapp‑kit/magicgui</a></p> <a href="https://habr.com/ru/posts/1029316/?utm_campaign=1029316&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 28 Apr 2026 20:25:42 GMT</pubDate>
    <dc:creator><![CDATA[dugalb]]></dc:creator>
      
      <category><![CDATA[gui]]></category><category><![CDATA[ui]]></category><category><![CDATA[qt]]></category><category><![CDATA[интерфейсы]]></category><category><![CDATA[python]]></category><category><![CDATA[pyqt]]></category><category><![CDATA[pyside]]></category><category><![CDATA[jupyter]]></category><category><![CDATA[jupyter notebook]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @tripolskypetr — Искусственный интеллект (+4) — 28.04.2026 19:27]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1029260/</guid>
    <link>https://habr.com/ru/posts/1029260/?utm_campaign=1029260&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Почему цена почти доходит до TP, но разворачивается</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/82e/760/046/82e76004632d75e862d32dea7c6d7422.png" width="1168" height="784"></figure><p><strong>Будущее это вероятностная функция от прошлого</strong>. ATR это чистая функция от прошлого. Разница в том, что в вероятностной функции есть коэфициент случайности и точно прогнозировать можно только лучший и худший случай</p><p>Именно по этому цена не доходит до TP, если высчитать его на индикаторах. Либо TP слишком низкий и не окупает fees. <strong>Верным решением для вероятностной функции будет прогнозировать лучший и худший случай на лету</strong></p><pre><code class="typescript">//@version=5
strategy("Стратегия с TP по ATR")

...

tpPrice    = entryPrice + atrMultTP * atr // Это не работает</code></pre><p>Выходить из позиции при просадке PNL на заранее известный процент статистически предсказуемо.</p><pre><code class="typescript">listenActivePing(async ({ symbol, data }) =&gt; {
  const peakProfitDistance = await getPositionHighestProfitDistancePnlPercentage(symbol);
  const currentProfit = await getPositionPnlPercent(symbol);

  if (currentProfit &lt; 0) {
    return;
  }

  if (peakProfitDistance &lt; TRAILING_TAKE) {
    return;
  }

  await commitClosePending(symbol, {
    id: "unknown",
    note: str.newline(
      "# Позиция закрыта по trailing take",
    ),
  });
});</code></pre><p>Тут есть разница: в отличие от классического trailing take где выход из позиции ставится на цену, которая каждый раз разная, отклонение PnL - постоянная величина</p> <a href="https://habr.com/ru/posts/1029260/?utm_campaign=1029260&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 28 Apr 2026 16:27:07 GMT</pubDate>
    <dc:creator><![CDATA[tripolskypetr]]></dc:creator>
      
      <category><![CDATA[трейдинг]]></category><category><![CDATA[криптовалюты]]></category><category><![CDATA[мосбиржа]]></category><category><![CDATA[tradingview]]></category><category><![CDATA[pinescript]]></category><category><![CDATA[typescript]]></category><category><![CDATA[python]]></category><category><![CDATA[торговля]]></category><category><![CDATA[биржа]]></category><category><![CDATA[binance]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @VAGNAT — Проектирование и рефакторинг (+4) — 28.04.2026 10:43]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1028926/</guid>
    <link>https://habr.com/ru/posts/1028926/?utm_campaign=1028926&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Паттерны проектирования еще актуальны?</strong></p><p>Вокруг все чаще говорят, что ИИ скоро будет писать код за нас. Логичный вопрос — нужны ли тогда паттерны? Зачем разбираться в паттернах GoF, если нейросеть и так сгенерирует рабочий код по описанию?</p><p>У меня ощущение обратное.</p><p>Я плотно вошел в разработку в 2019 году. Переходил из 1С в .NET. Книги по паттернам GoF у меня были, но долго лежали как «книга на полке». Казалось, они оторваны от повседневных задач. Теорию вроде понимал, но не видел, где это реально применяется.</p><p>Все поменялось, когда я стал использовать ИИ как инструмент для обучения. Просил давать задачи, искать проблемы в решениях, объяснять, почему в одном месте уместен Strategy, а в другом лучше Mediator. Через практику и обсуждение паттерны перестали быть абстракцией.</p><p>Чем проще генерировать код, тем важнее понимать его форму и границы. Иначе не ускоришь разработку, а ускоришь накопление технического долга.</p><p>Из этого и вырос мой pet-project <a href="http://gofinsights.com" rel="noopener noreferrer nofollow">gofinsights.com</a>. Я делаю его тренажером по паттернам проектирования. Не просто «прочитал и забыл», а через практику, сравнение решений и постепенное распознавание типовых архитектурных ходов.</p><p>Сейчас там есть интерактивный квиз, где можно проверить базу и не перепутать Factory Method с Abstract Factory. Дальше хочу развивать проект в сторону более глубокого ИИ-разбора. Чтобы можно было не только узнавать паттерн, но и разбирать кодовые запахи, причины проблем и возможную эволюцию решений.</p><p>Как вы это видите? Паттерны проектирования все еще рабочая база для разработчика? Или с появлением ИИ они станут менее важны?</p> <a href="https://habr.com/ru/posts/1028926/?utm_campaign=1028926&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 28 Apr 2026 07:43:49 GMT</pubDate>
    <dc:creator><![CDATA[VAGNAT]]></dc:creator>
      
      <category><![CDATA[паттерны проектирования]]></category><category><![CDATA[паттерны программирования]]></category><category><![CDATA[шаблоны]]></category><category><![CDATA[тренажёр]]></category><category><![CDATA[java]]></category><category><![CDATA[python]]></category><category><![CDATA[csharp]]></category><category><![CDATA[php]]></category><category><![CDATA[go]]></category><category><![CDATA[шаблоны проектирования]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dugalb — Python (+2) — 28.04.2026 05:54]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1028848/</guid>
    <link>https://habr.com/ru/posts/1028848/?utm_campaign=1028848&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/c26/a3c/8ef/c26a3c8ef1efc23c9278c851cd3e5574.png" width="860" height="578"></figure><p><strong>Разрываем шаблоны: строим график с&nbsp;разрывом всего на 65&nbsp;строк</strong> </p><p>Иногда нужно скрыть часть графика используя&nbsp;линию обрыва, чтобы показать данные с&nbsp;сильно различающимися значениями. Например, когда один язык программирования популярнее остальных в&nbsp;разы.</p><p>Самые ходовые решения этой проблемы&nbsp;— разорванная ось (broken axis) или&nbsp;отдельные бины для&nbsp;аномалий. Проблема в&nbsp;том, что&nbsp;в&nbsp;Matplotlib нет готовой «кнопки» для&nbsp;создания гистограммы с&nbsp;разрывом. Но&nbsp;это легко* собирается руками на&nbsp;уровне нескольких осей.</p><p>Вот три рабочих подхода&nbsp;— выбирайте под&nbsp;свою задачу.</p><ol><li><p>Официальный пример из&nbsp;документации Matplotlib. 🔗 <a href="https://matplotlib.org/stable/gallery/subplots_axes_and_figures/broken_axis.html" rel="noopener noreferrer nofollow">Ссылка на&nbsp;гайд</a>. Отлично работает, когда выбросы зашкаливают по&nbsp;одной оси (X или&nbsp;Y). В&nbsp;посте разбирается как&nbsp;раз такой случай: гистограмма с&nbsp;волнистой&nbsp;линией обрыва.</p></li><li><p>Библиотека <strong>brokenaxes </strong>делает почти всё сама. Устанавливается стандартно через pip. Вариант для&nbsp;тех, кто не&nbsp;хочет углубляться в&nbsp;ручную настройку.</p></li><li><p>Логарифмическая шкала (часто&nbsp;— самый простой выход) Если выбросы строго положительные и отличаются на&nbsp;порядки, иногда достаточно двух строк: plt.xscale(«log») или&nbsp;plt.yscale(«log»). Никаких разрывов, никакой ручной работы&nbsp;— при&nbsp;этом график остаётся чистым и читаемым.</p></li></ol><pre><code class="python">import matplotlib.patches as mpatches
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.path import Path


def plot_broken_axis(
    labels: list[str],
    values: tuple[float, ...],
    ylim_low=(0, 12),
    ylim_high=(20, 25),
    **kwargs,
):
    """
    Строит график с разрывом оси.
    Валидирует входные данные и инкапсулирует логику отрисовки.
    """
    if len(labels) != len(values):
        raise ValueError("Длины labels и values не совпадают")

    fig, (ax_high, ax_low) = plt.subplots(
        nrows=2, figsize=(7, 4), gridspec_kw={"height_ratios": [1, 2]}
    )

    # Настройки столбцов
    kwargs.setdefault("color", "skyblue")
    kwargs.setdefault("edgecolor", "black")
    kwargs.setdefault("alpha", 0.85)

    ax_low.bar(labels, values, **kwargs)
    ax_high.bar(labels, values, **kwargs)
    fig.subplots_adjust(hspace=0.0)

    # Настройка осей
    ax_low.set_ylim(*ylim_low)
    ax_high.set_ylim(*ylim_high)
    ax_high.set_title("График с разрывом")
    ax_low.set_ylabel("Рейтинг в %")
    ax_low.set_xlabel("Языки")
    ax_high.spines["bottom"].set_visible(False)
    ax_low.spines["top"].set_visible(False)
    ax_high.tick_params(axis="x", bottom=False, labelbottom=False)
    # Рисуем разрыв оси (волна)
    offset, n_points = 0.03, 33
    pts = np.linspace(-offset, 1 + offset, n_points)
    wave = np.array([1 + (0, offset, 0, -offset)[i % 4] for i in range(n_points)])
    path = Path(list(zip(pts, wave)), [Path.MOVETO] + [Path.CURVE3] * (n_points - 1))

    opts = dict(transform=ax_low.transAxes, clip_on=False, zorder=10)
    ax_low.add_patch(mpatches.PathPatch(path, lw=6, **opts))
    ax_low.add_patch(mpatches.PathPatch(path, lw=3, edgecolor="white", **opts))
    return fig


if __name__ == "__main__":
    langs = ["Python", "C", "C++", "Asm"]
    pops = (21.8, 11.1, 8.6, 1.1)

    # Стиль xkcd
    with plt.xkcd(scale=1, length=300, randomness=30):
        plt.rcParams["font.family"] = "Comic Sans MS"

        # Вызов функции
        fig = plot_broken_axis(langs, pops)
        plt.show()</code></pre><p>Литература:</p><ul><li><p>Документация Matplotlib. 🔗 <a href="https://matplotlib.org/stable/gallery/subplots_axes_and_figures/broken_axis.html" rel="noopener noreferrer nofollow">Ссылка на&nbsp;гайд</a></p></li><li><p>Bernd Klein. Numerisches Python Arbeiten mit NumPy, Matplotlib und Pandas</p></li><li><p>Sandro Tosi. Matplotlib for Python Developers</p></li></ul> <a href="https://habr.com/ru/posts/1028848/?utm_campaign=1028848&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 28 Apr 2026 02:54:03 GMT</pubDate>
    <dc:creator><![CDATA[dugalb]]></dc:creator>
      
      <category><![CDATA[python]]></category><category><![CDATA[matplotlib]]></category><category><![CDATA[refactoring]]></category><category><![CDATA[data-visualisation]]></category><category><![CDATA[bestpractices]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dugalb — Искусственный интеллект (+1) — 26.04.2026 18:41]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1028172/</guid>
    <link>https://habr.com/ru/posts/1028172/?utm_campaign=1028172&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как&nbsp;читать статьи с&nbsp;arXiv на&nbsp;русском без&nbsp;лишних усилий </strong></p><p>Если вы работаете с&nbsp;машинным обучением или&nbsp;исследовательскими задачами, arXiv, скорее всего,&nbsp;— ваш основной источник свежих идей. </p><p>Но&nbsp;далеко не&nbsp;всегда удобно читать оригинал на&nbsp;английском: устали, хотите&nbsp;быстро пробежаться по&nbsp;статье или&nbsp;просто не&nbsp;готовы сейчас разбираться в&nbsp;длинном PDF. </p><p>В&nbsp;этом посте&nbsp;— два практичных способа читать статьи с&nbsp;arXiv в&nbsp;HTML‑формате прямо в&nbsp;браузере и сразу переводить их на&nbsp;русский с&nbsp;помощью встроенного перевода. Никаких LLM, сторонних ботов и скачивания PDF.</p><p><strong>Зачем вообще HTML, если есть PDF</strong></p><p>Классический сценарий работы с&nbsp;arXiv выглядит так: вы открываете страницу статьи, скачиваете PDF и читаете его в&nbsp;отдельной программе или&nbsp;через встроенный viewer браузера.</p><p>У&nbsp;такого подхода есть несколько минусов:</p><ul><li><p>Неудобно переводить: нужно копировать текст или&nbsp;использовать отдельные инструменты.</p></li><li><p>Плохо искать по&nbsp;странице: текст может&nbsp;быть нераспознанным или&nbsp;разбитым.</p></li><li><p>Тяжелее читать на&nbsp;маленьких экранах, особенно на&nbsp;ноутбуках и планшетах.</p></li></ul><p>HTML‑версия решает эти проблемы: текст становится «живым», браузер может его переводить, а&nbsp;навигация и поиск по&nbsp;странице работают привычным образом.</p><p><strong>Способ 1. Официальный HTML (experimental)</strong></p><p>У&nbsp;части статей на&nbsp;arXiv есть встроенная HTML‑версия.Если она включена, справа на&nbsp;странице вы увидите кнопку «<strong>HTML (experimental)</strong>».</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/027/30e/782/02730e782058741609d9ee14befc3070.png" width="1253" height="516"></figure><p>Что&nbsp;это даёт:</p><ul><li><p>статья открывается как&nbsp;полноценная HTML‑страница;</p></li><li><p>формулы остаются корректными;</p></li><li><p>можно использовать встроенный перевод в&nbsp;браузере.</p></li></ul><p>Ограничения:</p><ul><li><p>HTML‑версии есть не&nbsp;у&nbsp;всех препринтов.</p></li><li><p>Иногда верстка «плывёт», особенно в&nbsp;сложных таблицах.</p></li></ul><p><strong>Способ 2. ar5iv (если HTML нет)</strong></p><p>Если кнопки&nbsp;<strong>HTML (experimental)</strong>&nbsp;нет, можно воспользоваться сторонним сервисом&nbsp;<strong>ar5iv</strong>&nbsp;из&nbsp;экосистемы arXiv Labs. Он автоматически конвертирует TeX‑исходники статей в&nbsp;HTML.</p><p>Идея простая: вы берете обычный URL arXiv и меняете в&nbsp;домене букву&nbsp;<code>x</code>&nbsp;на&nbsp;<code>5</code>.</p><p>Пример:</p><ul><li><p>Было: <a href="https://arxiv.org/abs/1706.03762" rel="noopener noreferrer nofollow">https://arxiv.org/abs/1706.03762</a></p></li><li><p>Стало: <a href="https://ar5iv.labs.arxiv.org/html/1706.03762" rel="noopener noreferrer nofollow">https://ar5iv.labs.arxiv.org/html/1706.03762</a></p></li></ul><p>Такой простой приём заметно снижает «порог входа» в чтение статей и экономит время, особенно если вы регулярно мониторите arXiv.</p> <a href="https://habr.com/ru/posts/1028172/?utm_campaign=1028172&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 26 Apr 2026 15:41:51 GMT</pubDate>
    <dc:creator><![CDATA[dugalb]]></dc:creator>
      
      <category><![CDATA[arxiv.org]]></category><category><![CDATA[arxiv]]></category><category><![CDATA[научные исследования]]></category><category><![CDATA[научные статьи]]></category><category><![CDATA[научные публикации]]></category><category><![CDATA[машинное+обучение]]></category><category><![CDATA[deep research]]></category><category><![CDATA[статьи]]></category><category><![CDATA[python]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dugalb — Python (+1) — 26.04.2026 15:58]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1028110/</guid>
    <link>https://habr.com/ru/posts/1028110/?utm_campaign=1028110&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Python на флешке: как собрать портативную среду без установки</strong></p><p>Такой вариант хорошо подходит, если нужно:</p><ul><li><p>показать скрипт на чужом компьютере;</p></li><li><p>поработать на машине без прав администратора;</p></li><li><p>запускать Python в ограниченной среде;</p></li><li><p>держать рядом интерпретатор, проект и зависимости в одном месте.</p></li></ul><p>На корпоративных ПК всё зависит от политики безопасности. Если запуск с USB,&nbsp;<code>.exe</code>&nbsp;или PowerShell ограничен, портативная сборка тоже может не стартовать.</p><p><strong>Что нужно</strong></p><p>Минимальный набор простой:</p><ul><li><p>USB-накопитель;</p></li><li><p>Windows x64;</p></li><li><p>доступ в интернет, если планируете ставить дополнительные пакеты.</p></li></ul><p><strong>Скачиваем Python</strong></p><p>Идём на официальную страницу загрузок Python и берём&nbsp;<strong>Windows embeddable package (64-bit)</strong>&nbsp;для нужной версии, например, <a href="https://www.python.org/ftp/python/3.14.4/python-3.14.4-embed-amd64.zip" rel="noopener noreferrer nofollow">python-3.14.4-embed-amd64.zip</a>.<br>После распаковки вы получите что-то вроде этого:</p><pre><code class="css">F:\
└── python3.14\
    ├── python.exe
    ├── python314.dll
    ├── python314._pth
    ├── python314.zip
    └── ...</code></pre><p>На этом этапе интерпретатор уже можно запускать прямо с флешки.</p><p><strong>Что делает&nbsp;_pth</strong></p><p>Файл&nbsp;<code>python314._pth</code>&nbsp;управляет тем, какие пути Python видит при запуске. По умолчанию embeddable package изолирован от системного окружения, реестра и установленных пакетов.</p><p>Если вам нужно подключить локальные библиотеки, можно прописать пути вручную:</p><pre><code>python314.zip
.
Lib
Lib\site-packages
import site</code></pre><p>Строка&nbsp;<code>import site</code>&nbsp;нужна, чтобы Python начал использовать&nbsp;<code>site</code>-механику и подхватывать дополнительные каталоги.</p><p><strong>Как добавить pip</strong></p><p>У embeddable package&nbsp;<code>pip</code>&nbsp;обычно не идёт «из коробки» как в обычной установке.<br>Его можно добавить вручную через официальный bootstrap-скрипт&nbsp;<code>get-pip.py</code>.</p><p>Сценарий такой:</p><ol><li><p>Скачайте&nbsp;<a href="https://bootstrap.pypa.io/get-pip.py" rel="noopener noreferrer nofollow">get-pip.py</a>.</p></li><li><p>Положите его рядом с&nbsp;<code>python.exe</code>.</p></li><li><p>Запустите:</p></li></ol><pre><code class="bash">PS F:\&gt; cd ./python3.14
PS F:\python3.14&gt; ./python get-pip.py</code></pre><p>После этого проверьте:</p><pre><code class="bash">./python -m pip --version
# Выведет версию pip (например, pip 26.0.1).</code></pre><p><strong>Ставим пакеты</strong></p><p>Когда&nbsp;<code>pip</code>&nbsp;уже доступен, можно ставить нужные библиотеки:</p><pre><code class="bash">PS F:\python3.14&gt; ./python -m pip install numpy pandas matplotlib seaborn requests</code></pre><p>Или сразу из&nbsp;<code>requirements.txt</code>:</p><pre><code class="bash">PS F:\python3.14&gt; ./python -m pip install -r requirements.txt</code></pre><p><strong>Запускаем проект</strong></p><p>Чтобы не помнить длинные пути, удобно сделать&nbsp;<code>run.bat</code>&nbsp;в корне флешки:</p><pre><code class="bash">@echo off
cd /d %~dp0
set PYTHON_HOME=%~dp0python3.14
set PATH=%PYTHON_HOME%;%PATH%

%PYTHON_HOME%\python.exe my_project\main.py
pause</code></pre><p>Плюс такого подхода в том, что он не привязан к букве диска. Сегодня флешка может быть&nbsp;<code>F:</code>, а завтра&nbsp;<code>D:</code>&nbsp;— батник всё равно найдёт себя сам.  </p><p><strong>Типичная структура</strong></p><p>Обычно папка на флешке выглядит так:</p><pre><code class="css">F:\
├── python3.14\
│   ├── python.exe
│   ├── python314.dll
│   ├── python314._pth
│   ├── python314.zip
│   └── Lib\site-packages\
├── my_project\
│   ├── main.py
│   └── requirements.txt
├── run.bat</code></pre> <a href="https://habr.com/ru/posts/1028110/?utm_campaign=1028110&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 26 Apr 2026 12:58:38 GMT</pubDate>
    <dc:creator><![CDATA[dugalb]]></dc:creator>
      
      <category><![CDATA[python]]></category><category><![CDATA[флешка]]></category><category><![CDATA[портативность]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @andrey_chuyan — DevOps (+4) — 25.04.2026 13:18]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1027802/</guid>
    <link>https://habr.com/ru/posts/1027802/?utm_campaign=1027802&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<iframe id="69ec942542c0bc03ac2e960a" src="https://embedd.srv.habr.com/iframe/69ec942542c0bc03ac2e960a" class="embed_video embed__content" allowfullscreen="true"></iframe><p><strong>🌲 Открываем регистрацию на Дебаг Кемп</strong></p><p>Мы придумали формат, который давно хотели сами: выбираешься из города, два дня в сосновом лесу на Карельском перешейке — маршрут, костёр, мастер-классы по выживанию, нетворкинг без слайдов и питчей. Просто люди, с которыми интересно, и никакого Slack-а.</p><p><strong>📅 6–7 июня 2026 (выходные)</strong> <strong>👥 Всего 25 мест</strong> — маленький формат, это принципиально.</p><p>Цена растёт по мере приближения к дате. Оплатить можно частями через сплит → <a href="https://debug-skills.timepad.ru/event/3936231/#register" rel="noopener noreferrer nofollow">регистрация</a></p><p>Если вы <a href="https://vk.com/polnyistek?w=donut_payment-232485571&amp;levelId=2501" rel="noopener noreferrer nofollow">💎 практик сообщества</a> — скидка 15% применяется при регистрации автоматически. Ещё не практик, но думаете? Сейчас самый разумный момент.</p><p>👀 <a href="https://debugskills.ru/debug-camp/" rel="noopener noreferrer nofollow">Узнать больше</a> · 📝 <a href="https://debug-skills.timepad.ru/event/3936231/" rel="noopener noreferrer nofollow">Регистрация</a></p><p>Вопросы — в чат, мы там живём.</p> <a href="https://habr.com/ru/posts/1027802/?utm_campaign=1027802&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 25 Apr 2026 10:18:16 GMT</pubDate>
    <dc:creator><![CDATA[andrey_chuyan]]></dc:creator>
      
      <category><![CDATA[нетворкинг]]></category><category><![CDATA[оффлайн-мероприятие]]></category><category><![CDATA[кемп]]></category><category><![CDATA[тимбилдинг]]></category><category><![CDATA[выживание]]></category><category><![CDATA[карелия]]></category><category><![CDATA[разработчики]]></category><category><![CDATA[it-сообщество]]></category><category><![CDATA[конференция]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Web_5 — Python (+1) — 15.04.2026 13:34]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1023736/</guid>
    <link>https://habr.com/ru/posts/1023736/?utm_campaign=1023736&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/856/c6d/bbe/856c6dbbe57e293e24cfac3b1f2fb314.png" width="798" height="613"></figure><p>В прошлый раз я рассказал про Голема — кодинг-агента в Telegram. Сейчас хочу показать, что у него под капотом. А именно — как работает анализ кода.</p><p>Первая версия была примитивной: весь код летел в LLM, та читала и выдавала вердикт. Работало паршиво. LLM галлюцинировала про «обрезанные функции», жрала токены как не в себя, а если проект был больше пары файлов — просто захлёбывалась.</p><p>Нужно было что-то менять.</p><p><strong>Гибридный анализ: четыре утилиты вместо одной LLM</strong></p><p>Теперь перед тем, как отдать код модели, его прогоняют четыре статических анализатора:</p><pre><code class="python">bandit, ruff, semgrep, pip_audit = await asyncio.gather(
    run_bandit(project_dir),      # безопасность
    run_ruff(project_dir),        # стиль и баги
    run_semgrep(project_dir),     # глубокий анализ
    run_pip_audit(project_dir)    # зависимости
)</code></pre><p>Каждая утилита отвечает за свою область:</p><ul><li><p><strong>Bandit</strong>&nbsp;ищет уязвимости безопасности: SQL-инъекции, использование&nbsp;<code>eval()</code>, хардкод паролей.</p></li><li><p><strong>Ruff</strong>&nbsp;проверяет стиль и очевидные ошибки: неиспользуемые импорты, синтаксис, голые except.</p></li><li><p><strong>Semgrep</strong>&nbsp;находит сложные паттерны: XSS, утечки данных, опасную десериализацию.</p></li><li><p><strong>pip-audit</strong>&nbsp;сверяет зависимости с базой CVE и сообщает о дырявых пакетах.</p></li></ul><p>Все четыре запускаются параллельно через&nbsp;<code>asyncio.gather</code>. На проекте среднего размера это занимает 10-15 секунд вместо 40-50 при последовательном запуске.</p><p><strong>LLM получает только проблемные строки</strong></p><p>Раньше модель получала первые 1000 символов из каждого файла. Это приводило к двум проблемам: дикий перерасход токенов и галлюцинации. LLM видела обрывок функции и думала, что код незавершённый.</p><p>Теперь всё иначе. Анализаторы возвращают конкретные проблемные строки, и модель получает только их с контекстом в 3-4 строки вокруг:</p><pre><code class="python"># main.py:42 — Bandit HIGH
query = f"SELECT * FROM users WHERE id = {user_input}"  # SQL-инъекция</code></pre><p>Результат:</p><ul><li><p>Расход токенов сократился в 10 раз.</p></li><li><p>Галлюцинации про «незавершённый код» исчезли полностью.</p></li><li><p>Анализ работает одинаково быстро на проекте из 10 файлов и из 500.</p></li></ul><p><strong>Асинхронный режим</strong></p><p>ZIP-архивы и GitHub-репозитории анализируются в фоне. Пользователь отправляет файл и сразу получает ответ «анализ запущен», а результат приходит отдельным сообщением через минуту-две. Бот не висит, можно продолжать с ним работать.</p><pre><code class="python">asyncio.create_task(
    _analyze_directory_async(context, temp_dir, source, llm, user_id)
)
await update.message.reply_text("🔍 Анализ запущен в фоне")</code></pre><p><strong>Что дальше</strong></p><p>Сейчас Голем умеет анализировать только Python-проекты. В ближайших планах:</p><ul><li><p>Поддержка JavaScript/TypeScript (ESLint + npm audit)</p></li><li><p>Поддержка Go (golangci-lint + govulncheck)</p></li><li><p>Поддержка Rust (clipp +cargo-audit ) </p></li></ul><p>Также хочу добавить команду&nbsp;<code>/fix</code>&nbsp;— автоматическое исправление проблем, которые находит Ruff. Часть ошибок можно починить без участия человека, и Голем будет делать это сам.</p><p><strong>Попробовать</strong></p><p>Бот живёт в Telegram:&nbsp;<strong><a href="https://%D0%92%D0%BE%D1%82%20%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BB%D0%B8%D0%BA%D0%B0%D0%B1%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0:%20%20%5Bhttps://t.me/Golem666bot%5D(https://t.me/Golem666bot)" rel="noopener noreferrer nofollow">@Golem666bot</a></strong><br>Там же можно посмотреть другие проекты и следить за разработкой:&nbsp;<strong><a href="https://t.me/+s-UqT7CO9_s3N2I6" rel="noopener noreferrer nofollow">@system_develope</a></strong>  </p> <a href="https://habr.com/ru/posts/1023736/?utm_campaign=1023736&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 15 Apr 2026 10:34:34 GMT</pubDate>
    <dc:creator><![CDATA[Web_5]]></dc:creator>
      
      <category><![CDATA[golem]]></category><category><![CDATA[кодинг-агент]]></category><category><![CDATA[телеграм-бот]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @rullwull — Python (+1) — 15.04.2026 10:02]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1023632/</guid>
    <link>https://habr.com/ru/posts/1023632/?utm_campaign=1023632&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как отключить reasoning у локального DeepSeek-R1 и не сойти с ума</strong></p><p>Третий пост из серии про грабли локальных LLM. <a href="https://habr.com/ru/posts/1023042/" rel="noopener noreferrer nofollow">Первый</a> — про микрочанки, отравляющие RAG. <a href="https://habr.com/ru/posts/1023054/" rel="noopener noreferrer nofollow">Второй</a> — про embedding модель, которая не знает русский. Сейчас — про reasoning, который жрёт ресурсы и не выключается.</p><p>Проблема</p><p>DeepSeek-R1-Distill-Qwen-32B — reasoning модель. На каждый запрос она сначала «думает» в блоке <code>&lt;think&gt;...&lt;/think&gt;</code>, потом отвечает. Выглядит так:</p><pre><code>&lt;think&gt;
Хорошо, мне нужно помочь пользователю распределить задачи
для проекта создания цифрового двойника для молочной фермы.
Я новичок в этом, поэтому постараюсь разобраться шаг за шагом.

Сначала, мне нужно понять, что такое цифровой двойник...
&lt;/think&gt;

Разработка цифрового двойника для молочной фермы — это сложный проект...
</code></pre><p>Блок <code>&lt;think&gt;</code> может быть длиннее самого ответа. Это токены, это время, это VRAM. Для задач где рассуждения не нужны — чистый оверхед.</p><p>Наивное решение — не работает</p><p>Первая идея: убрать <code>&lt;think&gt;</code> из ответа регуляркой постфактум.</p><pre><code class="python">response_text = re.sub(r'&lt;think&gt;.*?&lt;/think&gt;', '', response_text, flags=re.DOTALL).strip()
</code></pre><p>Проблема: модель всё равно генерирует рассуждения. Вы просто прячете их от пользователя, но GPU уже потратил время и токены.</p><p>Решение от сообщества</p><p>Пустой блок <code>&lt;think&gt;\n\n&lt;/think&gt;</code> в конце промпта. Модель видит, что фаза рассуждений уже «завершена», и сразу переходит к ответу.</p><pre><code class="python">text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
text = text + "&lt;think&gt;\n\n&lt;/think&gt;\n\n"
</code></pre><p>Попробовал — не работает. Reasoning остаётся.</p><p>Ловушка с токенизатором</p><p>Смотрю в лог что реально уходит модели:</p><pre><code>...ть задачи?&lt;｜Assistant｜&gt;&lt;think&gt;&lt;think&gt;

&lt;/think&gt;
</code></pre><p>Два <code>&lt;think&gt;</code>. Токенизатор DeepSeek при <code>add_generation_prompt=True</code> уже добавляет <code>&lt;think&gt;</code> в конец промпта автоматически. Мой код добавляет второй. Модель видит незакрытый первый тег и начинает думать.</p><p>Причём <code>&lt;｜Assistant｜&gt;</code> — это не обычные символы <code>|</code>, а полноширинные юникодные <code>｜</code>. Специальные токены DeepSeek. Если искать обычный <code>|</code> в строке — не найдёте.</p><p>Правильное решение</p><p>Проверять, что уже есть в промпте, и действовать по ситуации:</p><pre><code class="python">def prepare_prompt_no_thinking(messages, tokenizer):
    text = tokenizer.apply_chat_template(
        messages, 
        tokenize=False, 
        add_generation_prompt=True
    )
    
    if "&lt;think&gt;\n\n&lt;/think&gt;" in text:
        pass  # Уже закрыт
    elif "&lt;think&gt;" in text and "&lt;/think&gt;" not in text:
        text = text + "\n\n&lt;/think&gt;\n\n"  # Закрываем открытый
    else:
        text = text + "&lt;think&gt;\n\n&lt;/think&gt;\n\n"  # Добавляем пустой
    
    return text
</code></pre><p>Три ветки — потому что разные версии токенизатора ведут себя по-разному. Кто-то добавляет <code>&lt;think&gt;</code>, кто-то нет.</p><p>Результат</p><p>Без тегов:</p><pre><code>Хорошо, мне нужно помочь пользователю распределить задачи
для проекта создания цифрового двойника для молочной фермы.
Я новичок в этом, поэтому постараюсь разобраться шаг за шагом...
</code></pre><p>С правильными тегами:</p><pre><code>Разработка цифрового двойника для молочной фермы — это сложный проект,
который требует участия специалистов из разных областей.
Вот примерное распределение задач:
</code></pre><p>Модель сразу отвечает по делу, без вступительных рассуждений. Экономия токенов и времени — в зависимости от запроса от 30% до 60%.</p><p>Вывод</p><p>Если используете DeepSeek-R1-Distill локально и reasoning вам не нужен — не режьте его регуляркой постфактум. Закройте <code>&lt;think&gt;</code> тег до генерации. Но обязательно проверяйте, что токенизатор уже добавил — иначе получите дубль и потратите час на дебаг того, что должно было занять минуту.</p> <a href="https://habr.com/ru/posts/1023632/?utm_campaign=1023632&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 15 Apr 2026 07:02:30 GMT</pubDate>
    <dc:creator><![CDATA[rullwull]]></dc:creator>
      
      <category><![CDATA[ai]]></category><category><![CDATA[deepseek]]></category><category><![CDATA[локальные модели]]></category><category><![CDATA[llm-модели]]></category><category><![CDATA[llm]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @rullwull — Python — 13.04.2026 22:04]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1023054/</guid>
    <link>https://habr.com/ru/posts/1023054/?utm_campaign=1023054&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Идеальная база знаний, а RAG возвращает мусор — проблема не там, где кажется</strong></p><p>Продолжение <a href="https://habr.com/ru/posts/1023042/" rel="noopener noreferrer nofollow">предыдущего поста про микрочанки</a>, где 3 мусорных документа отравили весь RAG. Тогда проблема была в данных. Сейчас — данные идеальные, а поиск всё равно не работает.</p><p>Контекст</p><p>Строю локальную мультиагентную систему. Собрал базу знаний: 85 архитектурных блоков, 160 чанков в ChromaDB, реальный опыт — не синтетика. Embedding модель — стандартная <code>all-MiniLM-L6-v2</code>. Документы на русском с вкраплениями английских терминов (DPO, LoRA, VRAM — как у всех).</p><p>Симптом</p><p>Спрашиваю: <code>"DPO патч для OOM"</code> — в базе есть целый блок про это. RAG возвращает документ про права доступа к Project Context. Вообще мимо.</p><p>Спрашиваю: <code>"positive feedback loop"</code> — в базе есть блок №57 ровно с таким названием. RAG его не находит, dist=0.746.</p><p>Диагностика</p><p>Подозрение — embedding модель не понимает русский текст. Проверяю: один и тот же смысл, три формулировки.</p><pre><code class="python">queries = [
    ("positive feedback loop", "английский"),
    ("петля положительной обратной связи", "русский"),
    ("цикл доверие данные результат", "русский контекст"),
]

for q, lang in queries:
    results = col.query(query_texts=[q], n_results=1, include=["documents", "distances"])
    dist = results['distances'][0][0]
    print(f"[{lang}] dist={dist:.3f} | '{q}'")
</code></pre><pre><code>[английский]       dist=0.746 | 'positive feedback loop'
[русский]           dist=0.566 | 'петля положительной обратной связи'
[русский контекст]  dist=0.504 | 'цикл доверие данные результат'
</code></pre><p>Один смысл — разница в полтора раза. При этом документы в базе на русском. Английский запрос к русским документам — модель не может их сопоставить.</p><p>Почему так</p><p><code>all-MiniLM-L6-v2</code> обучалась на английских текстах. Она превращает текст в вектор из 384 чисел. Для английского — вектор осмысленный, семантически правильный. Для русского — видит буквы, но не понимает смысл. Вектор получается случайный.</p><p>Это как нанять переводчика, который знает только английский, и попросить его искать по русской библиотеке.</p><p>А может перевести всё на английский?</p><p>Первая мысль — перевести все документы на английский, запросы тоже переводить на лету, а результат обратно на русский. Английские embedding модели объективно лучше отточены, больше данных, больше бенчмарков.</p><p>Но для локальной системы с русскими документами это плохой вариант. Технические термины с контекстом теряются при переводе. Появляется двойная задержка — перевод запроса туда, результата обратно. Нужен ещё один сервис (переводчик), а задача — держать всё локально. И главное — ошибки накапливаются: плохой перевод → плохой вектор → плохой результат.</p><p>Для чисто английских доков — да, держите всё на английском. Но когда документы изначально на русском с кучей специфики — мультиязычная модель проще. Меньше движущихся частей.</p><p>Решение</p><p>Заменил <code>all-MiniLM-L6-v2</code> на <code>paraphrase-multilingual-MiniLM-L12-v2</code>. Модель обучена на 50+ языках, включая русский. Понимает смешанный текст типа “DPO обучение на LoRA адаптере” — то, что в локальных ML-проектах встречается на каждом шагу.</p><p>Пересоздал все коллекции с новой моделью. Результат:</p><pre><code class="python"># Было (all-MiniLM-L6-v2):
# 'positive feedback loop' → dist=0.746, нашёл мусор

# Стало (multilingual):
# 'positive feedback loop' → dist=0.35, нашёл именно блок про Feedback Loop
</code></pre><p>Поиск заработал сразу. На все запросы — и русские, и английские, и смешанные.</p><p>Вывод</p><p>Если строите RAG на русском (или любом не-английском) — не берите <code>all-MiniLM-L6-v2</code> по дефолту. Она стоит первой в каждом туториале, но для нелатинских языков это ловушка. Данные могут быть идеальными, чанкинг правильным, а поиск будет возвращать мусор — потому что “переводчик” не знает ваш язык.</p><p>Замена embedding модели на мультиязычную — одна строчка кода и пересоздание коллекций. Пять минут работы, которые сэкономят дни дебага.</p><pre><code class="python"># Было
ef = SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")

# Стало
ef = SentenceTransformerEmbeddingFunction(model_name="paraphrase-multilingual-MiniLM-L12-v2")
</code></pre> <a href="https://habr.com/ru/posts/1023054/?utm_campaign=1023054&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 13 Apr 2026 19:04:15 GMT</pubDate>
    <dc:creator><![CDATA[rullwull]]></dc:creator>
      
      <category><![CDATA[ai]]></category><category><![CDATA[rag]]></category><category><![CDATA[chromadb]]></category><category><![CDATA[llm]]></category><category><![CDATA[embeddings]]></category><category><![CDATA[vectordb]]></category><category><![CDATA[локальные модели]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @rullwull — Python — 13.04.2026 21:27]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1023042/</guid>
    <link>https://habr.com/ru/posts/1023042/?utm_campaign=1023042&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>3 мусорных документа (1.7%) отравили весь мой RAG</p><p>Строю локальную мультиагентную систему с RAG на ChromaDB. В какой-то момент модель начала нести чушь — вставлять в ответы куски маркдауна, генерить мусор вместо нормальных ответов.</p><p>Симптом</p><p>Спрашиваю: «Новый проект: цифровой двойник нефтеперерабатывающего завода. Как декомпозировать?»</p><p>В ответе — рандомные огрызки разметки типа <code>"25*\n*Тип: Инфраструктура и системное администрирование*"</code>. Модель явно копировала что-то из контекста.</p><p>Копаю</p><p>Смотрю что RAG возвращает на этот запрос:</p><pre><code class="python">results = rag.query(query_texts=[query], n_results=3)
for doc in results['documents'][0]:
    print(f"[{len(doc)} chars]: {doc[:50]}")
</code></pre><pre><code>[56 chars]: 25*\n*Тип: Инфраструктура и системное администр...
[15 chars]:  и реализация*...
[11 chars]: ров вместе...
</code></pre><p>Топ-3 — мусор, а не документы.</p><p>Причина</p><p>При загрузке маркдаун-файлов в ChromaDB чанкер резал по 800 символов механически — посередине заголовков, посередине предложений. В итоге появились микро-огрызки типа <code>"ров вместе"</code> (11 символов), которые стали отдельными документами.</p><p>Почему короткие чанки ломают RAG</p><p>Короткий текст → странный эмбеддинг. Вектор ни о чём, без смысла. И именно поэтому он оказывается «близок» к любому запросу случайным образом. Мой 11-символьный огрызок стабильно обгонял нормальные 800-символьные документы в similarity search.</p><p>Фикс</p><p>Нашёл все документы меньше 100 символов:</p><pre><code class="python">all_docs = rag.get(include=["documents"])
short = [(i, doc) for i, doc in enumerate(all_docs['documents']) if len(doc) &lt; 100]
print(f"Мусор: {len(short)}")  # 3
</code></pre><p>Удалил:</p><pre><code class="python">ids_to_delete = [all_docs['ids'][i] for i, _ in short]
rag.delete(ids=ids_to_delete)
# Было: 176 docs → Стало: 173 docs
</code></pre><p>Галлюцинации прекратились сразу.</p><p>Вывод</p><p>Фильтруйте чанки по минимальной длине до загрузки в векторную БД:</p><pre><code class="python">MIN_CHUNK_LENGTH = 100
chunks = [c for c in chunks if len(c) &gt;= MIN_CHUNK_LENGTH]
</code></pre><p>3 документа из 176 — это 1.7%. Процент не имеет значения. Если у мусора странный вектор — он всплывёт. Один плохой документ может отравить весь ваш RAG.</p> <a href="https://habr.com/ru/posts/1023042/?utm_campaign=1023042&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 13 Apr 2026 18:27:23 GMT</pubDate>
    <dc:creator><![CDATA[rullwull]]></dc:creator>
      
      <category><![CDATA[ai]]></category><category><![CDATA[rag]]></category><category><![CDATA[chromadb]]></category><category><![CDATA[llm]]></category><category><![CDATA[embeddings]]></category><category><![CDATA[vectordb]]></category><category><![CDATA[локальные модели]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Web_5 — Python (+1) — 10.04.2026 22:03]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1022072/</guid>
    <link>https://habr.com/ru/posts/1022072/?utm_campaign=1022072&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/c1b/48e/a44/c1b48ea440c9d63aff7a0974dc688005.png" width="865" height="303"></figure><p>Как я научил Telegram-бота помнить то, что LLM положено забывать</p><p>LLM по своей природе — без памяти. Каждый новый диалог с ChatGPT, Claude или DeepSeek начинается с чистого листа. Разработчики пытаются решать это костылём: запихивают в контекст последние N сообщений.</p><p>Но это не память. Это дорогое, конечное и очень прожорливое контекстное окно. Хранить всю историю — разоришься на токенах. Учить модель на лету — пока фантастика.</p><p>Поэтому я сделал по-другому.</p><p><strong>Встречайте: настоящая долговременная память для Golem (</strong><em>В том виде, в каком она нужна кодинг-агенту)</em></p><p>Теперь мой кодинг-агент умеет <strong>сохранять только важное</strong> — факты о ваших проектах, привычках, договорённостях и запретах. Не всю переписку, а ровно то, что <strong>вы сами</strong> решите запомнить навсегда.</p><p>Как это работает:</p><ul><li><p>/remember текст — Golem сохраняет факт в SQLite</p></li><li><p>/recall — показывает все ваши заметки</p></li><li><p>/forget ID — удаляет ненужное</p></li></ul><p>Заметки автоматически подгружаются в начало <strong>каждого</strong> запроса, работают в любой сессии и переживают перезапуски бота. Никакой магии — просто грамотная архитектура.</p><p><strong>Реальные примеры из жизни:</strong></p><p>Вы пишете: /remember Я работаю над проектом X на Django + PostgreSQL. Никогда не предлагай MongoDB.</p><p>Через неделю спрашиваете: «Как оптимизировать запросы?» — Golem сразу учитывает стек и не несёт чушь про NoSQL.</p><p>Или: /remember Голем, не отвечай на вопросы про погоду. Это тупо.</p><p>Теперь на «какая погода?» он спокойно посылает вас в Google и не жрёт токены.</p><p>Это сильно круче простого увеличения контекста: <strong>вы сами</strong> решаете, что важно, а что — мусор.</p><p>Хотите видеть, как я дальше развиваю память (<em>векторный поиск, автоматическое извлечение фактов и другие смелые эксперименты, которые я обкатываю прямо сейчас</em>)?</p><p>→ Подписывайся на основной канал <strong><a href="https://t.me/+s-UqT7CO9_s3N2I6" rel="noopener noreferrer nofollow">«СИСТЕМА»</a></strong></p><p>Там я показываю внутреннюю кухню разработки Golem, полные архитектурные разборы и то, что обычно не выношу на Хабр.</p><p><strong>Где потрогать бота прямо сейчас:</strong> <strong><a href="https://t.me/Golem666bot" rel="noopener noreferrer nofollow">https://t.me/Golem666bot</a></strong></p><p>Пробуйте, ломайте, кидайте в комментариях:</p><ul><li><p>Какие факты вы бы хотели, чтобы бот помнил о вас?</p></li><li><p>Каких ещё фич не хватает идеальному AI-ассистенту?</p></li></ul><p>Жду ваших кейсов и идей — лучшие разберём вместе с Golem.</p> <a href="https://habr.com/ru/posts/1022072/?utm_campaign=1022072&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 10 Apr 2026 19:03:56 GMT</pubDate>
    <dc:creator><![CDATA[Web_5]]></dc:creator>
      
      <category><![CDATA[ии-агенты]]></category><category><![CDATA[телеграм]]></category><category><![CDATA[телеграм-бот]]></category><category><![CDATA[llm]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @NakataModem — Криптовалюты (+2) — 10.04.2026 05:01]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1021596/</guid>
    <link>https://habr.com/ru/posts/1021596/?utm_campaign=1021596&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Написал небольшой микросервис на <strong>FastAPI,</strong> помогающий взаимодействовать с блокчейном <strong>Litecoin</strong> для принятия платежей. Сервис напрямую подключается к любой ноде на протоколе <strong>ElectrumX</strong>.<br><br>Список нод можно взять здесь: <a href="https://1209k.com/bitcoin-eye/ele.php?chain=ltc" rel="noopener noreferrer nofollow">https://1209k.com/bitcoin-eye/ele.php?chain=ltc</a><br>Либо же можно захостить свою ноду, но пока нам будет достаточно удалённой.</p><p>Принимая платежи таким способом, мы контролируем "ключи", не зависим от сторонних платежных систем, нам не нужно никому доверять наши средства и отдавать процент от выручки.</p><p>Можем взглянуть на исходный код и перейдём к обзору функционала. <br><a href="https://github.com/CryptoWrapAPI/litecoin-wallet-rpc" rel="noopener noreferrer nofollow">https://github.com/CryptoWrapAPI/litecoin-wallet-rpc</a></p><p>Для начала нужно получить свой ключ к блокчейну, проще говоря, сид-фразу.<br>Но не каждая сид фраза подойдёт, вкратце, нужна сид фраза стандарта <strong>BIP39</strong>. <br>Такую сид фразу можно сгенерировать с помощью <code>new_wallet.py</code></p><p>Для этого нам понадобится <strong>Python</strong> версии <strong>3.12</strong>, потому что библиотека <strong>bip_utils</strong> пока что поддерживает только эту версию.</p><pre><code class="bash">Mnemonic string: 
rather nasty bright aisle craft spare blood room village resource special region winter gesture despair slender tiger wall state fashion grass trophy crack monster

Master key (bytes): 865fcb279555a25bf50e2e33d37ef68b363b3eb322a68456609526f80be28a7e
Master key (extended): zprvAWgYBBk7JR8GkiSjUUwyhei9mSTEMd5ENS9xywYxsf6WLuFvq9eJjE7eFCjw3sT4AreK7cRiBgF4x8CiL5sPUhwZA3rBhFbKD1poA3iWQCg
Master key (WIF): T7ZBZxkT8ebmYHyz1vHdG9G4of2UPJm2hVky1x19kX2xtQSKKCu4</code></pre><p>Далее для деривации (создания отдельных адресов для принятия платежей) нам понадобится extended мастер-ключ. </p><p>Отправляем его вместе с <strong>account index</strong> и <strong>address index</strong> на эндпоинт <code>/derive</code> (запустим тест <code>python tests/test_derive.py</code>)  </p><p>Индексы мы можем представить как координаты адреса по оси <strong>X</strong> и <strong>Y</strong></p><pre><code class="bash">============================================================
TEST: Address Derivation
============================================================
XPRV: zprvAWgYBBk7JR8GkiSj...
Account index: 0
Address index: 0

Status: 200
Response:
{
  "address": "ltc1qt25zdkgj4shgyp4xw770hsjtdph6kn70zz8h06",
  "account_index": 0,
  "address_index": 0,
  "chain": "external"
}

✓ Derived address: ltc1qt25zdkgj4shgyp4xw770hsjtdph6kn70zz8h06
============================================================</code></pre><p>Теперь этот адрес кошелька можно отправить клиенту нашего сервиса.</p><p>Чтобы проверить, поступил ли платеж, мы можем обратиться к методу <code>get_history</code><br><a href="https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-scripthash-get-history" rel="noopener noreferrer nofollow">https://electrumx.readthedocs.io/en/latest/protocol-methods.html#blockchain-scripthash-get-history</a></p><pre><code class="json">// В этом примере адрес начинается с tltc1 вместо ltc1 
// Потому что это testnet блокчейн :)
// Сменить testnet/mainnet можно в .env

  "tltc1qayq6ppmzztpgy354r45lkp8vjdafnhtf0yhutm": {
    "transactions": [
      {
        "tx_hash": "6803c0769c89e2cd9bbbda1d1e8715c5b11c1e69f8f9a7d46c1cd6adc2103c6a",
        "height": 4672171
      },
      {
        "tx_hash": "10bdb766e7c8a42e468862a97b10260955fafe7a0fcd219f025b4dd105077e5e",
        "height": 4672208
      }
    ],
    "count": 2,
    "timestamp": "2026-04-10T01:23:37.448442+00:00"
  }</code></pre><p>Мы видим две транзакции, <strong>height</strong> здесь - это номер блока, в который включена транзакция, если она всё ещё находится в мемпуле (ожидает подтверждения майнерами), то мы увидим <strong>-1</strong> или <strong>0</strong>.</p><p>Частота блоков в <strong>Litecoin</strong> составляет <em>~2 минуты</em>. То есть примерно через 2 минуты транзакция будет включена в цепочку блоков.</p><p>Узнать детали транзакции можно с помощью эндпоинта <code>/transactions</code><br>Там будет подробное описание транзакции, включая все "входы" и "выходы", количество отправленных монет, комиссию сети, заплаченную отправителем и так далее.</p><p>На этом у меня всё, спасибо за внимание!</p> <a href="https://habr.com/ru/posts/1021596/?utm_campaign=1021596&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 10 Apr 2026 02:01:38 GMT</pubDate>
    <dc:creator><![CDATA[NakataModem]]></dc:creator>
      
      <category><![CDATA[litecoin]]></category><category><![CDATA[fastapi]]></category><category><![CDATA[microservice]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @veta_pf — Блог компании МТС (+3) — 09.04.2026 14:58]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/ru_mts/posts/1021364/</guid>
    <link>https://habr.com/ru/companies/ru_mts/posts/1021364/?utm_campaign=1021364&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Подключайся ко второму онлайн-митапу MWS для Python-разработчиков 🎙️</strong></p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/f7b/c05/9e7/f7bc059e7709b757e2d6c680bdcfcb1a.png" width="1920" height="1080"></figure><p>На встрече <strong>узнаешь нюансы разработки с агентом </strong>и сразу <strong>сможешь попрактиковаться</strong>, а еще — <strong>поучаствовать в дискуссии</strong> <strong>с экспертами</strong> о роли ИИ в рабочих процессах.</p><p>Будет интересно Python-разработчикам, аналитикам и другим ИТ-специалистам, кто интересуется применением ИИ в разработке.</p><ul><li><p>📅 Когда: 15 апреля (среда) в 15:00 по мск</p></li><li><p>📍 Где: онлайн&nbsp;</p></li><li><p>👉 <a href="https://mts-digital.ru/events/details?id=72858541?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=vstrecha_python_090426" rel="noopener noreferrer nofollow">Зарегистрироваться</a></p></li></ul> <a href="https://habr.com/ru/posts/1021364/?utm_campaign=1021364&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 09 Apr 2026 11:58:33 GMT</pubDate>
    <dc:creator><![CDATA[veta_pf (МТС)]]></dc:creator>
      
      <category><![CDATA[онлайн-встреча]]></category><category><![CDATA[mws]]></category><category><![CDATA[разработка]]></category><category><![CDATA[ии в разработке]]></category><category><![CDATA[pyton]]></category><category><![CDATA[разработка с ии]]></category><category><![CDATA[ит-сообщество]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @ab429 — Искусственный интеллект (+3) — 07.04.2026 10:40]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1020198/</guid>
    <link>https://habr.com/ru/posts/1020198/?utm_campaign=1020198&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Собери свой OpenClaw за вечер - гайд за 18 шагов</strong></p><p>OpenClaw - самый быстрорастущий опенсорс-проект в истории GitHub. 350k звезд за пять месяцев, обогнал React, Linux и все остальное. Персональный AI-ассистент, который живет на твоей машине, работает через WhatsApp/Telegram/Slack/iMessage, выполняет команды в шелле, управляет браузером, отправляет почту, работает по расписанию. Если еще не слышали, советую попробовать.</p><p>Мне всегда интересно попробовать собрать что-то своими руками, особенно нравится ковыряться и настраивать ИИ агентов - есть в этом ощущение управления собственными сотрудниками. К чему я это, <strong>ловите интересный репозиторий</strong> - <a href="https://github.com/czl9707/build-your-own-openclaw" rel="noopener noreferrer nofollow">build-your-own-openclaw</a>.</p><p><strong>Что за репозиторий</strong></p><p>Это пошаговый туториал из 18 этапов, где ты собираешь свою версию OpenClaw с нуля. Именно послойная сборка - каждый шаг добавляет одну концепцию и содержит работающий код + README с объяснением архитектурных решений. Шанс разобраться как устроен такой популярный бот.</p><p>Можно выделить четыре фазы:</p><p><strong>Фаза 1 - одиночный агент.</strong> Начинаешь с голого чат-лупа. Потом подключаешь инструменты (read/write/bash - вот и основа для уже для большого скоупа задач). Затем навыки через SKILL.md, персистентность сессий, слеш-команды, компактификация истории, веб-инструменты.</p><p><strong>Фаза 2 - event-driven архитектура.</strong> Агент выходит за пределы CLI. Горячая перезагрузка конфигов, каналы (теперь можно писать агенту с телефона), WebSocket для программного взаимодействия.</p><p><strong>Фаза 3 - автономность и мультиагентность.</strong> Маршрутизация задач между агентами, cron + heartbeat (агент работает, пока спим или заняты делами), многослойные промпты, dispatch между агентами.</p><p><strong>Фаза 4 - продакшн.</strong> Контроль конкурентности и долговременная память.</p><p><strong>Почему это полезно может быть полезно?</strong></p><p>В большинстве гайдов по агентным системам тебе дают либо высокоуровневую схему, либо готовый фреймворк, в который не хочется лезть, разбираться, копаться. Здесь этот шаговый подход позволяет проще въехать, заставить себя изучать и по мере усложнения, все больше и больше втягиваешься. Можно изучить:</p><ul><li><p>Как строится цикл принятия решений. </p></li><li><p>Как агент выбирает инструменты.</p></li><li><p>Как компактифицируется контекст, когда история перестает влезать в окно.</p></li><li><p>Как появляется ощущение «интеллекта» из вполне механических частей.</p></li></ul><p>В какой-то момент ловишь себя на мысли, что уже думаешь как оркестратор, как большой начальник, а не как рядовой пользователь модели. <strong>И вот это, пожалуй, самое ценное.</strong></p><p>Туториал написан на Python, использует LiteLLM для абстракции провайдеров. Можно пройти за вечер-два, если не застревать на каждом шаге.</p><p><a href="https://github.com/czl9707/build-your-own-openclaw" rel="noopener noreferrer nofollow">Репозиторий</a> • <a href="https://build-your-own-openclaw.kiyo-n-zane.com/" rel="noopener noreferrer nofollow">Сайт туториала</a></p><blockquote><p>Надеюсь тебе понравилось. Лучшая благодарность - это твоя подписка на мой&nbsp;<a href="https://t.me/idei_iz_doliny" rel="noopener noreferrer nofollow">Telegram-канал</a>&nbsp;😊</p></blockquote> <a href="https://habr.com/ru/posts/1020198/?utm_campaign=1020198&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Tue, 07 Apr 2026 07:40:29 GMT</pubDate>
    <dc:creator><![CDATA[ab429]]></dc:creator>
      
      <category><![CDATA[openclaw]]></category><category><![CDATA[ai agent]]></category><category><![CDATA[llm]]></category><category><![CDATA[мультиагентные системы]]></category><category><![CDATA[python]]></category><category><![CDATA[open source]]></category><category><![CDATA[tutorial]]></category><category><![CDATA[ai assistant]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @tripolskypetr — Искусственный интеллект (+4) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1018506/</guid>
    <link>https://habr.com/ru/posts/1018506/?utm_campaign=1018506&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Анализ истории сделок на предмет перекоса шортистов/лонгистов</strong></p><blockquote><p><a href="https://github.com/tripolskypetr/volume-anomaly" rel="noopener noreferrer nofollow">Ссылка на GitHub</a></p></blockquote><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/2f9/44e/d86/2f944ed86c470704f71741f3c66b0d04.png" width="720" height="480"></figure><p>В <code>backtest-kit</code> модуль <code>volume-anomaly</code> используется как источник в графе сигналов - параллельно с GARCH. Если GARCH отвечает на вопрос «достаточно ли ожидаемое движение», то <code>volume-anomaly</code> отвечает на вопрос «является ли прямо сейчас статистически необычным моментом в микроструктуре рынка».  <br><br><strong>Пример кода</strong></p><pre><code class="typescript">import { sourceNode, outputNode } from '@backtest-kit/graph';
import { predict } from 'volume-anomaly';
import { getCandles } from 'backtest-kit';

const ANOMALY_CONFIDENCE = 0.75;
const N_TRAIN  = 1200; // обучающее окно — должно быть без аномалий
const N_DETECT = 200;  // окно детекции

const reversalSource = sourceNode(
  async (symbol) =&gt; {
    // Важно: recent не должен пересекаться с historical
    const all        = await getAggregatedTrades(symbol, N_TRAIN + N_DETECT);
    const historical = all.slice(0, N_TRAIN);  // старые сделки — baseline
    const recent     = all.slice(N_TRAIN);     // новые — без overlap

    return predict(historical, recent, ANOMALY_CONFIDENCE);
    // {
    //   anomaly:    true,
    //   confidence: 0.81,
    //   direction:  'long' | 'short' | 'neutral',
    //   imbalance:  0.61,
    // }
 },
);

const entrySignal = outputNode(
  async ([reversal, ...]) =&gt; {
    if (!reversal.anomaly) return null;
    if (reversal.direction === 'neutral') return null;

    const position = reversal.direction; // 'long' | 'short'

    return {
      id: randomString(),
      position,
      priceTakeProfit: ...
      priceStopLoss: ...
      minuteEstimatedTime: 60,
    };
  },
  reversalSource,
  ...
);</code></pre><p><strong>Ключевые детали</strong>  </p><ul><li><p><code>Hawkes Process</code> - кластеризация ордеров</p></li><li><p><code>CUSUM</code>- сдвиг buy/sell дисбаланса относительно исторической нормы</p></li><li><p><code>BOCPD</code>- смена режима: момент когда распределение дисбаланса само меняется</p></li></ul><p><strong>Как использовать</strong><br><br>Классическая проблема DCA - ты усредняешься в падающий нож. Цена идёт против, ты докупаешь, а она продолжает падать. <code>volume-anomaly</code> заточен именно под это: докупать не по расписанию или по сетке уровней, а только когда ордерфлоу показывает разворот агрессии.  <br></p> <a href="https://habr.com/ru/posts/1018506/?utm_campaign=1018506&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 04 Apr 2026 08:18:45 GMT</pubDate>
    <dc:creator><![CDATA[tripolskypetr]]></dc:creator>
      
      <category><![CDATA[трейдинг]]></category><category><![CDATA[криптовалюты]]></category><category><![CDATA[мосбиржа]]></category><category><![CDATA[tradingview]]></category><category><![CDATA[pinescript]]></category><category><![CDATA[typescript]]></category><category><![CDATA[python]]></category><category><![CDATA[торговля]]></category><category><![CDATA[биржа]]></category><category><![CDATA[binance]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Web_5 — Python (+1) — 03.04.2026 11:22]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1018840/</guid>
    <link>https://habr.com/ru/posts/1018840/?utm_campaign=1018840&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/78c/028/d30/78c028d30c8eacd2a3e3ef4a3a03c033.png" width="798" height="613"></figure><p><strong>Golem хамоватый кодинг агент  в Telegram</strong></p><p>Представьте: вы кидаете ему .zip с проектом, а он  выдаёт разбор по архитектуре, находит говнокод, утечки ключей, отсутствие индексов и  сообщает, что вся ваша система — «детский сад на колхозе».</p><p>Это и есть <strong>Golem 666</strong> — мой Telegram-бот, который анализирует код жёстко, без соплей и политкорректности.</p><p>Сейчас он уже умеет:</p><ul><li><p>Пожирать проекты в .zip и анализировать их</p></li><li><p>Искать баги, уязвимости и архитектурные косяки</p></li><li><p>Давать конкретные рекомендации по исправлению</p></li><li><p>Работать в стриминговом режиме (сообщения приходят по мере генерации)</p></li><li><p>Сам постить отчёты в свой Telegram-канал</p></li><li><p>Ну и конечно пишет скрипт по запросу</p></li></ul><p>Прямо сейчас я оптимизирую его по расходам и делаю кеш,чтоб не тартить токены юзеров на повторяющие вопросы.</p><p>В ближайших планах:</p><ul><li><p>Автоматическое создание репозитория на GitHub</p></li><li><p>Автодеплой после успешного ревью кода</p></li></ul><p>Если вам тоже иногда хочется, чтобы кто-то жёстко и по делу сказал, то можете пообщаться с <a href="https://t.me/Golem666bot" rel="noopener noreferrer nofollow">Големом</a>. <br>В своем  <a href="https://t.me/+s-UqT7CO9_s3N2I6" rel="noopener noreferrer nofollow">канале </a>я рассказываю о разработке своих ботов более подробно и без цензуры.))</p><p>Кто уже попробовал подобных агентов — поделитесь в комментариях, насколько они у вас живые и наглые. Интересно сравнить.</p><p>#python #ai #telegram #coding #golem</p> <a href="https://habr.com/ru/posts/1018840/?utm_campaign=1018840&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Fri, 03 Apr 2026 08:22:17 GMT</pubDate>
    <dc:creator><![CDATA[Web_5]]></dc:creator>
      
      <category><![CDATA[python]]></category><category><![CDATA[ai]]></category><category><![CDATA[codingagent]]></category><category><![CDATA[telegrambot]]></category><category><![CDATA[golem]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @tripolskypetr — Искусственный интеллект (+4) — 02.04.2026 14:58]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1018482/</guid>
    <link>https://habr.com/ru/posts/1018482/?utm_campaign=1018482&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>О прогнозе нейтрального тренда актива</strong></p><blockquote><p><a href="https://github.com/tripolskypetr/garch" rel="noopener noreferrer nofollow">Ссылка на GitHub</a></p></blockquote><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/3db/e7f/1d0/3dbe7f1d0c62bf6514f14deea8b29c35.png" alt="Две полоски - лучший и худший случай, его можно прогнозировать" title="Две полоски - лучший и худший случай, его можно прогнозировать" width="720" height="483"><div><figcaption>Две полоски - лучший и худший случай, его можно прогнозировать</figcaption></div></figure><p>В <code>backtest-kit</code> GARCH используется как один из источников в графе сигналов. Идея: вход открывается только если GARCH-канал достаточно широк, чтобы TP и SL уместились с запасом над комиссиями.<br><br>Например, этим можно законтрить боковик, который был на BTCUSDT в Феврале 2024</p><ul><li><p>5–10&nbsp;февраля, 73% нейтральных баров </p></li><li><p>11–16&nbsp;февраля, 63% нейтральных баров </p></li><li><p>19–24&nbsp;февраля, 75% нейтральных баров </p></li><li><p>26–29&nbsp;февраля, 69% нейтральных баров </p></li></ul><p><strong>Пример кода</strong></p><pre><code class="typescript">import { sourceNode, outputNode } from '@backtest-kit/graph';
import { predict } from 'garch';
import { getCandles } from 'backtest-kit';

const CANDLES_FOR_GARCH = 300;
const GARCH_CONFIDENCE = 0.6827; // ±1σ

const garchSource = sourceNode(
  Cache.fn(
    async (symbol) =&gt; {
      const candles = await getCandles(symbol, '8h', CANDLES_FOR_GARCH);
      return predict(candles, '8h', null, GARCH_CONFIDENCE);
    },
    { interval: '8h', key: ([symbol]) =&gt; symbol },
  ),
);

const entrySignal = outputNode(
  async ([trend, volume]) =&gt; {
    // Пропускаем если модель не сошлась
    if (!volume.reliable) return null;

    // Проверяем что до границ канала достаточно места
    const upperDiff = percentDiff(trend.close, volume.upperPrice);
    const lowerDiff = percentDiff(trend.close, volume.lowerPrice);

    if (upperDiff &lt; TAKE_PROFIT_PERCENT) return null;
    if (lowerDiff &lt; STOP_LOSS_PERCENT) return null;

    // TP и SL по границам GARCH-канала
    const tp = trend.position === 'long' ? volume.upperPrice : volume.lowerPrice;
    const sl = trend.position === 'long' ? volume.lowerPrice : volume.upperPrice;

    return { position, priceOpen: trend.close, priceTakeProfit: tp, priceStopLoss: sl };
  },
  trendSource,
  garchSource,
);</code></pre><p>GARCH здесь не генерирует направление. Он отвечает только на вопрос «достаточно ли ожидаемое движение». Направление приходит от другого источника (это может быть Pine Script через <code>@backtest-kit/pinets</code> или LLM через <code>@backtest-kit/ollama</code>)</p><p><strong>Ключевые детали</strong></p><ul><li><p><strong>Parkinson estimator</strong> для per-candle RV: <code>(1/4ln2) · ln(H/L)²</code> — в ~5× эффективнее squared returns</p></li><li><p><strong>Log-normal bands</strong>: <code>P·exp(±z·σ)</code> — не линейное приближение, правильное маппирование в ценовое пространство</p></li><li><p><strong><code>reliable: true</code></strong> когда: оптимизатор сошёлся + persistence &lt; 0.999 + Ljung-Box p ≥ 0.05</p></li><li><p><strong>Оптимизация</strong>: multi-start Nelder-Mead, GARCH — 4 рестарта, NoVaS — 7 (11-мерная задача)</p></li><li><p><strong>932 теста</strong>, включая ground-truth тест с синтетическими данными известной волатильности</p></li></ul> <a href="https://habr.com/ru/posts/1018482/?utm_campaign=1018482&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Thu, 02 Apr 2026 11:58:06 GMT</pubDate>
    <dc:creator><![CDATA[tripolskypetr]]></dc:creator>
      
      <category><![CDATA[трейдинг]]></category><category><![CDATA[криптовалюты]]></category><category><![CDATA[мосбиржа]]></category><category><![CDATA[tradingview]]></category><category><![CDATA[pinescript]]></category><category><![CDATA[typescript]]></category><category><![CDATA[python]]></category><category><![CDATA[торговля]]></category><category><![CDATA[биржа]]></category><category><![CDATA[binance]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @vldmrmlkv — Python (+1) — 01.04.2026 22:11]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1018216/</guid>
    <link>https://habr.com/ru/posts/1018216/?utm_campaign=1018216&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Краткая версия <a href="https://habr.com/ru/articles/1017676/" rel="noopener noreferrer nofollow">Интервью Гвидо ван Роуссума с core-разработчиком Python Бреттом Кэнноном</a>:</p><pre><code class="python">import textwrap


def print_bubble(text: str, name: str, side="left"):
    wrapped = textwrap.wrap(text, width=45)
    max_len = max(len(line) for line in wrapped)
    width = max_len + 2

    if side == "left":
        indent = ""
        tail = "╲|"
        bottom = indent + "╰" + "─" * (width - 1) + tail
    else:
        indent = " " * 52
        tail = "|/"
        bottom = indent + tail + "─" * (width - 1) + "╯"

    print(indent + "╭" + "─" * width + "╮")
    print(indent + name)
    for line in wrapped:
        print(indent + "│ " + line.ljust(max_len) + " │")
    print(bottom)


dialog = [
    ("left", "Гвидо:", "Как ты нашёл Python?"),
    ("right", "Бретт:", "Искал язык для ООП в 2000-м, попробовал Python — сразу зашло."),
    ("left", "Гвидо:", "И что дальше?"),
    ("right", "Бретт:", "Через Python Cookbook попал в сообщество, потом в python-dev."),
    ("left", "Гвидо:", "Быстро втянулся?"),
    ("right", "Бретт:", "Да, начал писать обзоры, отправлять патчи, добавил strptime, стал core-разработчиком в 2003."),
    ("left", "Гвидо:", "Каким было сообщество тогда?"),
    ("right", "Бретт:", "Небольшим, всё держалось на энтузиастах."),
    ("left", "Гвидо:", "А позже?"),
    ("right", "Бретт:", "Участвовал в переходе на Python 3, развитии стандартной библиотеки и управлении."),
    ("left", "Гвидо:", "Самый сложный момент?"),
    ("right", "Бретт:", "Твой уход и кризис управления помогли перейти к другой модели руководства."),
    ("left", "Гвидо:", "В итоге?"),
    ("right", "Бретт:", "Случайно попробовал Python и стал ключевым участником проекта."),
]

print("Нажимайте ENTER (или пробел) для следующего сообщения.\n")

for side, name, text in dialog:
    input()
    print_bubble(text, name, side)

print("\n Вы прочитали краткую версию. Подробнее читайте на https://habr.com/ru/articles/1017676/ \n")
</code></pre> <a href="https://habr.com/ru/posts/1018216/?utm_campaign=1018216&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 01 Apr 2026 19:11:32 GMT</pubDate>
    <dc:creator><![CDATA[vldmrmlkv]]></dc:creator>
      
      <category><![CDATA[tldr]]></category><category><![CDATA[python3]]></category><category><![CDATA[интервью]]></category><category><![CDATA[гвидо ван россум]]></category><category><![CDATA[бретт кэннон]]></category><category><![CDATA[ненормальное программирование]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dKosarevsky — Блог компании Open Data Science (+2) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1016390/</guid>
    <link>https://habr.com/ru/posts/1016390/?utm_campaign=1016390&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p>Всем привет. Начал писать открытую книгу про архитектуру безопасных AI-агентов.</p><p>Делаю не обзор фреймворков и не коллекцию «магических демо», а практический инженерный reference: control plane, policy boundaries, tool gateway, memory, observability, evals, approval flows, governance и production-подход к агентным системам.</p><p>Уже выложил первые главы и каркас книги - <a href="https://agent-axiom.github.io/agent-arch" rel="noopener noreferrer nofollow">https://agent-axiom.github.io/agent-arch</a></p><p>Репозиторий - <a href="https://github.com/agent-axiom/agent-arch" rel="noopener noreferrer nofollow">https://github.com/agent-axiom/agent-arch</a></p><p>Буду очень рад критике по существу:</p><ul><li><p>где архитектура спорная,</p></li><li><p>где не хватает важных разделов,</p></li><li><p>где формулировки слишком сырые,</p></li><li><p>что стоит добавить из практики эксплуатации и безопасности.</p></li></ul><p>Если тема близка - вливайся: issues, comments, corrections, PRs, ссылки на сильные источники и контрпримеры из реальных production-систем.</p><p>Хочется сделать не просто набор заметок, а полезный community-driven reference для тех, кто строит надежных и безопасных AI-агентов.</p> <a href="https://habr.com/ru/posts/1016390/?utm_campaign=1016390&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sun, 29 Mar 2026 08:00:46 GMT</pubDate>
    <dc:creator><![CDATA[dKosarevsky]]></dc:creator>
      
      <category><![CDATA[ai agent]]></category><category><![CDATA[agent]]></category><category><![CDATA[agents]]></category><category><![CDATA[agents.md]]></category><category><![CDATA[agentic ai]]></category><category><![CDATA[agentic coding]]></category><category><![CDATA[agentic engineering]]></category><category><![CDATA[agentic workflows]]></category><category><![CDATA[agentic protocol]]></category><category><![CDATA[architecture]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @dorif11 — Python (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1013782/</guid>
    <link>https://habr.com/ru/posts/1013782/?utm_campaign=1013782&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как я писал софт для фрагментного анализа ДНК</strong></p><p>Всем привет! Меня зовут Александр Дориф, я химик, молекулярный генетик и сисадмин-инфраструктурщик в компании WebHostMost, многие знают меня по нику Father Nurgle.</p><p>Итак, на дворе осень 2022 года, я, на тот момент аспирант, разрабатываю способы диагностики болезней экспансии коротких повторов (хорея Хантингтона, синдром ломкой Х хромосомы...) или с изменением количества локусов в геноме (инсерции/делеции, анеуплоидии). Я активно использую капиллярный электрофорез на ABI 3500 Dx и фрагментный анализ с помощью GeneMapper 5. И это стало проблемой. Компов в лабе мало, денег тоже, лицензия GeneMapper одна (а дополнительная стоит больше 10к$), комп с GeneMapper часто занят, софт сам по себе прибит к венде и БД Oracle. А сам я работаю на ноуте, устаревшем ещё в конце нулевых. Да, есть NCBI OSIRIS, но для него нужен Wine, а это лишний слой абстракции, да и интерфейс у него переусложнён на мой взгляд, Fragman не поддерживал импорт файлов с 3500, fatools не развивались и автор не отвечал на сообщения.</p><p>Так я решил писать FragalyseQt. Я изначально видел его как кроссплатформенный и свободный софт, поэтому выбрал за основу Python (для него есть много полезного типа BioPython) и Qt для интерфейса. Учитывая то, что у меня не было опыта написания десктопных приложений, несколько дней я изучал мануалы, после чего тёмным вечером 6 октября 2022 выпустил самую первую версию FragalyseQt с номером 0.1 и кодовым именем «Huntington». Это была смотрелка файлов FSA, умеющая селективно скрывать выбранные каналы флуоресценции и экспортировать данные внутреннего анализа (для ABI 3500 и SeqStudio) в CSV.</p><p>В версии 0.2&nbsp;«Friedreich», добавилась возможность независимого от прибора поиска и базового анализа пиков на электрофореграммах, я познакомился со SciPy и табличными возможностями Qt.</p><p>Версия 0.3&nbsp;«DiGeorge» принесла возможность правки базовой линии и тонкой настройки поиска пиков. И... Я упёрся в фундаментальную проблему: определение размера фрагментов на электрофореграммах требовало теории приблизительных вычислений, которую нам в своё время не давали, давая математику по остаточному принципу. Без сайзинга, FragalyseQt будет всего лишь смотрелкой. Я начал ботать матан. Мозги плавились, времени не хватало, к аспирантуре добавились заботы о дочке, но я учил. Здесь же случилось знакомство с реальностью: не каждая декларация «мы поддерживаем формат ABIF» значит «мы поддерживаем ПОЛНУЮ спецификацию ABIF». Также пришлось столкнуться с древними вариантами ABIF, полученными до его стандартизации. Была работа в Okteta, написание парсеров, FragalaseQt стал читать и старый ABIF, и его криминалистическое подмножество&nbsp;— HID.</p><p>1&nbsp;сентября 2024&nbsp;вышла FragalyseQt 0.4&nbsp;«Jeffreys» с&nbsp;сайзингом пиков методами степенных сплайнов, взвешенных степенных сплайнов и МНК. README стал подробнее, стремясь к полноценному мануалу. Позже добавил локальный и глобальный методы Саузерна. Софт стал реально аналитическим, с его помощью была опубликована работа на ESHG 2025 ( <a href="https://doi.org/10.13140/RG.2.2.14637.81123" rel="noopener noreferrer nofollow">https://doi.org/10.13140/RG.2.2.14637.81123</a> ). Потом развитие опять затянулось&nbsp;— задержки ЗП в начале года по 3-4 месяца не способствовали размышлениям о чём-то, кроме выживания. В сентябре я перешёл в WebHostMost и, внезапно, у меня появились адекватные задачи, время и поддержка коллег. Была переработанна структура для соответствия PEP 517, добавлен гибкий интерфейс и экспериментальная поддержка импорта сырых данных российского Нанофор-05 (формат реверсил).</p><p>20 марта 2026 вышла FragalyseQt 0.5&nbsp;«Southern» с&nbsp;импортом панелей GeneMapper, GeneMarker и NCBI OSIRIS, фильтрацией статтеров, экспортом в CODIS XML. Для скриншота мне было скучно использовать стандартные заглушки для данных (и ясно, что невозможно взять реальные данные дел), поэтому демо сделано как опознание тел после Резни в Зоне Высадки, Исстваан 5.</p><figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/c33/c1c/64e/c33c1c64e270e50ed98ea8982760ff6d.png" alt="FragalyseQt 0.5 - экспорт данных после применения панелей в формат CODIS XML: выбираются вкладки с данными для экспорта, назначаются роли в рамках дела (жертва, персонал, подозреваемый, предполагаемый родитель и т.д.), заполняются данные лаборатории и экспортируются. Экспортированные данные могут быть внесены в совместимую с CODIS систему (например, SmallPond)." title="FragalyseQt 0.5 - экспорт данных после применения панелей в формат CODIS XML: выбираются вкладки с данными для экспорта, назначаются роли в рамках дела (жертва, персонал, подозреваемый, предполагаемый родитель и т.д.), заполняются данные лаборатории и экспортируются. Экспортированные данные могут быть внесены в совместимую с CODIS систему (например, SmallPond)." width="1920" height="1080"><div><figcaption>FragalyseQt 0.5 - экспорт данных после применения панелей в формат CODIS XML: выбираются вкладки с данными для экспорта, назначаются роли в рамках дела (жертва, персонал, подозреваемый, предполагаемый родитель и т.д.), заполняются данные лаборатории и экспортируются. Экспортированные данные могут быть внесены в совместимую с CODIS систему (например, SmallPond).</figcaption></div></figure><ul><li><p><a href="https://github.com/Dorif/fragalyseqt" rel="noopener noreferrer nofollow">Репозиторий</a></p></li><li><p><a href="https://github.com/Dorif/fragalyseqt/releases/tag/southern_initial" rel="noopener noreferrer nofollow">Текущий релиз</a></p></li><li><p>Планы: поддержка работы с БД и ролевая аутентификация</p></li></ul> <a href="https://habr.com/ru/posts/1013782/?utm_campaign=1013782&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 23 Mar 2026 16:16:26 GMT</pubDate>
    <dc:creator><![CDATA[dorif11]]></dc:creator>
      
      <category><![CDATA[STR]]></category><category><![CDATA[криминалистика]]></category><category><![CDATA[PCR]]></category><category><![CDATA[пцр]]></category><category><![CDATA[фрагментный анализ]]></category><category><![CDATA[forensics]]></category><category><![CDATA[днк]]></category><category><![CDATA[dna]]></category><category><![CDATA[TP-PCR]]></category><category><![CDATA[repeat expansion]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @Kisel_n — Python (+4) — 16.03.2026 21:06]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1011024/</guid>
    <link>https://habr.com/ru/posts/1011024/?utm_campaign=1011024&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Зелёные тесты ≠ хорошие тесты</strong></p><p>Впервые в&nbsp;истории писать тесты стало легко и совсем не&nbsp;страшно. Вокруг теперь у&nbsp;всех покрытие 80%, 90%, а&nbsp;то и вовсе 100%. И вот тут начинается проблема: зелёные тесты ≠ хорошие тесты.</p><p>Проблема в&nbsp;метрике, которой мы все привыкли доверять. Code coverage считает строку протестированной, если она выполнилась во&nbsp;время теста. Всё. Не «поймает&nbsp;ли тест баг в&nbsp;этой строке», не «проверяет&nbsp;ли он правильность результата»&nbsp;— просто выполнилась. Можно написать тест без&nbsp;единого assert, и покрытие вырастет. 500&nbsp;тестов, 90% coverage, а&nbsp;пользы ноль.</p><p>Мутационное тестирование&nbsp;— это совершенно другой путь. В&nbsp;простейшей реализации этот инструмент тупо берёт твой код и намеренно ломает его: меняет &gt; на &gt;=, + на ‑, True на&nbsp;False. Каждая такая поломка&nbsp;— мутант. Если после мутации все тесты по‑прежнему зелёные&nbsp;— значит они ничего не&nbsp;проверяют. Покрытие есть, защиты нет.</p><p><strong>Почему это важно именно сейчас?</strong></p><p>Потому что&nbsp;нейронка любит зелёненькое. Чем больше зелёных тестов&nbsp;— тем субъективно лучше. 100&nbsp;тестов внушают больше доверия, чем 10, правда? А&nbsp;внутри там assert response.status_code == 200. assert result is not None. assert len(items) &gt; 0. Тест проверяет, что&nbsp;функция вернула хоть что‑то&nbsp;— и радостно зеленеет. Поменяй логику условия, перепутай знак, сломай граничный случай&nbsp;— тест всё равно зелёный. Потому что&nbsp;он проверяет не&nbsp;правильность, а&nbsp;наличие.</p><p>Мутационное тестирование&nbsp;— единственный автоматический способ это поймать. Метрика называется mutation score: процент убитых мутантов. 60%&nbsp;— плохо. 90%+&nbsp;— тесты реально что‑то защищают.</p><p>Кое‑какие инструменты для&nbsp;такого тестирования уже есть: mutmut и cosmic‑ray для&nbsp;Python, Stryker для&nbsp;JS/TS, PIT для&nbsp;Java. Медленно? Да, значительно медленнее обычного тест‑рана. Но&nbsp;запускать его не&nbsp;нужно на&nbsp;каждый коммит&nbsp;— достаточно на&nbsp;PR в&nbsp;критические модули.</p><p>Но&nbsp;есть нюансы. А&nbsp;где их нет, правда?</p><p>Первый: мутации рандомные. Замена &gt; на &gt;=&nbsp;— это не&nbsp;баг, который кто‑то реально допустит. Это синтетическая поломка. Половина мутантов генерирует код, который в&nbsp;реальности никогда не&nbsp;появится. Ты тратишь время на&nbsp;убийство мутантов, которые не&nbsp;имеют отношения к&nbsp;настоящим ошибкам. Это как&nbsp;тестировать замок, ковыряя его вилкой&nbsp;— формально проверка, по&nbsp;факту мимо.</p><p>Второй&nbsp;— ещё хуже. Чтобы убить мутанта, тест должен зафиксировать конкретное поведение. Каждую ветку, каждое значение, каждый edge case. Доведи mutation score до 100%&nbsp;— и ты прибил гвоздями каждую строчку кода. Буквально. Теперь попробуй отрефакторить. Переименовал внутренний метод&nbsp;— 40&nbsp;тестов красные. Поменял порядок полей в&nbsp;ответе&nbsp;— ещё 20. Тесты превращаются из&nbsp;страховки в&nbsp;кандалы: код работает правильно, но&nbsp;тесты падают, потому что&nbsp;они проверяют не&nbsp;поведение, а&nbsp;реализацию.</p><p>Это реально ловушка. Слишком гонишься за&nbsp;mutation score&nbsp;— получаешь хрупкие тесты. Не&nbsp;гонишься&nbsp;— получаешь видимость тестирования.</p><p><strong>Перемены&nbsp;— впереди!</strong></p><p>И вот тут становится по‑настоящему интересно. Представь, что&nbsp;мутации генерирует не&nbsp;тупой набор правил «замени плюс на&nbsp;минус», а&nbsp;нейронка, которая понимает контекст. Которая знает, какие баги реально встречаются в&nbsp;таком коде. Которая мутирует не&nbsp;синтаксис, а&nbsp;логику: меняет порядок проверок, путает граничные условия, забывает обработать edge case&nbsp;— ровно так, как&nbsp;ошибается человек. Или&nbsp;другая нейронка.</p><p>Сейчас есть явный сдвиг в&nbsp;сторону таких инструментов, но&nbsp;всё еще ничего достойного не&nbsp;вышло. Но&nbsp;уже скоро точно появится. И это будет совсем другой уровень. Не «выжили&nbsp;ли тесты после рандомной поломки», а «выжили&nbsp;ли тесты после правдоподобной ошибки».</p><p>Парадокс в&nbsp;том, что&nbsp;мутационное тестирование&nbsp;было нишевым инструментом, пока тесты писали люди. Когда тесты пишет нейронка&nbsp;— идея становится обязательной. Правда инструменты пока не&nbsp;успели дозреть.</p><p>Ждём, когда мутанты станут умнее.</p> <a href="https://habr.com/ru/posts/1011024/?utm_campaign=1011024&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 16 Mar 2026 18:06:43 GMT</pubDate>
    <dc:creator><![CDATA[Kisel_n]]></dc:creator>
      
      <category><![CDATA[mutation testing]]></category><category><![CDATA[мутационное тестирование]]></category><category><![CDATA[code coverage]]></category><category><![CDATA[тестирование]]></category><category><![CDATA[AI]]></category><category><![CDATA[качество кода]]></category><category><![CDATA[mutmut]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @myshkin_does_it — Python (+1) — 14.03.2026 14:57]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1010186/</guid>
    <link>https://habr.com/ru/posts/1010186/?utm_campaign=1010186&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Два факта об int в</strong> <strong>Python</strong></p><p>Один забавный факт привел меня к открытию другого :)</p><p>Читал Fluent Python и наткнулся на пример кода, который меня заинтересовал (помимо миллиона других, книга – топ). В главе про конкурентность и работу GIL была константа <code>NUMBERS</code> с необычным значением:</p><pre><code class="python">NUMBERS = 5_000_111_000_222_021</code></pre><p><strong>Нижние подчеркивания</strong></p><p>Если не встречали в работе или документации, то вряд ли знаете (как и я): в числах можно использовать <code>_</code> для читаемости. Интерпретатор их игнорирует:</p><pre><code class="bash">&gt;&gt;&gt; x = 1_2
&gt;&gt;&gt; y = 12
&gt;&gt;&gt; x == y
True
&gt;&gt;&gt; x is y
True</code></pre><p>Особенно удобно в высокоразрядных числах. Согласитесь <code>5_000_111_000_222_021</code> куда проще читать, чем <code>5000111000222021</code></p><p><strong>Кеш малых чисел</strong></p><p>Примеры ниже разбирал на домашнем ноуте с Cpython 3.13.11 и 3.14.3.</p><p>Пока игрался, меня заинтересовал один прикол. Я попробовал тот же пример с большими числами:</p><pre><code class="bash">&gt;&gt;&gt; x = 100_500
&gt;&gt;&gt; y = 100500
&gt;&gt;&gt; x == y
True
&gt;&gt;&gt; x is y
False # Но ведь в примере выше было True..</code></pre><p>Почему переменные больше не ссылаются на один объект?</p><p>В Cpython есть кеш для маленьких чисел, чтобы частые значения переменных не занимали много памяти и код был отзывчивее.</p><p>Ответ на вопрос: «где граница, до которой числа закешированы?» я решил не гуглить, проверил небольшим скриптом:</p><pre><code class="bash">&gt;&gt;&gt; x = 0
&gt;&gt;&gt; y = 0
&gt;&gt;&gt; for n in range(1000):
... &nbsp; &nbsp; print(f'If {x=} and {y=}, x is y: {x is y}')
... &nbsp; &nbsp; x += 1
... &nbsp; &nbsp; y += 1

# Пропустим часть строк
If x=254 and y=254, x is y: True
If x=255 and y=255, x is y: True
If x=256 and y=256, x is y: True
If x=257 and y=257, x is y: False # Вот и граница
If x=258 and y=258, x is y: False&nbsp;
...</code></pre><p>Сначала я сделал эмпирически вывод, что закеширован диапазон 0 – 256. Но после самопроверки с гуглом узнал, что также в амортизированный диапазон входят числа от -5 до -1. Итого : от -5 до 256 включительно.</p><p><strong>UPD 15.03.2026.</strong>  Добрый <a href="https://habr.com/ru/users/zzzzzzerg/" rel="noopener noreferrer nofollow">дядя</a> в комментах принес ссылку на <a href="https://github.com/python/cpython/pull/133160/changes" rel="noopener noreferrer nofollow">pr</a> в Cpython 3.15, где кеш малых чисел увеличен  до 1024 :). Ух, заживем..</p><p>Для присвоения переменным чисел вне диапазона, интерпретатор начнет выделять уже раздельные области памяти и <code>is</code> станет возвращать <code>False</code>.</p><p>Так то. В оптимизации пригодится вряд ли, но удивить друзей в баре сможете.</p> <a href="https://habr.com/ru/posts/1010186/?utm_campaign=1010186&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Sat, 14 Mar 2026 11:57:09 GMT</pubDate>
    <dc:creator><![CDATA[myshkin_does_it]]></dc:creator>
      
      <category><![CDATA[python]]></category><category><![CDATA[integer]]></category><category><![CDATA[оптимизация]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @JDTapp — Блог компании Doubletapp (+3) — N/P]]></title>
    <guid isPermaLink="true">https://habr.com/ru/companies/doubletapp/posts/1008940/</guid>
    <link>https://habr.com/ru/companies/doubletapp/posts/1008940/?utm_campaign=1008940&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Как проверить HTTP-запросы на Backend</strong></p><p>Разрабатываете VK Mini Apps и хотите быть уверены, что HTTP-запросы на backend приходят именно из приложения VK, а не откуда угодно? Для этого нужна корректная проверка Init Data.</p><p>Наш backend-разработчик <a href="https://habr.com/ru/users/dmvasiliev/" rel="noopener noreferrer nofollow">@dmvasiliev</a> выложил Open Source-проект, который упрощает эту задачу. Это Python-пакет с готовыми алгоритмами проверки подлинности данных, передаваемых из VK Mini Apps. Он помогает быстро и безопасно настроить авторизацию и аутентификацию на backend-стороне приложения.</p><p>👉 <a href="https://github.com/swimmwatch/vk-mini-app-auth" rel="noopener noreferrer nofollow">Репозиторий</a><a href="https://github.com/swimmwatch/vk-mini-app-auth%EF%BF%BC%F0%9F%93%98" rel="noopener noreferrer nofollow"><br>📘</a> <a href="https://swimmwatch.github.io/vk-mini-app-auth/" rel="noopener noreferrer nofollow">Документация</a> с примерами интеграции для Django и FastAPI.</p><p>Когда мы только начинали работать с VK Mini Apps, информации было немного: редкие кейсы, почти не у кого было спросить совета. За это время мы запустили несколько приложений, разобрались в нюансах платформы и накопили собственную экспертизу. Теперь делимся ею с сообществом через Open Source-проекты и вносим вклад в развитие технологии.</p><p>Репозиторий открыт — берите в работу, делитесь постом с коллегами.&nbsp;</p><blockquote><p>А если вам нужен VK, Telegram Mini App или спецпроект на другой платформе — команда Doubletapp поможет пройти путь от идеи до работающего продукта. <br>Примеры наших проектов — <a href="https://doubletapp.ai/miniapp/?utm_source=habr&amp;utm_medium=post&amp;utm_campaign=vk_mini_apps_repo" rel="noopener noreferrer nofollow">на сайте</a>.</p></blockquote> <a href="https://habr.com/ru/posts/1008940/?utm_campaign=1008940&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Wed, 11 Mar 2026 09:11:30 GMT</pubDate>
    <dc:creator><![CDATA[JDTapp (Doubletapp)]]></dc:creator>
      
      <category><![CDATA[mini app]]></category><category><![CDATA[mini apps]]></category><category><![CDATA[mini apps telegram]]></category><category><![CDATA[mini app authorization]]></category><category><![CDATA[vk mini apps]]></category><category><![CDATA[python]]></category><category><![CDATA[authorization]]></category><category><![CDATA[open-source]]></category><category><![CDATA[библиотека компонентов]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @men10577 — Python (+1) — 09.03.2026 18:35]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1008220/</guid>
    <link>https://habr.com/ru/posts/1008220/?utm_campaign=1008220&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<figure class="full-width "><img src="https://habrastorage.org/getpro/habr/upload_files/526/f60/c41/526f60c419677b594fcd68c2e70732cf.jpeg" width="1280" height="408"></figure><p>В <a href="https://habr.com/ru/posts/1005478/" rel="noopener noreferrer nofollow">продолжение</a> прошлого поста, собрал новый трек <a href="https://ai.arckep.ru/track-4/" rel="noopener noreferrer nofollow">курса</a> из вашей обратной связи. Углубил тему, сделал ориентир на уже более опытных.<br>Если есть куда еще копать - пишите в комментарии.</p><p>P.S. Все также бесплатно и таким останется, пока у меня есть деньги на поддержку и развитие ресурса.  </p> <a href="https://habr.com/ru/posts/1008220/?utm_campaign=1008220&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 09 Mar 2026 15:35:35 GMT</pubDate>
    <dc:creator><![CDATA[men10577]]></dc:creator>
      
      <category><![CDATA[LangGraph]]></category><category><![CDATA[CrewAI]]></category><category><![CDATA[Dify]]></category><category><![CDATA[n8n]]></category><category><![CDATA[Ollama]]></category><category><![CDATA[vLLM]]></category><category><![CDATA[llama.cpp]]></category><category><![CDATA[Anthropic]]></category><category><![CDATA[OpenAI]]></category><category><![CDATA[Vercel]]></category>
  </item>
  

	
  

  

  

    

  

  
  <item>
    <title><![CDATA[Пост @DariRinch — Искусственный интеллект (+4) — 09.03.2026 15:51]]></title>
    <guid isPermaLink="true">https://habr.com/ru/posts/1008158/</guid>
    <link>https://habr.com/ru/posts/1008158/?utm_campaign=1008158&amp;utm_source=habrahabr&amp;utm_medium=rss</link>
    <description><![CDATA[<p><strong>Сделать ИИ подотчетным? Теперь это реально</strong></p><p>Пока <a href="https://habr.com/ru/users/DariRinch/articles/" rel="noopener noreferrer nofollow">статья</a> набирает просмотры, выкатили DCL Evaluator - v1.1.0 с webhook API. Любой LLM pipeline получает криптографическое доказательство каждого решения за 3 строки кода. Tamper-evident. Offline-capable. 🔗 <a href="http://fronesislabs.com" rel="noopener noreferrer nofollow">fronesislabs.com</a> ⭐ <a href="https://github.com/DariRinch/dcl-app/releases/tag/v1.1.0" rel="noopener noreferrer nofollow">GitHub</a></p> <a href="https://habr.com/ru/posts/1008158/?utm_campaign=1008158&amp;utm_source=habrahabr&amp;utm_medium=rss">Читать дальше &rarr;</a>]]></description>
      
    <pubDate>Mon, 09 Mar 2026 12:51:21 GMT</pubDate>
    <dc:creator><![CDATA[DariRinch]]></dc:creator>
      
      <category><![CDATA[искусственный интеллект]]></category><category><![CDATA[LLM]]></category><category><![CDATA[аудит]]></category><category><![CDATA[криптография]]></category><category><![CDATA[compliance]]></category><category><![CDATA[EU AI Act]]></category><category><![CDATA[webhook]]></category><category><![CDATA[API]]></category><category><![CDATA[информационная безопасность]]></category><category><![CDATA[open source]]></category>
  </item>
  

	
  

  

  

      

      

      

    
  </channel>
</rss>
