Код на салфетке
2.38K subscribers
770 photos
21 videos
2 files
811 links
Канал для тех, кому интересно программирование на Python и не только.

Сайт: https://pressanybutton.ru/
Чат: https://t.me/+Li2vbxfWo0Q4ZDk6
Заметки автора: @writeanynotes

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
Приветствую!

ТРОН: Арес (2025)

Сетевые токи снова гудят. После долгого молчания TRON возвращается — теперь уже не внутрь машины, а наружу.

ТРОН: Арес — это история о программе, которая выходит в реальный мир. Режиссёр Йоаким Роннинг, в главной роли Джаред Лето. И впервые франшиза задаёт вопрос не о том, что человек может сделать с кодом, а о том, что код может сделать с человеком.

Мир ТРОН больше не ограничен сеткой и неоном — он буквально выходит из монитора. Это не просто фантастика, а размышление о границе между человеком и искусственным интеллектом.

ТРОН: Арес — фильм, который можно смотреть не ради экшена, а ради ощущений. Ради мысли, что однажды программа сможет смотреть на нас с тем же любопытством, с каким мы смотрим на экран.
🔥43
Привет, друзья! 👋

Еще одна неделя позади, и у нас накопилось много интересного контента. Вот самые полезные и увлекательные материалы, которые мы выбрали для вас на этой неделе:

📋 Новое на канале:

🔄 Понедельник, 17.11.2025Дайджест

🐍 Вторник, 18.11.2025Знаете ли вы, что * для списков размножает ссылки, а не копии?

⚙️ Четверг, 20.11.2025OpenAI Guardrails: защита ИИ-приложений от атак

🎬 Пятница, 21.11.2025Пятничный кинорелакс


🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥42👍2
Forwarded from GitVerse News
#GitVerseКейс

Смотри, какой репозиторий! 🚀

Сегодня в рубрике рассказываем об интересном проекте-участнике нашей грантовой программы. Это ReVu — self-hosted инструмент на базе ИИ для автоматического код-ревью в запросах на слияние. Он позволяет командам экономить время, выявляя проблемы на раннем этапе и не передавая код сторонним сервисам 😍

О проекте 🖱

ReVu — вебхук-сервис, который вы разворачиваете у себя без внешних платформ. Как работает: dev открывает PR, Git шлет вебхук в ReVu. Тот верифицирует подпись (чтобы избежать подделок), запрашивает diff, передает в ИИ и постит анализ в PR. Вы выбираете формат: общий комментарий или inline-замечания по строкам, а ИИ ловит ошибки, сомнительные места. В результате ревьюер получает «чистый» код. Время сэкономлено!

История проекта и названия

Все началось с идеи задействовать ИИ для предварительного разбора кода в PR, чтобы отметить потенциальные проблемы до того, как подключится человек. Автор проверил готовые варианты, но они не устроили: мало кастомизации, и код уходит на сторону. Так и появился ReVu — инструмент для локального использования, который адаптируется под нужды.

Название — сокращение от «review» и шутки подписчика: участник чата автора как-то сказал, что «Реву — это стабильное состояние моего ревьюера». Идея в том, чтобы ИИ «поплакал» над кодом первым 🤭, отфильтровав рутину, а ревьюер занялся ключевыми вещами вроде архитектуры. В итоге процесс ускоряется, качество растет, а PR приходит уже отполированным!

Особенности:

все находится на вашем сервере;
поддержка разных Git (публичные с reverse-proxy) и ИИ, включая локальные модели;
анализ diff, проверка Conventional Commits.

Архитектура

В основе — FastAPI для вебхуков с Pydantic. Он принимает входящие вебхуки от Git-провайдеров и с помощью Pydantic валидирует данные: проверяет структуру событий, типы полей и корректность переданной информации. Для общения с внешними сервисами — как с Git-провайдерами, так и с ИИ-моделями — используется HTTPX.

Планы на развитие 💡

В планах: больше провайдеров, тесты и дока для контрибьюторов, мульти-Git на одном инстансе, а также документированные кастом-промпты и версия как GitHub Action — без сервера, прямо в пайплайне.

Подробнее о проекте (изучайте, юзайте, вкладывайтесь) — по ссылке

#GitVerseРазработчикам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥843
Знаете ли вы, как ускорить вставку в отсортированный список?

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

Вставлять все равно придется обычным .insert(), но теперь вы сразу будете знать куда именно.

Пример быстрой вставки:

import bisect

data = [10, 20, 30, 40, 50]

# bisect_left находит позицию, куда должен встать новый элемент
idx = bisect.bisect_left(data, 25)
print(idx) # 2

data.insert(idx, 25)
print(data) # [10, 20, 25, 30, 40, 50]


Можно сделать короче – insort сделает поиск + вставку за один вызов:

bisect.insort_left(data, 35)
print(data) # [10, 20, 25, 30, 35, 40, 50]


Основные функции:
- bisect_left(a, x): если x есть в списке, вернет позицию перед первым вхождением; если нет – позицию для вставки с сохранением сортировки
- bisect_right(a, x) / bisect(a, x): если x есть в списке, вернет позицию после последнего вхождения; если нет – позицию для вставки с сохранением сортировки
- Поиск позиции – O(log n), вставка в список – O(n), потому что Python сдвигает элементы.

Код на салфетке x Кусочки кода
🔥123
Всем привет!

Во время становления канала, два года назад, я проходил стажировку в Академии Лад на проекте «Лапа». Старожилы наверняка помнят серию статей на эту тему.

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

Благодаря стажировке в Академии Лад я, на тот момент выпускник курсов GeekBrains, который почти ничего не знал о командной работе, получил массу полезного опыта. И продолжаю получать его до сих пор — и не только получать, но и передавать стажёрам в качестве ментора Python-бэкендеров.

Академия за это время также не стояла на месте — она развивалась и расширялась. Если во время моей стажировки проектов было от силы штук пять, и все они были внутренними, то сейчас многие выполняются для внешних заказчиков: например, всем известная ЛизаАлерт или Университет им. Лобачевского. Проекты стали крупнее и серьёзнее, а подходы к разработке — из учебных постепенно приблизились к отраслевым стандартам. Согласитесь, проект в резюме для ЛизаАлерт выглядит куда солиднее, чем «делал инкубационные задачки».

Быть ментором оказалось непросто, но невероятно интересно. Мы еженедельно созваниваемся со стажёрами и обсуждаем выполненные задачи. На этих созвонах (а также в личных сообщениях) они задают вопросы по проектам, технологиям и рабочим процессам.

Помимо стажировки, Академия Лад предлагает и специализированные курсы. Не как во многих «онлайн-школах», где пытаются учить всему подряд и ничему конекретно, а наоборот — дают только профильные, действительно практические знания. И тут тоже не обойдётся без меня: начиная с 6 декабря, я буду вести практические занятия для студентов курса Python + Django. На курсе будет всё необходимое для полноценной работы:

- современные инструменты, такие как uv и pre-commit;
- полный путь Django-разработчика — от моделей и шаблонов до тестирования и API;
- знакомство с инструментами деплоя: CI/CD и Docker.

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

Если кому-то откликнулась история про стажировку и хочется похожего опыта, то вот ссылка на курс. По промокоду press_any_button действует скидка в 10 000 ₽ — возможно, кому-то пригодится.
🔥1183
Всем привет!

Смертельная зона (2021)

Если вы ещё не смотрели этот футуристический боевик, самое время наверстать! «Смертельная зона» — это история о недалёком будущем, где война идёт не только между людьми, но и с участием высокотехнологичных роботов. Главный герой — молодой лейтенант, который вместе с опытным офицером-андроидом отправляется на опасную миссию, чтобы предотвратить глобальный конфликт.

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

Особенно стоит отметить игру Энтони Маки в роли андроида — его персонаж одновременно холоден и человечен, что добавляет глубины фильму. Если вам нравятся фильмы про будущее, технологии и военные триллеры — «Смертельная зона» точно стоит вашего внимания.
🔥42
Код на салфетке pinned a photo
This media is not supported in your browser
VIEW IN TELEGRAM
☁️ Self-hosted против Облака: Как не дать LLM слить ваши данные в 2025 году

Когда можно спокойно идти в Yandex Cloud, а когда без онпрема и своего железа лучше даже не начинать.

Привет всем. Бизнес хочет «как ChatGPT», но живет в жесткой реальности: 152-ФЗ, Роскомнадзор, ФСТЭК, а иногда и 187-ФЗ про критическую инфраструктуру (КИИ). Игнорировать это нельзя: с 30 мая 2025 года штрафы за нарушения по персональным данным (ПД) и требования к документации (политика ПД, регламенты) выросли, и играть в рулетку уже дорого.

На этом фоне на рынке появился "зоопарк" российских LLM: от GigaChat и YandexGPT в облаке до полностью собственных, кастомных моделей на своем железе.

Главный тезис: Self-hosted - не магическое слово безопасности, а всего лишь один из режимов работы. Вопрос не в том, что лучше, а в том, какая задача и какой регулятор.

⤴️⤴️⤴️⤴️⤴️⤴️⤴️⤴️

🇷🇺 Карта LLM-ландшафта: От API до своего ЦОДа

Российский рынок LLM делится на три ключевых сегмента:

0️⃣ Облако с LLM как сервис (SaaS/PaaS)

Это самый простой вход:

🟡 Yandex Cloud с YandexGPT API, который заточен под русскоязычные бизнес-кейсы и имеет готовую экосистему.

🟢 SberCloud с GigaChat Pro/Lite API для разработчиков, с готовой документацией и корпоративным онбордингом.

Эти облака (включая VK Cloud) активно используются, так как дата-центры находятся в РФ, что снимает базовые вопросы по локализации. Вы платите за токены и вычисления, а не за закупку GPU и команду MLOps.

1️⃣ Корпоративные Онпрем-платформы (On-prem/Hybrid)

Это развертывание платформы вендора внутри вашего периметра или в отдельном закрытом сегменте.

🟢 GigaChat Enterprise интегрируется с ERP, CRM и прочими корпоративными системами, но живет в вашем контуре.

🟡 Платформы по типу JET & Yandex GPT Lab - когда YandexGPT разворачивается прямо внутри периметра компании, используя облако лишь как опцию для отдельных, некритичных сценариев.

2️⃣ Полностью Self-hosted Стек

Вы берете отечественные модели (GigaChat, YandexGPT, Cotype, T-Pro) как основу, дообучаете их и крутите на своем GPU-сервере в российском ЦОДе. Выполняете все требования 152-ФЗ к ЦОД и физической защите сами.

⤴️⤴️⤴️⤴️⤴️⤴️⤴️⤴️

💻 Self-hosted без своего железа: аренда GPU в российских ЦОД

Важно понимать - self-hosted не всегда значит «купили стойку, притащили GPU и теперь страдаем с охлаждением и апгрейдами».

Есть промежуточный вариант: взять готовые GPU-серверы в аренду у российских провайдеров и крутить опенсорсные LLM уже на них. По сути получается такой компромисс:
➡️ модель и данные ваши;
➡️ инфраструктура физически в России;
➡️ железо и часть рутины по нему на стороне провайдера.

Я, например, знаком с Selectel (не реклама): у них можно взять сервера с GPU в аренду и довольно быстро поднять свою Llama, Mistral или другую опенсорсную LLM. Без истории «ждем поставку железа три месяца, потом еще два согласуем с безопасниками». И дополнительно они сами выступают за безопасность. Посмотрим как у них получится.

Чем такой подход отличается от классического облака с готовой LLM:

🥺 В облаке вы пользуетесь чужой моделью как сервисом.
🤪 На арендованном GPU вы поднимаете свою модель и сами решаете, что логировать, как дообучать, какие guardrails ставить и какие данные вообще туда пускать.

Юридически и с точки зрения ИБ это ближе к self-hosted, чем к SaaS: провайдер дает ресурсы и площадку, но не лезет в ваш стек и логи. При этом входной билет сильно ниже, чем в сценарии «купили парк GPU-серверов и теперь сами за все отвечаем».

⤴️⤴️⤴️⤴️⤴️⤴️⤴️⤴️

🚨 Юридический Ликбез: Что на самом деле требует закон и для чего надо прикрывать свою «пятую точку»

152-ФЗ и ПД: Данные с персональными данными (ПД) обязаны храниться и обрабатываться на территории РФ, особенно если вы предоставляете массовый сервис для граждан. Российское облако (Yandex Cloud, SberCloud) это не запрещает, но провайдер обязан иметь дата-центры в РФ и соответствовать 152-ФЗ, а также стандартам ISO, PCI DSS.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥32
187-ФЗ и КИИ — главная болевая точка. Если ваша компания попадает под 187-ФЗ (банки, энергетика, транспорт, крупный завод), то требования к безопасности значимых объектов КИИ сильно выше.

В таких условиях онпрем-платформа или строго изолированный контур обычно проще согласовывается с «безопасниками», чем «просто облачный SaaS».

Я думаю, что про штрафы за нарушение ФЗ мне не стоит упоминать. Там просто «космические масштабы»

⤴️⤴️⤴️⤴️⤴️⤴️⤴️⤴️

😋 Когда облако - это оптимальный выбор (и не геройствуем)

Self-hosted не нужен, когда:
0️⃣ Вы генерируете тексты, а не оперируете данными. Генерация маркетинговых текстов, описаний товаров, скриптов продаж - если там нет чувствительных ПД.
1️⃣ Вы делаете внутреннюю поддержку. Поддержка сотрудников в бэкофисе, аналитика, если в запросы не летят паспортные данные, медданные и прочее.
2️⃣ Вы используете RAG с очисткой. RAG по внутренним документам, где вы заранее отфильтровали ПД и секреты, или работаете с обезличенными версиями.
3️⃣ Вы - стартап. У вас нет бюджета и нет команды на свой ML-стек и ИБ. Но только соблюдайте очистку ПД.

Аргументы «за» облако:

🏃‍♂️ Зрелые облака (Yandex Cloud, SberCloud) уже позиционируют себя для ИИ-задач.
🏃‍♂️ Готовый SLA, сертификации, резервирование - много инфраструктуры «из коробки».
🏃‍♂️ Вход дешевле: платите за токены, а не за закупку GPU.

«Можно идти в облако, если...»:
🙂 Регулятор не требует отдельного контура и сертификации системы.
🙂 В запросах к LLM нет сырых ПД или коммерческой тайны целиком.
🙂 Вас устраивает, что частичный контроль над инфраструктурой у облачного провайдера.

⤴️⤴️⤴️⤴️⤴️⤴️⤴️⤴️

😐 Когда Self-hosted / Онпрем действительно нужен

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

🐱 Вы работаете с чувствительными доменами. Банки, страховые, медицина, госуслуги, телеком - везде, где много высокоуровневых ПД и подзаконки к 152-ФЗ.

🐱 Запрещена утечка логов. Вы не можете позволить себе, чтобы лог с сырыми запросами улетел хоть куда-то вне вашего контура.

🐱 Вы - объект КИИ. Требования ФСБ/ФСТЭК по защите инфраструктуры (сегментация, сертифицированные СЗИ) крайне жесткие. Тут онпрем-платформа (YandexGPT/GigaChat в контуре) выглядит гораздо реалистичнее, чем абстрактное облако.

🐾 Нужна тонкая кастомизация и guardrails. Если вам нужно допиливать архитектуру модели, дообучать на своих данных, контролировать версионность и встраивать собственные кастомные guardrails.

Плюсы self-hosted:
🙂 Максимальный контроль над данными, логами и контурами доступа.
🙂 Возможность выстроить архитектуру безопасности под свои стандарты и отраслевые регламенты.
🙂 Гибкость в выборе моделей, дообучении, настройке интеграции с KMS/SIEM.
🙂 Можно комбинировать: модель и данные ваши, а железо арендуете у провайдера в РФ (типа Selectel с GPU-серверами), то есть сохраняете контроль над стэком, но не строите свой мини-ЦОД.

Минусы self-hosted:
👊 Железо, GPU, ЦОД, лицензии, сопровождение - все расходы ваши.
👊 Нужна своя команда ML/DevOps/ИБ, а не «пара разработчиков».
👊 Обновления моделей и безопасность стека - ваша головная боль.

⤴️⤴️⤴️⤴️⤴️⤴️⤴️⤴️

🤝 Гибридный путь: не выбирать «или-или»

Самое практичное решение часто лежит посередине - сегментация трафика и сценариев.

🟡 Онпрем для чувствительного. На периметре стоит онпрем-платформа (YandexGPT в контуре). Через нее проходят чувствительные сценарии: ПД, финансы, КИИ.
🟡 Облако для легкого. Для «легких» задач (маркетинг, идеягенерация) используются облачные сервисы того же вендора, чтобы не плодить зоопарк.
🟡 Аренда GPU как буфер. Если своего железа пока нет, но команда готова тащить опенсорсные модели, можно начать с аренды GPU в российских ЦОД (Selectel и другие), а потом уже решать, идти ли в свой парк железа.
🟡 Ограничение выхода наружу. Вы лимитируете, какие подсистемы вообще могут ходить наружу, используя API-шлюзы, DLP и WAF.

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

⤴️⤴️⤴️⤴️⤴️⤴️⤴️⤴️
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥21
💡 Чек-лист для принятия решения

Ответьте на 5 вопросов, чтобы выбрать путь:

0️⃣ Какой у нас регулятор и отрасль?
    ➡️ Обычный коммерческий бизнес без КИИ ▶️ можно начинать с облака.
    ➡️ Есть КИИ или жесткое требование службы ИБ ▶️ сразу смотрим онпрем/гибрид.

1️⃣ Какие данные пойдут в LLM?
    ➡️ Только обезличенные и «ненужные» ▶️ облако.
    ➡️ Сырые ПД, финансы, медданные, гостайна ▶️ онпрем/self-hosted.

2️⃣ Нужна ли тонкая кастомизация?
   ➡️ Хватает «чата + RAG» ▶️ облачный сервис.
   ➡️ Нужно строить платформу и сценарии как ядро продукта ▶️ онпрем/свой стек.

3️⃣ Есть ли команда и бюджет на железо?
    ➡️ Команды MLOps нет, бюджет ограничен ▶️ не геройствуем, берем облако.
    ➡️ Есть ЦОД, GPU, люди и ИБ уже привыкла к сложным системам ▶️ self-hosted реально тянуть.
    ➡️ Своего ЦОДа нет, но есть команда, готовая работать с опенсорсными моделями ▶️ можно начать с аренды GPU у российских провайдеров (Selectel и т.п.), а уже потом решать, строить ли железо под себя.

4️⃣ Какие риски мы не готовы принять?

   ➡️ «Боимся только простоя» ▶️ выбираем облако с хорошим SLA.

   ➡️ «Боимся утечки больше всего» ▶️ максимальная локализация, свои guardrails, онпрем/self-hosted.

➡️➡️⤴️⤴️🔄⤴️⤴️➡️🔘

Выбор между облаком и Self-hosted - это выбор между скоростью внедрения/доступностью и глубиной контроля/соответствием жестким регуляторным требованиям (особенно 187-ФЗ КИИ). Не давайте LLM стать «протекающей абстракцией» для ваших критических данных.

Код на салфетке x Мозг в данных
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥321
Привет, друзья! 👋

Еще одна неделя позади, и у нас накопилось много интересного контента. Вот самые полезные и увлекательные материалы, которые мы выбрали для вас на этой неделе:

📋 Новое на канале:

🔄 Понедельник, 24.11.2025Дайджест

🐍 Вторник, 25.11.2025Смотри, какой репозиторий!, Знаете ли вы, как ускорить вставку в отсортированный список?

🎬 Пятница, 28.11.2025Путь от стажёра до ментора, Пятничный кинорелакс

🤖 Воскресенье, 30.11.2025Self-hosted против Облака: Как не дать LLM слить ваши данные в 2025 году

🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥42
Forwarded from GitVerse News
#GitVerseКейс

Смотри, какой репозиторий! 🐶

Время дайджеста! Мы продолжаем изучать крутые проекты, которые нашли среди заявок грантовой программы, и вдохновлять ими. Сегодня снова принесли вам целых три. Давайте смотреть 🚀

1️⃣Kawai-Focus — приложение для фокусировки внимания на основе техники Pomodoro. Его миссия — сделать работу человека эффективной, предотвратить выгорание и вовремя предупреждать об опасном для здоровья уровне переработки.

Какие фишки? 🖱
📌Современный и аккуратный дизайн в стиле Material Design, который оживил внешний вид приложения на Kivy благодаря обновленному форку KivyMD 2.0.0.
📌Настраиваемые цепочки таймеров, легко подстраиваемые под индивидуальные потребности пользователя — при этом встроенные ограничения не позволят вам переусердствовать и выгореть.
📌Приложение работает локально на ПК. Сейчас ведется работа над сборкой пакета под Linux, а также изменение дизайна к Material Design виду.

⛓️‍💥Ссылка на репозиторий

2️⃣Mlut — инструмент для верстки в подходе Atomic CSS, с которым можно создавать стили любой сложности. Что-то похожее на Tailwind, но по некоторым параметрам превосходит все популярные аналоги.

Какие преимущества? 🖱
📌Нейминг коротких классов интуитивно понятен и унифицирован, построен на популярных свойствах CSS.
📌Мощные возможности генератора сложных стилевых комбинаций, близкие по духу к самому языку CSS.
📌Полная поддержка препроцессора, позволяющая комбинировать собственные правила CSS с утилитами.
📌Поддерживает кастомизацию и создание собственных дополнений.

⛓️‍💥Ссылка на репозиторий

3️⃣Orbitalika — сайт для моделирования орбит и орбитальных движений в трех плоскостях, а также визуализации траекторий в 3D пространстве. Как это работает: пользователь вводит шесть Кеплеровских элементов орбиты, и система сама строит реалистичную траекторию движения небесного тела.

Интересные факты 🖱
📌Разработка была начата студентами МГТУ имени Н.Э. Баумана в рамках программы «Инженерный класс» для наглядного представления законов небесной механики и освоения основ космической навигации.
📌Первая версия появилась в 2024 году и получила положительные отзывы учителей физики и астрономии.
📌Сайт написан на Python с использованием современных библиотек и инструментов, обеспечивающих высокую производительность и точность расчетов.

⛓️‍💥Ссылка на репозиторий

#GitVerse_Разработчикам
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👎4😱1
Знаете ли вы, как использовать tox для создания матрицы сред тестирования?

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

Сделаем минимальную структуру проекта:

./tox.ini
./app/__init__.py
./tests/test_version_diff.py


Представим себе такой tox.ini:

[tox]
envlist = py310, py311, flake8

[testenv]
deps =
pytest
pytest-cov
commands =
pytest --cov=app tests/

[testenv:flake8]
deps = flake8
commands = flake8 app tests/


И сделаем тест, который будет вести себя по-разному в разных версиях Питона:

def test_version_diff():
import tomllib # модуль есть только в Python 3.11
data = tomllib.loads("x = 123")
assert data["x"] == 123


Варианты запуска:

# Запуск всей матрицы
tox

# Запуск конкретной версии Python
tox -e py311
tox -e py310


При запуске:

- В py311 import tomllib работает – тест пройдет.
- В py310 модуля tomllib нет – так что ModuleNotFoundError и тест падает.

Так, tox помогает проверять, каждое окружение независимо от других и от основной системы.
🔥4🤯3👍2
Приветствую!

Грязная игра (2025)

Любите динамичные фильмы про ограбления с крутыми поворотами сюжета? Тогда «Грязная игра» с Марком Уолбергом — именно то, что вам нужно!

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

«Грязная игра» — это не просто экшен, а напряжённый триллер с элементами драмы, где каждая минута на счету. Отличные сцены ограблений, продуманная режиссура и харизма Марка Уолберга создают атмосферу настоящего криминального приключения.

Если вам по душе фильмы в духе «Одиннадцати друзей Оушена» или «Пленниц», но с более жёстким и современным подходом — обязательно посмотрите «Грязную игру».
🔥62
Всем привет!

Сегодня, 6 декабря, отмечается шуточный праздник — День Лентяя.

Для нас это уже почти две недели, потому что мы немного затянули со статьями… но мы исправимся 🙂

Откладывайте свои IDE-шки, проекты и задачи. Работа не всегда важнее отдыха — так почему бы не отдохнуть именно в День Лентяя?
👏4🎉43🔥1
aiogram 3.23.0 вышел!

Только что вышло обновление библиотеки для написания Telegram-ботов aiogram 3.23.0. Которое не привносит нового функционала взаимодействия с Telegram, а концентрируется на технической стороне.


Поддержка Python 3.14

Ключевым изменением стала полная поддержка Python 3.14. Обновлены зависимости и тесты для полной совместимости.

Python 3.14 вышел совсем недавно, в ноябре 2025 года, и как обычно бывает со свежими релизами языка, далеко не все ключевые библиотеки готовы к этому сразу. В aiogram 3.22.0 на Python 3.14 были проблемы с aiohttp и pydantic.


Прекращение поддержки Python 3.9

Обратной стороной нововведений, сталол прекращение поддержки Python 3.9. Python 3.9 вышел в ноябре 2020 года, а в ноябре 2025 года, вместе с выходом Python 3.14 он официально прекратил свой жизненный цикл.

Таким образом, минимальная совместимая версия Python стала 3.10.

В процессе отказа от поддержки 3.9, был проведён рефакторинг которой базы, включая замену аннотации типов из пакета typing (List, Dict) на современный формат аннотирования без лишних импортов (list, dict).


Установка обновления и история изменений

Для установки обновления библиотеки достаточно выполнить команду:

pip install -U aiogram


Полный список изменений: https://docs.aiogram.dev/en/latest/changelog.html

#python_3_14 #aiogram #aiohttp #py314 #pydantic #python #telegram #telegram_бот #библиотека #новости
🔥543
Привет, друзья! 👋

Еще одна неделя позади, и у нас накопилось много интересного контента. Вот самые полезные и увлекательные материалы, которые мы выбрали для вас на этой неделе:

📋 Новое на канале:

🔄 Понедельник, 01.12.2025Дайджест

🐍 Вторник, 02.12.2025Смотри, какой репозиторий!, Знаете ли вы, как использовать tox для создания матрицы сред тестирования?

🎬 Пятница, 05.12.2025Пятничный кинорелакс

🤖 Воскресенье, 07.12.2025 — aiogram 3.23.0 вышел!


🔗 Будьте ближе к нам:

🌐 Читайте полные статьи на сайте

💬 Присоединитесь к обсуждению в чате

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе! 🚀

#дайджест #код #python #полезное #код_на_салфетке
🔥4👍31
Знаете ли вы о TOCTOU-уязвимости и как атомарные операции помогают ее избежать?

TOCTOU (Time-of-Check to Time-of-Use) – тип уязвимости, возникающий из-за race condition между моментом проверки состояния объекта (например, существует ли файл) и моментом его использования.

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

Частый случай этой уязвимости – создание файла. Представим функцию, которая пытается создать файл, когда его не существует:

import os
import time
import threading

def insecure_create(filename, thread_id):
if not os.path.exists(filename):
time.sleep(0.01)
with open(filename, 'w') as f:
f.write(f"Данные от потока {thread_id}")
print(f"Поток {thread_id}: файл создан")

if os.path.exists("data.txt"):
os.remove("data.txt")

t1 = threading.Thread(target=insecure_create, args=("data.txt", 1))
t2 = threading.Thread(target=insecure_create, args=("data.txt", 2))
t1.start()
t2.start()
t1.join()
t2.join()

with open("data.txt", 'r') as f:
print(f"Файл содержит: {f.read()}")

# Поток 1: файл создан
# Поток 2: файл создан
# Файл содержит: Данные от потока 2


Оба потока прошли проверку if not os.path.exists(), но в файле остались только данные от потока 2 – он перезаписал данные потока 1. Номер потока в выводе может отличаться из-за race condition.

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

import os
import errno

def atomic_create(filename, thread_id):
try:
fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
with os.fdopen(fd, 'w') as f:
f.write(f"Данные от потока {thread_id}")
print(f"Поток {thread_id}: файл создан атомарно")
except OSError as e:
if e.errno == errno.EEXIST:
print(f"Поток {thread_id}: файл уже существует")
else:
raise

if os.path.exists("data.txt"):
os.remove("data.txt")

import threading
t1 = threading.Thread(target=atomic_create, args=("data.txt", 1))
t2 = threading.Thread(target=atomic_create, args=("data.txt", 2))
t1.start()
t2.start()
t1.join()
t2.join()

with open("data.txt", 'r') as f:
print(f"Файл содержит: {f.read()}")

# Поток 1: файл создан атомарно
# Поток 2: файл уже существует
# Файл содержит: Данные от потока 1


Флаг O_EXCL в комбинации с O_CREAT гарантирует, что os.open() создаст файл только если его не существует, иначе выдаст ошибку EEXIST. Эта операция атомарна на уровне ядра ОС.

Код на салфетке x Кусочки кода
🤯4🔥3👍1
Вайбкодинг с нейросетью 1: проверяю сборку Flutter-приложения в AppImage
Автор: Eugene Kaddo

Данная статья посвящена сборке Flutter‑приложения в AppImage с помощью нейросетей GigaChat и Perplexity. Статья будет участвовать в конкурсе «Сезон ИИ в разработке» на Habr, посвящённом теме вайбкода в разработке.


Читать статью на сайте
Читать статью на Хабр

Поддержать проект через YooMoney
Поддержать проект через Tribute в Telegram
Поддержать проект через наш Telegram-бот

#Kivy #Эксперименты_с_ИИ #AppImage #Flutter
🔥64
Приветствую!

«Орудия» (2025)

Если хочется чего‑то странного, мрачного и не совсем привычного для хоррора, «Орудия» — отличный вариант. Формально это мистический ужастик про пропажу детей и ведьму, но по ощущениям фильм больше похож на чёрную сказку и сатиру на взрослых, власть и то, как старые правила ломают новое поколение.​

В маленьком городке исчезают семнадцать шестиклассников, и взрослые в панике пытаются найти виноватого, но постепенно становится ясно, что дело не только в «зле снаружи». В центре истории — тётушка Глэдис: хрупкая старушка, которая оказывается могущественной ведьмой и превращает людей в свои «орудия», управляя ими через чёрную магию, страх и чувство вины.
🔥42
This media is not supported in your browser
VIEW IN TELEGRAM
🔗 ЭРА «USB-C» ДЛЯ ИИ: ПОЛНЫЙ РАЗБОР MODEL CONTEXT PROTOCOL (MCP)

Помните мобильный рынок 90-х (если не помните, то вам повезло)? Хаос из кабелей, несовместимых портов и боли. До недавнего времени индустрия ИИ выглядела так же. Хочешь подключить ChatGPT к Google Диску? Пиши один «костыль» (плагин). Хочешь Claude к базе данных? Пиши другой. Локальная LLM? Третий.

Это классическая проблема «N × M», которая тормозила всю отрасль. Но в ноябре 2024 года Anthropic выкатили Model Context Protocol (MCP). Эксперты называют его «портом USB-C для нейросетей».

Но не дайте простоте названия обмануть вас. Под капотом там не просто «труба для данных», а сложная архитектура брокеров, двусторонние диалоги и новые дыры в безопасности, от которых у вашего СБ ИТ дернется глаз.

Попробуем разобраться во всём. От нейминга функций до «Теневого ИИ».

➡️➡️➡️⤴️⤴️➡️➡️➡️

💻 АНАТОМИЯ - НЕ ПРОСТО «КЛИЕНТ-СЕРВЕР»

В основе MCP лежит философия разделения ответственности, так скажем - строгий протокол.

Архитектура:
➡️Хост (Host): Это «дом», где живет ИИ (Claude Desktop, IDE Cursor, Open WebUI). Заказчик банкета.
➡️Клиент (Client): Переводчик внутри Хоста. Поддерживает канал связи с сервером 1:1.
➡️Сервер (Server): Представитель данных. Небольшая программа-шлюз перед вашей БД или Slack.

Три кита функциональности (и один секрет):

⚫️ Ресурсы («Глаза») - Данные для чтения. Сервер дает модели «меню» файлов. Модель не читает всё сразу, а запрашивает конкретный кусок по URI.

⚪️ Инструменты («Руки») - Функции для действий. Модель просит сервер: «Выполни send_email». Сервер делает и возвращает результат.

🟡 Промпты («Инструкции») - Зашитые шаблоны. Разработчик сервера сразу вкладывает в него лучшие практики (Best Practices) промптинга для конкретной задачи.

🔴 КРИТИЧЕСКИЙ НЮАНС. НЕЙМИНГ - ЭТО UX ДЛЯ МОЗГА
🆓 Вы не можете просто написать код и ждать чуда. LLM не видит ваш код, она видит только описание.
Если вы назовете инструмент tool_01 с описанием gets data, модель будет галлюцинировать или игнорировать его.

Вы обязаны называть инструмент семантически точно: get_customer_churn_rate и в описании детально разжевывать: "Используй это, когда пользователь спрашивает про отток клиентов за квартал. Принимает дату в формате YYYY-MM-DD". В MCP описание инструмента - часть исполняемого кода. Ошиблись в слове и сломали логику агента.

➡️➡️➡️⤴️⤴️➡️➡️➡️

😇 ДВУСТОРОННИЙ ДИАЛОГ

MCP - не улица с односторонним движением («ИИ, дай команду»). Протокол намного умнее.

Что же под «капотом»?
➡️ Сэмплинг (Sampling): Делегирование интеллекта
Это киллер-фича. Обычно человек просит ИИ что-то сделать. В MCP сервер может попросить ИИ: «Эй, я вижу тут сложный лог ошибки, сгенерируй-ка мне его анализ».
Сервер использует «мозг» подключенной модели для своих внутренних задач. И выглядит это уже как не просто подключение, а делегирование (sub-agents delegation).

➡️ Элиситация (Elicitation): «Стоп, мне нужно уточнить»
Механизм, позволяющий серверу сказать: «Мне не хватает данных, спроси у пользователя уточнение».
Это вводит стандартизированный Human-in-the-loop. ИИ перестает быть черным ящиком, который молча творит дичь. Если данных для SQL-запроса не хватает, сервер через протокол заставляет ИИ задать вопрос вам.

➡️ Транспорт: Stdio vs SSE
Как они общаются физически?
- Stdio: Для локальных агентов. Быстро, безопасно, все внутри одного процесса.
- SSE (Server-Sent Events): Для удаленки. Позволяет серверу самому «пинать» ИИ в реальном времени: «Эй, данные на бирже изменились, пересчитай прогноз!».

➡️➡️➡️⤴️⤴️➡️➡️➡️

🤝 АРХИТЕКТУРНЫЙ СДВИГ: БРОКЕРЫ И МЕДИАТОРЫ

Если смотреть на MCP глазами архитектора, это реализация классических паттернов проектирования, спасающая нас от хаоса.

👩‍❤️‍👨 «Медиатор» (Mediator). Раньше каждый агент пытался соединиться с каждым инструментом. Сложность росла как O(N^2).
MCP создает центральный реестр. Агенты находят инструменты через единый стандарт. Сложность падает до линейной O(N).
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8