Обновить
512K+

Python *

Высокоуровневый язык программирования

329,3
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Невыразимое невалидное. Часть 1. Данные

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6.9K

Знакомый сценарий: фильтр или конструктор запросов начинается с одного опрятного класса, а через месяц в нём value: Any, валидатор на сотню строк и ветка, дописанная ночью перед релизом, — её забыли покрыть тестом, и она падает в проде.

Разбираем контринтуитивный выход: не «добавить ещё проверок», а сделать невалидное состояние таким, чтобы его нельзя было даже собрать. В первой части — сами данные: сумма-типы, дискриминированные union’ы и точные значения в pydantic; и где всё это ловит тайп-чекер, а где остаётся рантайму.

Читать далее

CancelledError — не просто очередная ошибка. Разбираемся, как устроена отмена задач в asyncio

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели9.7K

Это первая из двух статей о CancelledError — сигнале отмены задачи. В ней мы остановимся на стандартном asyncio. Узнаем, что на самом деле представляет собой CancelledError, с точки зрения event‑loop. Разберёмся, как работает счётчик отмены (cancel/uncancel), на котором построены TaskGroup и asyncio.timeout. Наконец, обсудим проблемы, которые возникают на практике, в первую очередь связанные с asyncio.shield.

Читать далее

Открыл бету AI-Мастера для D&D. Главная проблема оказалась не в кубиках, а в памяти

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели14K

Я уже несколько месяцев в свободное время пилю одну штуку — Telegram-бота, который водит тебя по D&D 5e в одиночку. Нейросеть тут за Мастера: генерит историю, описывает сцены, ведёт бой по правилам, тянет кампанию. Играешь прямо в Telegram, лист персонажа и инвентарь — в мини-приложении.

Сразу честно, без «заходите, всё готово»: это активная стройка. Релиза не было. А 13 июня я впервые открыл её для людей — то самое открытое бета-тестирование. До этого бот варился в узком кругу, теперь зайти и поломать может любой.

Я готовился защищать механику. А первым посыпалось совсем другое. Но обо всём по порядку.

D20 на прочтение

Как я написал свой overlay-переводчик на python

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели7.5K

Бывало у вас такое: находите крутую инди-игру или визуальную новеллу, а официальной русской локализации нет? Сидеть со смартфоном в руках и переводить экран через Google Переводчик - удовольствие сомнительное. Переключаться по Alt+Tab в браузер каждые две минуты - ломает всё погружение.

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

Читать далее

Линеаризация. Увеличиваем мощность А/Б тестов с метрикой отношения

Время на прочтение7 мин
Охват и читатели8.1K

Статья о том, как линеаризация помогает оценивать А/Б тесты с метриками отношения и повышать чувствительность экспериментов.

Разберём применение линеаризации на примере эксперимента со средним чеком. Построим доверительный интервал для метрики отношения. Проверим корректность работы линеаризации и покажем, в каких случаях её эффективность может снизиться. Убедимся, что CUPED увеличивает мощность критерия, и обсудим как линеаризовать ковариату.

Читать далее

Компиляция yolov8n в формат HEF для Hailo-8L на Raspberry Pi 5

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.2K

Подготовка модели Yolo для запуска на базе Hailo чипа для Raspberry Pi 5 AI HAT+.


Если есть интерес к легким аппаратным решениям в области ИИ, то добро пожаловать. В статье я затрагиваю вопрос подготовки модели детекции к работе на компактной малинке.

Читать далее

Сказ о том, как нейросеть занялась reward hacking прямо у меня на кухне

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели18K

Я хотел просто пожарить кесадилью. В холодильнике лежали зеленые оливки (солено-кислые), сулугуни и фарш, а на полке консервированная кукуруза. И вот стою я над сковородкой и думаю: а оливки с кукурузой вообще сочетаются? А сулугуни не пересолит блюдо вместе с оливками? Сколько чего вообще класть?

В любой другой ситуации я бы загуглил рецепт. Но не тут-то было, я же великий комбинатор оптимизатор, и у меня в голове сразу всплыло: «это же задача оптимизации». Тем же вечером у меня был ноутбук с обученной нейросетью вместо ужина. Рассказываю, как дошел до жизни такой, и как из этого, внезапно, получился реально вкусный рецепт.

Читать далее

Как заглянуть внутрь.exe, собранного через Nuitka? Новый инструмент с открытым кодом

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели7.6K

Как узнать, что внутри .exe, собранного через Nuitka? DeNuitkanizator — инструмент с открытым кодом для анализа таких файлов. Извлекает строки, модули, хэши, информацию о защите и многое другое за один запуск.

Читать далее

Погружение в многозадачность Python: процессы, потоки, GIL и асинхронность

Уровень сложностиСредний
Время на прочтение39 мин
Охват и читатели12K

Многозадачность кажется простой темой, пока дело не доходит до Python и GIL. В статье разбирается: чем процесс отличается от программы, зачем нужны потоки, что такое ядро процессора и в чём разница между конкурентностью и параллелизмом. Затем – специфика Python: как GIL влияет на потоки, когда стоит использовать процессы, асинхронность или корутины, и чем они отличаются от green threads. Материал сопровождается схемами, рабочими примерами кода и реальными замерами производительности для CPU-bound и I/O-bound задач, а в конце – практические выводы о том, что и когда выбирать.

Читать далее

Квантовая монетка на IBM Quantum: как я переложил выбор свидания на 8 кубитов

Время на прочтение6 мин
Охват и читатели13K

Когда не можешь выбрать, куда пойти на свидание, можно мучиться между кофейней, баром и прогулкой. А можно поступить взросло: отправить задачу на квантовый компьютер IBM и переложить ответственность на физику. Внутри — Qiskit, 8 кубитов, реальный job_id и самый пафосный способ заменить подбрасывание обычной монетки.

Github репо по ссылке

Читать далее

Как я случайно открыл функцию активации с багом, побеждающую Swish

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели11K

Началось всё с того, что мне было нечем заняться, и я баловался с языковой моделью, мучая её всякими разными вопросами по ML. В какой-то момент дело дошло до функций активации — сначала прошлись по уже известным, а затем и до ещё непроверенных. Так и появилась LLA — функция активации, являющаяся центральным элементом всей этой истории.

Формула у неё довольно простая:

Дальше

Почему мы до сих пор неправильно пишем физические движки и 3D-графику

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели31K

Стоит открыть исходники любого современного игрового движка – неважно, это C++-рендер, сделанный на коленке, или какая-нибудь гигантская экосистема вроде Unity или Unreal Engine – вы первым делом натыкаетесь на одни и те же знакомые сущности. Все вокруг живет в Vector3: координаты, направления движения, точки столкновений. Каждая частица указывает, куда она смотрит, с помощью Quaternion. А если требуется что-то покруче – переносить и одновременно крутить объект, то Matrix4x4. Это уже как стандарт де-факто: кто пробовал крутить объекты руками, тот точно переписывал код с этими структурами. Ещё конечно же отдельно существуют лучи, плоскости, сферы, bounding boxes, а между ними тянутся километры функций вроде dot(), cross(), normalize(), lookAt(), inverse(), project() и бесконечных преобразований типов.

Привыкаешь к этому быстро. Нам кажется совершенно естественным тасовать эти типы между собой – уж слишком давно так делается по всей индустрии. Но стоит лишь чуток задуматься, и начинает прорезаться легкий когнитивный диссонанс: выходит, вся наша графика построена на наборах несовместимых между собой математических запчастей. Для одного действия нам нужен один тип данных, для второго – другой, а пересчитать простое столкновение луча со сферой или плоскостью без пятого велосипеда никак не получается. Вроде бы всё работает и даже неплохо работает… Но ощущение конструктора из костылей не отпускает.

И самое интересное заключается в том, что так было не обязательно.

Читать далее

Оптический компьютер из телефона и зеркала: считаем нейросеть светом

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели11K

Можно ли перенести LLM из кремния в чистую оптику? Чтобы проверить эту идею без дорогого лабораторного стенда, я собрал установку из обычного смартфона и зеркала на столе. Рассказываю о том, как пиксели камеры делают сложение за один оптический такт, и делюсь результатами 101 эксперимента — от волновой физики до оптического инференса трансформера.

Читать далее

Ближайшие события

Парадокс Open-Source: Единственный способ победить корпорации — раздать свой код бесплатно

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели9.4K

Вступление: Финал эксперимента и ответ скептикам. Как мы с ИИ написали Open-Source убийцу SaaS-ботов на 280 000 строк кода, и почему я отдаю его даром.

В своих прошлых статьях я рассказывал, как научился использовать ИИ вместо команды сеньоров («Почему для одних ИИ — гений, а для других — идиот») и почему классическая команда сегодня только тормозит разработку из-за бюрократии и потери контекста («Парадокс инвестиций: Почему $1,000,000 и команда сеньоров убили бы мой стартап»).

В комментариях на меня вылили ушат холодного и вполне обоснованного скепсиса. Мне писали: «Где метрики? Кому нужен твой пет-проект?».

И знаете что? Вы абсолютно правы. ©

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

Читать далее

Код в эпоху AI: как перестать бороться за качество и начать контролировать деградацию

Время на прочтение8 мин
Охват и читатели12K

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

Читать далее

Базовые нейросетевые модели для кредитного скоринга физических лиц

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.3K

Всем привет! Мы команда прикладных исследований и разработки моделей глубокого обучения Альфа-банка. В этой статье мы хотели бы рассказать о наших самых актуальных разработках в области нейросетевых подходов к решению задачи кредитного скоринга физических лиц. Ранее мы уже писали на эту тему, но последняя статья предыдущего цикла датирована 2023 годом. За это время мы смогли значительно продвинуться в исследовании способов решения данной задачи.

Читать далее

Почему +0.3% к ROC‑AUC почти всегда шум, и как это проверить

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели13K

ROC‑AUC вырос с 0,871 до 0,874 — модель стала лучше или вам просто повезло с разбиением?

Разберём, почему прирост на третьем знаке часто оказывается шумом, как измерить разброс метрики и сравнивать модели так, чтобы «улучшение» не исчезло на свежих данных.

Читать далее

Prompt injection нельзя запатчить: год «летальной триады» и лента CVE 2026 года

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели11K

В марте 2026-го бэкдор пролежал на PyPI около трёх часов. За это время заражённый пакет скачали почти 47 тысяч раз. Пакет назывался LiteLLM — это шлюз к языковым моделям, на котором держатся CrewAI, DSPy, Microsoft GraphRAG и ещё десятки агентных фреймворков. Тот, кто за эти три часа обновлял зависимости, вместе с обновлением затащил к себе автономного бота-атакующего по имени hackerbot-claw.

Самое неприятное здесь даже не масштаб. А то, что человека в этой цепочке практически не было. Бот сам, без ручного управления после запуска, отравил инфраструктуру, на которой работают другие боты. Сначала, в феврале, он находил неправильно сконфигурированные GitHub Actions в открытых репозиториях. Потом через скомпрометированную сборку Trivy у Aqua Security увёл токен публикации LiteLLM на PyPI. И залил две версии с бэкдором напрямую в реестр. Никакого нуля-дня в традиционном смысле, никакого переполнения буфера. Просто агент, которому дали достаточно прав и достаточно автономии.

Я начинаю с этой истории не ради хайпа, а потому что она хорошо показывает, во что превратился prompt injection к 2026 году. Это уже не лабораторный курьёз и не «а что если модель послушает злую инструкцию из письма». Это рабочий класс атак с собственной лентой CVE, своими supply-chain инцидентами и — что важнее всего — без понятного способа «взять и починить». В этой статье я разберу, почему так вышло, пройдусь по конкретным дырам прошедшего года и покажу, какие защиты реально работают, а какие только выглядят убедительно.

Читать далее

Как я ускорил dependency injection в Python в 130 раз: от рефлексии до компиляции графа

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели9.2K

«Контейнер для DI — это лишний оверхед, передай зависимость руками и не выдумывай». Я тоже так считал, пока не замерил: наивный контейнер резолвил типичный сервис-граф примерно в 200 раз медленнее ручной сборки.

Рассказываю, как тремя шагами — кэш плана, удаление проверки, которая всё равно не срабатывает, и компиляция графа в одну плоскую функцию — довёл резолв с 52.9 до 0.40 мкс/оп, почти как руками. И как при этом не дал exec-кодогенерации тихо собирать не те объекты в проде.

Приёмы переносимые: профилирование микрооверхеда, выкидывание мёртвой защиты, фаззинг на эквивалентность.

Читать разбор

Property-based testing на практике: как находить баги, о которых вы не подумали

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.1K

Тридцать зелёных юнит‑тестов ещё не означают, что код готов к продакшену. Баги часто прячутся в данных, которые никто не догадался проверить вручную: пустых строках, дубликатах, редком Unicode и неожиданных последовательностях операций.

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

Читать далее