Обновить
512K+

Python *

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

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

Мы списали uv со счетов. А потом он ускорил наш CI на 80%

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


Мы списали uv со счетов. А потом он ускорил наш CI на 80%

В Python-сообществе вокруг uv уже несколько месяцев шум: быстрый резолвинг, один инструмент вместо зоопарка утилит и обещание ускорить привычный workflow. Звучит хорошо — пока не проверишь на своём стеке.

Мы так и сделали. Взяли один микросервис: Python 3.14, 37 прямых зависимостей, 153 пакета в lock-файле, приватные пакеты и внутренний Nexus. Ожидание было простым: если uv действительно быстрее Poetry, миграция окупится сама.

Локально получилось наоборот. Резолвинг — да, быстрее. Установка по готовому lock-файлу — нет, иногда даже медленнее. Эксперимент закрыли и остались на Poetry.

Через несколько недель пришлось вернуться. Не из любопытства, а из-за алерта Trivy и сюрпризов Poetry 2 с корпоративными индексами. И вот тогда uv показал себя совсем в другом месте — в CI.

В статье разберем:

- почему локальный бенчмарк uv vs Poetry нас обманул;
- как Poetry 2 сломал привычную разработку без VPN;
- зачем мы писали парсер poetry.lock → requirements.txt и почему это оказалось костылём;
- как точечная замена Poetry на uv sync в пайплайне сократила время с 5:10 до 2:50;
- почему в итоге uv стал единым стандартом и локально, и в CI.

Коротко: если инструмент не выиграл с первого прогона — это ещё не значит, что он бесполезен. Часто вы просто мерили не то узкое место.

Читать далее

Одна строка в системном промпте отключала кеш целиком. 1% против 98% на живых вызовах

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

Токен, прочитанный из кеша, стоит не «немного дешевле». Он дешевле в 10–31 раз: DeepSeek — $0.44 против $0.014 за миллион, OpenAI — $4.00 против $0.40.

Кеш провайдера — префиксное дерево по токенам. Он работает ровно до первого расхождения с прошлым запросом. Дальше — всё по полной цене.

Поэтому одна строка вида Current time: {datetime.now()} в начале системного промпта отключает кеш целиком: время меняется на четвёртом слове, и остальные две тысячи токенов политик и базы знаний каждый раз оплачиваются заново. Хотя не менялись ни разу.

Я замерил это на живых вызовах DeepSeek. Один и тот же агент, одни и те же четыре вопроса, одна и та же минута — разница только в том, куда положить время. Ноль попаданий в кеш против 1152 токенов из 1180.

Потом направил профайлер на 97 877 собственных вызовов Claude Code — 32,5 млрд входных токенов, 98% из кеша.

Внутри: как найти такой баг у себя, почему совпадение текста на 96% ещё не значит, что кеш работает, и какие поломки не видно глазами вообще — схемы инструментов из словаря с плавающим порядком ключей, база знаний из set(), «префикс совпал, а кеша нет».

Плюс отрицательный контроль: сценарий, где фикс не даёт ничего, и инструмент честно об этом пишет.

Инструмент открыт: github.com/Isk4R1oT/prefixcash

Проверить свой промпт

Главный страх обученной на истории системы: что происходит, когда рынок меняет режим

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

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

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

Эта статья — про то, как я пытался измерить этот риск заранее, что из этого вышло (спойлер: включая одну ошибку, которая на время убедила меня, что всё гораздо хуже, чем на самом деле), и какие страховки по результатам измерений работают, а какие — красивые идеи с отрицательной ценностью.

Читать далее

Переход к неанонимным изменениям схемы СУРБД Firebird. Часть 2: журнал фактов

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

В первой части был инструмент, который снимает схему Firebird и раскладывает её деревом файлов: один объект — один файл. Он отлично отвечает на вопрос «как эта процедура выглядит сейчас» и совершенно беспомощен в вопросе «кто её поменял в среду вечером». Дамп — это фотография, а нам нужен ещё и вахтенный журнал.

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

Читать далее

MCP-инструменты научились возвращать интерфейс: разбираем OpenSearch MCP Apps

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

Обычный MCP-инструмент возвращает агенту текст или структурированные данные. Агент анализирует результат и пишет тебе что-то вроде:

Глубже

Я устал проверять сайты постранично и сделал свой сайт проверок HeadInspect

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

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

Как и писал ранее — сайты — это моё хобби. Иногда я прибегал к помощи сторонних веб‑дизайнеров, что‑то делал сам. Такое поверхностное занятие сайтами с годами привело к тому, что сайты устарели на десятилетие в плане дизайна и UX. В этом году в бизнесе артистов для корпоративов наступило затишье и появилось много свободного времени. Было принято решение обновить сайты! И именно во время этого обновления появилась проблема, из которой в итоге вырос HeadInspect.

Читать далее

Переход к неанонимным изменениям схемы СУРБД Firebird. Часть 1: извлечение схемы

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

Когда я только пришел на должность помощника DBA, я заметил, что все production базы фиксируют изменения странным образом, а именно каждый день в 00:00 вызывался скрипт, который выгружает схему БД Firebird, в виде файла script.sql, созданный встроенной утилитой isql. Далее делил весь файл на объекты (файлы), по группам (директориям) принадлежности, объясняю: есть кусок скрипта создания таблицы, он помещается в директорию 01_TABLES в виде отдельного файла названного в честь названия объекта который он содержит, и так далее. Чем же это плохо? А суть в том что разработчиков много, правки анонимны, история тяжело воспроизводимая. В такой каше сразу не разберешься.

Читать далее

«Я собрал приложение за выходные». Почему вайбкодинг в проде опаснее, чем кажется

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

«Я собрал приложение за выходные». Почему вайбкодинг в проде опаснее, чем кажется.

Где заканчивается прототип и начинается инженерия, почему «работает у меня» не равно «готово для бизнеса» и за что на самом деле платят опытной команде.

Читать далее

Тестирование крупного Django-монолита: от хаоса с ID к стабильным прогонам в pytest

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

Всем привет! Сегодня хочу рассказать об особенностях автоматического тестирования крупного проекта на Django, в котором тесты написаны в разных стилях и есть много пересечений моделей данных. Поговорим о том, как привести всё к единому знаменателю без риска получить непредсказуемое поведение тестов. Также разберём конфигурацию pytest, параметры его запуска, работу с фабриками моделей и стили тестирования в двух парадигмах (Django и чистый pytest).

Читать далее

Спиновая динамика в анимациях: моделируем волны намагниченности в ферромагнетиках с помощью python

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

В этой статье речь пойдёт о том, как смоделировать спиновую динамику и увидеть волны намагниченности прямо на экране вашего компьютера!

Математической моделью указанного выше процесса будет выступать уравнение Ландау-Лифшица-Гильберта:

Читать далее

Спросил пять нейросетей, какая из них лучше: себя хвалит не каждая, а ChatGPT называют все

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

Я задал пяти нейросетям с доступом в интернет (в смысле, с доступом к поиску) один и тот же бытовой вопрос: какая нейросеть лучше. Никаких имён в самом вопросе, никаких подсказок — я ждал, что каждая модель хотя бы немного потянет одеяло на себя. Себя упомянули не все, а вперёд себя почти никто не поставил.

Читать далее

Скачать базу GetCourse без API? Пожалуйста

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

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

Читать далее

Threatbit Simple Scanner v1.3: Что нового и почему

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

Антивирус почистил ваш компьютер, но присутствуют ограничения?

Тогда вам стоит попробовать Threatbit Simple Scanner. Вышло обновление v1.3! Узнайте про свежие функции данной программы. Данная утилита имеет карантин, улучшенный планировщик задач, и многое другое. Узнайте здесь!

Читать далее

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

Как запустить Qwen3.8-27B локально на RTX3090 (Win10)

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

В этой статье описывается подробная последовательность для Windows 10 и RTX3090 по установке всего необходимого программного обеспечения (Python, Git, CUDA Toolkit, CMake, MSVC, Ninja, OpenSSL), сборке llama.cpp из исходников с поддержкой GPU, скачивания модели Qwen3.8-27B с Hugging Face, её конвертации в формат GGUF и квантизации в Q4_K_M (чтобы она целиком поместилась в видеопамять GPU), а так же приведены параметры запуска для локального сервера llama.cpp с OpenAI-совместимым API и веб-интерфейсом, позволяющим общаться с моделью через чат в браузере. Каждый шаг сопровождается объяснением, зачем он нужен, что делает каждая команда и что означает каждый параметр у команды.

Читать далее

Проверка теории улучшения результата LoRA файн‑тюнинга на «умных» слоях

Уровень сложностиСложный
Время на прочтение21 мин
Охват и читатели6.3K

При LoRA‑дообучении адаптеры обычно применяются ко всем слоям модели, хотя активность разных слоев во время обработки промпта заметно различается. Возникает вопрос: можно ли выбрать более «умные», активные слои для конкретной темы и получить прирост качества?

Проверил гипотезу на Qwen3-1.7B: воспроизвёл метод из статьи Act‑LoRA, добавил свою метрику по градиентам, статистически проверил устойчивость сигнала и получил результат, который многое объясняет о том, как на самом деле работает LoRA‑дообучение.

Читать далее

ИИ-агент вместо тестировщика: 20 копеек за диалог и причина, почему вас не заменит llm

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

Привет, Хабр! Меня зовут Никита Хробостов, я QA-инженер в Just AI. Тестирую диалоговые системы: чат-ботов и голосовых ботов, часть из них с обращениями в RAG.

Моя работа устроена так: беру схему диалога на Холсте, примеряю на себя роль клиента и последовательно прохожу сценарий. Задаю вопрос и проверяю ответ, соглашаюсь — смотрю, правильно ли сработал переход, отказываюсь — проверяю фолбэк. Так приходится проходить десятки сценариев, которые в крупном проекте быстро складываются в большой объем ручной работы.

Чтобы было понятно про объемы. На проекте голосового бота у нас 13 активных сценариев, на чат-боте один. Чтобы проверить один сценарий целиком, нужно от 40 до сотни с лишним звонков, а тест-кейсов при этом в два-четыре раза больше: зависит от дизайна. На полную проверку одного небольшого сценария уходит 5–6 часов.

Проблема не столько в количестве тестов, сколько в том, что человек, который прогоняет пятидесятый тест-кейс за день, начинает говорить как автомат: короткими шаблонными фразами, потому что держит в голове покрытие, а не естественность речи. А реальный пользователь говорит совсем иначе. Именно на естественной речи NLU-часть и разваливается, и именно эти баги проще всего пропустить.

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

Читать далее

CP-SAT OR-Tools против Excel: решаем задачу оптимизации офисного пространства

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

Несколько раз в год отдел оптимизации офисного пространства Альфа‑Банка думает над тем, как разместить сотрудников бэк‑офиса по локациям на несколько лет вперёд. Раньше ребята делали это вручную: было медленно (месяц работы), больно (Excel) и неоптимально (никто не мог гарантировать, что найденная рассадка удовлетворяет всем ограничениям).

Коллеги хотели автоматизировать ручную работу — с этим они и пришли к нам. 

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

Читать далее

Три негативных ответа ИИ оказались о другой компании: разбор одной ошибки в метрике тональности

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

Решил посчитать, сколько раз языковые модели отзываются плохо о конкретной компании. Вроде простая задача: прогнать запросы через несколько моделей, разметить тональность ответов, поделить негативные на общее число. У меня получилось три негативных ответа из 358 — 0,8%. Число выглядело спокойным, и я чуть не отправил его в отчёт как есть.

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

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

Читать далее

6 новых методов обучения нейросетей, которые придуманы тысячелетия назад

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

Нейросетям в современном виде — несколько десятилетий. А вопросом «как вообще возникает знание?» люди занимаются больше двух тысяч лет. Значит, рассуждал я, где-то между Платоном, Аристотелем, Пирсом, Гегелем и Кантом наверняка лежит забытый метод обучения. Осталось перевести его с философского на PyTorch, вызвать backward().

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

Абдукция Пирса уже живёт в Abductive Learning и нейросимвольных системах. Скептическое воздержание от суждения называется selective prediction. Воплощённое познание ездит по лабораториям в роботах. Телеология устроилась в goal-conditioned reinforcement learning. Даже диалектика уже добралась до отдельных алгоритмических работ.

То есть бесплатной оптимизации у Платона не нашлось, а то что нашлось я упаковал здесь.

Зато обнаружилось кое-что полезнее: философия чаще даёт машинному обучению не готовые алгоритмы, а постановки задач. «Что значит знать пределы своего знания?», «как понять часть через целое?», «как сохранить оба полюса противоречия?», «что останется, если временно отключить привычную предпосылку?» — это уже почти техническое задание. Не хватает состояния, оператора, функции потерь и эксперимента, в котором идея может проиграть.

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

Читать далее

Как вернуть радость простого программирования: пишем игру для терминала на Python

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

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

Привет! Я Евгений Бартенев, техлид и автор курса «Python-разработчик» в Практикуме. В этой статье попробую написать автомобильные гонки примерно в 50 строк кода на Python. Вся «графика» будет состоять из обычных символов терминала, а по пути мы немного разберёмся с ANSI-последовательностями, неблокирующим вводом и тем, как вообще устроен терминал.

Читать далее