Обновить

Бэкенд

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

От расшифровки звонков до собственных приложений: как ИИ взрослеет внутри CRM

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

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

В конце соберём собственное приложение, которое объединяет эти возможности на платформе для вайбкодинга от Битрикс24.

Читать далее

Простой способ запускать доверенный пользовательский JavaScript в Node.js

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

Недавно я опубликовал большую обзорную статью о том, как несколько лет развиваю свой пет-проект, который постепенно превратился в собственную Function-as-a-Service платформу. Она позволяет принимать пользовательский JavaScript, Python или Go, запускать его в изолированном окружении и управлять такими функциями почти как в небольшом облаке.

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

Погрузиться

Как использовать Kafka на собеседовании по System Design

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

Kafka часто появляется на System Design интервью, когда нужно асинхронно обрабатывать события и масштабировать систему.

Но за словами “добавим Kafka” скрывается много важных деталей: как выбрать ключ, сохранить порядок сообщений, распределить разделы между потребителями и не создать горячий раздел. В статье рассмотрим архитектуру Kafka, репликацию, смещения, повторные попытки и политики хранения.

Читать далее

Тестовые фикстуры: управление зависимостями в Gradle

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

В многомодульных Gradle-проектах рано или поздно появляются вспомогательные классы для тестов: фабрики тестовых данных, билдеры, хелперы. Такие классы не относятся ни к продакшн-коду, ни к обычным тестам. Логично было бы переиспользовать их сразу в нескольких модулях, но классическая модель Gradle этого не позволяет: тестовые артефакты одного проекта нельзя просто так подключить как зависимость в другом. 

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

Плагин java-test-fixtures заводит в модуле отдельный SourceSet, а другие модули подключают эти классы через лаконичный DSL. При публикации Gradle даже собирает отдельный *-test-fixtures.jar для независимых проектов. В статье на примерах показано, как расшарить тестовые хелперы между модулями, избавиться от дублирования и при этом сохранить чистые архитектурные границы. Если вы устали таскать тестовый код из модуля в модуль, то Вам точно пригодится.

Читать далее

Сериализация one-nio: от истоков к поддержке JDK 25

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

Привет, Хабр! В этой статье я расскажу об эволюции подсистемы сериализации one-nio — фреймворка для создания высоконагруженных сервисов, работающего в Одноклассниках с 2012 года. Прошлой осенью я работал над обновлением подсистемы и добавил в нее новый режим работы, совместимый с актуальными версиями JDK.

Ситуация, с которой мы столкнулись, довольно прозаична. Библиотеке больше десяти лет, и экстремально быстрая сериализация (превращение объекта в последовательность байтов и обратно) с самого начала строилась в ней на внутренних лазейках JVM, к которым обычный прикладной код доступа не имеет. Когда one-nio только писали, это был стандартный паттерн для высоконагруженных фреймворков.

Сейчас же платформа методично «закручивает гайки»: старые бэкдоры помечаются как устаревшие, а затем безжалостно удаляются. И перед нами встал серьезный вызов: как перевести библиотеку на легальные API вплоть до JDK 25, сохранив производительность и не сломав то, что годами крутится в проде?

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

Читать далее

ИИ ускорил разработку. Почему продакшен стал ломаться чаще

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

Искусственный интеллект уже ускорил написание кода, а способность систем безопасно принимать изменения осталась прежней. Отсюда – аккуратные пулл-реквесты, зелёные тесты и инциденты, которые проявляются только в продакшене. В статье разбираем, где возникает этот разрыв и какие инженерные guardrails помогают удержать скорость без роста хрупкости.

Разобраться в рисках

redb.Identity: OAuth 2.1 / OpenID сервер на .NET, где протокол отделён от транспорта, по шине или вообще без сети

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

Есть три привычных способа сделать OAuth/OIDC в .NET, и каждый чем-то неудобен.

Первый — ASP.NET-привязанные решения (Duende IdentityServer, ASP.NET Identity, сэмплы OpenIddict). Мощно, но каждый эндпоинт — это HTTP-middleware. Захотелось дёрнуть token из воркера или из консьюмера шины? Поднимай HTTP-листенер и ходи через loopback. Хочешь протестировать конвейер выдачи токена в изоляции? Готовь WebApplicationFactory.

Второй — готовые IAM-платформы (Keycloak, Auth0, Okta). Богато по фичам, но это отдельный сервис со своим рантаймом, своей админкой, своей базой, своей моделью конфигурации и своим деплоем. Мультиарендно — да, встраиваемо — нет.

Третий — написать своё. И в третий раз за десятилетие переизобрести Code+PKCE, ротацию refresh-токенов, хранение согласий, отзыв сессий, защиту от replay в MFA, ротацию JWKS, шаринг ключей между репликами и backchannel-logout по RFC 8417.

Читать далее

Spring Security: работа с JWT токенами

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

Всем привет! Данная статья посвящена регистрации и аутентификации с помощью JWT что помогает нам избавиться от тяжёлых сессий и куки и быть более крутыми и современными разработчиками

Читать далее

Java в эпоху ИИ. К чему пришли на пятом MTC Web Services Meetup для разработчиков

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

Еще несколько лет назад разработчики на Java в основном обсуждали новые инструменты для создания программ, особенности архитектуры приложений и способы сделать сервисы быстрее и надежнее. Сегодня к этим темам добавился еще один важный вопрос — как искусственный интеллект меняет профессию программиста. Именно с этого началась пятая встреча в рамках MTC Web Services Meetup, которая собрала в Москве Java-разработчиков, архитекторов и инженеров.

Вместо привычной серии докладов организаторы открыли вечер большой дискуссией о том, как меняется современная разработка, чему теперь стоит учиться, какую роль играют ИИ-ассистенты и как их использование влияет на безопасность решений. Обо всем этом — в материале.

Читать дальше

MinIO, MongoDB, PostgreSQL для хранения 25 лет истории стоимости акций

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

💾 MinIO, MongoDB, PostgreSQL для хранения 25 лет истории стоимости акций

Когда строишь эмулятор для проверки торговой стратегии 20 акций на 25 лет исторических данных поминутно, выбор хранилища становится архитектурной задачей. В статье разобрал, почему попытка использовать MinIO не оправдала себя, где упирается MongoDB и как PostgreSQL с Pgpool-II и read-репликами сократил время чтения одной свечи с 40мс до 10мс

Читать далее

Мониторинг производительности «1С:ERP»: как выстроить систему и развивать ее на практике

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

Привет, Хабр! Меня зовут Максим Вишняков, я ведущий разработчик в Axenix. За время работы я накопил обширные знания в части оптимизации, развития и поддержки  различных решений на платформе 1С:Предприятие. В этой статье хотел бы рассказать об опыте оптимизации работы ERP-системы для лидера алкогольного рынка, который отгружает продукцию в режиме 24/7 и осуществляет огромный объем операций.

Читать далее

Бенчмаркая проверки границ: фикс, который шёл 8  лет, и проверка, которая жива до сих пор

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

Уважаемые читатели, в этой статье я хочу рассказать о проверках границ массива и представить свои выводы. Каждое обращение arr[i] обязано проверить индекс, иначе IndexOutOfRangeException — а JIT старается эти проверки убирать, когда может доказать, что выход за границы невозможен. Я взял несколько обычных циклов и посмотрел в машинный код на .net 8, 9, 10 и 11 одновременно. Результат разложился по версиям так, как я не ожидал.

Будет три истории:

Читать далее

OpenIDE Pro: публичный релиз для всех! Java, Kotlin, Go, TypeScript, Python, PHP и DB-клиент в одном дистрибутиве

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

Прошло больше года с момента публичного релиза первой версии OpenIDE. Сейчас ею пользуются на постоянной основе десятки тысяч разработчиков в сотнях российских компаний.

И практически с самого первого дня к нам начали обращаться крупные компании, не с просьбой добавить фичу, а с предложением заплатить. Потому что когда организация всерьёз рассматривает IDE для команды в несколько сотен человек, ей важно знать: есть договор, есть SLA, есть кто-то, кто несёт ответственность и завтра никуда не денется. Бесплатный open-source продукт эту уверенность не даёт сам по себе, как бы качественно он ни был сделан.

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

Так появилась OpenIDE Pro.

Читать далее

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

Как выбрать язык программирования для ребёнка

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

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

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

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

Читать далее

WebAssembly (WASM) — не серебряная пуля

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

WebAssembly появился для браузерных задач как способ исполнять тяжелый код быстрее, чем это делает JavaScript. Но за последние годы он начал выходить далеко (иногда буквально далеко) за пределы вкладки браузера: серверы, edge-вычисления, плагины, песочницы. Появились рантаймы Wasmtime, WasmEdge, Wasmer, которые исполняют WASM-модули\компоненты прямо на ОС. Звучит красиво - собрал один бинарь, а запускаешь где угодно, да еще и в максимальной изоляции.

Но есть интересное наблюдение. Существуют проекты, которые строили свои виртуальные машины на WASM, но отказались от него. Самый заметный пример - это Polkadot. Они спроектировали собственную PolkaVM на базе набора инструкций RISC-V и переключили исполнительный слой смарт-контрактов на нее (при этом сам runtime Polkadot по-прежнему компилируется в WASM). Если WASM настолько хорош, как заявляется, то почему для нового движка выбрали не его, а регистровую машину?

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

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

Читать далее

«dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе

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

Эта статья про один баг совместимости, который меня озадачил. Обе стороны честно объявляют версию протокола «dap-18», а байты на проводе не сходятся. Это не туториал по крипте и не показ репозитория - история про то, что строка версии - это не контракт совместимости, и про то, как это чинить, когда наткнулся.

Читать далее

Парсер C++ на своем DSL: попытка обогнать компилятор

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

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

В какой-то момент я решил: а что если попробовать написать свой компилятор? Пока только для разработки, не для прода. На замену Clang++/G++/CL.EXE.

Эта статья — о первом шаге на этом пути. О парсере C++, который я написал на своём DSL специально сделанном для этого изначально.

Матчинг запущен? Кооперация предложена?

Аллокатор в Go

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

Привет, Хабр! Текущая статья будет полезна тем, кто уже знаком с основами языка программирования Golang и хочет более углублённо изучить его. Исходя из названия стати понятно, что речь пойдёт об аллокаторах, основных видах, плюсах и минусах, а также о том, какой аллокатор используется в Go. Я настоятельно рекомендую прочитать статью целиком, прежде, чем приступать к чтению части конкретно относящейся к аллокатору Go.

Читать далее

Пишу консольные приложения на iPad с помощью AI-агента и удалённого VPS

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

Консольное приложение - не самая очевидная вещь для разработки на планшете. Ни полноценного терминала, ни файловой системы, к которой привыкли на десктопе, ни нормальной многозадачности - так было ещё пару лет назад. Но если вынести сам процесс исполнения кода на удалённый Linux-сервер, а iPad превратить в тонкий клиент для управления AI-агентом и просмотра результата, картина меняется полностью. Ниже - рабочий процесс, который у меня сложился для разработки CLI-инструментов на Python: VPS + AI Coding Agent (Claude Code) в tmux + Remote IDE как единая точка входа, всё на iPad со Stage Manager. Для такого цикла нужно немного: SSH-доступ к серверу, где крутится агент, и способ параллельно смотреть на файлы и на diff, не теряя сессию агента при переключении между окнами. Дальше - как это выглядит по шагам.

Читать далее

Мок-интервью: зачем смотреть записи чужих собеседований — и как делать это правильно

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

Хабр, привет! Меня зовут Андрей Пронин, я руководитель «бирюзовой» студии заказной разработки ProninTeam и наставник на курсе по управлению командой разработки в Яндекс Практикуме.

Несколько лет назад я запустил YouTube-канал с публичными мок-собеседованиями по Python для джунов из Практикума. В этом материале расскажу, как так вышло, чем мок-интервью отличается от настоящего — и как формат помогает начинающим разработчикам.

Читать далее