☠️ JetBrains закрывает Fleet
— легковесную IDE нового поколения, развиваемую параллельно с IntelliJ IDEA. Несмотря на технический успех и влияние на другие продукты компании, Fleet не смог занять устойчивую нишу.
Команда признала, что поддержка двух похожих линеек IDE лишь запутывала пользователей.
Вместо этого JetBrains переориентируется на новый вектор — агентную разработку, где код пишут AI помощники.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/news/975182/
— легковесную IDE нового поколения, развиваемую параллельно с IntelliJ IDEA. Несмотря на технический успех и влияние на другие продукты компании, Fleet не смог занять устойчивую нишу.
Команда признала, что поддержка двух похожих линеек IDE лишь запутывала пользователей.
Вместо этого JetBrains переориентируется на новый вектор — агентную разработку, где код пишут AI помощники.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/news/975182/
😁31🤯9🔥6🤔6❤3⚡2👍2
🏎 Hibernate Validator 9.1: самый мощный апгрейд за последние годы
Что, если ваш валидатор стал бы в 3 раза быстрее и потреблял бы вдвое меньше памяти — без единой правки бизнес-логики? Именно это случилось с Hibernate Validator 9.1: ушли тяжёлые коллекции, пришёл умный стек. Каскадная валидация теперь летает, даже при циклах в графе объектов.
Плюс бонус: меньше мусора в памяти, меньше аллокаций, быстрее интерполяция сообщений. В бенчмарках — просто космос. Все это – в новом переводе от команды Spring АйО.
Комментарий Поливаха Михаила:
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/975422/
Что, если ваш валидатор стал бы в 3 раза быстрее и потреблял бы вдвое меньше памяти — без единой правки бизнес-логики? Именно это случилось с Hibernate Validator 9.1: ушли тяжёлые коллекции, пришёл умный стек. Каскадная валидация теперь летает, даже при циклах в графе объектов.
Плюс бонус: меньше мусора в памяти, меньше аллокаций, быстрее интерполяция сообщений. В бенчмарках — просто космос. Все это – в новом переводе от команды Spring АйО.
Комментарий Поливаха Михаила:
Несмотря на то, что с валидацией мы напрямую работаем не часто, имейте в виду, что Spring Boot и ваши @RestController-ы под капотом всё равно используют hibernate-validator. Поэтому почитайте, не поленитесь 😉.📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/975422/
❤28👍19🔥12
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥10👍9⚡4
Forwarded from OpenIDE
This media is not supported in your browser
VIEW IN TELEGRAM
Мы готовы анонсировать версию OpenIDE Pro, в состав которой войдут:
• Расширенная поддержка Go, Spring, и фронтенд-технологий
• Мощные инструменты профилирования, диагностики и анализа кода
• Официальная поддержка и SLA для компаний
Сразу ответим на повисший в воздухе вопрос – бесплатная OpenIDE остаётся, развивается и будет только расти: Marketplace, LSP, Docker-плагин, новые языки в виде плагинов.
OpenIDE Pro – это та версию, которую можно использовать в компаниях официально и без риска!
Подробнее про OpenIDE Pro мы рассказали в новой статье на Хабре
Если хотите попасть в ранний доступ — пишите нам на: pro@openide.ru
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👎18🔥10😁10👍6🤔5
Когда количество доступных LLM инструментов (tool-ов) разрастается, традиционные подходы к tool calling становятся непрактичными — утилизация токенов улетает ещё до начала общения. К тому же, модели становится сложнее выбрать нужный набор tool-ов для решения проблемы.
В новом переводе от команды Spring АйО читаем о паттерне Tool Search Tool, предложенном Anthropic и реализованном в Spring AI с помощью ToolSearchToolCallAdvisor. Он позволяет LLM динамически находить нужные инструменты по мере необходимости, экономя до 64% токенов и повышая точность.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/976178/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍6❤5
Forwarded from Amplicode
This media is not supported in your browser
VIEW IN TELEGRAM
Вчера прошел очередной прямой эфир от команды Amplicode при поддержке Spring АйО.
Миша и Илья вещали больше 2-х часов! Получился отличный материал From Zero To Hero про Spring Data JDBC.
Очень рекомендуем к просмотру!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18⚡7👍6👎1🔥1
Команда Spring АйО подготовила перевод про Fray — инструмент для обнаружения и воспроизведения ошибок многопоточности в Java-программах.
Основанный на научных исследованиях и написанный на Kotlin, Fray использует технику теневой блокировки для выявления взаимоблокировок и других проблем синхронизации. Он уже доказал свою эффективность на таких проектах, как Kafka, Flink и Lucene.
Комментарий от Михаила Поливаха:
В экосистеме Java уже довольно долгое время существуют решения, которые позволяют тестировать concurrent сценарии, например JCStress от разработчиков OpenJDK или Lincheck от JetBrains.
Важно то, что, как заявляется, Fray способен не просто выявлять баги в concurrency, но и воспроизводить их, а также помочь в разъяснении причин багов, а это very huge deal.
Баги в многопоточности они тем и неприятны, что они плавающие, трудно воспроизводимые и т.д. Если Fray позволит не просто обнаружить баг, но и отдебажить его, то он явно найдет спрос в Enterprise.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/976924/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍7⚡2❤2🤩2
This media is not supported in your browser
VIEW IN TELEGRAM
Теперь можно вызывать действия прямо из окна автодополнения. А если дважды нажать точку (..), появится список всех доступных действий.
Если зайдёт — добавят и в другие IDE. Выглядит удобно.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥48👍11❤9⚡2😁1🤩1
💰 Изменения цен на GitHub Actions
GitHub только что анонсировал изменения в ценообразовании Actions. Ранее GitHub Actions имел бесплатный control plane.
Это означало, что если вы использовали GitHub Actions, но запускали задачи вне GitHub-hosted runners — будь то ваши собственные машины или в вашем собственном AWS аккаунте — вы ничего не платили GitHub за эти минуты; вы платили только за вычислительные ресурсы. Теперь подход изменился. Команда Spring АйО подготовила перевод анонса команды Github.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/977674/
GitHub только что анонсировал изменения в ценообразовании Actions. Ранее GitHub Actions имел бесплатный control plane.
Это означало, что если вы использовали GitHub Actions, но запускали задачи вне GitHub-hosted runners — будь то ваши собственные машины или в вашем собственном AWS аккаунте — вы ничего не платили GitHub за эти минуты; вы платили только за вычислительные ресурсы. Теперь подход изменился. Команда Spring АйО подготовила перевод анонса команды Github.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/977674/
🤯7⚡6👎3🔥2👍1
🌱 Некоторые детали реализации Slice Pagination в Spring Data JPA
Spring Data JPA предлагает два подхода к пагинации: Page и Slice. В отличие от
На этот вопрос ответил наш эксперт Михаил Поливаха:
Мы уже как-то писали о том, что в Spring Data есть 2 способа вернуть данные в постраничном виде -
Однако, несмотря на это,
То есть, как минимум,
Чтобы реализовать это, Spring Data JPA, например, делает очень простую вещь:
То есть, из БД запрашивается не
Вот так вот оно работает 😉
Spring Data JPA предлагает два подхода к пагинации: Page и Slice. В отличие от
Page, Slice не знает общего количества записей, но всё равно умеет определять, есть ли следующая страница. Как это возможно без COUNT-запроса? На этот вопрос ответил наш эксперт Михаил Поливаха:
Мы уже как-то писали о том, что в Spring Data есть 2 способа вернуть данные в постраничном виде -
Page и Slice. Разница довольно простая - Slice не знает общий размер датасета, который удовлетворяет запросу, а Page знает. Достигается это знание отправкой ещё одного COUNT-запроса в БД.Однако, несмотря на это,
Slice способен ответить на вопрос, есть ли следующая страничка данных:
public interface Slice<T> extends Streamable<T> {
/**
* Returns if there is a next {@link Slice}.
*
* @return if there is a next {@link Slice}.
*/
boolean hasNext();
}
То есть, как минимум,
Slice должен понимать, следующая страничка с данными присутствует, при этом не делая "COUNT".Чтобы реализовать это, Spring Data JPA, например, делает очень простую вещь:
int pageSize = 0;
if (pageable.isPaged()) {
pageSize = pageable.getPageSize();
createQuery.setMaxResults(pageSize + 1);
}
List<Object> resultList = createQuery.getResultList();
boolean hasNext = pageable.isPaged() && resultList.size() > pageSize
То есть, из БД запрашивается не
pageSize, а pageSize + 1, то есть чуть-чуть больше. Ну и дальше простое сравнение - если нашли pageSize, то странички дальше точно нет, а если нашли pageSize + 1, то страничка дальше точно есть (хотя может и меньшего размера).Вот так вот оно работает 😉
🔥63👌12❤7👎2
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20😁8❤5👎1
🌱 Spring Boot наконец получил нативную поддержку gRPC
Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.
В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/978418/
Забудьте о сторонних стартерах и костылях — Spring gRPC 1.0 GA уже здесь. Теперь можно строить высокопроизводительные RPC-сервисы с Protocol Buffers прямо из коробки, без плясок с бубном.
В новом переводе от команды Spring АйО рассмотрим пошаговую миграцию со старых решений, генерацию кода из .proto, и сравнение с тем, как это работает в Quarkus.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/978418/
🔥64❤18👍16⚡2🤯1
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
– Обнаружение взаимоблокировок на JVM с помощью Fray
– Новая usability фича в IntelliJ IDEA!
– Изменения цен на GitHub Actions
– Некоторые детали реализации Slice Pagination в Spring Data JPA
– AI-агенты портят разработчиков, JVM ничего не гарантирует, верните фишинг | Spring АйО Подкаст №45
– Spring Boot наконец получил нативную поддержку gRPC
– Amplicode: Spring Data JDBC — идеальная Data для вашего приложения
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤7🔥5
Подготовили материал о том, почему «быстрый запрос в MongoDB» — это индексы, форма запроса, проекции,
explain(), профайлер и наблюдаемость в Java/Spring Boot. Разбираем, как отличать
IXSCAN от COLLSCAN, где чаще всего прячутся антипаттерны (skip-пагинация, тяжёлые $regex/$nin, findAll), и как выстроить измеримый цикл оптимизаций от Atlas/Compass до Micrometer.📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/979440/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍8⚡4❤1
Forwarded from Amplicode
Запускаем цикл видео про разработку телеграм-бота на Spring!
В первом выпуске — база, на котором строится весь сервис.
В следующих частях покажем, как интегрировали в бота Spring AI и как разворачивали всё это дело.
Ну и конечно — код открыт и лежит на GitHub. Забирайте, изучайте, экспериментируйте!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🔥15❤6⚡4😁2
Parallel streams — это не «бесплатный» прирост производительности, а дорогая оптимизация.
🟣 Любое распараллеливание добавляет накладные расходы: разбиение данных, управление задачами через fork-join, синхронизацию и объединение результатов. Если операция над элементом дешёвая или данных недостаточно много, этот оверхед полностью съедает потенциальный выигрыш — и последовательный стрим оказывается быстрее.
🟣 Вторая причина — ограничения самой задачи. Многие вычисления по природе последовательны или содержат существенную последовательную часть, которую нельзя распараллелить. Закон Амдала жёстко ограничивает максимальный speedup: даже небольшой последовательный участок ставит потолок ускорению, независимо от количества ядер. В streams эта доля часто больше, чем кажется.
🟣 Наконец, упор часто происходит не в CPU, а в память. Параллельные стримы хорошо работают на больших массивах, но быстро деградируют на графах, списках и указательных структурах. В таких случаях потоки не ускоряют вычисления, а просто параллельно ждут данные из памяти.
Подробнее в новом переводе статьи от Брайана Гоетца – одного из ключевых архитекторов экосистемы Java и главного авторитета по конкурентному и параллельному программированию в JVM.
@spring_aio
Подробнее в новом переводе статьи от Брайана Гоетца – одного из ключевых архитекторов экосистемы Java и главного авторитета по конкурентному и параллельному программированию в JVM.
@spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25👍23🔥11⚡2
🚀 Тред-дампы и Project Loom (виртуальные потоки)
С появлением виртуальных потоков в Java благодаря Project Loom, параллельное программирование стало проще, а производительность — выше.
Однако за этой простотой кроются новые вызовы для инструментов отладки и анализа. Как читать тред-дампы, если их теперь тысячи — или миллионы? Какие средства реально помогают найти взаимные блокировки и аномалии в асинхронном коде? Рассмотрим в новом переводе от команды Spring АйО.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980566/
С появлением виртуальных потоков в Java благодаря Project Loom, параллельное программирование стало проще, а производительность — выше.
Однако за этой простотой кроются новые вызовы для инструментов отладки и анализа. Как читать тред-дампы, если их теперь тысячи — или миллионы? Какие средства реально помогают найти взаимные блокировки и аномалии в асинхронном коде? Рассмотрим в новом переводе от команды Spring АйО.
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980566/
🔥20👍11❤7
🥷 Hidden классы в Java. Что скрывают Lambda выражения
С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего
Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность
📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980928/
С переходом Java на более безопасные и стандартизированные подходы к динамической генерации классов, скрытые (hidden) классы стали ключевым механизмом замены устаревшего
Unsafe::defineAnonymousClass. Они решают проблемы доступности, управления жизненным циклом и контроля доступа, особенно актуальные для разработчиков фреймворков и языков на JVM. Хотя скрытые классы пока не полностью заменяют функциональность
Unsafe, они лежат в основе ряда важных механизмов, такие как, например, реализация лямбд в JDK.📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/980928/
🔥17👍9❤4
🛠 Михаил Поливаха. Garbage Collection. Где мы сейчас
Наш эксперт Михаил Поливаха выступил с докладом про сборку мусора:
😉 СМОТРЕТЬ НА YOUTUBE
Наш эксперт Михаил Поливаха выступил с докладом про сборку мусора:
Сборка мусора является довольно сложным механизмом. В большинстве managed языков runtime скрывает от нас детали дислокации памяти. С другой стороны, выбор определённого сборщика мусора может существенно улучшить производительность.
Поговорим о том, какие алгоритмы сборки мусора бывают, какие бывают концептуальные трейд оффы при их использовании, и какой алгоритм вам может подойти больше всего.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥33👍9❤6⚡3
Media is too big
VIEW IN TELEGRAM
💬 Аудио версию подкаста можно найти в комментариях
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥11❤7🤩1