Обновить
63.8

Kotlin *

Статически типизированный язык программирования

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

Состояние HTTP-клиентов в Spring

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

В новом переводе от команды Spring АйО команда Spring делает важное объявление — RestTemplate уходит в прошлое. С выходом Spring Framework 7.0 разработчики официально заявляют о плане поэтапного прекращения поддержки одного из самых популярных HTTP-клиентов в экосистеме. Его место занимает RestClient, современный fluent-клиент с расширенными возможностями: API-версионирование, гибкая конфигурация конвертеров, группы HTTP-интерфейсов и новый тестовый клиент RestTestClient.

Кроме того, в Spring Boot 4.0 появятся отдельные стартеры для каждого типа клиента, а RestClient теперь можно удобно переиспользовать с уже существующей инфраструктурой RestTemplate.

Читать далее

Укрощаем Android UI-тесты на Compose: как Page Object спас нас от рутины

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров1.3K

Привет, Хабр! Вы когда-нибудь тратили слишком много драгоценного времени на поиск нужного testTag в иерархии Compose Screen? А потом ещё полдня чинили тесты после каждого чиха в UI? Или, может быть, несколько недель ждали, пока в дизайн-систему добавят недостающий тег или семантику, чтобы вообще начать писать свой UI-тест? Если вы хоть на один вопрос ответили «Да», эта статья для вас. Давайте навсегда покончим с этой рутиной и займемся более креативными задачами!

Цель статьи — НЕ представить очередной фреймворк написания UI-тестов для приложений на Android, а упростить их написание с помощью всем знакомого Page Object. Мы будем прятать рутину поиска нужных компонентов и одновременно повышать устойчивость тестов к изменениям. Всё для того, чтобы тесты стали удобнее, надёжнее и проще поддерживались.

Меня зовут Дмитрий Омельченко, я Android-разработчик в Райффайзенбанке. Несколько лет назад мы с командой начали внедрять автоматизацию тестирования в приложение online-банка, и за это реализовали несколько интересных решений, об одном из которых хочу вам рассказать.

Читать далее

Книга: «Kotlin Multiplatform на практике»

Время на прочтение5 мин
Количество просмотров6K

Привет, Хаброжители! Хотите писать код один раз и запускать его на Android и iOS, сохранив нативное качество и производительность?

В этой книге вы освоите все шаги разработки полнофункциональных кросс-платформенных приложений с помощью Kotlin Multiplatform SDK — от создания проекта с нуля до миграции существующих нативных решений. Подробные инструкции, архитектурные подходы и реальные примеры помогут уверенно работать с общими модулями, многопоточностью, сетевым слоем, хранением данных и Compose Multiplatform для iOS.

Особое внимание уделено использованию нативного и общего кода в кросс-платформенном приложении, применению expect/actual, тестированию с Kotest, оптимизации разработки с помощью KSP, плагинов компилятора и ИИ-ассистентов. Вы узнаете, как создавать и публиковать собственные KMP-библиотеки, а также получите краткий справочник по Kotlin и Swift, чтобы уверенно ориентироваться в обеих экосистемах.

Читать далее

Почему loadKoinModules и unloadKoinModules в Koin могут ломать ваши зависимости и как этого избежать

Время на прочтение2 мин
Количество просмотров492

В Android-проектах Koin остаётся одной из самых популярных DI-библиотек, особенно в MVP/MVI и Compose-приложениях. Она проста в настройке, гибкая и хорошо работает в больших кодовых базах.

Но многие команды, стремясь к модульности и тестопригодности, начинают активно использовать функции loadKoinModules() и unloadKoinModules(). И здесь разработчики часто натыкаются на странную ошибку -_-

Читать далее

Как Netflix сделал главную страницу по-настоящему динамичной с помощью GraphQL и триггеров

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

Когда вы открываете Netflix, кажется, что всё уже готово — но на самом деле под капотом разворачивается сложная архитектура, которая адаптирует главную страницу в реальном времени. Команда Netflix перешла от статичной генерации страниц к умной системе, основанной на GraphQL-мутaциях, клиентской нормализации кэша и триггерах обновлений. Благодаря этому подходу, пользовательский опыт становится глубоко персонализированным, отзывчивым и масштабируемым.

В новом переводе от команды Spring АйО подробно рассказывается, как устроен API, как работают обновления, и почему Netflix выбрал именно мутации вместо подписок или обычных запросов.

Читать далее

Kotlin QA: как перейти с Java и писать тесты в 2 раза быстрее

Время на прочтение5 мин
Количество просмотров4.8K

С момента официального объявления Kotlin как предпочтительного языка для Android‑разработки в 2017 году язык стремительно завоевал популярность не только в мобильной сфере, но и в автоматизации тестирования.

Многие команды QA-инженеров сталкиваются с выбором: остаться на привычном Java‑стеке или перейти на Kotlin. В этой статье мы рассмотрим некоторые ключевые различия, преимущества и практические аспекты перехода на Kotlin в контексте автоматизации тестирования.

Читать далее

Путеводитель для начинающих по сборщику мусора Shenandoah

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

Shenandoah — это высокопроизводительный сборщик мусора с низкими задержками, разработанный компанией Red Hat и впервые внедрённый в OpenJDK. Он был создан с целью минимизировать задержки на протяжении работы приложения, что особенно важно для приложений с высокими требованиями к производительности и отзывчивости. В новом переводе от команды Spring АйО рассмотрим основные особенности Shenandoah, его работу, настройку и примеры использования.

Читать далее

JVM: Барьеры, которые подходят любому GC

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров2.5K

В новом переводе от команды Spring АйО рассказывается, как сократить время разогрева JVM с помощью ahead-of-time компиляции (в рамках Project Leyden), а также объясняется, почему традиционные GC-барьеры мешают гибкому выбору сборщика мусора.

Статья содержит интересное решение — GC-независимые барьеры загрузки, которые можно «пропатчить» в рантайме под конкретный GC, обеспечивая совместимость без переписывания кода.

Читать далее

Гайд по File Templates: как шарить шаблоны с однотипным кодом

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров1.7K

Всем привет! На связи Дима Котиков, ведущий Android-разработчик в Т-Банке. Я все еще люблю разбираться в технологиях, разрабатывать под Android и KMP и пить латте на фундучном молоке :)

Расскажу, как можно шарить File Templates для своей команды, чтобы облегчить жизнь другим и сэкономить немного времени. Причем коллегам ничего самостоятельно не придется настраивать: подтянутый из git-а репозиторий с кодом все сделает сам. Эта статья — бонус к трем предыдущим, в которых я рассказывал, как уменьшить написание boilerplate-кода. Ссылки на них оставлю в конце статьи.

Читать далее

Почему памятники надо ставить тем, кто автоматизирует MS Word

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров8.3K

DocxKtm — это Kotlin DSL-обёртка над docx4j для автоматизации Word-документов.

Умеет: создавать документы «с нуля», вставлять текст, картинки, таблицы, колонтитулы, нумерацию страниц.

Поддерживает шаблоны с подстановками и логикой (через встроенный движок на базе MVEL2). По функциональности близко к Python-библиотеке docxtpl, но на JVM и с выразительностью Kotlin.

Если вам надоело вручную генерировать документы в Word — это может сэкономить кучу времени и нервов.

Внутри статьи — моя история создания этой библиотеки.

Читать далее

Что нового в Gradle 9.0.0?

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

В новом переводе от команды Spring АйО рассматривается новое крупное обновление Gradle, которое приносит с собой переход на Kotlin 2 и Groovy 4, а также делает кеш конфигурации рекомендуемым режимом сборки. В версии 9 улучшена система отчётности об ошибках, ускорена компиляция Kotlin DSL, добавлена интеграция с Jspecify, снижено потребление памяти и оптимизирована работа с IDE.

Читать далее

Нейросети в Spring-разработке: убираем рутину, а не интеллект

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4K

Всем привет, на связи команда Explyt. Как известно наша компания предоставляет целую экосистему плагинов для IDEA: это и плагин для поддержки Spring, а также Explyt плагин для написания кода, генерации тестов и интеграции с AI. И нам пришла в голову идея - а почему бы не расширить функциональность Spring плагина с помощью AI ассистента, который есть в Explyt. И если вы используете оба наши плагина, то у вас появятся дополнительные возможности для Spring, позволяющие достаточно хорошо решать типовые задачи, которые возникают в процессе работы, с помощью AI, о которых мы подробно расскажем далее.

Читать далее

Чем хорош Postgres 18?

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

PostgreSQL 18 вот-вот выйдет, и это не просто минорное обновление, а настоящий прорыв для разработчиков и администраторов БД. В новом переводе от команды Spring АйО рассмотрим ключевые новинки — асинхронный I/O для ускорения чтения, поддержка UUID версии 7 с улучшенной сортировкой, skip scans в B-tree индексах, виртуальные вычисляемые столбцы и даже OAUTH 2.0 для аутентификации. Всё это делает Postgres ещё более быстрым, гибким и современным.

Читать далее

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

Не LLM едиными: генерируем юнит-тесты из реального исполнения на лету

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

Представьте себе: вы отлаживаете новый баг в сложном многослойном приложении (например, на Spring). Чтобы воспроизвести проблему, приходится взаимодействовать со всей системой end-to-end: отправлять запрос на эндпоинт или что-то кликать в UI. Юнит-теста, который бы изолировал нежелательное поведение до уровня злополучного сервиса или утилиты, нет. А хотелось бы, чтобы он был: во-первых, воспроизводить баг было бы проще (особенно если UI кликает QA, а не вы), а во-вторых, его потом можно было бы легко превратить в регрессионный и улучшить стабильность системы.

Тем временем все данные, нужные для воспроизведения бага в изоляции, есть. В окне отладчика видно, что приходит в метод, и в каком состоянии находится сервис перед тем, как все пойдёт не так. Мы в Explyt RnD решили, что нечего добру пропадать, и научились перехватывать это состояние, а потом генерировать юнит-тест, который в точности его воспроизводит.

Сегодня расскажу о пройденном исследовательском пути, о том, как попробовать нашу экспериментальную фичу в плагине для IntelliJ IDEA, и о том, что у неё под капотом (спойлер: не только LLM).

Читать далее

Java 25 выходит уже сегодня

Уровень сложностиПростой
Время на прочтение23 мин
Количество просмотров5.9K

Четверть века назад язык, придуманный для «умных тостеров», стал символом корпоративного софта и огромных систем. Сегодня Java продолжает эволюционировать, и каждая новая версия всё сильнее ломает стереотип о «тяжёлом корпоративном динозавре».

Встречайте 25 версию Java вместе с командой Spring АйО!

Читать далее

Как я научил Jetpack Compose показывать рекомпозиции в реальном времени

Время на прочтение18 мин
Количество просмотров13K

Привет, Хабр! Меня зовут Иван Кузнецов, я Android‑разработчик в Кинопоиске. Сегодня расскажу историю разработки своего пет‑проекта, которая началась с код‑ревью очередного экрана на Jetpack Compose.

Представьте, вы открываете пул‑реквест и взгляд цепляется за знакомые паттерны: нестабильный параметр в Composable‑функции, remember без ключа, применение трансформаций на Layout‑фазе. Сразу хочется написать комментарий‑лекцию о том, почему это ударит по производительности и почему лучше так не делать.

Вот только объяснения отнимают время и не всегда наглядно доносят суть проблемы. Особенно это актуально для новичков, которым сложно сопоставить абстракции с реальным поведением UI. А ведь для сложных асинхронных штук вроде RxJava или корутин есть визуализаторы — RxMarbles и FlowMarbles, а для самой частой головной боли в Compose до сих пор нет. Вот бы вместо стены текста просто кинуть ссылку со словами: «Смотри, вот что твой код делает на самом деле».

В этой статье я расскажу о разработке собственного приложения, которое в реальном времени визуализирует рекомпозиции. Чтобы заставить его работать, пришлось залезть под капот компилятора Kotlin и подружиться с его внутренними API: FIR и IR.

Читать далее

Фабрика роботов: как устроены RPA-процессы в «Ростелекоме»

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров2K

Привет! Меня зовут Роман Ляшенко, и я лид команды RPA в Эксплуатации ИТ ПАО «Ростелеком».

От автоматизации к гиперавтоматизации

Абсолютно любой бизнес рано или поздно испытывает потребность в улучшении корпоративных процессов и повышении операционной эффективности. Оптимизация: как усовершенствовать качество и скорость работы, не привлекая дополнительных ресурсов? Этот вопрос постоянно волнует как крупные корпорации, так и представителей средних и малых структур. Способов его решения огромное количество. Выбирая среди множества, «Ростелеком» пошел путем развития RPA-процессов.

RPA (Robotic Process Automation) – те самые технологии, которые используют программных роботов, позволяющих автоматизировать повторяющиеся/ рутинные задачи в бизнесе. Это направление стремительно развивается из некогда «местечковых» решений до комплексных стратегий гиперавтоматизации. 

Впервые ЭВМ были использованы в бизнес-процессах в пятидесятые годы (UNIVAC, IBM 702). В те времена компьютеры выполняли простые задачи в бухгалтерии, складском учёте, статистике.  Сегодня же речь идет о сквозном подходе, который направлен на создание взаимосвязанной экосистемы автоматизированных процессов, включая внедрение ИИ-инструментов.

Больше, чем стандартные решения

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

Читать далее

Делаем Jetpack Navigation 3 удобнее

Время на прочтение9 мин
Количество просмотров1.6K

Привет, Хабр! Меня зовут Артем и я автор и ведущий YouTube и Telegram каналов Android Insights.

Jetpack Navigation 3 дает полный контроль над навигацией через NavBackStack, но прямая работа с ним превращается в написание шаблонного кода и усложняет использование из ViewModel. В статье предлагается решение этих проблемы, добавляя привычный API с командами push(), pop(), replace().

Если вы работаете с Navigation 3 или планируете на неё переходить — эта статья поможет сделать процесс разработки приятнее.

Читать далее

Java 25, холивары вокруг Spring и PostgreSQL на скоростях: что будет на Java Rock Stars Meetup

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров3.2K

25 сентября в Москве мы снова собираем участников Java-сообщества вместе. В программе: хардкорные доклады, дискуссия о будущем Spring в России и много живого общения.

Регистрируйтесь на митап по ссылке.

А пока присоединяйтесь к нашему ТГ-каналу и чату Java Rock Stars Meetup, чтобы быть в курсе новостей митапа.

Читать далее

Maven: verify или clean install?

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров4.1K

Если вы автоматически пишете mvn clean install при сборке проекта, то вы такой точно не один — эта команда прочно укоренилась в привычке Java-разработчиков. Но действительно ли она всегда необходима? Что, если вместо неё использовать verify?

В новом переводе от команды Spring АйО мы погрузимся в детали жизненного цикла Maven, поведение реактора, инкрементные сборки и подводные камни использования clean и install. А главное — попробуем понять, когда можно (и нужно) обойтись без install и clean, чтобы ускорить сборку и сократить расходы памяти.

Читать далее