Обновить
512K+

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

Привет!

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

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

Читать далее

Скрытый секрет конфигурации Spring Boot. EnvironmentPostProcessor

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

Всем привет! Это Михаил Поливаха, технический руководитель проекта Axelix (Open Source-продукта, который помогает как дебажить, так и находить распространённые проблемы и неэффективные решения в приложениях Spring Boot).

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

Представим следующую ситуацию. Вы сопровождаете общую библиотеку, внутренний стартер company-commons, от которого зависит каждый сервис. И вы хотите, чтобы он задавал несколько разумных значений по умолчанию для всех приложений, подключающих этот стартер Spring Boot.

Читать далее

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

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

С запуском Астры я тянула. Не потому, что не было времени. Просто знала, что стоит запустить и она утянет меня в бездну. Задаешь один вопрос, спрашиваешь, а это можно? И модель выдает такое, что уже не остановиться и часы на экране показывают полночь, а утром на работу. Поэтому я ждала. Еще хотела, чтобы в голове загорелась идея и любопытство, которые уже ничем не сдержать. Так что, когда в пятницу после обеда я почувствовала это, решила, пора. Ровно в пять захлопнула рабочий ноутбук, повернулась к домашнему Маку, справа поставила айпад с чатом GPT, слева - большой стакан воды. Дело предстояло не шуточное. Даже скажем так, сумасшедшее – решили программным путем достучаться до данных Евклида (Euclid) – нового телескопа, висящего в полутора миллионах километров от Земли в районе точки Лагранжа L2, пропустить его данные через новую модель GPT 6 – Astra Extra High и…

Вот это «и» было главным вопросом.

Читать далее

Парадигма DDD стала гораздо важнее, когда ИИ пишет код за вас

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

Что бы вы ни думали о программировании с привлечением ИИ, сейчас подходы к созданию ПО меняются. Все задумываются: «Что останется важным»? Сколько людей — столько мнений, но выскажу моё: большинство идей из области предметно‑ориентированного проектирования (DDD) сейчас важны как никогда, поскольку парадигма DDD никогда не ограничивалась кодом как таковым. Чем активнее развивается агентное программирование, тем лучше требуется понимать предметную область, хорошо её моделировать и осваивать командную работу. Давайте поговорим о том, чему такому нас по‑прежнему может научить DDD, чего не в состоянии заменить ИИ.

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

Читать далее

«По будням в 9:30» → 30 9 * * 1–5: парсер расписаний на русском, который отказывается угадывать

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

Библиотека называется cronsense. Она переводит расписание, записанное обычными словами на русском или английском, в cron‑выражение и обратно. Рассказываю, как устроен разбор, о какие ловушки cron легко споткнуться и как тесты проверяют, что описание разбирается обратно в то же расписание.

Читать далее

Сжатый интернет с несжатым кешем: что Cloudflare нашла у себя на дисках

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

Смотрите, как выходит. Браузер в каждом запросе докладывает через Accept-Encoding, какие форматы сжатия понимает. Cloudflare жмет и отдает — этот кусок отлажен давно, работает очень даже неплохо, претензий вообще нет. А потом страница уезжает в кеш. И если origin прислал ее без Content-Encoding, то... ничего, собственно, не происходит. На диске она лежит как прислали, так же катается между дата-центрами.

По их подсчетам, такого текста в трафике набегает около 71%. HTML, JSON, CSS, JavaScript — как раз то, что жмется лучше всего. И это при том, что сжатие на веб-сервере включается буквально парой строк в конфиге.

1 сентября в блоге Cloudflare вышел пост о прототипе под названием Cache Transcoding. Ответ там сжимают с помощью Zstandard прямо при записи в кеш, дальше он хранится сжатым и между дата-центрами ездит тоже сжатым, а разворачивается только на отдаче клиенту. В тестах объекты ужались примерно в 2,8 раза, отсюда и обещанные петабайты освободившейся емкости. Пост написала Аши Патель, прототип она собрала на стажировке. В проде его пока нет, так как для выводов нужна выборка побольше.

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

Читать далее

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

Что такое OpenSpec? Полный гайд по Spec-Driven Development

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

Мы всё чаще слышим о том, что та или иная компания внедряет Spec-Driven Development (SDD), а чаще всего именно OpenSpec, в свои процессы разработки ПО. Где-то это пока эксперимент нескольких команд, а где-то спецификация уже становится обязательной точкой входа в любую задачу.

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

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

Читать далее

Сколько стоит час работы кодинг-агента: рейтинг пяти API-шлюзов по расходам

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

Вышли Claude Opus 5.5 и GPT-6 Sol, и все пошли смотреть прайсы шлюзов. Я собрал цены пяти шлюзов с оплатой из России и посчитал иначе: сколько стоит час работы в Claude Code, если нагрузка как у меня — по логам 49 моих сессий, 138 часов работы.

Разброс получился почти десятикратный: от 181 до 1 756 рублей за один и тот же час на одной модели. Половина счёта уходит на запись в кэш, хотя её всего 5% от входящих токенов. А самый дешёвый ценник в таблице даёт не самый дешёвый час: когда чтение кэша стоит столько же, сколько обычный ввод, час работы агента выходит почти вдвое дороже, чем у шлюза с дешёвым кэшем.

Читать далее

CMF: решения за миллисекунды без генерации токенов (аналог Jev) с открытыми весами

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

Сейчас очень много обсуждают модель Jev от Typesafe, я решил выложить модель в своем CMF формате для личного использования (License:apache-2.0) которая давно работает на шлюзе

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

Для этих задач я опубликовал CMF Decision: модель, которая принимает решения по ошибке реконструкции. Энкодер, обученные навыки и правила уверенности лежат в одном .cmf‑файле. Новые навыки можно добавлять по своим примерам, а незнакомые случаи — передавать подключаемому оракулу‑модели которая выступает в роли учителя.

В Cortiq 0.8.0 один и тот же файл работает на CPU, Apple Metal и Vulkan. На RTX PRO 4000 Blackwell полный локальный путь занял 1,10–1,24 мс.

Ниже — как устроен этот механизм, что получилось в сравнении с Jev и Laya и как запустить модель или добавить свою задачу.

Читать далее

Одна папка вместо разбросанных файлов: как я сделал переносимое хранилище для офлайн-приложения на Flutter

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

Прошлый раз я писал про то, как заложил в схему БД поля под синхронизацию, которой пока нет. Синхронизации до сих пор нет, зато вышли два обновления: 0.2.0 и 0.2.1. В этой статье про три вещи, на которых пришлось подумать: переносимую папку с данными, бэкапы и импорт из Notion и Obsidian. Nookly — локальное приложение для заметок на Flutter: страницы, блоки, таблицы, канбан, поиск. Данные лежат в SQLite на устройстве, без облака.

Читать далее

Как и зачем я сделал свой маппер

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

Я не люблю Clean Architecture, не люблю DTO и не люблю мапперы.

Они превращают сохранение одной строки в базу в путешествие через четыре проекта, три слоя абстракций и папку Mappings, в которую никто не заглядывал со времён первого коммита. Чтобы добавить одно поле на форму, надо поменять сущность, DTO, команду, валидатор, профиль маппинга и тест на профиль маппинга. Шесть файлов ради одной колонки. А если в одном из них забыть, никто ничего не скажет.

Поэтому я, конечно же, написал маппер.

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

AI SLOP WARNING. Большую часть кода этой библиотеки написали нейросети, как и 98% текста этой статьи. Я ставил задачи, проверял и исправлял. Если вас это оскорбляет - дальше можно не читать, ничего хорошего вас там не ждёт.

Читать далее

Еще одни мысли по поводу всеобщего искусственного воодушевления

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

Попробуем представить ситуацию: очередной человек за очередные два вечера написал с помощью очередного ИИ очередной магазин, пусть будет магазин кормов для кошек. Магазин работает, человек счастлив, новая эра разработки наступила. Теперь остается дело за малым - посмотреть, как оно вообще будет работать, что произойдет после того как автор решит в нем что-то поменять. И здорово было бы, чтобы к тому моменту, когда после добавления скидки пропадёт самовывоз - автор ещё не закончил рассказывать, сколько программистов больше не понадобится. При этом сам инструмент действительно годный. И желание попробовать его вообще везде вполне понятно: интересно же, что ещё получится. Опять же, нередко возникает момент, когда человек ещё не закончил пробовать, но уже начал делать делать далеко идущие прогнозы. Получается как с автополивом - вода из шланга течет, помидоры растут, при чем - сами. Только между "я настроил автополив" и "агрономы больше не нужны" всё-таки есть некоторая разница. И как будто бы, она не настолько неуловима.

Читать далее

Разбор CVE-2026-83557 в jackson-databind: почему не всех CVE надо бояться

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

Утро четверга. Вы открываете таск-трекер, а там тикет от сканера зависимостей: «jackson-databind, CVE-2026-83557, критично, патчить». Ссылка на GitHub-бюллетень, CVSS, слово «полиморфная десериализация», и через двадцать минут у вас уже согласован hotfix на прод в пятницу в 18:00.

Читать далее