Как стать автором
Поиск
Написать публикацию
Обновить
52.07

Kotlin *

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

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

Хватит терять время! Ускоряем сборку с помощью Spring Test Profiler

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

Интеграционные тесты на Spring Boot могут тормозить разработку. Причина часто кроется в неэффективной работе с кэшем контекста Spring. 

Spring Test Profiler — это инструмент, который поможет выявить узкие места и оптимизировать конфигурацию тестов. В новом переводе от команды Spring АйО мы рассмотрим, какие тесты вызывают повторную загрузку контекста, где конфигурации расходятся и как можно унифицировать окружение для значительного ускорения тестов.

Читать далее

ArchUnit против хаоса

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

Привет! Я Масгутов Руслан, архитектор в Т-Банке. Одна из моих задач — вести архитектурный надзор по техническим решениям. Проверка структуры проектов при ревью довольно быстро становится скучной рутиной, и появляется желание автоматизировать эту деятельность, чтобы освободить время для более интересных задач.  

Расскажу, как мы используем ArchUnit для автоматизации архитектурного контроля. Покажу, как мы обернули правила в Gradle-плагин, встроили их в CI/CD, боремся с архитектурными отклонениями до того, как они попадают в pull request, и расскажу о возможности сбора архитектурных метрик.  

Читать далее

Spring Modulith: проверяем границы модулей в монолите и события домена

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

Привет, Хабр!

Еще в C++20 появилась явная поддержка модулей в языке. Интересно, но в Java тоже давно искали похожее решение для упорядочивания больших монолитных проектов. Spring предлагает свой ответ – проект Spring Modulith, цель которого дать разработчику инструмент для построения модульного монолита. Он не делает всю работу, но помогает структурировать код по модулям, проверять архитектурные правила и организовывать взаимодействие между этими модулями.

Читать далее

Тренажер французских числительных на Jetpack Compose

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

Те, кто учил французский, знают, как сложно освоиться в кругу их числительных. Во французском языке уживаются сразу две системы счисления - привычная нам десятеричная и кельтско-норманнская двадцатеричная.

И хотя программиста не запугаешь даже 16-ричной, все-таки метаться между системами счисления в уме, когда ты уже стоишь у кассы и должен расплатиться, причем, по нынешним временам, наличными, - тот еще квест. Поэтому давайте доведем знание числительных до автоматизма.

Читать далее

Что можно узнать о Max из AndroidManifest

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

Привет, Хабр!

Сегодня в сети есть много дискуссий о мессенджере Макс. Недавно я наткнулся на один пост в гитхабе с анализом Android-приложения, где приводятся страшные выводы о слежке за пользователями. Поскольку интерес к этому вопросу лично у меня велик, я решил разобрать важный файл приложения — его AndroidManifest.xml — и проверить факты. 

Сам по себе AndroidManifest.xml — это своеобразный декларативный контракт приложения с Android: в нем зашиты его идентичность, модель доступа, поверхность атаки, аппаратные и сетевые зависимости, а также внешние взаимодействия. По одному этому файлу уже видно, к каким данным приложение может проситься, что оно имеет право делать в фоне, какие входные точки открыты наружу и под какие правила безопасности платформы оно подпадает. Манифест задает границы возможностей и рисков, а код и выданные пользователем разрешения решают, воспользуется ли приложение этими возможностями.

Читать далее

Bitnami Secure Images: Прощание с Бесплатным Продом

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

Команда Spring АйО перевела статью про то, что не так давно, компания Broadcom, которая на данный момент в силу различных M&A сделок косвенно управляет компанией Bitnami, внесла существуенные изменения в политику поддержки docker образов.

Теперь не бесплатно!

Читать далее

Мне не нужен ORM, я могу просто использовать SQL

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

Команда Spring АйО в новом переводе разобрала популярный аргумент «я просто использую SQL» и объяснила, почему Hibernate — это не замена, а дополнение к нативным запросам. А ещё — когда ORM действительно необходим, а когда можно без него обойтись.

Читать далее

Публикация maven-артефактов в GitHub репозитории

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

Уже как три года я работаю над проектом со стеком Kotlin, Spring Boot, Maven. Все начиналось как небольшая учебная практика в вузе на коленке за пару недель и разрослось в приличную систему, которая уже использовалась по всей России.

В связи с ростом проекта, монорепозитория стало мало и появилась необходимость часть логики выделять в отдельные репозитории. Вот здесь и возникает вопрос: как управлять этими зависимостями?

Читать далее

Разрабатываем spring-boot Starter адаптера EGTS протокола для передачи телеметрии курьеров в РНИС

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

Привет! Меня зовут Игнат. В этой статье я расскажу про разработку адаптера для работы с EGTS-протоколом (Era Glonass Telematics Standard), который можно использовать для передачии телеметрии курьеров из курьерских служб в РНИС (РНИС - государственная информационная система «Единая региональная навигационно-информационная система города Москвы»). Код написан на Kotlin и подходит для использования в Java и Kotlin приложениях. Простота подключения модуля привела к идее вынести проект в опенсорс, чтобы его могли использовать курьерские службы с бэкендом на jvm. Поехали!

Читать далее

Заменит ли WSA эмулятор Android Studio?

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

Ни для кого не секрет, что отладка Android приложения — это достаточно трудоёмкий процесс. Особенно если приложение должно быть адаптировано под разные размеры дисплеев и форм‑факторы устройств. Приложение может быть запущено на смартфоне, планшете или складном устройстве.

Кроме того, не стоит забывать, что иногда приложение может быть запущено в режиме изменяемого размера окна. Конечно, мы можем запретить подобное поведение в Manifest, но тогда мы получим не самый удобный опыт использования в desktop mode.

Встроенный в Android Studio эмулятор позволяет создавать resizable эмулятор. Но пользоваться им мне показалось не очень удобным. Кроме того, если вы страдаете от нехватки ОЗУ, пользоваться встроенным эмулятором становиться трудно. В моём случае имеем машину с 8 Гб оперативной памяти на борту, и работа эмулятора сопровождается постоянными фризами и зависаниями.

Однако недавно я нашёл решение — Windows Subsystem For Android (WSA). И несмотря на то, что поддержка проекта совсем скоро прекращается, всё работает довольно стабильно.

Читать далее

Как мы сделали AI-агента и пользуемся им на практике

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

Привет, Хабр! В последнем обновлении Explyt мы добавили AI-агента для написания кода. В этой статье расскажем, что он умеет и как мы сами его используем.

Пару месяцев назад в нашем плагине не было AI‑агента, а был только ассистент для генерации тестов. И пока агент не появился, в работе мы использовали другие известные плагины. Лично мне очень нравился Copilot, из‑за своего минималистичного интерфейса и контроля за контекстом. Однако фичи копайлота в первую очередь доезжали до VSCode, а пользователю IntelliJ IDEA приходилось дожидаться их месяцами. Поэтому для прототипирования и скаффолдинга, написания бойлерплейтного кода с помощью AI‑агентов мне приходилось переключаться между любимой средой разработки и IntelliJ, что было несколько неудобно.

С появлением своего AI‑агента пошло легче: можно было нажаловаться тимлиду Серёже, который затем осознанно и вдумчиво хакал очередной юзкейс. Со временем отладили настолько, что использовать внешние инструменты не приходится, свой стал работать достаточно хорошо. Дальше покажем, что он может, расскажем о приятных фишках, которые мы сделали для себя, чуть‑чуть о реальном опыте работы с ассистентом.

Читать далее

О ценности абстракций

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

Моя повседневная работа с основном связана с языком Elm. Благодаря сочетанию функционального языка и архитектуры Elm, многие архитектурные решения в нём получаются практически незаметными (подробнее об этом я рассказываю в этом посте у меня в блоге). Вы получаете четкое разделение задач, а язык по умолчанию подталкивает вас к хорошему проектированию.

Но моя работа не ограничивается Elm. Я часто создаю функции, которые охватывают как фронтенд, так и бэкенд — пишу новые конечные точки, а иногда даже проектирую новые таблицы баз данных. Когда я выхожу за пределы мира Elm, я вспоминаю, что архитектура — это то, к чему я должен снова относиться сознательно.

Этот пост не о том, какой код идет в какой слой, и не о конкретных паттернах проектирования. Прежде всего, я хочу поговорить об обманчиво простом выборе: следует ли просто реализовать то, что вам нужно, или же лучше начать с создания абстракции?

Читать далее

Maven Central ограничивает пропускную способность: что важно знать в 2025 году

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

Команда Spring АйО подготовила статью про Rate Limit в Maven Central — один из тех инфраструктурных проектов, без которых современная JVM-экосистема уже немыслима. Здесь живёт подавляющее большинство библиотек и инструментов для Java, Kotlin, Scala и Android. После закрытия JCenter в 2021 году он окончательно стал де-факто центральным публичным репозиторием, куда в итоге попадает практически каждая новая библиотека.

Читать далее

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

TAO Bubbles: элегантные и настраиваемые подсказки для ваших Jetpack Compose приложений

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

Каждый Android‑разработчик сталкивается с задачей обучения пользователей новым функциям или помощи в навигации по интерфейсу. Традиционные всплывающие окна или сообщения могут быть навязчивыми. Конечно же есть способ элегантно подсвечивать элементы UI и предоставлять контекстную помощь.
Встречайте TAO Bubbles — легковесную библиотеку для Jetpack Compose, созданную для отображения настраиваемых «пузырей», «подсказок» или «тултипов», которые могут указывать на конкретные UI‑компоненты.TAO Bubbles прекрасно подходит для создания пошаговых руководств, демонстрации новых возможностей или предоставления контекстно‑зависимой справки прямо в вашем приложении.

Читать далее

Android обновление API SDK до 35 версии в сжатые сроки, в большом легаси-проекте

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

Все мы (разработчики Android-приложений), не так давно получили письмо вида:
Редко подобные письма становятся проблемой, однако при определенных условиях - это может существенно потрепать вам нервы.

Костыль-решение

Проектирование и кодогенерация DDD-моделей на Kotlin

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

В статье рассматривается разработка доменных моделей в соответствии с тактическими паттернами DDD — Value Object и Entity, с целью создания собственной строгой иерархии функциональной системы типов (ФСТ). Предложен фреймворк, включающий методологию проектирования и кодогенерации доменных моделей на языке Котлин. Рассматриваются вопросы и ставятся задачи …​ организации, планирования, документирования, моделирования, регулирования, управления, оценка результата [Д] как код (DSL). Разработка фреймворка ведется в значительной части на основе научных работ Д.А. Новикова по организации, управлению и методологии деятельности, приведенных в конце статьи. Используемые понятия, термины и определения основаны на [5] и выделяются полужирным шрифтом. Общие термины и понятия, которые легко ищутся в поисковых системах, выделяются курсивом. Слова, относящиеся к кодовой базе, выделяются обратными кавычками.

Читать далее

Конфигурация Spring Security на пальцах

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

В новом переводе от команды Spring АйО мы рассмотрим решение для регистрации и аутентификации пользователя через клиентское JavaScript-приложение с использованием инфраструктуры Spring Security, а также access и refresh токенов.

Существует множество базовых примеров работы со Spring Security, поэтому цель данной статьи — более подробно описать возможный процесс с помощью блок-схем.

Читать далее

Java vs Kotlin: у кого больше преимуществ в 2025 году

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

В 2018 я впервые познакомился с Kotlin, и он мне практически сразу понравился. Да и как можно не полюбить язык, названный в честь тотемного животного всех программистов? Шучу, на самом деле в честь острова.

Я уже несколько лет пишу бэкенд на Kotlin. До этого писал на Java, но переход совершил практически одномоментно, потому что тогда мне  казалось, что Kotlin закрывает множество минусов Java и привносит более простой и лаконичный синтаксис.  Но при этом я стараюсь следить за тем, как развивается Java.

Читать далее

Kotlin для бэкенд разработки: преимущества и примеры

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

Kotlin, современный язык программирования от JetBrains, уже давно зарекомендовал себя не только в Android‑разработке, но и как мощная альтернатива Java для бэкенд‑разработки. Kotlin полностью совместим с Java, работает на JVM и предлагает более лаконичный, безопасный и выразительный синтаксис.

Читать далее

Kick: Kotlin Inspection & Control Kit — единый модульный инструмент отладки прямо в приложении

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

При разработке и тестировании приложений порой требуется заглянуть под капот - проанализировать HTTP-трафик или проверить кэш данных в базе данных. Ранее для этих целей мы использовали Inspektify и Delight SQL Viewer. Но в какой-то момент нам понадобился еще и удобный доступ к логам приложения и тащить ещё одно отдельнее решение не хотелось. Был нужен один инструмент, который объединит всё самое необходимое в одном месте. Так появился Kick — расширяемый модульный набор инструментов, позволяющий разработчикам и тестировщикам легко инспектировать приложение.

Читать далее