Для JetBrains IDE вообще есть нормальный AI без проблем в РФ?
Периодически в @spring_aio_chat и на Хабре прилетают вопросы про то, какие сейчас есть варианты использования ИИ внутри IDE.
Один из вариантов – Kodacode.
Работает:
— в OpenIDE и JetBrains IDE
— в VS Code
— и даже в CLI
Что кажется наиболее полезным:
— агентный режим: без него от ИИ-помощника смысла не так много
— доступ к разным моделям: GLM, Gemini, DeepSeek, и другие
— работает без танцев с VPN и оплатами: у многих это сейчас главный стоп-фактор для AI-инструментов
— есть бесплатная модель: хватает для повседневных задач
📚 Подробнее про Koda для JetBrains IDE читайте на Хабр: https://habr.com/ru/companies/koda/articles/986976/
Периодически в @spring_aio_chat и на Хабре прилетают вопросы про то, какие сейчас есть варианты использования ИИ внутри IDE.
Один из вариантов – Kodacode.
Работает:
— в OpenIDE и JetBrains IDE
— в VS Code
— и даже в CLI
Что кажется наиболее полезным:
— агентный режим: без него от ИИ-помощника смысла не так много
— доступ к разным моделям: GLM, Gemini, DeepSeek, и другие
— работает без танцев с VPN и оплатами: у многих это сейчас главный стоп-фактор для AI-инструментов
— есть бесплатная модель: хватает для повседневных задач
Please open Telegram to view this post
VIEW IN TELEGRAM
❤19👍16🔥7⚡1
Наконец-то работа с PEM в Java становится похожа на API, а не на набор ручного парсинга, Base64 и странных телодвижений.
Справка:
Раньше с PEM работали так:
String pem = "-----BEGIN PUBLIC KEY-----\n"
+ Base64.getMimeEncoder(64, "\n".getBytes())
.encodeToString(publicKey.getEncoded())
+ "\n-----END PUBLIC KEY-----";
А в обратную сторону, но уже с ручной нормализацией PEM, Base64-декодированием и
KeyFactory:
String normalized = pem
.replace("-----BEGIN PUBLIC KEY-----", "")
.replace("-----END PUBLIC KEY-----", "")
.replaceAll("\\s", "");
byte[] der = Base64.getDecoder().decode(normalized);
PublicKey key = KeyFactory.getInstance("EC")
.generatePublic(new X509EncodedKeySpec(der));
По факту PEM в Java долгое время был не отдельным API, а набором низкоуровневых шагов, которые разработчик собирал руками.
А теперь это выглядит так:
var encoder = PEMEncoder.of();
String pem = encoder.encodeToString(keyPair);
var decoder = PEMDecoder.of();
KeyPair decoded = decoder.decode(pem, KeyPair.class);
То есть ключевую пару можно закодировать в PEM и декодировать обратно буквально в несколько строк.
Во втором preview:
—
PEMRecord переименовали в PEM— добавили
decode()— расширили поддержку
KeyPair и PKCS8EncodedKeySpec— упростили шифрование через
EncryptedPrivateKeyInfoА так, как все это дело еще в preview, не забываем использовать
--enable-preview.Please open Telegram to view this post
VIEW IN TELEGRAM
👍53🔥16❤8😁1
Forwarded from JPoint и Joker — канал конференций по Java
#видеозаписи
Открываем новую видеозапись доклада:
Михаил Поливаха — Spring AOT: кодогенерация на стероидах
😉 YouTube | 📺 VK Видео
Открываем новую видеозапись доклада:
Михаил Поливаха — Spring AOT: кодогенерация на стероидах
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Михаил Поливаха — Spring AOT: кодогенерация на стероидах
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Магия Spring Boot дается недешево: прокси в рантайме, рефлексия и динамическая генерация классов замедляют запуск и раздувают потребление памяти.…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
Магия Spring Boot дается недешево: прокси в рантайме, рефлексия и динамическая генерация классов замедляют запуск и раздувают потребление памяти.…
👍19🔥9❤6
🗑️ Изменения в G1/Parallel/Serial GC в JDK 26
JDK 26 выходит уже совсем скоро. Тем временем в GC закрыли около 380 задач (почти в 2 раза больше, чем в прошлом релизе), но в этот раз акцент сместился с больших фич в пользу практичных доработок.
Главное для всех сборщиков: нормальный учет CPU GC. Теперь считают не только stop-the-world паузы, но и конкурентную работу и дедупликацию строк. Можно посмотреть через лог
JEP 516: Aot Cache стал независим от выбранного GC и опций VM. Включение через опцию
G1 получил самые заметные улучшения: JEP 522 уменьшает синхронизацию между GC и приложением (цель - увеличить throughput). Еще: целевое использование CPU G1 по умолчанию снижено с 8% до 4%, добавили важнейший флаг
Комментарий от Михаила Поливаха:
📎 Подробнее в статье: https://habr.com/ru/companies/spring_aio/articles/1010904/
JDK 26 выходит уже совсем скоро. Тем временем в GC закрыли около 380 задач (почти в 2 раза больше, чем в прошлом релизе), но в этот раз акцент сместился с больших фич в пользу практичных доработок.
Главное для всех сборщиков: нормальный учет CPU GC. Теперь считают не только stop-the-world паузы, но и конкурентную работу и дедупликацию строк. Можно посмотреть через лог
cpu=info при завершении VM, обновили Hsperf-счетчики, есть доступ из кода. Плюс новый JFR-ивент с деталями по string dedup.JEP 516: Aot Cache стал независим от выбранного GC и опций VM. Включение через опцию
-XX:+AOTStreamableObjects.G1 получил самые заметные улучшения: JEP 522 уменьшает синхронизацию между GC и приложением (цель - увеличить throughput). Еще: целевое использование CPU G1 по умолчанию снижено с 8% до 4%, добавили важнейший флаг
UseGCOverheadLimit.Комментарий от Михаила Поливаха:
Важно и то, что HotSpot GC команда в Oracle смотрит в сторону Automatic Heap Sizing. На эту темы было много шума на Redit и не зря. Поговорим об этом на подкасте.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍9❤4
Встречаем 26 версию нашего любимого языка программирования.
Что самое заметное:
HttpClient (JEP-517)Теперь
java.net.http.HttpClient умеет HTTP/3. Для client-side кода это хороший апгрейд: меньше магии, ближе к современному вебу из коробки.В Java 26 уменьшили синхронизацию между application threads и GC threads. Для тех, кто сидит на G1 по умолчанию, это может дать вполне практичный прирост без смены GC и без шаманства с флагами.
Уже шестой preview, но направление давно понятно: многопоточность в Java все сильнее движется к более внятной модели управления связанными задачами, отменой и ошибками. Для сервисного кода — очень правильный вектор.
instanceof, switch, patterns — теперь и для примитивных типов. Пока preview, но курс очевиден: язык становится ровнее и выразительнее.Уже 11-й incubator. Для high-performance сценариев, аналитики и местами AI/inference должно быть полезным.
AOT object caching теперь работает с любым GC, включая ZGC. То есть разговор про быстрый startup/warmup Java-приложений становится еще менее "на словах".
Добавляются предупреждения на deep reflection, который мутирует final-поля. Java продолжает двигаться к integrity by default. Если у вас есть старые хаки через reflection, то самое время проверить, не пора ли их вычищать.
Да, в 2026 это уже скорее символический жест. Но хороший, так платформа продолжает избавляться от давно мертвого наследия.
А ещё:
AutoCloseableUUIDv7 через UUID.ofEpochMillis(...)Thread.stop() удален окончательноИтог
Пожалуй, нас не порадовали
Please open Telegram to view this post
VIEW IN TELEGRAM
❤44👍30🔥20
Есть такой момент, что большой пул часто ухудшает отклик: БД упирается в ограниченные ресурсы (CPU, диск, сеть), начинается лишняя конкуренция и накладные расходы, latency растет.
Действительно, ребята из Oracle в своей демке обычным уменьшением пула снизили время ответа примерно со 100 мс до 2 мс.
Сама практика такая: пул держат небольшим. Потоки приложения запрашивают свободное соединение в пуле, либо ждут его появления там. Это нормальная очередь, которая защищает БД от перегруза.
Само собой, могут быть просадки по отклику из-за того, что отдельные операции надолго занимают соединения. В таком случае сначала это лечится на уровне приложения. Расширение же пула в таких случаях, как правило, дает негативный эффект.
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤22👍19🔥8
Иногда одна незаметная фича может сжигать гигантский объём ресурсов. В Netflix именно так и вышло: скоринг серендипности в Ranker оказался дорогой горячей точкой, а попытка слегка его ускорить в итоге привела к большой инженерной перестройке — от батчинга до SIMD через JDK Vector API.
Получился отличный разбор того, как SIMD AVX инструкции на практике позволили снизить потребление CPU.
🤓 Я сам не знал, поэтому
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥11❤8
Forwarded from OpenIDE – мультиязычная среда разработки
⚡️ Бесплатные ИИ-агенты для кодинга: локально и в облаке | Kilo Code, Codex, OpenCode, Qwen Code
В новом видео — как запустить локальную LLM в IDE за 15 минут и четыре бесплатных облачных альтернативы.
Локальный вариант: LM Studio + Qwen3-Coder + Kilo Code. Работает офлайн, без подписки и лимитов на запросы.
Облачные варианты: Kilo Code со своими бесплатными моделями, Qwen Code с 1 000 запросов в день, OpenCode с ротируемыми open source free моделями и OpenAI Codex — пока бесплатный для Free-аккаунтов.
😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
В новом видео — как запустить локальную LLM в IDE за 15 минут и четыре бесплатных облачных альтернативы.
Локальный вариант: LM Studio + Qwen3-Coder + Kilo Code. Работает офлайн, без подписки и лимитов на запросы.
Облачные варианты: Kilo Code со своими бесплатными моделями, Qwen Code с 1 000 запросов в день, OpenCode с ротируемыми open source free моделями и OpenAI Codex — пока бесплатный для Free-аккаунтов.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍27🔥15⚡8❤6
Media is too big
VIEW IN TELEGRAM
🗯 СЛУШАТЬ НА ЯНДЕКС.МУЗЫКЕ
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍12❤9😁1
В Spring Data динамические фильтры и сортировки часто строят по строкам:
Sort.by("firstName"), where("address.country").is(...). В целом это довольно удобно и поддерживается большинством модулей Spring Data.Однако потом возникают проблемы в поддержке софта. Опечатки и переименования свойств при рефакторинге спокойно собираются и ломаются только в рантайме. Да и IDE тоже почти не помогает, потому что строка для нее просто текст.
Альтернатива в Java давно есть: метамодели (Querydsl, JPA Metamodel Generator) и подходы от схемы БД (jOOQ). Они дают проверку на этапе компиляции, но обычно требуют annotation processing/плагины, влекут пересборки и добавляют зависимости и нюансы в IDE.
Так вот, в Spring Data 2026.0.0-M1 появился третий вариант: типобезопасные ссылки на свойства без генерации. Вместо строк можно передавать ссылки на методы/свойства:
Sort.by(Person::getFirstName, Person::getLastName), для вложенных путей - PropertyPath.of(Person::getAddress).then(Address::getCountry). Путь валидируется типами, а ссылки интроспектируются один раз и кэшируются. Для Kotlin всё ещё лучше.Please open Telegram to view this post
VIEW IN TELEGRAM
👍35🔥31❤8
Утек access token - и работает он у того, кто его нашел. Так устроены Bearer-токены: сервер верит любому, кто предъявил строку из заголовка Authorization.
Отсюда и всем знакомые истории: Codecov (2021) потерял токены из-за Supply Chain Injection в CI/CD, GitHub (2022) потерял OAuth-токены Heroku и Travis CI, в Microsoft (2023) в репозитории оказался слишком «широкий» SAS-токен, открывавший доступ к 38 ТБ данных (тыц, тыц). Во всех случаях токен оказался у посторонних и его просто использовали.
DPoP (RFC 9449) предлагает другой контракт. Токен привязывается к ключу клиента, а каждый запрос сопровождается DPoP proof-JWT, подписанным приватным ключом. Сервер сверяет подпись и отпечаток ключа (cnf.jkt) внутри access token.
Данный механизм является необязательным расширением для OAuth2 и позволяет избежать ситуации, при которой утечка Access Token-а становится фатальной для Backend-а.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥10❤7👌1
Forwarded from OpenIDE – мультиязычная среда разработки
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ В OpenIDE Pro появится поддержка ACP (Agent Client Protocol)
JetBrains и Zed выпустили его как стандарт общения IDE с агентами. Логика та же, что у LSP в 2016: вместо того чтобы каждый редактор реализовывал поддержку каждого языка отдельно, Microsoft стандартизировала это через один протокол.
Через ACP к IDE подключается агент целиком — с его инструментами и логикой. Это не просто вызов модели по API: так можно подключить Claude Code, Codex или любого другого агента. Список агентов, которые поддерживают ACP постоянно расширяется.
Базовую реализацию мы уже сделали. Если хотите попробовать раньше других — пишите нам на почту.
В рамках beta-тестирования поддержка ACP будет совместима с базовой версией OpenIDE.
😌 Незаметно присоединяйтесь ©
JetBrains и Zed выпустили его как стандарт общения IDE с агентами. Логика та же, что у LSP в 2016: вместо того чтобы каждый редактор реализовывал поддержку каждого языка отдельно, Microsoft стандартизировала это через один протокол.
ACP делает то же самое, но для ИИ-агентов.
Через ACP к IDE подключается агент целиком — с его инструментами и логикой. Это не просто вызов модели по API: так можно подключить Claude Code, Codex или любого другого агента. Список агентов, которые поддерживают ACP постоянно расширяется.
Базовую реализацию мы уже сделали. Если хотите попробовать раньше других — пишите нам на почту.
В рамках beta-тестирования поддержка ACP будет совместима с базовой версией OpenIDE.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍22🔥12❤8😁2
⚡️ Евгений Борисов — Spring-потрошитель, 12 лет спустя
Если ты сидишь в этом канале и всё ещё не смотрел легендарный доклад Евгения Борисова "Spring-потрошитель", то у нас для тебя 2 новости:
1. Ты бесконечно много упустил. Та БАЗА, которую Женя выдал в этом докладе, стала фундаментом для целого поколения разработчиков.
2. Теперь наверстать упущенное можно в 10 раз веселее!
Саня, Миша и Гошан записали 2.5-часовой РЕАКТ.
Смотрим, смеёмся и ностальгируем. Приятногоповторного просмотра старичкам и первого просмотра всем зумерам.
Надеемся, грядущий JPoint 2026 подарит не меньше легендарных материалов)
😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
Если ты сидишь в этом канале и всё ещё не смотрел легендарный доклад Евгения Борисова "Spring-потрошитель", то у нас для тебя 2 новости:
1. Ты бесконечно много упустил. Та БАЗА, которую Женя выдал в этом докладе, стала фундаментом для целого поколения разработчиков.
2. Теперь наверстать упущенное можно в 10 раз веселее!
Саня, Миша и Гошан записали 2.5-часовой РЕАКТ.
Смотрим, смеёмся и ностальгируем. Приятного
Надеемся, грядущий JPoint 2026 подарит не меньше легендарных материалов)
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥52👍22😁9🤩7❤4🤔1🤯1
В новом переводе от команды Spring АйО смотрим, как подружить современный Spring Boot и OpenTelemetry так, чтобы данные уходили по OTLP в любой совместимый бэкенд.
В экосистеме Spring большая часть телеметрии была завязана на Micrometer Project (Был ещё spring-cloud-sleuth если кто помнит). Но полноценного all-in-one решения для того, чтобы Spring Boot приложение просто начало экспортировать телеметрию по OTLP не было. До Spring Boot 4.
На данный момент для интеграции OTel в Spring Boot приложения есть 3 пути: Java Agent (минимум кода, но чувствителен к версиям и может конфликтовать с другими агентами), сторонний OTel starter (стартер от самих OpenTelemetry, но тянет alpha-зависимости) и новый spring-boot-starter-opentelemetry, доступный в Spring Boot 4.0.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥11⚡3
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
❤16🔥11👍9
Forwarded from OpenIDE – мультиязычная среда разработки
⚡️⚡️⚡️ Claude Code – есть пробитие!
Эта новость не может ждать еженедельного выпуска IT-новостей от OpenIDE.
Обсуждаем уже сейчас вчерашний слив исходников Claude Code!
😉 СМОТРЕТЬ НА YOUTUBE
🥰 СМОТРЕТЬ НА RUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
Эта новость не может ждать еженедельного выпуска IT-новостей от OpenIDE.
Обсуждаем уже сейчас вчерашний слив исходников Claude Code!
Please open Telegram to view this post
VIEW IN TELEGRAM
2😁19🔥12⚡4👍2❤1
— наш центр компетенции по Spring и enterprise-разработке на русском языке.
На базе сообщества Spring АйО мы запускаем программы обучения для Middle/Senior разработчиков — от практикующих экспертов, которые сами пишут production-ready код для высоконагруженных приложений.
Первую программу ведёт Михаил Поливаха — контрибьютор в Spring Data, спикер JPoint, Joker, Devoxx, Spring I/O.
Тема — Продвинутый Hibernate: решение вызовов уровня Enterprise.
Для тех, кто умеет писать запросы, но сталкивался с тем, что ORM в реальных системах ведёт себя не так, как на слайдах.N+1,OFFSETна больших таблицах,@BatchSize, StatelessSession, Soft Delete, Transactional Outbox,@TenantIdи работа с большими объёмами данных.
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥42❤16🤔10👍9⚡3😁2
Spring Data JDBC всегда была «белой вороной» в мире Java ORM. Она проще Hibernate, но эта простота имеет свою цену.
Помимо прочих, одна из главных претензий к фреймворку — производительность. Часто проблемы решаются правильным дизайном агрегатов в духе DDD, но что делать, если редизайн — не вариант, а проект уже тормозит?
Михаил в своей статье разбирает, как выжать максимум из Spring Data JDBC, когда стандартные подходы не справляются.
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍21❤5🔥4🤔1
Апгрейд микросервисов с JDK 8 на JDK 17 прошел dev и QA спокойно, но в проде через 2-3 часа все начало падать. Утилизация памяти выросла в 4 раза, контейнеры стали ловить OOMKill и перезапускаться, Uptime SLA просел, массовый инцидент.
Раньше JVM использовала около 50% памяти контейнера и обслуживала ~400 потоков. После релиза стало 95-100% и 1600+ соответственно.
При этом heap выглядел нормально, около Xmx, а раздувалась нативная память: ~800 MB -> 3,4-3,6 GB. Виноваты несколько эффектов, которые в контейнерах усиливаются: JVM начала создавать намного больше потоков, OS стала выделять JVM гораздо больше, а дефолтный GC в JDK 17 добавил накладные расходы.
Всё это из-за простого бага в JDK, который при миграции утащил за собой весь production.
Please open Telegram to view this post
VIEW IN TELEGRAM
1🤯31🔥10👍6⚡4❤2🤔2
Друзья, следующий подкаст пройдет не как обычно, а с очень уважаемыми IT индустрией людьми - Владимиром Плизга и Алексеем Рагозиным - настоящими гуру JVM performance.
У нас, конечно же, есть, что обсудить.
Например:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍11❤5⚡3😁1
Чаще всего merge в Hibernate – это лишний
SELECT. И это не про сохранение, а про перенос состояния detached-объекта в текущий Persistence Context.Эту проблему и пути её решения отдельно обсуждали на докладе в рамках Joker Фёдор и Илья.
Встречается это в типичном флоу:
findById -> setX -> save. Внутри
@Transactional загруженная сущность уже managed, а UPDATE и так уйдет в момент flush. А вот save в Spring Data JPA нередко уходит в merge и может добавить лишние чтение или копирование.Отдельная боль -
CascadeType.MERGE (или ALL): merge проходит по графу связей, растут накладные расходы и потенциальные SQL.Не отходя от кассы
Конечно же,
@BatchSizePlease open Telegram to view this post
VIEW IN TELEGRAM
👍21❤8⚡5🤯1