Обновить

Бэкенд

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

Как я сделал локальный RAG-сервис для SRE: ищем по документации, ранбукам и коду через Ollama

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

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

Но довольно быстро стало понятно, что с временными и ресурсными ограничениями лучше не пытаться написать маленький PagerDuty. Поэтому я сузил задачу до более реалистичного ядра: локального RAG-сервиса, который ищет по документации, ранбукам и коду, а затем передаёт найденный контекст в LLM.

Так появился llmortem — FastAPI-сервис, который можно подключить к OpenWebUI как OpenAI-compatible backend.

В статье расскажу, как устроена архитектура, почему я начал с BM25, зачем индексировать docstring’и и какие ограничения у такого подхода.

Читать далее

Меня бесит использование ИИ в разработке. И я наконец понял почему

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

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

Читать далее

Blitz IDP: внедряем OAuth 2.0 в Java-приложении

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

Что может быть общего у разработчика из крупной московской ИТ-компании и пенсионерки из Вологодской области? Ну, например, они оба регулярно пользуются SSO — технологией единого входа. Разработчик входит под одной учеткой во все корпоративные рабочие системы, а пенсионерка авторизуется через «Госуслуги» — чтобы записаться к врачу, проверить пенсию или оплатить коммунальные услуги. Об этом и поговорим, в смысле, об SSO, а не о «Госуслугах».

Привет, Хабр! Я Денис Радостев, старший  backend-разработчик в IBS. В этой статье расскажу о Blitz Identity Provider, российской платформе управления цифровой идентичностью, которая обеспечивает единый вход — SSO, многофакторную аутентификацию и централизованное управление пользователями, и как ее можно интегрировать с приложениями Java по протоколу OAuth 2.0. Покажу ключевые настройки Blitz IDP и моменты, которые важно учитывать на стороне Java-приложения.

А вместо заключения расскажу про наш собственный кейс, связанный с синхронизацией пользователей между Blitz IDP и нашей старой БД для самописной авторизации.

Читать далее

247 Java-собесов в банках РФ: 12 вопросов в 80% случаев — и почему №7 валит 9 из 10

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

Полгода назад мой друг провалил собес в Иннотехе на одной фразе: «Напиши State Machine без локальной переменной». Это был его четвёртый отказ за месяц. Тем вечером я завёл табличку — и за полгода собрал базу из 247 разобранных Java-интервью по 27 компаниям: от Сбера и ВТБ до ERP-вендора, о котором почти никто не слышал.

В статье — три вещи: 12 вопросов, которые повторяются в 80% собесов; почему совет «возьми топ-50 с Хабра» в 2026 уже не работает; и почему вопрос №7 стабильно валит 9 кандидатов из 10 — включая тех, кто читал Bloch и Goetz.

Читать полностью

«Программная архитектура: практика командного принятия решений»

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

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

Какой? Сейчас расскажем!

Интеграция xdebug в свой проект idea

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

Одной из первых задач, когда я начинал разработку idea, была интеграция xdebug в свой инструмент разработки и реализация основных возможностей работы дебагера. Первым делом надо было изучить документация по протоколу xdebug. В нем используется общий протокол дебагера DBGP. В целом ничего сложного, есть сокет через который мы отправляем команды в сам xdebug он нам отвечает в формате xml, парсим xml и получаем результат. Все просто подумал Я, но как всегда не без приключений.

Первая проблема возникла от недопонимания в какой момент создается сокет, тот самый порт 9000. Читаем документацию пункт 5.3 и 5.4 первый говорит про стандартный порт второй пункт говорит о инициализации подключения и что xdebug отвечает при готовности объектом <init>

Читать далее

Как я добавила групповой коммит в свою LSM‑базу на Go и не пожалела

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

Синхронный WAL очень частое явление в базах данных, делая их durability максимальной. При таком исходе каждый батч записи это вызов fsync, и это дало мне 956k opr/s на 16кб значениях, звучит хорошо, но на самом деле: скорость записи упала в 5 раз.

В этой статье я расскажу:

— Что такое групповой коммит на пальцах

— Почему групповой коммит не для финтеха

— Как это реализовано у меня

— Как изменились цифры до и после внедрения

— Во сколько раз ScoriaDB с group commit быстрее BadgerDB и Pebble.

Если вы пишете хранилище, логгер, кэш или просто любите копаться в LSM‑движках — добро пожаловать на борт, нас ждет короткое путешествие

Узнать больше

Торговля на отклонениях: почему мы вернулись к тесту Дики-Фуллера (ADF)

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

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

В прошлой статье про Гамма-флип я вскользь касался механики работы с отклонениями, но не раскрыл тему до конца.

В этой статье мы углубимся в стохастический анализ и рассмотрим методы определения стационарности временных рядов в реальном времени. Разберем математический аппарат расширенного теста Дики-Фуллера (ADF), причины его интеграции в ядро нашей торговой системы и особенности реализации на Python при работе с большими массивами данных.

Читать далее

Один баг в проде, после которого я всерьёз воспринимаю неопределённое поведение

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

Много лет назад моя рутинная работа заключалась в поддержке большой базы кода на C++. Этот проект был настоящим кормильцем всей компании, и в нём предоставлялся публичный HTTP API, через который принимались онлайн-платежи. Речь шла об обработке платежей в размере миллиардов евро ежегодно.

Тогда меня ещё было не назвать опытным C++-разработчиком. Разумеется, я знал о неопределённом поведении, но как о чём-то абстрактном, о беде, которая приключается только с новичками. Как же я был неправ!  

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

Читать далее

REDB изнутри, статья 1: 13 таблиц, на которых работает всё

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

В предыдущей статье я разобрал что умеет REDB на практике: code-first схемы, LoadAsync без Include, LINQ с оконными функциями, деревья, redb.Route и redb.Tsak. Если не читали — начните с неё, она даёт общую картину.

Теперь начинаю цикл «REDB изнутри» — серия статей про устройство хранилища: как хранятся объекты и свойства, как работают схемы и кэш структур, как LINQ превращается в SQL, как устроены деревья, права, оконные функции. Всё с реальным SQL под капотом.

Первая статья цикла — про саму базу данных. Без понимания схемы таблиц всё остальное будет висеть в воздухе.

Читать далее

AI-агент своими руками: память, браузер, задачи и навыки — без боли

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

Привет, Хабр!

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

Этим я занимаюсь на работе, дома, в отпуске — везде. Такой уж человек.

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

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

Читать далее

SLA как инструмент, а не отчёт

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

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

В этой части речь пойдёт о следующем этапе — масштабировании и удешевлении. О том, что происходит, когда SLA считается корректно, цифрам уже доверяют, но компания продолжает развиваться. У неё кратно растёт количество разработчиков, архитектура усложняется и количество сбоев тоже растёт. Инциденты и сбои это наши обиходные синонимы и по ITIL это не одно и тоже, уж простите. С ростом ограничением становится не математика и перегибы полиномов высоких порядков, а люди, ручной труд, коммуникации и скорость реакции. О том, что со всем этим делать и поговорим.

Читать далее

Ваше сообщение об ошибке читает уставший человек в два часа ночи

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

Два часа ночи, у разработчика горит релиз, он подключает ваш API — и получает в ответ голое «invalid_request». Что не так, почему, что делать — ни слова. Сорок минут гаданий и злое письмо в поддержку.

Разбираем, как сделать опыт разработчика (DX) человеческим: как переписать ошибки по стандарту RFC 9457, но для живого человека; почему время до первого успешного вызова — главная метрика онбординга; и отчего предсказуемый, «скучный» API — это комплимент. С готовым шаблоном, который можно прикрутить к себе сегодня.

Читать далее

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

Проблема фантомной записи: почему ваша реализация идемпотентности незаметно теряет данные

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

В проде бывает так, что одна и та же операция часто повторяется: клиент не дождался ответа и ретраит, балансер порвал соединение, очередь переиграла сообщение. Вспоминаем про идемпотентность - это правило «повтор не должен создавать новый платёж/заказ».

Чтобы отличать повтор от новой операции, используют idempotency key (ключ идемпотентности). Это обычная уникальная строка-идентификатор, которую клиент или апстрим отправляет вместе с запросом (часто в заголовке Idempotency-Key). Сервис сохраняет этот ключ у себя и связывает с результатом операции.

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

В новом переводе от команды Spring АйО рассмотрим не самые очевидные ошибки и то, о чём стоит подумать, при реализации идемпотентного API.

Читать далее

SpaceVM: с нуля до кластера за 15 минут

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

Предлагаем вашему вниманию пошаговый мануал, позволяющий за 15 минут из «чистого» инсталла получить рабочий кластер SpaceVM с общим хранилищем, сетями и ролями контроллеров. Все это — через понятный веб-интерфейс плюс пару CLI-команд там, где это действительно уместно. Поехали!

Читать далее

Как стать Senior-разработчиком: 4 шага на пути к успеху

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

Если вы следите за текущими тенденциями в мире найма/вакансий, то определенно заметили, что куда-то подевались вакансии Middle и Junior-разработчиков, и у этого есть несколько причин.

Первая: рынок просел, и общее количество вакансий в IT-индустрии сократилось. В результате Middle-позиции теперь можно закрывать Senior-разработчиками. Это уже случалось в нашей истории, но за любым спадом следует подъем.

Вторая — AI-агенты. Senior-разработчики получили "рычаг". Теперь задачи, которые ранее поручали Junior и Middle-разработчикам, можно поручить AI Agent. При этом для Senior мало что меняется, поскольку подробное review делать нужно в обоих случаях.

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

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

Читать далее

Обновления GigaIDE за май 2026

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

Как обычно в начале месяца мы рассказываем вам о том, что изменилось в GigaIDE за прошедший месяц — май. Соответствующий обзор за апрель доступен здесь. Ниже — краткий обзор обновлений Pro-функциональности GigaIDE, который можно найти на нашем маркетплейсе.

Читать далее

Внедряем BX.UI.AccessRights.V2: современный интерфейс прав доступа Битрикс24 для своего компонента

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

В процессе кастомизации коробочной CRM Битрикс24 часто клиенты просят внедрить им права доступа. Захотелось внедрить с интерфейсом, как это выглядит в Задачах или Сделках. Изучил документацию — там всё изложено лишь в общем виде, пришлось анализировать исходники, сжечь несколько миллионов токенов различных нейронок, и даже после этого вникать в нюансы и дебажить код.

В статье подробно разбираются нюансы архитектуры компонента BX.UI.AccessRights.V2, подводные камни при внедрении в свой модуль (готовый репозиторий прилагается).

Читать далее

Голосовой КПТ-дневник с распознаванием речи на устройстве: Flutter и on-device Whisper

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

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

Я сам прошёл через тревожные расстройства, панические атаки и несколько депрессивных периодов. Из всего, что мне помогало, переломной стала КПТ, и у неё есть домашняя часть, дневник мыслей, который нужно вести между сессиями. Вести его текстом в момент тревоги у меня не получалось годами, и в какой-то момент я понял, что хочу диктовать его голосом. Так появился проект, который я тут и разбираю.

Читать далее

Tilda и СБИС Presto: как мы синхронизируем остатки через стоп-лист, а не каталог

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

Как мы избавили общепит от часа ручной работы каждое утро: разобрали реальный кейс синхронизации стоп-листа из СБИС Presto в каталог на Tilda через CommerceML. Поток на Python/FastAPI, дебаунс через SHA-256, eventual consistency без очередей и грабли, на которые наступили в проде.

Решение и грабли