Обновить
512K+

Программирование *

Искусство создания компьютерных программ

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

35B-модель на RTX 5080 и RTX 3060: 109 ток/с через PCIe Gen2 x4

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

На материнке B450-Plus с урезанным вторым слотом PCIe Gen2 x4 Qwen3.6 выдала 109 ток/с. MoE обнуляет аргумент «одна видеокарта лучше двух».

Читать далее

Новости

Фронтенд и бэкенд работают отдельно. Как я связал их задачи через OpenSpec

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

«Посмотри эти коммиты, потом ещё вот этот фикс» — сколько раз вы так вводили AI-агента в курс командной задачи?

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

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

Читать далее

Как надёжно передавать управление между ИИ-агентом и человеком без гонок состояний

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

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

В этой статье разберём архитектуру Agent Inbox: как с помощью конечного автомата, CAS-подобных проверок и SQLite построить предсказуемый цикл взаимодействия агента и человека.

Читать далее

BB изнутри: как устроена открытая IDE для Claude Code и Codex, которая обновляет себя без перезапуска

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

BB - это открытая программа под лицензией MIT, в которой Claude Code, Codex, Pi и ACP-агенты работают в одном окне. За 7 месяцев репозиторий собрал около 4 тысяч звёзд. Главное в BB не окно, а то, что его интерфейс достраивается плагинами и новый плагин подхватывается без перезапуска программы.

Недавно я снимал про BB ролик. Там агент за 20 минут и два промпта собрал плагин, который расшифровывает запись созвона, выделяет договорённости со сроками и пишет письмо клиенту. Ролик был про то, что это даёт пользователю, а в этой статье я разберу код и покажу, за счёт чего это работает. Всё ниже проверено по репозиторию get-bb/bb по состоянию на конец сентября 2026.

Читать далее

В вайбкодинге агент почти не читает документацию без ссылки: 57 файлов из 88 он не открыл ни разу

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

В вайбкодинге документацию первым читает агент, и открывает он почти только то, на что ему сослались. По журналам Claude Code одного моего проекта файлы без входящей ссылки агент открывал в среднем 1,2 раза, а 57 из 88 таких не открыл ни разу.

Раньше документацию писали в конце цикла, и читал её человек. В вайбкодинге код пишет агент, и получает он только то, что ему подали. Я посчитал по журналам за пять недель, какие markdown-файлы агент открывал. Точкой входа ниже называю то, чем агента запускают на задачу: файлы слеш-команд в .claude/commands и описания субагентов в .claude/agents. Документы, названные в точке входа, агент открывал в среднем 12,3 раза.

Читать далее

Режим планирования мёртв

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

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

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

Читать далее

Локальный анализ звонков без GPU. Что происходит на пути от аудио до резюме

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

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

Я сделал desktop приложение на Tauri, Rust, React и SQLite. Оно распознаёт речь, разделяет спикеров, анализирует тональность, эмоции и риски, а в конце локальная модель формирует резюме и рекомендации. Всё работает на компьютере, интернет нужен только для скачивания моделей.

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

Читать далее

Пишем трассировщик лучей на Brainfuck

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

В процессе подготовки к соревнованиям по системному программированию на C++ я начал заново изучать CMake, потому что Cargo сильно меня избаловал. При этом я заметил в туториале интересное утверждение:

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

CMake Language Fundamentals

Я раньше писал трассировщик лучей и переписывал его под GPU, поэтому это заявление привлекло моё внимание и заставило задуматься, на каком же ещё языке лучше писать такой трассировщик.

Для последней версии я писал код, почти не связанный с базовыми алгоритмами и в основном зависевший от довольно сложного набора API. Поэтому я выбрал самый простой из известных мне языков — Brainfuck, ведь простота языка очевидным образом приводит к созданию простой кодовой базы. На самом деле, кодовые базы на BF обычно состоят всего из нескольких строк. Кроме того, комментарий Урбана Мюллера в README заставил меня написать контрпример.

Код выложен на Github.

Читать далее

Как слизень ищет укрытие: от наивного решения к стратегии

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

Наивность, fail-fast, fallback, failback, оптимизация и стратегия — на слизне, на кухне и на JavaScript

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

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

Узнать о судьбе слизня

Модульная надстройка для JasperReports: коллекции, рантайм и границы подхода. Часть 4

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

Это последняя часть серии — и самая плотная. Поля-коллекции и повторяющиеся субрепорты, что именно роняет сборку, как собирается карта параметров в рантайме и что происходит на старте приложения.

Дальше — про две версии движка: шаблоны у шестой и седьмой несовместимы, и одного файла на обе не бывает. Плюс пример целиком, переход с 2.0.x и честный список шероховатостей: где подход неудобен, где он не работает и кому он не подходит вовсе.

Последнее — про цену проверки при компиляции. Шаблоны лежат в ресурсах приложения, а структура отчёта — в Java-классах, значит любая правка идёт через сборку и деплой. Если отчёты у вас меняются чаще, чем выкатывается приложение, подход вас затормозит — и лучше знать об этом заранее.

Читать далее

Почему AI не заменит разработчика

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

ИИ тебя заменит! Слышали? Я часто, и мне захотелось разобраться в теме и понять для себя, как разработка будет жить в условиях всеобщего ИИ, когда любой встречный-поперечный может с помощью AI сделать генерацию сайта, бота или использовать нейросеть для генерации приложений. И вроде бы, действительно, программист больше не нужен, но ведь мы интуитивно понимаем, что не всё так просто.

Давайте разберемся, кто такой разработчик и чем он отличается от программиста, архитектора, агроинженера. Но для начала давайте проведем мысленный эксперимент.

Предположим, вам нужно заселиться в один из двух небоскребов на 99 этаж. Оба небоскреба имеют 100 этажей, основание, у них одинаковая площадь квартир и общедомового пространства, у каждого встроена противопожарная безопасность, но в обоих случаях она еще ни разу не запускалась. Но есть и различия: первое здание прошло полную приемку в органах гос-пожар-тех-потреб надзора, его проектировали и строили люди по всем современным нормам. Второе здание было построено ИИ без привлечения специалистов-людей. Для второго здания гос-пожар-тех-потреб надзор НЕ участвовал во вводе строения в эксплуатацию.

Какое здание вы бы предпочли на ближайшие 5–10 лет? Почему-то мне кажется, что первое.

Подобный эксперимент можно привести и с врачами. К кому на лечение пойдете, если съели не тот гриб? К человеку или к ИИ? Почему-то мне кажется, что за финальным лечением все пойдут к врачу-человеку. И это понятно. Мы еще не настолько сильно доверяем ИИ, и уж тем более в таких вопросах, как здоровье.

Читать далее

Вам не нужен ещё один Claude Code: зачем Pi оставляет сборку агента пользователю

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

Когда мы обсуждаем агентов для программирования, разговор быстро сводится к моделям. Какая модель Claude лучше пишет код, а какая версия GPT увереннее чинит ошибки, как Gemini работает с большим репозиторием. Но между моделью и рабочим деревом Git находится ещё один слой, от которого зависит, что агент вообще сможет сделать.

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

Интересный проект, который изменил традиционное устройство моделей — Pi. Это терминальный агент, который строит свой harness с нуля, а не надстраивается над готовым. Его автор, Mario Zechner, сознательно ограничил набор встроенных механизмов работы. Вместо попытки заранее предусмотреть все сценарии Pi предлагает основной инструментарий, который можно приспособить под себя. Oh My Pi вырос из этой основы, но выбрал другое направление: собрать больше решений в одном готовом агенте.

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

Читать далее

От чата c LLM к полноценному AI-агенту: пошаговая настройка OpenCode

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

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

Следующим моим шагом стало собрать вокруг модели рабочую среду. В моем случае такой средой стал OpenCode. Хотя этот агент в первую очередь ассоциируется с разработкой, его можно использовать гораздо шире. По сути, это оболочка, в которой LLM получает доступ к файлам, инструкциям, локальным инструментам, API и MCP-серверам, а затем использует все это для решения задач конкретного пользователя.

Привет, Хабр! Я Арина, аналитик в Selectel. В этой статье я покажу не столько «как установить OpenCode», сколько как организовать вокруг него рабочее пространство, чтобы агент выдавал более стабильный результат и действительно снимал часть рутинной работы.

Читать далее

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

Возвращаем трассировку логов Quartz-задач после перехода на Spring Boot 3+

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

Привет! Меня зовут Александр Каненков, я backend-разработчик в компании Домклик.

После перевода сервиса со второго Spring Boot на третий (а у кого-то уже и на четвёртый) мы с командой заметили следующую картину: HTTP-запрос журналируется с traceId, цепочка собирается в трейсе, но стоит сработать задаче Quartz — в журналах worker-потока гордо красуется [NoTrace, NoSpan]. Задача исполняется «в никуда» — без единого идентификатора, вне какого-либо трейса, и связать её с запросом, который её запланировал, невозможно.

Давайте разберём по шагам, почему это случилось и как починить так, чтобы работало и с RAM (in-memory), и с JDBC job store.

Читать далее

Чудеса nightly, часть 1: на чём тайком держится stable Rust

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

Привет!

Заверните обычный File в структуру из одного поля и пробросьте чтение внутрь. Пара строк, логика не поменялась. А теперь скопируйте через io::copy файл на 64 мегабайта: голый File справлялся за два системных вызова, обёртка сделает больше шестнадцати тысяч.

Ошибки в коде нет, вы просто выпали из специализации, которой в стабильном Rust официально не существует. Зато в стандартной библиотеке на ней висит больше сотни функций, и такая фича там не одна: даже NonNull хранит адрес в типе, который на stable объявить нельзя.

Чем глубже копаешь, тем веселее. Та же специализация ускоряет collect и умеет заставить код без единого unsafe читать освобождённую память, а итератор, написанный как обычная функция, превращается в идеальный ассемблер и почему-то отказывается векторизоваться. Материала набралось на четыре-пять статей, это первая, и в ней пять фич: gen-блоки, pattern types, специализация, become и #[loop_match].

Читать далее

Восемь дней без алерта: как ручной разбор конверсии превратился в ИИ-агента

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

В партнёрском отчёте доля выданных займов среди одобренных сползла примерно с 80 до 77 %. Текущая неделя выглядела ещё хуже — меньше 75 %. Мы начали разбирать падение и довольно быстро нашли убедительное объяснение: в органическом трафике такого сдвига не было, а несколько партнёров стали приводить клиентов, которые получали одобрение, но не подписывали оферту.

На этом можно было остановиться. Но позже под тем же падением обнаружился другой слой: восемь дней подряд заметная доля СМС с кодом подписания отклонялась шлюзом. Отдельного алерта на этот тип сообщений не было. Вывод про партнёрский трафик оставался верным для устойчивой части просадки, но не объяснял июльский провал целиком.

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

Читать далее

Как нейросеть переводит видео. Часть 2: русский длиннее не текстом, а звуком

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

Я делаю speeek, сервис дубляжа видео, один. В первой части был вход конвейера: как звук становится текстом с таймкодами и что Whisper с этим текстом вытворяет. Эта про середину: перевод и укладку перевода в тайминг оригинала.

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

Читать далее

Coyote Time или как немножко врать игрокам

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

Есть довольно интересная категория багов в играх, которые формально багами являются, но игрокам они нравятся, и они, наоборот, называют багом “нормальное поведение” и строчат про него репорты про криворуких погромистов. Там, где программист хорошо и физически корректно сделал свою работу, игрок видит ошибку своего восприятия игры, не физики, а именно восприятия.

Представьте самый обычный платформер, в котором персонаж бежит по платформе, приближается к краю и должен прыгнуть на следующую. Если вы сделаете правильную обработку прыжка в этом месте в стиле “персонаж стоит на земле - можно прыгать, персонаж на земле не стоит - прыгать нельзя”: if (IsGrounded() && JumpPressed()) then Jump(), то c точки зрения “корректной” физики здесь будет не к чему придраться, потому что если под ногами уже нет платформы и было бы довольно странно сообщать персонажу, что он всё ещё находится на земле.

А если кнопка прыжка была нажата после того, как система коллизий говорит нам о потере контакта с поверхностью, то прыжок должен быть запрещён. Про такую логику можно даже сказать, что она ведёт себя “физически корректно”, но потом приходит тестировщик и говорит: “Ребят, прыжок какой-то странный. Я чувствую, что стою на земле, но прыжка нет”.

Вот это “чувствую” происходит из человеческого опыта, когда глаза у нас немного впереди, а пятки немного сзади и весь ваш предыдущий опыт говорит, что прыгнуть ещё можно. На самом деле нет, прыгнуть нельзя, стоя пятками на самом краю платформы прыгнуть вы не сможете, если вы, конечно, не Дрейк или Джеки Чан, ваш мозг просто компенсирует вашу позицию, относительно места прыжка, немного вам подвирая.

Читать далее

Переход на Java 27: гайд по GC, флагам и памяти в контейнере

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

Переход на новый JDK может изменить поведение сервиса даже без изменений в коде: JVM по-другому выбирает GC, расходует память и обрабатывает старые флаги запуска.

В статье разбираем, что меняет Java 27 внутри рантайма и как проверить готовность сервисов к обновлению.

Изучить изменения

Музыка для кода — что наука говорит о влиянии Lo‑Fi, чиптюна и саундтреков из игр на продуктивность

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

Говорят, классическая музыка буквально творит чудеса — заставляет мозг работать быстрее, поднимает иммунитет и чуть ли не развивает интеллект ребенка до 146 пунктов еще в утробе матери. И если нужно написать сложный алгоритм или спроектировать архитектуру, стоит обратить внимание на Баха или Моцарта, ведь классика — это сплошная математика.

Иронично, но нередко «эффект Моцарта» оказывается не более чем популяризаторским мифом. Особенно, если мы говорим про сложные интеллектуальные задачи — например, кодинг. А вот Lo-Fi, 8-битный чиптюн и саундтреки к видеоиграм могут наоборот помочь. В этой статье мы разберем, почему «низкотехнологичная», а то и вовсе прикладная музыка справляется с ролью рабочего фона намного лучше классики. 

Читать далее