Обновить
84.34

Kotlin *

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

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

Анатомия неудачного микробенчмарка

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

В новом переводе от команды Spring АйО подробно разбираются концептуальные, методологические и технические ошибки, на которые легко наткнуться при попытке протестировать такие механизмы, как synchronized и ReentrantLock. Автор объясняет, почему микробенчмарки часто измеряют не то, что вы думаете, и почему для получения осмысленных результатов лучше использовать макротесты или полагаться на экспертов.

Читать далее

Путеводитель по Ktor JWT auth на стороне сервера

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

Документация Ktor по server-jwt неполна. Если необходимо сделать что-то за рамками «Hello world», придется лезть в исходники и городить костыли. Какой-то консистентности и предсказуемости ждать не стоит, возможно, не обошлось без заговорщиков.

Статья покроет необходимую базу для работы с JWT и убережет от множества подводных камней.

Читать далее

Spring Data JPA и Hibernate: ориентируемся на производительность. Часть 2

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

Команда Spring АйО перевела и адаптировала доклад Мацея Валковяка “Performance oriented Spring Data JPA & Hibernate”, в котором на наглядных примерах рассказывается, как существенно нарастить производительность приложения, оптимизировав его взаимодействие с БД. 

Доклад будет опубликован тремя частями. В первой части было рассказано об оптимизации управления подключениями к базе данных. Во второй части мы посмотрим на то, как оптимизировать код и настройки Spring Data и Hibernate, чтобы минимизировать количество отправляемых в базу данных SQL запросов. 

Читать далее

Spring AI: retrieval augmented generation

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

Spring AI, который только недавно получил первую стабильную версию, уже предоставляет довольно много возможностей для работы с RAG (retrieval augmented generation).

Благодаря этому подходу нейросеть перед тем, как дать ответ на запрос пользователя, выполнит поиск подходящей информации в векторном хранилище. Причём каждый документ хранится не в виде текста, а в виде массива чисел (т.н. «векторов»).

Процесс преобразования различных документов в такой векторный формат выполняется опять же с помощью LLM и называется embedding («встраивание»). Хорошая новость заключается в том, что всё это можно легко сделать с помощью Spring AI.

Читать далее

Как написать микробенчмарк

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

Команда Spring АйО перевела статью, в которой приведено несколько правил, которые следует учитывать при написании микробенчмарков для HotSpot JVM.

Читать далее

Трудности обслуживания приложений под Android

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

Недавно наткнулся на новость о том, что количество приложений в Google Play Store сократилось на 47%.

Я сам энтузиаст разработки под Android и последние 5 лет работал над альтернативой для Google Play Music и Podcast под названием MusicSync. Так что, будучи близким к теме человеком, мне захотелось поделиться своим опытом обслуживания приложений и заодно пояснить, почему меня эта новость нисколько не удивила.

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

Если же говорить о приложении Android, то обслуживать его в качестве хобби-проекта гораздо хлопотнее. Вот некоторые из проблем, с которыми мне приходилось сталкиваться.

Читать далее

Не хотите поговорить о Kotlin Contracts?

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

Привет! Меня зовут Виталий. Я — Android‑разработчик в Альфа‑Банке. За время собеседований я заметил одну любопытную вещь: даже опытные котлиноводы частенько не в курсе такой мощной фичи, как Kotlin Contracts.

В этой статье я закрою пробел и простым языком расскажу, как Contracts помогают компилятору лучше понимать ваши намерения и как с их помощью можно навести порядок там, где раньше приходилось полагаться на волю случая. Покажу не только рабочие примеры, но и открою внутреннюю кухню: разберёмся, как устроен Contracts DSL, какие эффекты доступны и что на самом деле происходит, когда вы даёте компилятору обещания.

Всё максимально честно, с живыми иллюстрациями и практическими советами. Даже если раньше вы смотрели на Contracts как на тайный клуб для избранных — после этой статьи они перестанут быть чем‑то пугающим.

Читать далее

Почему Exceptions в Java не взлетели — и что с этим делать в 2025 году

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

Всем привет!

Меня зовут Илья, я работаю в Райффайзен Банке. Мы пишем свои бэкенд-сервисы на Java и Kotlin, поэтому зачастую приходится переключаться с одного языка на другой. Из-за этого невольно начинаешь сравнивать подходы и механизмы одного языка с его JVM-собратом. Сегодня я бы хотел поговорить об одном из таких механизмов — пропагации ошибок и исключений.

Используете ли вы в своем коде исключения? Ответ кажется странным, так как исключения являются неотъемлемой частью Java. Но что, если я спрошу, используете ли вы исключения для управления логикой своей программы?

Читать далее

Я обогнал Google?

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

Заголовок "Я обогнал Google?" — не просто кликбейт. Столкнувшись с неудобствами и большим количеством бойлерплейта в Jetpack Navigation на реальном проекте, я задался вопросом: а можно ли сделать лучше? В этой статье я шаг за шагом показываю свой путь: от ручных extension-функций до создания собственной библиотеки на KSP, которая генерирует типобезопасные классы для навигации, упрощает передачу аргументов и добавляет удобные фичи.

Читать далее

Проект умного дома IoT LikNode

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

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

Данное устройство разрабатывалось на основе микроконтроллера esp32 (ap), esp8266 (node) и смартфона os Android. 

Программа для микроконтроллеров написана на языке Си для андроид на языке Котлин (скачать возможно по ссылке download). 

Каждый из микроконтроллеров подключенный в данном проекте имеет одинаковые функции. Максимальное количество node можно подключить 20 штук.

Читать далее

Как оптимизировать сетевые запросы в Android: OkHttp и Retrofit с Coroutines

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

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

Расскажем, как использовать библиотеки OkHttp и Retrofit — инструменты, ставшие стандартом де-факто в Android-разработке, — для построения надёжной и быстрой сетевой прослойки. Статья ориентирована на мобильных разработчиков, особенно тех, кто работает с Kotlin и Coroutines.

Читать далее

Оверинжиниринг в луковичной и гексагональной архитектурах

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

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

Читать далее

Рекомендации по Jetpack Compose: от основ к масштабируемым UI

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

Всем привет!

В этой статье мы будем обсуждать, как писать масштабируемые и поддерживаемые интерфейсы на Jetpack Compose: от базовых компонентов до архитектурных практик. Разбираем иерархию, принципы проектирования, naming, порядок параметров и антипаттерны.

Думаю, что статья будет полезна как новичкам, так и опытным разработчикам.

Читать далее

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

Spring Data JPA и Hibernate: ориентируемся на производительность. Часть 1

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

Команда Spring АйО перевела и адаптировала доклад Мацея Валковяка «Performance oriented Spring Data JPA & Hibernate», в котором на наглядных примерах рассказывается, как существенно улучшить производительность приложения, оптимизировав его взаимодействие с БД. 

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

Читать далее

Как ИИ помог создать систему видеонаблюдения на Android

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

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

Прежде чем я начну рассказ о своем проекте, хочу выразить огромную благодарность всем тем бесчисленным программистам, разработчикам и энтузиастам, которые на протяжении многих лет делились своим кодом, знаниями и опытом в интернете. Ваши открытые проекты, ответы на Stack Overflow, статьи, туториалы и обсуждения на форумах стали той самой питательной средой, на которой обучались большие языковые модели (LLM), включая и ту, что помогала мне. Без вашего вклада в общее дело, такие мощные ИИ‑ассистенты, которые сегодня так сильно облегчают и ускоряют разработку, были бы просто невозможны. Спасибасвам за то, что делаете мир разработки открытее и доступнее!

Исходный код проекта «Storog» полностью открыт и доступен на GitHub.

Читать далее

От конфигурации к динамике. Новый API по созданию бинов в Spring

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

В Spring Framework 7 появился новый API — BeanRegistry, который упрощает и расширяет возможности по динамической регистрации бинов. Это особенно актуально, когда невозможно заранее предсказать, сколько компонентов потребуется, как в случае со Spring Data. В новой статье от эксперта сообщества Spring АйОМихаила Поливахи, вы узнаете:

– Как Spring Data справлялась с динамической регистрацией раньше;

– Какие подходы регистрации существовали до BeanRegistrar, как они работали;

– Как новый API связан со Spring AOT.

Читать далее

40 ударов палкой и Kotlin Multiplatform: как устроена мобильная разработка в Катаре (интервью)

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

Привет! Я Максим Мялкин, управляющий партнер и руководитель мобильной разработки в KTS.

Сегодня я хочу поделиться историей моего знакомого и бывшего студента Сергея Ракова. Его карьера сложилась довольно необычным образом: от инженера-конструктора в Богородицке он прошел путь до Android-разработчика в Катаре.

Недавно мы провели с ним интервью и обсудили, тяжело ли ему далась смена профессии, чем занимается его компания и почему для разработки мобильного приложения они выбрали KMP.

Также коснулись темы культурных особенностей. Да, заголовок — не кликбейт, в Катаре по-прежнему существуют телесные наказания. Историю о них мы расскажем в конце; забегая вперед, знакомые Сергея поплатились таким образом за пьяное вождение (осуждаем).

Читать далее

Архитектурные принципы Spring Security. Часть третья

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

Команда Spring АйО перевела и адаптировала доклад Даниэля Гарнье‑Муару «Spring Security Architecture Principles», в котором на наглядных примерах рассказывается, как пользоваться возможностями Spring Security, не запутываясь на каждом шагу и не зарабатывая себе головную боль. 

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

Читать далее

Стандартизация без боли: как строгий синтаксис экономит время и нервы

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

Когда проект начинается, разработчику хочется только одного — свободы творчества. Писать код быстро и так же быстро получать результат. Но со временем появляются баги, регрессии, архитектура, миграции... И вот тогда свобода оборачивается болью: оказывается, что один и тот же результат в коде можно выразить десятком способов — и все они несовместимы друг с другом.

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

Читать далее

Индикация клика на стероидах в Compose: пишем свою IndicationNodeFactory

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

При работе с Jetpack Compose разработчики часто не замечают, как элементы Material и Material 3 дизайн-систем вплетаются в их код. Один из таких элементов - это индикация клика, реализованная в Material как круги на воде (англ. ripple effect). В этой статье мы разберем, в чем недостатки дефолтной реализации риппл-эффекта в Compose и как сделать свою.

Читать далее