Обновить
94.85

Kotlin *

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

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

Todo Budget v5.0: переписал весь UI с нуля на Jetpack Compose — и теперь ищу тех, кто его сломает

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

До пятой версии главный экран был функциональным, но визуально скучным. Типичный Material Design без характера. Я получил несколько честных отзывов — в том числе жёстких — и решил переделать всё.

Читать далее

Новости

Введение в модели согласованности

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

Почему одни системы всегда показывают актуальные данные, а другие — иногда отдают устаревшее, но зато хорошо масштабируются и показывают хорошие показатели по производительности?

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

Читать далее

Зачем нужен companion object в Hilt-модулях

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели4.5K

Замечали некий companion object в интерфейсах Hilt-модулей? Что он делает, как он работает под капотом, почему так популярен в Hilt-модулях, и почему нельзя обойтись обычными классами? Сегодня я развею эту магию!

Читать далее

Навигация как нервная система: Как мы подружили немецкий автопром с японскими платными дорогами через AIDL

Уровень сложностиСложный
Время на прочтение5 мин
Охват и читатели3.6K

Если вы думаете, что навигационная система в современном автомобиле — это просто красивое приложение, которое рисует синюю линию на карте и говорит «через 200 метров поверните направо», вы застряли в 2010 году.

В Android Automotive OS (AAOS) навигация часто становится одним из самых жирных и критически важных системных компонентов. Это «пространственный мозг» машины. Десятки других модулей постоянно дергают её за рукав с вопросами: «Где мы?», «Какое ограничение скорости?», «Сколько полос на дороге?», «В какой полосе мы сейчас едем?».

В этой статье я поделюсь опытом из своей практики разработки навигационной системы для крупного немецкого автопроизводителя. Мы разберем, как построить надежное межпроцессное взаимодействие (IPC) внутри автомобиля на примере передачи ADAS-атрибутов для японского модуля ETC 2.0.

Читать далее

Сравнение MVI и KoTEA

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

В мире Android-разработки существуют различные архитектурные паттерны.
Многие из вас хорошо знакомы с MVVM, и возможно сталкивались с MVP. В последнее время всё чаще звучит аббревиатура MVI (Model-View-Intent). Однако наряду с MVI существует похожий на неё подход – KoTEA (Kotlin The Elm Architecture).

Давайте сравним их и разберём их различия.

Читать далее

Kotlin для новичков: от установки IDE до первого проекта

Время на прочтение6 мин
Охват и читатели7.9K

Kotlin уже не просто язык для Android. В 2026 году на нём пишут бэкенд, кроссплатформенные приложения и даже заменяют Java. Почему команды уходят с Java на Kotlin, как новичку начать и при чём тут Kotlin Multiplatform? Разбираемся и пишем «Hello, World!» с Gradle. Бонус: пример кода и ссылка на репозиторий.

Читать далее

Бойтесь буквы «M». Самый странный баг в моей жизни

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели32K

Вечером в пятницу коллега, назовем его Мститель, спросил, не сталкивался ли я с проблемой, что route возвращает 400... но «если сменить название на сильно другое», то всё ок. Я сперва не обратил внимание на слово «сильно». Может быть, где-то дублируется регистрация этого рута? Или мститель перепутал GET и POST. Или какой-то баг в общем на создание хэндлеров?

Милости просим

Часы Лампорта

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

Сегодня мы живём в мире распределённых систем: Apache Kafka, Apache Spark, Apache Cassandra — это уже не экзотика, а повседневная инфраструктура продакшена.

Сервисы пишут события, стримы обрабатываются в реальном времени, данные реплицируются по датацентрам. И почти в каждом таком сценарии возникает фундаментальный вопрос:

Как понять, что произошло раньше, а что позже, если глобального времени не существует?

Здесь в игру вступают логические часы Лампорта — простая, но концептуально мощная идея, лежащая в основе причинно-следственного порядка в распределённых системах.

Подробнее - в новом переводе от команды Spring АйО.

Читать далее

Как нарезать Android-монолит с помощью compile-time плагинов?

Уровень сложностиСложный
Время на прочтение10 мин
Охват и читатели5.7K

Привет на связи Федотов Михаил и Абдульманов Эдуард, мы технические лидеры Android разработки в Альфа-Банке и занимаемся приложением для физических лиц.

В этой статье вспомним наш опыт разбиения большого монолитного android приложения на мини-приложения срезки, занимались мы этим уже довольно давно, но тема все равно актуальная.

Переход к таким мини-приложениям позволяет ускорить конфигурацию Gradle и уменьшить время компиляции проекта как локально так и на CI.

Думаю это будет полезно тем кто интересуется архитектурой android приложений, KSP, Dagger, а также тем у кого крупное многомодульное приложение и есть проблемы с производительностью работы Gradle в проекте.

Читать далее

MQTT: доставка при потере связи

Время на прочтение2 мин
Охват и читатели6.6K

(ссылка на репозиторий в конце статьи)

Когда я собирал систему «Умный дом» в загородном доме, столкнулся с двумя классическими проблемами, которые, наверное, знакомы многим, кто строит IoT на Wi-Fi:

1. В подвале коммутатор управления отоплением периодически «глотал» команды. Аналогичные пропуски случались и в других менее критичных системах, расположенных в дальних пыльных (от туда и название проекта) углах дома с неуверенным покрытием Wi-Fi.

2. Не все устройства одинаково хорошо переносили слишком частую отправку команд.

Тянуть Ethernet по всему дому и сверлить стены или развешивать дополнительные роутеры/повторители мне категорически не хотелось. Поэтому первую проблему нужно было решать чисто программно.

Почему стандартные возможности брокера не подошли

Многие MQTT-брокеры (в том числе популярный Mosquitto) позволяют включить «хранение последнего сообщения» (retain) и QoS 1/2. Но этого оказалось недостаточно.

Например, когда нужно передать на электронный замок целый список RFID-меток — одной «последней» командой не обойтись. Если устройство в момент отправки было недоступно, список просто терялся.

Решение: контракт с подтверждением

Я изменил договорённость между брокером и потребителем (consumer):

- При получении любого сообщения устройство обязано ответить подтверждением.

- Только после получения подтверждения сообщение считается доставленным.

- Если подтверждение не пришло за заданное время — сообщение автоматически уходит в очередь на повторную отправку.

В тот же модуль я добавил защиту от слишком частой отправки:

Читать далее

Не Vibe-Coding, а инженерия с AI: как я за полгода сделал Android-приложение: социальный трекер привычек

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

Не Vibe-Coding, а инженерия с AI: Как за полгода я сделал Android‑приложение «Трекер привычек» с социальными функциями, синхронизацией, офлайн-режимом и виджетом

Читать далее

Нейросеть на пассажирском сиденье: Скрещиваем Android Automotive и Machine Learning

Уровень сложностиСложный
Время на прочтение4 мин
Охват и читатели4.7K

В предыдущих сериях мы научились ковыряться под капотом: доставать данные с датчиков через VHAL и прятать кнопки от водителя, когда машина едет. Но давайте честно: просто выводить скорость на экран — это скучно. Этим занимались инженеры еще в 90-х.

Сегодня мы живем в эпоху ИИ. У нас есть железка стоимостью в десятки тысяч евро, напичканная датчиками, и операционная система, которая может всё это читать. Так давайте дадим машине «мозги»!

В этой статье мы напишем концепт Smart Driving Assistant — фонового сервиса на Android Automotive, который будет анализировать телеметрию (руль, педали, скорость) и с помощью локальной нейросети (On-Device ML) понимать, что водитель начал "играть в шашечки" на дороге.

Читать далее

Когда использовать параллельный стрим в Java

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

Параллельные стримы в Java 8 выглядят как бесплатное ускорение: добавил .parallel() — и все ядра побежали работать. Но по факту всё сложнее, так как распараллеливание имеет накладные расходы, зависит от того, насколько хорошо делится источник данных, сколько стоит объединение результатов, и даже от локальности данных в памяти.

В новом переводе от команды Spring АйО на примерах и бенчмарках разберем, почему простая свёртка на маленьких диапазонах может стать медленнее, почему ArrayList часто выигрывает у LinkedList в параллели, как reduce может неожиданно сломаться из-за неверного identity, и что вообще происходит внутри common ForkJoinPool.

Читать далее

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

LTS, обновления и поддержка (support): что именно вы выбираете в Java и Spring

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

Когда начинается разговор про Java, почти всегда он внезапно уходит в сторону Spring. И это не случайность.

Проблемы с релизами, поддержкой, миграциями, безопасностью — это не «проблемы Spring». Это следствие того, как изменилась сама Java-экосистема.

Чтобы понять, что происходит со Spring, нужно сначала разобраться, что произошло с Java.

Читать далее

JDBC для профи: пулы, batch, транзакции и скрытые риски

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

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

Читать далее

Оптимизация Java-приложений для Arm64 в облаке

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

JVM в первую очередь процесс операционной системы. Но важно понимать, что требования к этому процессу на production отличатся от требований на workstation-е разработчика. 

Если для разработчику важно, чтобы IDE работала быстро и не потребляла всю возможную память на машине, то для серверных JVM важно потреблять максимальный предоставленный ресурс и работать предельно быстро.

В новом переводе от команды Spring АйО разберем, какие существуют базовые настройки кучи, GC и CPU помогают синхронизировать JVM с лимитами контейнера и не переплачивать за простаивающие ресурсы.

Читать далее

Как я решил вкатиться в Android разработку через вайбкодинг. Часть 2. Ну или разработка мобильного приложения через ИИ

Время на прочтение28 мин
Охват и читатели8.5K

В прошлой части я остановился на том что собрал свое приложение, наладил работу и залил в google play. Здесь будет не то чтобы полноценный гайд, скорее тот путь что я прошел и попытка получить опыт в написании статьи

Читать далее

Как я в одиночку написал полноценное финансовое Android-приложение на Jetpack Compose

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

Это не очередной TODO-лист и не очередной трекер расходов. Это комбайн, в котором живут задачи, заметки, бюджет, аналитика, помодоро-таймер и цели накоплений

Читать далее

Как я добавил 10 фич в Android-приложение за один заход: Todo Budget v4.0

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

Как я добавил 10 фич в Android-приложение за один заход: Todo Budget v4.0

Привет, Хабр! Продолжаю серию о разработке Todo Budget — Android-приложения, объединяющего задачи, бюджет, заметки и помодоро-таймер в одном месте.

Читать далее

Получение списка и содержимого чатов Telegram с помощью TDLib (на примере Kotlin)

Уровень сложностиСредний
Время на прочтение33 мин
Охват и читатели8.8K

Когда я стал решать задачу получения сообщений из Telegram для последующего анализа, понял — не хватает простого и понятного введения во взаимодействие с Telegram в роли клиента, а не бота. Официальная документация Telegram отличается от привычной мне документации в мире Java и Rust как по подаче, так и по качеству. Большинство статьей по запросу "how to load chats from telegram" отсылают к высокоуровневым библиотекам на Python.

Главная цель статьи дать основу для разработки приложений на Telegram на среднем уровне абстракции TDLib и взаимодействие с Telegram c помощью посылки и получения сообщения MTProto. В этой статье я постарался раскрыть как надо читать документацию мессенджера, какие существуют способы взаимодействия с платформой и по каким принципам спроектировано API. Во многих местах я не буду давать детальное описание всех параметров, предоставив вместо этого ссылку на документацию. Задача статьи — дать фундамент для разработки своих сценариев. Несмотря на использование Kotlin, информация из статьи будет полезна для любого языка программирования.

Детально раскрыты следующие сценарии взаимодействия: вход в Telegram зарегистрированным пользователем; получение списка чатов и их типизация (каналы, формы и т. п.); получение сообщений из чата.

Погрузиться в TDLib
1
23 ...