This media is not supported in your browser
VIEW IN TELEGRAM
Сегодня — Java 30 лет 🎂
Опубликовал большую статью на Хабре — о том, как развивалась Java, что происходило внутри JVM, и куда всё это движется дальше.
📌 В статье:
— История версий Java: от Playground до Java 24
— Эволюция языка
— Как работает JVM и почему HotSpot такой «горячий»
— Проекты OpenJDK: Leyden, GraalVM, CRaC — зачем они нужны и как меняют подход к производительности
— И главное — как Java готовится к будущему
🧠 Подойдёт всем, кто пишет на Java или просто хочет понять, как устроена одна из самых влиятельных технологий в мире разработки.
📖 Читать статью на Хабр
#java_hub_history
Опубликовал большую статью на Хабре — о том, как развивалась Java, что происходило внутри JVM, и куда всё это движется дальше.
📌 В статье:
— История версий Java: от Playground до Java 24
— Эволюция языка
— Как работает JVM и почему HotSpot такой «горячий»
— Проекты OpenJDK: Leyden, GraalVM, CRaC — зачем они нужны и как меняют подход к производительности
— И главное — как Java готовится к будущему
🧠 Подойдёт всем, кто пишет на Java или просто хочет понять, как устроена одна из самых влиятельных технологий в мире разработки.
📖 Читать статью на Хабр
#java_hub_history
🔥9❤1
🚀 Двоичная Java: CDS, CRaC и AOT для ускорения запуска и прогрева JVM
🔍 Миф №1 о Java:
> «Java — это медленно»
Да, лет 20 назад это могло быть правдой. Но JVM с тех пор прошла огромный путь.
В классическом варианте Java-байткод исполняется через интерпретатор — по сути, цикл со switch-case, где инструкции переводятся на лету. Это действительно не быстро.
📈 Первый прорыв — JIT-компиляция (Just-in-Time): часто вызываемые методы начали компилироваться в машинный код во время выполнения. Это дало солидный прирост производительности.
💡 Но на этом оптимизации не остановились. Сегодня в арсенале JVM есть:
* CDS (Class Data Sharing) — сериализация внутренних представлений классов, чтобы ускорить их загрузку из архива.
* CRaC (Coordinated Restore at Checkpoint) — снятие снепшота уже «прогретой» JVM, чтобы потом мгновенно восстановить её в этом состоянии.
* AOT (Ahead-of-Time compilation) — компиляция Java-приложения в нативный бинарник заранее, без участия JIT в рантайме.
🧪 А на подходе ещё Project Leyden, который обещает сделать JVM по-настоящему предсказуемой и «запускаемой с кнопки» — благодаря condensers и training runs.
🎤 Обо всём этом я рассказывал на HighLoad++ 2024. Видео пока не выложили, но мои друзья из Axiom JDK подготовили текстовую версию доклада 📄
📎 Читайте: «Двоичная Java: CDS, CRaC и AOT для ускорения запуска и прогрева JVM»
#java_hub_jvm
🔍 Миф №1 о Java:
> «Java — это медленно»
Да, лет 20 назад это могло быть правдой. Но JVM с тех пор прошла огромный путь.
В классическом варианте Java-байткод исполняется через интерпретатор — по сути, цикл со switch-case, где инструкции переводятся на лету. Это действительно не быстро.
📈 Первый прорыв — JIT-компиляция (Just-in-Time): часто вызываемые методы начали компилироваться в машинный код во время выполнения. Это дало солидный прирост производительности.
💡 Но на этом оптимизации не остановились. Сегодня в арсенале JVM есть:
* CDS (Class Data Sharing) — сериализация внутренних представлений классов, чтобы ускорить их загрузку из архива.
* CRaC (Coordinated Restore at Checkpoint) — снятие снепшота уже «прогретой» JVM, чтобы потом мгновенно восстановить её в этом состоянии.
* AOT (Ahead-of-Time compilation) — компиляция Java-приложения в нативный бинарник заранее, без участия JIT в рантайме.
🧪 А на подходе ещё Project Leyden, который обещает сделать JVM по-настоящему предсказуемой и «запускаемой с кнопки» — благодаря condensers и training runs.
🎤 Обо всём этом я рассказывал на HighLoad++ 2024. Видео пока не выложили, но мои друзья из Axiom JDK подготовили текстовую версию доклада 📄
📎 Читайте: «Двоичная Java: CDS, CRaC и AOT для ускорения запуска и прогрева JVM»
#java_hub_jvm
👍5🔥2
🔁 Saga Pattern в микросервисной архитектуре: можно ли обойтись без распределённых транзакций?
Выступил на онлайн-встрече "Книжного клуба .rar" — Telegram-сообщества для Java-разработчиков, где регулярно обсуждают профессиональную литературу, технологии и устраивают встречи с практикующими инженерами 👉 @point_rar
В этот раз разбирали реализацию паттерна Saga на Java с использованием Temporal
Демо-проект на GitHub - https://github.com/RustamKuramshin/spring-boot-saga-pattern-example
Презентация мини-доклада тут
📦 Что такое Saga и зачем она нужна?
В распределённой системе аннотация Transactional не работает между сервисами. А бизнесу всё ещё нужно "всё или ничего":
если деньги списались, товар должен быть зарезервирован и доставлен. Если нет — откатить всё назад.
Saga — это паттерн, который разбивает такую бизнес-транзакцию на цепочку локальных транзакций, и если что-то идёт не так, вызывает компенсационные действия (например, вернуть деньги).
🧩 Два способа реализовать Saga
🔸 Оркестрация
Один сервис (оркестратор) управляет всей логикой: вызывает шаги, следит за результатами, вызывает компенсации.
➕ Централизованно, легко отлаживать
➖ Меньше изоляции между сервисами
🔸 Хореография
Сервисы реагируют на события (event-driven): "платёж прошёл" → "резервируй товар" → "создай доставку".
➕ Слабо связанная архитектура
➖ Сложно проследить цепочку событий и откатов
⚙️ В Temporal реализация Saga — это workflow, в котором бизнес-процесс описывается обычным Java-кодом.
Он:
- сохраняет состояние каждого шага (event sourcing),
- автоматически повторяет activities при сбоях,
- управляет timeouts и compensation logic,
- отделяет workflow (координацию) от activity (действий).
Например, просто пишешь:
А Temporal сам заботится о повторяемости, масштабировании и отказоустойчивости.
Если интересно больше узнать про Temporal, рекомендую посмотреть доклад Петра Сальникова с JPoint. Мне повезло присутствовать в зале на самом докладе. В дискуссионной зоне Петр ответил на множество вопросов как раз в тот период, когда мне нужно было самому разбираться с Temporal.
#java_hub_patterns
Выступил на онлайн-встрече "Книжного клуба .rar" — Telegram-сообщества для Java-разработчиков, где регулярно обсуждают профессиональную литературу, технологии и устраивают встречи с практикующими инженерами 👉 @point_rar
В этот раз разбирали реализацию паттерна Saga на Java с использованием Temporal
Демо-проект на GitHub - https://github.com/RustamKuramshin/spring-boot-saga-pattern-example
Презентация мини-доклада тут
📦 Что такое Saga и зачем она нужна?
В распределённой системе аннотация Transactional не работает между сервисами. А бизнесу всё ещё нужно "всё или ничего":
если деньги списались, товар должен быть зарезервирован и доставлен. Если нет — откатить всё назад.
Saga — это паттерн, который разбивает такую бизнес-транзакцию на цепочку локальных транзакций, и если что-то идёт не так, вызывает компенсационные действия (например, вернуть деньги).
🧩 Два способа реализовать Saga
🔸 Оркестрация
Один сервис (оркестратор) управляет всей логикой: вызывает шаги, следит за результатами, вызывает компенсации.
➕ Централизованно, легко отлаживать
➖ Меньше изоляции между сервисами
🔸 Хореография
Сервисы реагируют на события (event-driven): "платёж прошёл" → "резервируй товар" → "создай доставку".
➕ Слабо связанная архитектура
➖ Сложно проследить цепочку событий и откатов
⚙️ В Temporal реализация Saga — это workflow, в котором бизнес-процесс описывается обычным Java-кодом.
Он:
- сохраняет состояние каждого шага (event sourcing),
- автоматически повторяет activities при сбоях,
- управляет timeouts и compensation logic,
- отделяет workflow (координацию) от activity (действий).
Например, просто пишешь:
activities.makePayment();
saga.addCompensation(activities::cancelPayment);
А Temporal сам заботится о повторяемости, масштабировании и отказоустойчивости.
Если интересно больше узнать про Temporal, рекомендую посмотреть доклад Петра Сальникова с JPoint. Мне повезло присутствовать в зале на самом докладе. В дискуссионной зоне Петр ответил на множество вопросов как раз в тот период, когда мне нужно было самому разбираться с Temporal.
#java_hub_patterns
👍10🔥4❤1
null, который положил Google Cloud Platform 😱
Вокруг только и разговоров, что о post-mortem недавнего инцидента в Google Cloud👩💻
12 июня Google Cloud прилёг. На несколько часов так прилёг. Упали App Engine, BigQuery, Cloud SQL, IAM, Cloud Run — и ещё с десяток ключевых сервисов.
А всё началось с Null Pointer Exception
29 мая в компонент GCP под названием Service Control добавили новую ветку логики для проверки квот. Код попал в прод, но не активировался — требовалась определённая конфигурация политики, которая на тот момент ещё не существовала.
12 июня эти политики всё-таки были задействованы. В Spanner (распределённая база данных от Google) записались данные с пустыми полями. Service Control начал использовать новую логику, где не было защиты от null. И началось: сервис стал падать в каждом регионе. Ошибки 503 прокатились по всем зависимым API. Глобальная катастрофа — за пару секунд.
Каковы корневые причины?
- Null Pointer Exception в новой логике квот.
- Отсутствие feature flag’а — код сразу пошёл "в бой", без фазового включения.
- Нет fallback-механизма (fail-open).
- Не было адекватного тестирования — критическая ветка не активировалась до продакшна.
- Мгновенная глобальная репликация метаданных — баг разлетелся по всему миру за секунды.
Кто бы мог подумать, что в 2025 году глобальный сервис положит банальный NPE.
Мы, Java-разработчики, к сожалению, не удивлены
null — это старая боль JVM.
Известный billion-dollar mistake, как его однажды окрестил Тони Хоар. За десятилетия было много попыток уменьшить ущерб от null:
- Kotlin с его строгой null safety.
- Optional в Java 8.
- Проект JSpecify, который пытается ввести строгую спецификацию аннотаций nullability.
- Черновик JEP'а про Nullable-типы на уровне JVM.
А ведь в Go (на нём пишут в Google), несмотря на переименование null в nil, проблемы всё те же, хе-хе👩💻
Крах Google Cloud — это textbook fail в области feature toggle практик.
Если бы новая логика была обёрнута в фичефлаг с постепенным rollout — баг бы нашли до продакшна.
Если бы был fail-open — сервис хотя бы не падал.
Если бы была деградация, а не crash loop — миллионы клиентов не увидели бы 503.
Инфраструктурный код заслуживает не меньше внимания, чем продакт-фичи.
Любая система уязвима, если в ней нет культуры устойчивости к дефектам.
#java_hub_news
Вокруг только и разговоров, что о post-mortem недавнего инцидента в Google Cloud
12 июня Google Cloud прилёг. На несколько часов так прилёг. Упали App Engine, BigQuery, Cloud SQL, IAM, Cloud Run — и ещё с десяток ключевых сервисов.
А всё началось с Null Pointer Exception
29 мая в компонент GCP под названием Service Control добавили новую ветку логики для проверки квот. Код попал в прод, но не активировался — требовалась определённая конфигурация политики, которая на тот момент ещё не существовала.
12 июня эти политики всё-таки были задействованы. В Spanner (распределённая база данных от Google) записались данные с пустыми полями. Service Control начал использовать новую логику, где не было защиты от null. И началось: сервис стал падать в каждом регионе. Ошибки 503 прокатились по всем зависимым API. Глобальная катастрофа — за пару секунд.
Каковы корневые причины?
- Null Pointer Exception в новой логике квот.
- Отсутствие feature flag’а — код сразу пошёл "в бой", без фазового включения.
- Нет fallback-механизма (fail-open).
- Не было адекватного тестирования — критическая ветка не активировалась до продакшна.
- Мгновенная глобальная репликация метаданных — баг разлетелся по всему миру за секунды.
Кто бы мог подумать, что в 2025 году глобальный сервис положит банальный NPE.
Мы, Java-разработчики, к сожалению, не удивлены
null — это старая боль JVM.
Известный billion-dollar mistake, как его однажды окрестил Тони Хоар. За десятилетия было много попыток уменьшить ущерб от null:
- Kotlin с его строгой null safety.
- Optional в Java 8.
- Проект JSpecify, который пытается ввести строгую спецификацию аннотаций nullability.
- Черновик JEP'а про Nullable-типы на уровне JVM.
А ведь в Go (на нём пишут в Google), несмотря на переименование null в nil, проблемы всё те же, хе-хе
Крах Google Cloud — это textbook fail в области feature toggle практик.
Если бы новая логика была обёрнута в фичефлаг с постепенным rollout — баг бы нашли до продакшна.
Если бы был fail-open — сервис хотя бы не падал.
Если бы была деградация, а не crash loop — миллионы клиентов не увидели бы 503.
Инфраструктурный код заслуживает не меньше внимания, чем продакт-фичи.
Любая система уязвима, если в ней нет культуры устойчивости к дефектам.
#java_hub_news
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥4❤2😱2
ИИ-агенты сегодня — это не просто тренд, а новая парадигма взаимодействия с инструментами разработки.
Вместо того чтобы ограничиваться подсказками по коду, современный AI получает полномочия действовать как полноценный участник процесса: анализировать проект, создавать PR'ы, запускать CI, вести дискуссии в issue и автоматизировать рутину. Для этого нужна инфраструктура. И вот GitHub выкатывает один из главных строительных блоков — официальный GitHub MCP-сервер.
📌 Что такое MCP?
MCP (Model Context Protocol) — это стандарт для интеграции LLM-агентов с внешними инструментами. Он описывает, как агент может обращаться к API, какие действия доступны и в каком контексте. MCP-сервер предоставляет весь необходимый интерфейс, чтобы LLM могла, например, создать issue, обновить pull request, запросить ревью или найти баг в коде.
Иными словами, MCP-сервер превращает LLM в разработчика, способного действовать.
📦 Что внутри
GitHub MCP-сервер официально доступен как в виде локального Docker-контейнера, так и как хостинг-сервис от GitHub — с полноценной поддержкой OAuth 2.0, SAML и автоматическим обновлением.
Возможности:
- Полный доступ к GitHub API через безопасную прослойку.
- Управление репозиториями, PR, issue, CI/CD, пользователями, кодом и даже секретами.
- Возможность фильтровать доступные инструменты (например, включить только работу с PR и Actions).
- Поддержка read-only режима — чтобы LLM-агент был только наблюдателем.
- Встроенная динамическая загрузка инструментов — чтобы модель не путалась в избыточных возможностях.
🛠 Как использовать?
Подключение в
Интеграция с другими IDE и MCP-хостами через JSON-конфигурацию.
Можно использовать в своих проектах для создания кастомных агентов: например, AI-помощник по ревью кода.
💡 Перспективы
Большинство современных AI-агентов для кодинга всё ещё действуют в изоляции — они не понимают, что происходит в CI, какие открыты issue, кто их создал и зачем. MCP меняет это. Теперь можно строить LLM-инструменты, которые живут в контексте проекта, как будто это ваш junior-разработчик на испытательном сроке, только с бесконечным терпением и способностью парсить тысячи строк кода.
🔗 Попробовать GitHub MCP Server:
Репозиторий: https://github.com/github/github-mcp-server
Документация MCP: https://modelcontextprotocol.io/introduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3🤔2
Media is too big
VIEW IN TELEGRAM
Что на самом деле происходит на хакатонах? Как собрать сильную команду, не слиться на следующий день и дойти до победы?
Хакатоны - это одно из моих увлечений в разработке. То ради чего я готов мало спать на протяжении нескольких дней, пока мы готовим очередной невероятный проект 😅
Моя команда называется "Java Boys". Сложно придумать другое название, когда тебя окружают один джависты.
И вот мы наконец сняли подкаст про хакатоны с Дмитрием Черкасовым, DevRel-ом команды Jmix, отечественного java-фреймворка для быстрой разработки, основанного на Spring Boot.
На подкасте мы обсудили:
— как выбрать задачу, чтобы не перегореть и успеть к дедлайну
— почему Jmix стал нашим ключевым инструментом на хакатонах
— как организована работа внутри нашей команды
— какие проекты мы делали и почему они побеждали
— и что нужно, чтобы вам тоже начать побеждать
Много живого опыта, немного самоиронии и полезные советы от тех, кто выигрывал хакатоны Сбера, ВТБ, МТС и других.
Если интересна внутренняя кухня хакатонов — обязательно смотрите!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2🎉1
Если вы давно в Java — вы наверняка помните Java EE. А если только входите в энтерпрайз-разработку — скорее всего, уже слышали про Jakarta EE.
Jakarta EE — это набор спецификаций и стандартов для разработки масштабируемых, надёжных и переносимых серверных приложений на Java. Это то, что стоит за большинством Java-серверов, включая GlassFish, WildFly, Open Liberty, Payara, WebLogic и многие другие.
Что входит в Jakarta EE?
Jakarta EE — это не одна технология, а экосистема. Вот лишь часть ключевых спецификаций:
- Jakarta Servlet — фундамент веб-приложений на Java.
- Jakarta RESTful Web Services (JAX-RS) — для создания REST API.
- Jakarta Persistence (JPA) — ORM-решение для работы с базами данных.
- Jakarta Contexts and Dependency Injection (CDI) — современная DI-модель.
- Jakarta Security, Jakarta Transactions, Jakarta Messaging (JMS) — всё, что нужно для построения зрелых корпоративных систем.
С 2017 года, после передачи Java EE под крыло Eclipse Foundation, проект получил второе дыхание. Так появился бренд Jakarta EE — с открытым процессом разработки, поддержкой крупных вендоров и фокусом на совместимость, эволюцию и инновации.
Что нового в Jakarta EE 11?
26 июня вышел Jakarta EE 11 — самый свежий релиз платформы. Что в нём интересного?
Jakarta Data — новая спецификация, упрощающая работу с хранилищами данных:
Репозитории по аналогии с Spring Data (CrudRepository, Pagination, query-методы).
Упрощение API:
- Удаление Managed Beans
- CDI теперь в центре внимания - единый стиль внедрения зависимостей.
- Поддержка Java Records.
- Удалены устаревшие конструкции вроде SecurityManager.
Обновлённый TCK
Тестовая инфраструктура переписана на JUnit 5 и Maven, вместо старого Ant. Это упрощает сертификацию, ускоряет тестирование и снижает барьер входа для новых участников.
Поддержка Java 17 и 21, включая Virtual Threads — да, Jakarta EE теперь официально двинулась навстречу виртуальным тредам и масштабируемой многопоточности.
Кто поддержал релиз?
Компании вроде Microsoft, IBM, Red Hat, Oracle, Fujitsu, Payara и другие уже анонсировали совместимые реализации или активно работают над ними. Среди поддержанных профилей уже доступны:
Web Profile: Eclipse GlassFish
Core Profile: Open Liberty, WildFly, Fujitsu, Payara
📎 Подробнее о релизе Jakarta EE 11:
https://newsroom.eclipse.org/news/announcements/eclipse-foundation%E2%80%99s-jakarta-ee-working-group-announces-jakarta-ee-11-release
https://habr.com/ru/news/922700/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤2
Как не облажаться с типами данных в PostgreSQL
Опубликовал перевод главы из "PostgreSQL Mistakes and How to Avoid Them"
Недавно вышла книга PostgreSQL Mistakes and How to Avoid Them — своего рода «коллекция грабель» для разработчиков и администраторов. Автор — Джимми Анджелакас, архитектор систем и активный участник PostgreSQL-сообщества. Он собрал десятки реальных ошибок из продакшн-проектов: от неочевидных тонкостей конфигурации до подводных камней SQL и выбора типов данных.
Я перевёл на русский одну из ключевых глав этой книги — про неправильное использование типов данных. В ней рассматриваются типы, которые вроде бы кажутся хорошим выбором, но на деле только создают проблемы.
Например:
- timestamp without time zone — источник боли при расчётах с часовыми поясами (и переходом на летнее/зимнее время).
- money — тип, который не хранит валюту и округляет в минус (буквально).
- char(n) и varchar(n) — не экономят место, а индексам только мешают.
- serial — привет из прошлого века, лучше использовать identity-колонки.
В этой главе подробно разбираются проблемы, которые в реальных системах могут оборачиваться часами отладки и багами, которые «не воспроизводятся». Особенно интересно, как наивный timestamp приводит к неправильным интервалам из-за перехода на зимнее время — и почему timestamptz лучше почти во всех случаях.
Если вы проектируете схемы БД, пишете SQL-запросы или просто работаете с PostgreSQL в проде — эта глава точно будет полезной. Причём независимо от стека: будь вы Java-разработчиком, Python-разработчиком или пишете на Go — с базой данных всё равно общаться придётся.
📖 Читаем перевод на Хабре:
https://habr.com/ru/articles/923572/
Опубликовал перевод главы из "PostgreSQL Mistakes and How to Avoid Them"
Недавно вышла книга PostgreSQL Mistakes and How to Avoid Them — своего рода «коллекция грабель» для разработчиков и администраторов. Автор — Джимми Анджелакас, архитектор систем и активный участник PostgreSQL-сообщества. Он собрал десятки реальных ошибок из продакшн-проектов: от неочевидных тонкостей конфигурации до подводных камней SQL и выбора типов данных.
Я перевёл на русский одну из ключевых глав этой книги — про неправильное использование типов данных. В ней рассматриваются типы, которые вроде бы кажутся хорошим выбором, но на деле только создают проблемы.
Например:
- timestamp without time zone — источник боли при расчётах с часовыми поясами (и переходом на летнее/зимнее время).
- money — тип, который не хранит валюту и округляет в минус (буквально).
- char(n) и varchar(n) — не экономят место, а индексам только мешают.
- serial — привет из прошлого века, лучше использовать identity-колонки.
В этой главе подробно разбираются проблемы, которые в реальных системах могут оборачиваться часами отладки и багами, которые «не воспроизводятся». Особенно интересно, как наивный timestamp приводит к неправильным интервалам из-за перехода на зимнее время — и почему timestamptz лучше почти во всех случаях.
Если вы проектируете схемы БД, пишете SQL-запросы или просто работаете с PostgreSQL в проде — эта глава точно будет полезной. Причём независимо от стека: будь вы Java-разработчиком, Python-разработчиком или пишете на Go — с базой данных всё равно общаться придётся.
📖 Читаем перевод на Хабре:
https://habr.com/ru/articles/923572/
👍6🔥3❤1
Forwarded from Spring АйО
🤖 Встречайте Koog — новый AI-фреймворк от JetBrains
Рустам Курамшин, эксперт сообщества Spring АйО, подготовил пост про новый AI-фреймворк от JetBrains – Koog.
AI-агенты — это не фантастика. Это новый уровень взаимодействия с LLM, где модели не просто болтают в чате, а действуют: они умеют вызывать внешние инструменты, планировать, запоминать контекст, адаптироваться и выполнять сложные задачи почти без участия человека.
Эти агенты становятся ключевым компонентом современных систем: от помощников в IDE и CI/CD пайплайнах до интеллектуальных обработчиков в бизнес-приложениях.
JetBrains представили Koog — open source фреймворк для разработки AI-агентов на Kotlin.
Что такое Koog?
Koog — это Agentic AI фреймворк, написанный полностью на идиоматичном Kotlin. Он позволяет создавать AI-агентов, которые:
- запускаются локально без внешних зависимостей
- умеют вызывать инструменты и API
- обрабатывают сложные пайплайны через графовые сценарии
- поддерживают мультимодели (OpenAI, Anthropic, Google, Ollama и др.)
- работают на JVM и JS (за счет Kotlin Multiplatform)
Koog можно использовать как для простых агентов “вопрос-ответ”, так и для построения сложных, многосоставных систем с устойчивой памятью, сжатой историей, потоковой обработкой ответов и гибкой трассировкой.
До недавнего времени экосистема Java не имела по-настоящему удобных, нативных инструментов для работы с AI-агентами, возможно кроме Spring AI в составе Spring Framework.
Пример использования минимального AI-агента в Koog:
Koog — это, возможно, первый шаг к тому, чтобы писать LLM-based приложения просто на Kotlin без лишних зависимостей.
Как потестить Koog:
Репозиторий: https://github.com/JetBrains/koog
Документация: https://docs.koog.ai
Быстрый старт: https://docs.koog.ai/single-run-agents/
💬 Как вам Koog? Делитесь мнениями в комментариях! 👇
Рустам Курамшин, эксперт сообщества Spring АйО, подготовил пост про новый AI-фреймворк от JetBrains – Koog.
AI-агенты — это не фантастика. Это новый уровень взаимодействия с LLM, где модели не просто болтают в чате, а действуют: они умеют вызывать внешние инструменты, планировать, запоминать контекст, адаптироваться и выполнять сложные задачи почти без участия человека.
Эти агенты становятся ключевым компонентом современных систем: от помощников в IDE и CI/CD пайплайнах до интеллектуальных обработчиков в бизнес-приложениях.
JetBrains представили Koog — open source фреймворк для разработки AI-агентов на Kotlin.
Что такое Koog?
Koog — это Agentic AI фреймворк, написанный полностью на идиоматичном Kotlin. Он позволяет создавать AI-агентов, которые:
- запускаются локально без внешних зависимостей
- умеют вызывать инструменты и API
- обрабатывают сложные пайплайны через графовые сценарии
- поддерживают мультимодели (OpenAI, Anthropic, Google, Ollama и др.)
- работают на JVM и JS (за счет Kotlin Multiplatform)
Koog можно использовать как для простых агентов “вопрос-ответ”, так и для построения сложных, многосоставных систем с устойчивой памятью, сжатой историей, потоковой обработкой ответов и гибкой трассировкой.
До недавнего времени экосистема Java не имела по-настоящему удобных, нативных инструментов для работы с AI-агентами, возможно кроме Spring AI в составе Spring Framework.
Пример использования минимального AI-агента в Koog:
fun main() = runBlocking {
val apiKey = System.getenv("OPENAI_API_KEY")
val agent = AIAgent(
executor = simpleOpenAIExecutor(apiKey),
systemPrompt = "Ты - очень полезный ассистент-помошник",
llmModel = OpenAIModels.Chat.GPT4o
)
val result = agent.run("Привет! Чем можешь помочь?")
println(result)
}
Koog — это, возможно, первый шаг к тому, чтобы писать LLM-based приложения просто на Kotlin без лишних зависимостей.
Как потестить Koog:
Репозиторий: https://github.com/JetBrains/koog
Документация: https://docs.koog.ai
Быстрый старт: https://docs.koog.ai/single-run-agents/
💬 Как вам Koog? Делитесь мнениями в комментариях! 👇
👍3
Смешно. Наткнулся на Telegram-бота для анализа тг-каналов. Считывает посты и выносит вердикт 😅
Вот что написал в режиме Roast Analysis 😁
📊 Channel Analysis Results by @ScratchAuthorEgoBot
🎯 Channel: @java_hub_official
🔥 Roast Analysis:
Слушай, чувак, ну вот ты опять, да? Канал создан, и сразу поток "Ява – это жизнь, Ява – это боль, Ява – это…". Мы поняли, ты джавист до мозга костей. "Java Boys"? Серьезно? Вы там что, в кожаных куртках и на байках по выходным катаетесь, распевая гимн Spring Boot? Или это просто самое креативное название, что пришло в голову куче чуваков, которые ночами гуглят, почему их null не такой уж null?
Твои посты, конечно, информативные, спору нет. Но иногда кажется, что ты пишешь их не для живых людей, а для искусственного интеллекта, которого тренируешь на знание всех аспектов JVM. "От Playground до Java 24", "JIT-компиляция", "Project Leyden"... Мне уже дурно от одной мысли. Можно хоть один пост про то, как ты бургер ел, а не про то, как байткод оптимизировался?
А эти твои хакатоны – "готов мало спать на протяжении нескольких дней"! Дружище, твоя печень уже, наверное, звонит в профсоюз и просит отпуск. Ты вообще знаешь, что такое "выходные"? Это когда ты не пытаешься за 48 часов запихнуть весь Интернет в Spring Boot-приложение. И "побеждали Сбер, ВТБ, МТС" – ну да, мы уже поняли, ты – хакатон-Терминатор. Мы же все просто лузеры, которые не знают, как правильно настроить temporal.io, чтобы он не рухнул от одного чиха.
И эта твоя любовь к Хабру! Каждый раз, как будто новую библию выпускаешь. "Опубликовал большую статью", "Перевел главу из книги"... Мы уже ждем твой подкаст с названием "Как я провел свои выходные, написав очередную статью на 10 тысяч символов о том, почему null – это плохо". Да, мы знаем, null – это миллиарднодолларовая ошибка. А ты что, прямо вот так и веришь, что Google не способен решить проблему с null? Или ты просто хотел покрасоваться, что "мы, Java-разработчики, не удивлены"? Ну да, вы же самые умные, вы-то точно не облажаетесь.
Короче, пора тебе уже признать, что ты не просто разработчик, ты – Java-гуру, который дышит байткодом и спит с IntelliJ IDEA в обнимку. Но иногда хочется, чтобы ты просто выдохнул, выключил свой MCP-сервер и рассказал что-нибудь, что не заставит мой мозг компилироваться в машинный код. А то от твоих постов можно получить переполнение стека в собственной голове.
Вот что написал в режиме Roast Analysis 😁
📊 Channel Analysis Results by @ScratchAuthorEgoBot
🎯 Channel: @java_hub_official
🔥 Roast Analysis:
Слушай, чувак, ну вот ты опять, да? Канал создан, и сразу поток "Ява – это жизнь, Ява – это боль, Ява – это…". Мы поняли, ты джавист до мозга костей. "Java Boys"? Серьезно? Вы там что, в кожаных куртках и на байках по выходным катаетесь, распевая гимн Spring Boot? Или это просто самое креативное название, что пришло в голову куче чуваков, которые ночами гуглят, почему их null не такой уж null?
Твои посты, конечно, информативные, спору нет. Но иногда кажется, что ты пишешь их не для живых людей, а для искусственного интеллекта, которого тренируешь на знание всех аспектов JVM. "От Playground до Java 24", "JIT-компиляция", "Project Leyden"... Мне уже дурно от одной мысли. Можно хоть один пост про то, как ты бургер ел, а не про то, как байткод оптимизировался?
А эти твои хакатоны – "готов мало спать на протяжении нескольких дней"! Дружище, твоя печень уже, наверное, звонит в профсоюз и просит отпуск. Ты вообще знаешь, что такое "выходные"? Это когда ты не пытаешься за 48 часов запихнуть весь Интернет в Spring Boot-приложение. И "побеждали Сбер, ВТБ, МТС" – ну да, мы уже поняли, ты – хакатон-Терминатор. Мы же все просто лузеры, которые не знают, как правильно настроить temporal.io, чтобы он не рухнул от одного чиха.
И эта твоя любовь к Хабру! Каждый раз, как будто новую библию выпускаешь. "Опубликовал большую статью", "Перевел главу из книги"... Мы уже ждем твой подкаст с названием "Как я провел свои выходные, написав очередную статью на 10 тысяч символов о том, почему null – это плохо". Да, мы знаем, null – это миллиарднодолларовая ошибка. А ты что, прямо вот так и веришь, что Google не способен решить проблему с null? Или ты просто хотел покрасоваться, что "мы, Java-разработчики, не удивлены"? Ну да, вы же самые умные, вы-то точно не облажаетесь.
Короче, пора тебе уже признать, что ты не просто разработчик, ты – Java-гуру, который дышит байткодом и спит с IntelliJ IDEA в обнимку. Но иногда хочется, чтобы ты просто выдохнул, выключил свой MCP-сервер и рассказал что-нибудь, что не заставит мой мозг компилироваться в машинный код. А то от твоих постов можно получить переполнение стека в собственной голове.
😁14💯3👍2👏1
Forwarded from Spring АйО
📊 Java в 2025 году: взгляд на результаты опроса Stack Overflow
Эксперт Spring АйО Рустам Курамшин разобрал свежий отчёт Stack Overflow за 2025 год о результатах ежегодного опроса разработчиков за 2025 год, и это отличный повод взглянуть на экосистему Java через призму статистики и интересов сообщества.
Что происходит с Java и где мы сегодня?
🥈 Java — в топе, но не в лидерах
Java остаётся устойчиво популярной, но теряет позиции в рейтинге языков, которыми реально пользуются. В 2025 году она набрала 29.4% среди всех респондентов — это седьмое место. Для сравнения:
🛑 JavaScript — 66%
🛑 Python — 57.9%
🛑 TypeScript — 43.6%
Что интересно: C# проигрывает Java (27.8%), хотя отрыв минимальный. Kotlin находится далеко внизу с 10.8%.
👩💻 А как насчёт любви к Java?
В рейтинге «admired & desired» Java получила:
🛑 15.8% хотят продолжать работать с ней
🛑 41.8% тех, кто с ней работал, хотят продолжать
Это не худшие цифры, но явно не звёздные. Rust, например, вызывает желание продолжать у 72.4% разработчиков.
👩💻 Что по инструментам разработки?
Java-разработчики традиционно предпочитают инструменты JetBrains, и это подтверждается:
🛑 IntelliJ IDEA — на 4 месте по популярности (27.1%) и на втором по желанию использовать (17.5%)
🛑 VS Code по-прежнему вне конкуренции (используется 75.9%, желают 48.9%), но для серьёзной Java-разработки — не первый выбор
🛑 Gradle и Maven уверенно держатся в середине таблицы среди сборщиков и DevOps-инструментов, уступая npm, Docker и Terraform.
👩💻 Java на бэкенде
Среди web-фреймворков Spring Boot — единственный представитель Java в топе, с 14.7% популярности. Это чуть меньше, чем у FastAPI (14.8%), и сильно меньше Node.js (48.7%) и React (44.7%).
Однако в категории "admired" Spring Boot выглядит лучше — 53.7% разработчиков, использовавших его, хотят продолжать. Это говорит о стабильности интереса к Spring Framework.
👩💻 Базы данных: знакомые лица
Всё, что любят Java-разработчики, — на месте:
🛑 PostgreSQL — №1 по популярности и симпатиям
🛑 MySQL, MongoDB, Redis — всё ещё в активной эксплуатации
🛑 Даже H2 на удивление стабильно набирает 5%
⚙️ Выводы
Java остаётся мощной и зрелой экосистемой, но интерес разработчиков всё больше смещается в сторону Python и TypeScript — особенно в новых проектах и AI-направлениях.
Если мы хотим, чтобы Java оставалась актуальной, нужно:
🛑 Делать ставку на современный стек
🛑 Привлекать новых разработчиков через понятные и интересные точки входа вроде Spring Framework
📎 Полный отчёт: https://survey.stackoverflow.co/2025/technology/
Эксперт Spring АйО Рустам Курамшин разобрал свежий отчёт Stack Overflow за 2025 год о результатах ежегодного опроса разработчиков за 2025 год, и это отличный повод взглянуть на экосистему Java через призму статистики и интересов сообщества.
Что происходит с Java и где мы сегодня?
🥈 Java — в топе, но не в лидерах
Java остаётся устойчиво популярной, но теряет позиции в рейтинге языков, которыми реально пользуются. В 2025 году она набрала 29.4% среди всех респондентов — это седьмое место. Для сравнения:
Что интересно: C# проигрывает Java (27.8%), хотя отрыв минимальный. Kotlin находится далеко внизу с 10.8%.
В рейтинге «admired & desired» Java получила:
Это не худшие цифры, но явно не звёздные. Rust, например, вызывает желание продолжать у 72.4% разработчиков.
Java-разработчики традиционно предпочитают инструменты JetBrains, и это подтверждается:
Среди web-фреймворков Spring Boot — единственный представитель Java в топе, с 14.7% популярности. Это чуть меньше, чем у FastAPI (14.8%), и сильно меньше Node.js (48.7%) и React (44.7%).
Однако в категории "admired" Spring Boot выглядит лучше — 53.7% разработчиков, использовавших его, хотят продолжать. Это говорит о стабильности интереса к Spring Framework.
Всё, что любят Java-разработчики, — на месте:
⚙️ Выводы
Java остаётся мощной и зрелой экосистемой, но интерес разработчиков всё больше смещается в сторону Python и TypeScript — особенно в новых проектах и AI-направлениях.
Если мы хотим, чтобы Java оставалась актуальной, нужно:
📎 Полный отчёт: https://survey.stackoverflow.co/2025/technology/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤔1