Обновить
512K+

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

Смотрите, как выходит. Браузер в каждом запросе докладывает через 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 мин
Охват и читатели84K

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

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

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

Читать далее

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

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

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

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

Читать далее

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

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

Сейчас очень много обсуждают модель 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.1K

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

Читать далее

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

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

Я не люблю 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.

Читать далее

Как я перенёс сборку лексера в compile-time

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

Я написал source generator для лексера HydraScript. Он собирал регулярное выражение из описаний токенов. После этого мне оставалось скопировать регулярку и руками вставить её в другой файл.

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

Проблема была в том, что результат моего генератора требовался другому генератору — тому, который стоит за атрибутом [GeneratedRegex] в .NET. Хотелось описать токен один раз и поручить остальное сборке. Для этого пришлось разобраться, в каком порядке Roslyn вообще выполняет генераторы.

Читать далее

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

Двухпанельный файловый менеджер на Delphi. Из NDN с любовью…

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

Знаете это царапающее чувство, когда в 2026 году открываешь проводник Windows с вкладками, ждешь пару секунд, пока он сообразит отобразить сетевой диск или каталог с громадным репозиторием, и ловишь себя на каком-то тихом раздражении? Где нужный файл? А вот он! И что? Щелкаешь на него и ждешь еще 1-2 секунды для запуска сторонней программы для работы с этим. А еще... Где это нужное сейчас окно проводника? А вот оно! Так, а где предыдущее окно? Так, закрываем все и переоткрываем только нужные окна! Тааак....

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

Я пользуюсь двухпанельными менеджерами прямо-таки с момента появления в России Нортона (ну и потом безусловной замены на Волкова) и как программист всегда искал подобные инструменты по ходу развития операционных сред.

И в конце концов, наверное, вынужденно, пришел к мысли: хочешь получить что-то, что тебе нравится – делай сам.

Читать далее

Как я автоматизировал работу врачей на Rust

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

Написал локальный софт на Rust, который переносит реквизиты из ODT, помогает оформить выписку и собирает документы в один PDF.

Читать далее

Как вы вообще живёте без POWERLINK…

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

Промавтоматика B&R после санкций, без шаманства и плясок с бубнами: как заменить умерший контроллер мини-ПК, оставить родные стойки и не переписывать проект. Драйвер под сетевые карты Intel I226, шлюз реального времени, ядро под задачу и проверка на настоящем железе.

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

Сначала контекст, чтобы было понятно, откуда что взялось. Проект автоматизации мойки у нас написан в Automation Studio, это среда разработки B&R, и исполняется он на контроллере B&R. Когда стало ясно, что контроллеры и модули больше не купить, мы начали переносить проекты на обычные ПК. Для новых моек это отлажено с 2022 года: около сотни объектов работают на мини-ПК, а вместо стоек B&R там стоят стойки другого производителя, на Modbus TCP. Проект при этом остаётся тем же, только переконфигурируется под новые модули.

А вот со старыми мойками так не выйдет. У них стойки родные, B&R, и общаются они с контроллером по POWERLINK. Это протокол жёсткого реального времени с циклом в две миллисекунды, и стоял он там не ради красоты: ПЛК на нём считал фронты расходомеров и формировал импульсы дозаторов. Умирает на таких объектах, как правило, именно контроллер, а стойки живут и готовы служить ещё лет десять. Менять их жалко и дорого, покупать контроллер тоже дорого, подержанный через серый импорт стоит от полумиллиона до трёх с половиной миллионов рублей, и это на каждый отказ. Вот про этот случай статья: как поставить вместо контроллера мини-ПК и не тронуть ни стойки, ни сам проект.

Читать далее

Доверить сервер ИИ-агенту и не пожалеть: как спать спокойно без SSH

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

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

Я решил пойти другим путём и собрал Linux MCP daemon (mcpd): сервер, изначально рассчитанный на ИИ-агентов. Вместо обёрток над стандартными утилитами он сам читает состояние системы из ядра и отдаёт его агенту через инструменты — сейчас их 38, и список растёт. Когда нужен root, агент может его запросить, но получит только там, где вы разрешили, и в заданных границах. Отдельным интересным решением получилась утилита linuxctl в стиле kubectl. Под катом устройство, установка, подключение ИИ-агента и права, которые только выглядят безопасными.

Читать далее

ИИ-агенты в инвестициях: собираем Telegram-ассистента и торгового робота на MCP Т-Инвестиций

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

Привет, Хабр! Я Алексей Кабанов, разработчик в команде публичного API Т-Инвестиций. Недавно мы запустили MCP-сервер, позволяющий AI-агентам взаимодействовать с Т-Инвестициями: искать подходящие бумаги, анализировать рынок и портфель клиента. Расскажу, как можно построить автоматизацию на основе ИИ-агентов с использованием нашего MCP-сервера.

Еще недавно, чтобы автоматизировать даже несложный торговый алгоритм, приходилось писать собственный скрипт: Python, API брокера, cron и обработка ошибок на все случаи жизни. Профессиональные торговые системы существовали и раньше, но для частного инвестора порог входа оставался высоким. Сейчас между LLM и брокерским API появился стандартный слой — MCP, Model Context Protocol: модель может сама получить состояние портфеля, посмотреть стакан, выставить или отменить заявку, а вам достаточно описать задачу человеческим языком.

У Т-Инвестиций есть публичный MCP-сервер, и эта статья о том, как его использовать. Клиентом может быть что угодно: AI-агент вроде Hermes Agent, платформа автоматизации вроде n8n, десктопный ассистент, IDE. Разберем, чем эти подходы различаются и как они работают с MCP, что умеет сервер, а затем соберем два работающих примера.

Читать далее

Модульная надстройка для JasperReports: подключение и что делает процессор при сборке. Часть 3

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

Третья часть серии — практическая. Как подключить библиотеку к Maven-проекту, написать первый модульный отчёт и что после этого происходит с шаблоном при сборке.

Субрепорт — это класс, отчёт — тоже класс, а поля класса и есть содержимое отчёта. Имена параметров шаблона берутся из имён полей, поэтому один и тот же модуль можно поставить в отчёт дважды и получить два независимых субрепорта со своими данными. Аннотационный процессор при компиляции находит существующий JRXML, дописывает в него недостающие параметры, датасеты и банды субрепортов и кладёт результат в target/generated-sources. Шаблон в src он не трогает никогда.

Отдельно — про то, кто владеет шаблоном, когда в один файл пишут и кодогенератор, и человек в Jaspersoft Studio, и где у этой схемы слабое место.

Первая часть — откуда взялся Jasper и почему он так устроен, вторая — один стандарт и три идеи.

Читать далее

Переход на 1С 8.5 за выходные: найдёте 3 причины сбоя?

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

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

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

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