Обновить

Бэкенд

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

Рефакторинг и реинжиниринг легаси. Погружаемся глубже

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

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

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

Читать далее

Недостающее звено при обработке медиа на Go

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

Большинство медиа-библиотек для Go рано или поздно упираются в одну и ту же проблему.

У них нет собственного декодера.

Вместо этого они полагаются на установленный в системе пакет FFmpeg, shared библиотеки, платформозависимые DLL или внешние исполняемые файлы, которые должны присутствовать на целевой системе.

На этапе разработки всё работает. Затем начинается развертывание.

И внезапно вы отлаживаете отсутствующие DLL в Windows, несовместимые версии FFmpeg в Linux, различия версий из Homebrew на macOS, образы контейнеров без нужных библиотек или продуктовые серверы, где рядовое обновление пакета неожиданно ломает обработку медиа.

Читать далее

Два мажора, один README, одно демо: два почти бесплатных дизайн-ревью

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

Из трёх мажоров, описанных в предыдущей статье, два не всплыли в тестах. Они всплыли в двух дизайн-ревью, которые тесты провести не могут.

Что поймали ревью, а не тесты

Контракты данных между командами: гайд по data contracts в дата‑пайплайнах

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

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

В статье разбираем, как data contracts помогают фиксировать структуру, правила и ответственность за данные — и почему это спасает витрины, отчёты и нервы дата-инженеров.

Читать далее

redb.Route изнутри: четыре in-memory канала и Exchange, который их связывает

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

Прошлая статья была обзорной — что такое redb.Route, зачем нам понадобился свой Apache Camel под .NET, как выглядит боевой маршрут. Если не читали, коротко: это fluent C# DSL для интеграции — 22 коннектора (~30 URI-схем, если считать https/wss/es-варианты), ~30 паттернов EIP нативно через 41 процессор8 in-process компонентов, компилируемый expression-движок. Сегодня заходим внутрь. Не список фич, а рабочий разбор.

Серия будет длинной, поэтому сразу скажу, что и в каком порядке:

Читать далее

К каким социальным проблемам приводит неправильная последовательность глав в учебнике по программированию

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

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

Читать далее

Pull request открыл — стенд появился. Закрыл — исчез. Эфемерные окружения в kubernetes через FluxCD

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

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

Реализация построена на FluxCD с использованием директивы postBuild для шаблонизации манифестов через переменные. Каждое окружение получает собственный namespace, базу данных, TLS‑сертификат и уникальный URL — и всё это без ручного вмешательства. Разбираем структуру CI/CD пайплайна, слоёвую организацию GitOps‑репозитория и автообновление образов через ImagePolicy.

Читать далее

JDK 27 Compact Object Headers: как сбросить до 30% кучи без кроссфита и жестких диет

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

Каждый Java-объект в HotSpot начинается со служебного заголовка размером 12 байт. В JDK 27 по умолчанию он сжимается до 8 — это JEP 534, финальный шаг внедрения Compact Object Headers. Для типовых бэкендов это 5–15% экономии heap, для приложений с миллионами мелких объектов (особенно на Scala, Clojure и иммутабельных коллекциях) — до 30%, без изменений в прикладном коде.

Читать далее

Функции управления цифровыми активами автомобильных дорог. Часть 2 – маппинг

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

Здравствуйте, уважаемые читатели Хабра!

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

Интересно? Читать!

Как я разогнал Qwen3.6-27B до 73 токен/с в llama.cpp: параметры, которые реально работают

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

Локальные LLM сейчас — это действительно мощный инструмент. Они уже вплотную приблизились к проприетарным моделям вроде Claude, особенно в задачах кодинга. Я сам активно использую локальные модели для разработки на TypeScript и Go.

На данный момент самая интересная модель для моего стека — Qwen3.6-27B. Но один только выбор хорошей модели ничего не гарантирует. Без правильных параметров вы не получите ни скорости, ни качества.

В этой статье я расскажу, с какими конкретно параметрами запускаю Qwen3.6-27B в llama.cpp (мой текущий фаворит среди бэкендов), какие метрики считаю важными, и как нашел баланс между скоростью, стабильностью и качеством.

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

Читать далее

Я собрал Telegram-бота с лентой новостей, которая учится на твоих реакциях — и хостится за $5 в месяц

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

Хотел ленту новостей без двух вещей: дублей (одно событие из пяти каналов с разными заголовками) и потока негатива по утрам.

Получился Telegram-бот, который по умолчанию показывает только хорошие и нейтральные новости — а тяжёлый контент включается в настройках на 4 уровнях. Плюс он убирает дубли, переводит RU↔EN и подстраивает выдачу под твои реакции 🔥 ❤️ 😢.

Но самое интересное — он живёт на одной машине Fly.io за ~$5 в месяц. В статье разбираю, как:

заменил Postgres + pgvector на встраиваемый sqlite-vec и убрал отдельную БД-машину;

гоняю типизацию, перевод и оценку тональности через бесплатные LLM на OpenRouter (счёт $0–1/мес);

считаю эмбеддинги локально на fastembed/ONNX без внешних API;

собрал рекомендательное ядро на «векторе вкуса» с EWMA и анти-баблом.

И, конечно, грабли: sqlite-vec, который ломался на arm64; vec0 без INSERT OR REPLACE; fastembed, сменивший пулинг между версиями; и LLM, которая «подкручивала» оценки негатива, пока я не дал ей чёткую рубрику.

👉 Бот живой, можно потрогать: @futur_e_news_bot

Читать далее

Подмена субъекта в Keycloak: не кнопка, а модель безопасности

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

Запрос «а дайте саппорту возможность заходить под пользователем» почти всегда звучит как простая фича. На практике это изменение в модели авторизации, аудита и ответственности. В терминах Keycloak задача формулируется не как «войти под пользователем», а как «разрешить субъекту A получить токен, в котором он будет субъектом Б, с контролируемыми правами и прозрачным аудитом». Это принципиально важно, потому что Keycloak оперирует токенами, клиентами и правами на их выпуск, а не кнопками на экране.

Читать далее

Как не потратить полдня, прикручивая Юмани-оплату к сайту

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

Спойлер: кажется SHA1 устарел, а туториалы этого еще не знают

Привет всем.
Для контекста: я не программист. Я гуманитарий, который до безумия боится цифрового неравенства, которое уже наступает. Поэтому, вооружившись AI‑агентом (Cursor) и бесплатными Claude, Gemini, DeepSeek пытаюсь быть в тренде (некоторые называют это вайб‑кодингом). Признаться я тоже думал, что это что‑то легкое, «вайбовое» — главное, все внятно описать, что ты хочешь. Но по факту в том, что происходит, всё равно приходится разбираться самому.

Свежий пример моих «грабель» — решил прикрутить оплату ЮМани.
Казалось бы, ЮМани, всё придумано до меня. Но есть нюансы...

Читать далее

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

Автоматизируем генерацию gRPC стабов для Go

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

Держать proto-контракты в одном репозитории удобно, но подключать их целиком в каждый сервис — не очень. Разберём, как автоматически генерировать Go-стабы из proto-файлов, версионировать их как отдельные Go-модули и публиковать через GitLab CI/CD. Бонусом — swagger-документация и GitLab Pages.

Читать далее

Infostart Toolkit Air: поддержка 1С 8.5, новые инструменты и обновленное лицензирование

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

Мы подготовили крупное обновление Infostart Toolkit Air – версию, ориентированную на работу с новой платформой 1С:Предприятие 8.5, более удобный интерфейс и расширение повседневных инструментов разработчика.

В новой версии Toolkit Air доработаны формы, редакторы, консоли кода и запросов, конструктор запросов, работа с метаданными, редактор объекта и выгрузка данных. Отдельно переработан порядок лицензирования: теперь лицензия оформляется на сервер 1С, где используется Toolkit.

Ниже – подробный обзор изменений и новая логика лицензирования для новых и действующих пользователей....

Читать далее

Я люблю SQL, но устал собирать WHERE через fmt.Sprintf: зачем я сделал qrafter

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

Мне нравится чистый SQL.

Не «нравится, потому что пришлось», а правда нравится. В хорошем SQL‑запросе видно, что происходит с данными: откуда берём, как фильтруем, где соединяем, что агрегируем и в каком порядке отдаём наружу.

Но как только в API появляются фильтры, сортировка, пагинация и отдельный COUNT(*) с тем же WHERE, чистый SQL быстро обрастает ручной бухгалтерией: args, placeholder«ы, fmt.Sprintf и копирование условий между запросами.»

В какой‑то момент я понял, что меня раздражает не SQL. Меня раздражает работа вокруг SQL.

Так появился qrafter — небольшой type‑safe SQL query builder для Go: без ORM, без codegen, с типизированными колонками, зависимым от диалекта рендером и обычным SQL + аргументами на выходе.

Читать далее

«Весомый» рефакторинг, или как мы перестали беспокоиться и полюбили работу с весами

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

Представьте, что вы работаете над кодом магазина, который живёт уже много лет. Бизнес доволен, продажи растут, но есть одна проблема — модуль обращения к весам превратился в чёрный ящик. Когда-то давно он работал прекрасно, но со временем разросся. Многопоточность, низкоуровневый код и бизнес-логика сплелись в один клубок, каждое изменение могло что-то сломать. И так дошло до того, что появились несколько фич, которые не реализовывались уже полгода... Стало ясно, что требуется не столько рефакторинг, сколько новая, удобная для работы абстракция.

Приветствую! Меня зовут Иван Матвеев, я разработчик в компании X5, и сегодня я расскажу, как мы начали рефакторить наши весы.

Читать далее

Проектировал электрощит на 108 модулей и понял: современный IT – это скрутка с синей изолентой

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

Я выпал из IT на месяц. Причина банальна, но сурова – капитальный ремонт. По квартире проложено пара километров кабеля, из них 600 метров витой пары для шины управления, на полу разложен макет двух щитов по 54 модуля общей стоимостью под 150 тысяч рублей – и чем глубже я лезу в ПУЭ и считаю сечения, тем чётче одна мысль: если бы инженеры-электрики проектировали системы так же, как мы, разработчики, проектируем распределённые приложения – мы бы все давно сгорели заживо.

Читать далее

Внутреннее устройство ОС RT-11. Копаемся в исходном коде. Часть третья

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

В операционной системе RT-11 существуют варианты резидентного монитора с поддержкой многозадачности — например, RMONFB. Многозадачность здесь реализована полностью на программном уровне, без аппаратной поддержки. Если вам интересно посмотреть исходный код, отвечающий за многозадачность в RT-11, вместе с пояснениями из Руководства системного программиста — добро пожаловать под кат.

Читать далее

Десять лет в индустрии я писал код руками. Три месяца назад перестал

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

После выхода Claude Opus 4.7 стало очевидно, что агент технически быстрее меня. А 28 мая Anthropic выпустила Opus 4.8 с теми же ценами, заметно лучшим coding/agentic-скором и новой возможностью держать в голове миграции на сотни тысяч строк

Знает он, кажется, всё. Все фреймворки, все паттерны, всю историю последних пятнадцати лет на StackOverflow и GitHub. По объёму знаний это легко сеньор, местами принципал

Но при всём этом ему не хватает трёх вещей

Читать далее