Как приручить iText8: превращаем HTML в PDF без седых волос
Представьте ситуацию: пятница, вечер, до релиза осталось два дня. Заказчик внезапно вспоминает, что «было бы неплохо генерировать договоры в PDF». Знакомо?
Я оказался в похожей ситуации год назад. Задача казалась тривиальной: взять HTML-шаблон счёта, подставить данные и получить красивый PDF. «Часа на два работы», — подумал я. Как ошибался...
Читать: https://habr.com/ru/articles/975930/?utm_campaign=975930
@a_cup_of_java | Другие наши каналы
Представьте ситуацию: пятница, вечер, до релиза осталось два дня. Заказчик внезапно вспоминает, что «было бы неплохо генерировать договоры в PDF». Знакомо?
Я оказался в похожей ситуации год назад. Задача казалась тривиальной: взять HTML-шаблон счёта, подставить данные и получить красивый PDF. «Часа на два работы», — подумал я. Как ошибался...
Читать: https://habr.com/ru/articles/975930/?utm_campaign=975930
@a_cup_of_java | Другие наши каналы
Структура кода в папке Domain по DDD
В слое Domain 90% проектов с тактическим DDD забыли о самом главном. Сегодня мы вспомним то о чем забыли или узнаем то чего не знали.
Читать: https://habr.com/ru/articles/975936/?utm_campaign=975936
@a_cup_of_java | Другие наши каналы
В слое Domain 90% проектов с тактическим DDD забыли о самом главном. Сегодня мы вспомним то о чем забыли или узнаем то чего не знали.
Читать: https://habr.com/ru/articles/975936/?utm_campaign=975936
@a_cup_of_java | Другие наши каналы
Как сократить расходы на токены и повысить точность LLM
Когда количество доступных LLM инструментов (tool-ов) разрастается, традиционные подходы к tool calling становятся непрактичными — утилизация токенов улетает ещё до начала общения. К тому же, модели становится сложнее выбрать нужный набор tool-ов для решения проблемы.
В новом переводе от команды Spring АйО читаем о паттерне Tool Search Tool, предложенном Anthropic и реализованном в Spring AI с помощью ToolSearchToolCallAdvisor. Он позволяет LLM динамически находить нужные инструменты по мере необходимости, экономя до 64% токенов и повышая точность.
Читать: https://habr.com/ru/companies/spring_aio/articles/976178/?utm_campaign=976178
@a_cup_of_java | Другие наши каналы
Когда количество доступных LLM инструментов (tool-ов) разрастается, традиционные подходы к tool calling становятся непрактичными — утилизация токенов улетает ещё до начала общения. К тому же, модели становится сложнее выбрать нужный набор tool-ов для решения проблемы.
В новом переводе от команды Spring АйО читаем о паттерне Tool Search Tool, предложенном Anthropic и реализованном в Spring AI с помощью ToolSearchToolCallAdvisor. Он позволяет LLM динамически находить нужные инструменты по мере необходимости, экономя до 64% токенов и повышая точность.
Читать: https://habr.com/ru/companies/spring_aio/articles/976178/?utm_campaign=976178
@a_cup_of_java | Другие наши каналы
❤1
Вебхук слева
Рассказываю про одну простую, но эффективную реализацию вебхуков, не требующую тотальной переделки вашей замечательной системы и/или сетевой инфраструктуры.
~300 строк кода.
Читать: https://habr.com/ru/articles/976296/?utm_campaign=976296
@a_cup_of_java | Другие наши каналы
Рассказываю про одну простую, но эффективную реализацию вебхуков, не требующую тотальной переделки вашей замечательной системы и/или сетевой инфраструктуры.
~300 строк кода.
Читать: https://habr.com/ru/articles/976296/?utm_campaign=976296
@a_cup_of_java | Другие наши каналы
15 полезных команд терминала macOS для новичков
Команды терминала macOS для новичков: поиск файлов, очистка диска, управление процессами, скрытые настройки системы. Синтаксис и примеры для каждой команды.
Читать: «15 полезных команд терминала macOS для новичков»
@a_cup_of_java | Другие наши каналы
Команды терминала macOS для новичков: поиск файлов, очистка диска, управление процессами, скрытые настройки системы. Синтаксис и примеры для каждой команды.
Читать: «15 полезных команд терминала macOS для новичков»
@a_cup_of_java | Другие наши каналы
Kafka для начинающих: работа с оффсетами на практике
Как работать с оффсетами в Kafka на практике, используя Spring Boot?
Разбираем проблемы и их решения на примере интернет-магазина.
Простым языком и с примерами кода о режимах коммитов, проблемах с транзакциями и надёжных паттернах.
Читать: https://habr.com/ru/articles/965218/?utm_campaign=965218
@a_cup_of_java | Другие наши каналы
Как работать с оффсетами в Kafka на практике, используя Spring Boot?
Разбираем проблемы и их решения на примере интернет-магазина.
Простым языком и с примерами кода о режимах коммитов, проблемах с транзакциями и надёжных паттернах.
Читать: https://habr.com/ru/articles/965218/?utm_campaign=965218
@a_cup_of_java | Другие наши каналы
Live Reload на JVM
В этой статье я хотел бы обобщить всё, что мы знаем про Hot/Live Reloading на JVM, и далее показать, как я пришел к реализации универсального Live Reloading решения для любых веб-приложений на JVM.
Вкратце, в этой статье мы:
🔹 Попробуем сформулировать, какие виды релоадинга бывают.
🔹 Подробно рассмотрим, какие реализации существуют на JVM.
🔹 И немножко обсудим детали реализации универсального решения, и что вообще к нему привело.
Читать: https://habr.com/ru/articles/974004/?utm_campaign=974004
@a_cup_of_java | Другие наши каналы
В этой статье я хотел бы обобщить всё, что мы знаем про Hot/Live Reloading на JVM, и далее показать, как я пришел к реализации универсального Live Reloading решения для любых веб-приложений на JVM.
Вкратце, в этой статье мы:
🔹 Попробуем сформулировать, какие виды релоадинга бывают.
🔹 Подробно рассмотрим, какие реализации существуют на JVM.
🔹 И немножко обсудим детали реализации универсального решения, и что вообще к нему привело.
Читать: https://habr.com/ru/articles/974004/?utm_campaign=974004
@a_cup_of_java | Другие наши каналы
Java-итоги недели — Spring Tools 5, TornadoVM и обновления
По обзору InfoQ: вышли Spring Tools 5.0, milestone‑релизы Spring AI и Shell, TornadoVM 2.1, декабрьский релиз Payara, Hibernate ORM 7.2, Spock 2.4 и ряд патчей для JDK, Micronaut и Tomcat.
Подробности: https://www.infoq.com/news/2025/12/java-news-roundup-dec08-2025/
#en
@a_cup_of_java | Другие наши каналы
По обзору InfoQ: вышли Spring Tools 5.0, milestone‑релизы Spring AI и Shell, TornadoVM 2.1, декабрьский релиз Payara, Hibernate ORM 7.2, Spock 2.4 и ряд патчей для JDK, Micronaut и Tomcat.
Подробности: https://www.infoq.com/news/2025/12/java-news-roundup-dec08-2025/
#en
@a_cup_of_java | Другие наши каналы
Как устроен Amplicode MCP: от кувалды к скальпелю
Эта статья дополняет предыдущую. Там мы зафиксировали проблемы. Здесь разберем, что именно мы сделали со стороны Amplicode, чтобы агент начал работать как опытный software engineer: опираясь на структуру проекта, детерминированные генераторы и понятные высокоуровневые операции.
Если коротко, в первой статье было несколько основных болей:
– LLM часто обучены на слегка устаревшем мире, и это вылезает в мелочах (и не только).
– Галлюцинации и нехватка контекста идут рука об руку: «кажется, в этой библиотеке должен быть такой метод» и пошло-поехало.
– Переизбыток контекста тоже зло: агент прочитал половину репозитория, потратил деньги, запутался, а потом еще и забыл начало чата.
– Типичный агентный workflow: «сгенерил простыню кода, оно не компилится, давай чинить, ой теперь сломалось другое».
И на этом фоне появляется логичный вопрос: а можно сделать так, чтобы агент работал не с сырыми файлами, а с моделью проекта и сущностями фреймворка? Чтобы он не гадал, где DTO, как принято именовать контроллеры и какие миграции у вас используются?
Собственно, Amplicode MCP про это.
Читать: https://habr.com/ru/companies/haulmont/articles/976872/?utm_campaign=976872
@a_cup_of_java | Другие наши каналы
Эта статья дополняет предыдущую. Там мы зафиксировали проблемы. Здесь разберем, что именно мы сделали со стороны Amplicode, чтобы агент начал работать как опытный software engineer: опираясь на структуру проекта, детерминированные генераторы и понятные высокоуровневые операции.
Если коротко, в первой статье было несколько основных болей:
– LLM часто обучены на слегка устаревшем мире, и это вылезает в мелочах (и не только).
– Галлюцинации и нехватка контекста идут рука об руку: «кажется, в этой библиотеке должен быть такой метод» и пошло-поехало.
– Переизбыток контекста тоже зло: агент прочитал половину репозитория, потратил деньги, запутался, а потом еще и забыл начало чата.
– Типичный агентный workflow: «сгенерил простыню кода, оно не компилится, давай чинить, ой теперь сломалось другое».
И на этом фоне появляется логичный вопрос: а можно сделать так, чтобы агент работал не с сырыми файлами, а с моделью проекта и сущностями фреймворка? Чтобы он не гадал, где DTO, как принято именовать контроллеры и какие миграции у вас используются?
Собственно, Amplicode MCP про это.
Читать: https://habr.com/ru/companies/haulmont/articles/976872/?utm_campaign=976872
@a_cup_of_java | Другие наши каналы
Обнаружение взаимоблокировок на JVM с помощью Fray
Команда Spring АйО подготовила перевод про Fray — инструмент для обнаружения и воспроизведения ошибок многопоточности в Java-программах. Основанный на научных исследованиях и написанный на Kotlin, Fray использует технику теневой блокировки для выявления взаимоблокировок и других проблем синхронизации. Он уже доказал свою эффективность на таких проектах, как Kafka, Flink и Lucene.
Читать: https://habr.com/ru/companies/spring_aio/articles/976924/?utm_campaign=976924
@a_cup_of_java | Другие наши каналы
Команда Spring АйО подготовила перевод про Fray — инструмент для обнаружения и воспроизведения ошибок многопоточности в Java-программах. Основанный на научных исследованиях и написанный на Kotlin, Fray использует технику теневой блокировки для выявления взаимоблокировок и других проблем синхронизации. Он уже доказал свою эффективность на таких проектах, как Kafka, Flink и Lucene.
Читать: https://habr.com/ru/companies/spring_aio/articles/976924/?utm_campaign=976924
@a_cup_of_java | Другие наши каналы
Value Object: как победить примитивную одержимость без DDD
Кажется, что оборачивать
Как избавиться от одержимости примитивами
Читать: https://habr.com/ru/companies/cdek_blog/articles/975426/?utm_campaign=975426
@a_cup_of_java | Другие наши каналы
Кажется, что оборачивать
BigDecimal и String в отдельные классы — это overengineering и преждевременный DDD. Но именно из-за этих «лишних» типов в прод не пролезают посылки в ПВЗ, проценты внезапно превращаются из 0.8 в 80, а деньги теряют валюту и смысл. В статье на реальном примере логистики разбираем, как один небольшой record Weight и несколько аккуратных Value Object’ов наводят порядок в бизнес-логике: инварианты перестают жить в комментариях, проверки перестают дублироваться, а код начинает читаться как текст предметной области. Без внедрения полного DDD, без религиозного фанатизма — только практические шаги.Как избавиться от одержимости примитивами
Читать: https://habr.com/ru/companies/cdek_blog/articles/975426/?utm_campaign=975426
@a_cup_of_java | Другие наши каналы
❤1
Новый инструмент AWS: Transform Custom
InfoQ: AWS представила AWS Transform Custom — AI‑агент для массовой модернизации и рефакторинга кода: обновления Java/Node/Python, миграции рантаймов, архитектурные правки. Обещают до 5× ускорения и интеграцию в пайплайны; вызвал дискуссию о точности.
Подробности: https://www.infoq.com/news/2025/12/aws-transform-technical-debt/
#en
@a_cup_of_java | Другие наши каналы
InfoQ: AWS представила AWS Transform Custom — AI‑агент для массовой модернизации и рефакторинга кода: обновления Java/Node/Python, миграции рантаймов, архитектурные правки. Обещают до 5× ускорения и интеграцию в пайплайны; вызвал дискуссию о точности.
Подробности: https://www.infoq.com/news/2025/12/aws-transform-technical-debt/
#en
@a_cup_of_java | Другие наши каналы
Как мы построили рекламную платформу с нуля
Каждая успешная рекламная кампания начинается с технологий, которые остаются за кадром. Но именно от них зависит, увидит ли целевой пользователь нужное объявление, сможет ли рекламодатель быстро настроить кампанию и получить точный отчет, и не сгорит ли его бюджет из-за мошенников или технических сбоев. Когда мы начинали проект AdWebs, нам нужно было создать платформу, которая справится с тремя ключевыми вызовами: высокая нагрузка, безопасность данных и безупречный пользовательский опыт. Вот как мы это сделали.
Читать: https://habr.com/ru/articles/977384/?utm_campaign=977384
@a_cup_of_java | Другие наши каналы
Каждая успешная рекламная кампания начинается с технологий, которые остаются за кадром. Но именно от них зависит, увидит ли целевой пользователь нужное объявление, сможет ли рекламодатель быстро настроить кампанию и получить точный отчет, и не сгорит ли его бюджет из-за мошенников или технических сбоев. Когда мы начинали проект AdWebs, нам нужно было создать платформу, которая справится с тремя ключевыми вызовами: высокая нагрузка, безопасность данных и безупречный пользовательский опыт. Вот как мы это сделали.
Читать: https://habr.com/ru/articles/977384/?utm_campaign=977384
@a_cup_of_java | Другие наши каналы