Как стать автором
Обновить
34.4

Kotlin *

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

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

Разработка под Android в 2024 году

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

Эта статья отражает моё личное мнение и профессиональные взгляды, учитывающие различные точки зрения в сообществе Android-разработчиков. Кроме того, я регулярно просматриваю руководства от Google для Android.

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

Читать далее
Всего голосов 13: ↑12 и ↓1 +11
Комментарии 6

Новости

Разработка высоконагруженного игрового WebSocket сервера на Kotlin, Webflux с поддержкой BattleRoyale/Matchmaking

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

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

Читать далее
Всего голосов 6: ↑4 и ↓2 +2
Комментарии 1

Автоматизируем рутину в Android разработке: плагин для создания шаблонного кода на примере создания -api -impl модулей

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

Привет, хабр! Меня зовут Алексей, я ведущий разработчик платформенной команды и по совместительству лид архитектурной компетенции в проекте Альфа-Бизнес. Сегодня я расскажу, как можно автоматизировать повторяющуюся работу в андроид-разработке при помощи плагина для Android Studio.

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

Также мы привыкли автоматизировать свою собственную работу. Инструменты CI/CD позволяют быстрее доставлять ценность клиентам, чем ручное развертывание, линты помогают уменьшить время, которое мы тратим на прохождение задачи код ревью. 

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

Читать далее
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 6

KatWalk C2: ч2, подслушаем, подсмотрим и разнюхаем или как общаться с незнакомым железом на незнакомом языке

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

В прошлой статье я рассказал что это за платформа, и показал как можно получить данные с неё и как встроить код в стороннее приложение.

Однако, получение данных требует постоянно висящего приложения (на C#), и надо понять что же конкретно оно делает.

Давайте разберёмся как общаться с железом и избавимся от балласта!.. Переписав на Kotlin. Почему Kotlin? Потому что я на нем никогда еще не писал.

Погружаемся
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 4

Истории

Настраиваем кросс-обновления Android-приложений между сторами

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

Привет, Хабр! Меня зовут Тимофей, я Android-разработчик в Сравни. Давайте поговорим о кросс-обновлении Android-приложений без привязки к конкретному стору – так, чтобы пользователи могли устанавливать из одного источника, а обновлять – из другого, без необходимости удалять и ставить заново.

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

Но первые реальные практические шаги в этом направлении мы сделали в формате
“А что, так можно было?”: пошли выкладывать приложение в RuStore и попутно обнаружили возможности использовать аналогичные механизмы для настройки кросс-обновления.

Так что там дальше?
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 5

Android Lint: оптимизируем проверку мердж-реквестов

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

Привет, это Android-разработчик из «МТС Диджитал» Никита Пятаков. Когда я только начал работать над приложением «Мой МТС», мне нужно было время, чтобы адаптироваться и ознакомиться с проектом. На первых МР-ах коллеги подсвечивали готовые решения, которые можно переиспользовать. Когда к нам стали приходить новые разработчики, такие комментарии оставлял уже я. Это натолкнуло меня на мысль, что использование синтаксического анализатора оптимизирует процесс проверки. К тому моменту мы уже использовали Android Lint, так что выбирать не пришлось. 

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Комментарии 0

Интегрируем Kotlin сервис с AI чат-ботом с помощью Spring AI за 5 минут

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

Чат-боты с генеративным искусственным интеллектом получили широкую известность после релиза ChatGPT в ноябре 2022 года. Сейчас вряд ли найдётся человек, который не слышал про данный инструмент от OpenAI. Именно он вызвал настоящий бум в данной сфере, вынудив конкурентов разрабатывать свои аналоги, чтобы побороться за место на рынке. Таким образом созданная лавина изменений затронула многие языки программирования. Не обошли они и Java-сообщество. Spring Framework, один из наиболее популярных Java фреймворков обзавёлся модулем Spring AI, который обещает упростить разработку приложений с функциями ИИ.

Давайте вместе взглянем на него в деле и опробуем на демо проекте. В данном гайде мы создадим и подключим Kotlin сервис к чат-боту всего за пять минут, используя Spring AI!

Начать!
Всего голосов 1: ↑1 и ↓0 +1
Комментарии 0

Осознанная оптимизация Compose 2: В борьбе с композицией

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

Jetpack Compose постоянно развивается, открывая перед разработчиками новые горизонты для оптимизации. С момента нашего последнего обзора, мы добились значительного прогресса, сократив задержки при скролле с 5-7% до нуля. В этом материале мы поделимся свежими находками и передовыми практиками в оптимизации Compose. Чтобы максимально углубиться в тему, рекомендуем ознакомиться с первой частью.

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 13

Использование resilience4j со Spring Boot

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

resilience4j библиотека, предоставляющая набор инструментов для повышения надежности и отказоустойчивости java приложений прежде всего в микросервисной архитектуре

Рассмотрим какие в ней есть инструменты, как их использовать в Spring Boot приложении с помощью аннотаций, как настраивать и есть ли в них подводные камни

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 0

Решение проблемы N+1 при работе с Kotlin Exposed

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

К написанию этой статьи я подошёл после продолжительного использования Kotlin Exposed в рабочих, а также персональных проектах, когда я начал анализировать генерируемые SQL запросы. В тот момент я познакомился с проблемой N+1)

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 7

Deep dive into delegated properties: разбираемся с делегатами в котлин

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

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

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

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

Делаю навигацию в приложении на Compose

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

В статье затрагивается тема межмодульной навигации в приложении написанном с применением Jetpack Compose, Compose Navigation и самописного модуля навигации. Задачи, которые преследуются — это сделать максимально независимые между собой модули фичей, которые могут смело переиспользоваться на разных проектах без постоянных доработок по навигации внутри фичей.

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

Читать далее
Рейтинг 0
Комментарии 8

AndroidFoodRecipesGuideTutorial

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

В данной статье мы создадим простое приложение для отображения списков блюд на платформе Android с использованием языка программирования Kotlin.

Мы погрузимся в увлекательный мир мобильной разработки и научимся использовать различные технологии, включая RecyclerView для отображения списков, фрагменты для организации интерфейса, и многое другое. Наше приложение будет не только функциональным, но и простым в создании благодаря мощным инструментам, которые предоставляет нам Kotlin и Android SDK.

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

Погнали!
Всего голосов 6: ↑3 и ↓3 0
Комментарии 3

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

Kotlin Object Multiplatform Mapper: сопоставляем коллекции правильно

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

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

Давайте узнаем, что из этого вышло
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 0

Управление контейнерами из Kotlin-тестов

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

Нередко для выполнения тестов требуется запуск вспомогательных сервисов (баз данных, брокеров очередей и др.) и стандартной практикой в подходах DevOps является запуск тестов внутри управляемого окружения, где сначала создается контейнер с JVM, после чего внутри конвейера CI/CD запускаются вспомогательные контейнеры и сборка Kotlin-приложения с точкой входа для запуска тестов. Однако есть и альтернативное решение - запускать вспомогательные тестовые контейнеры непосредственно внутри JUnit-теста. В этой статье мы обсудим несколько различных подходов к управлению контейнерами из тестов для Kotlin-приложений.

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 1

Использование Postgres и JSONB для хранения товаров, характеристик и цен

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

Всем привет! Меня зовут Александр, в данное время я на фрилансе занимаюсь проектом по созданию очередного маркетплейса. В процессе работы мы столкнулись с далеко не новой проблемой организации хранения информации о товарах, имеющих различные характеристики и цену, зависящую от характеристик. На нашем проекте применяется принцип CQRS: запись осуществляется в Postgres, чтение происходит из OpenSearch, а данные между ними перемещаются по шине, реализованной на Kafka. Такой подход обусловил использование реляционной БД для решения несвойственной ей задачи.

Чтобы увидеть, почему эта задача не нак проста, как кажется с первого взгляда, представим, что в нашем каталоге есть футболки мужские всего с двумя атрибутами: цвет и размер. Мы хотим хранить товар с названием "Футболка Junior Developer", она представлена в синем, красном и зеленом цветах, и каждый цвет доступен в нескольких размерах. Добавляя немного сложности, представим, что цена конкретной футболки также варьируется в зависимости от цвета и размера. Как представить эту сущность в реляционной базе данных, с учетом того, что продавец футболки может в какой-то момент добавить новые атрибуты для своего товара, например, габариты упаковки для отправки (длина, ширина, высота)?

С одной стороны, можно использовать подход: Entity-Attribute-Value. Он позволяет гибко настраивать связи между сущностями, их атрибутами и значениями, сохраняя возможность динамического добавления новых атрибутов сущности. Однако у такого подхода есть свои недостатки. На них останавливаться не буду - в статье: "Замена EAV на JSONB в PostgreSQL" они приведены, также там есть сравнение по производительности и памяти EAV и JSONB.

Читать далее
Всего голосов 15: ↑12 и ↓3 +9
Комментарии 15

Собирательный образ Junior Android Developer. Какой он в 2024?

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

С каждым годом мобильные приложения становятся неотъемлемой частью нашей повседневной жизни, укрепляя свою позицию. Они интегрировались в различные аспекты делая нашу жизнь более удобной. В свете растущего интереса к сфере IT, не мало людей стремятся попасть в мир мобильной разработки, будь то Android или iOS.

В этой статье мы поговорим про разработку на платформе Android, рассмотрим на что может рассчитывать Junior Android Developer и какие навыки ему для этого потребуются. Кроме того, предоставим ресурсы и материалы, которые помогут в приобретении необходимых навыков.

Читать далее
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 7

Как я перешёл на тёмную сторону: путь из Андроида в бэкенд

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

Привет, Хабр! Меня зовут Андрей. 7 лет я разрабатываю под Android. Год назад я писал код для мобильного приложения банка и особо не задумывался о переходе на другие задачи.

В один прекрасный день мне прилетела таска — добавить параметр в диплинк на Андроиде. Потом меня попросили добавить его ещё и на бэке. Я закоммитил, запушил, проверил — всё работает. Ребята в шутку предложили мне перейти в бэкендеры из Андроида. Тут я задумался, а шутка ли это, челлендж показался мне интересным.

Расскажу о своих экспериментах с бэком в формате дневника — вдруг вы решите повторить мой опыт или поделитесь, как проходили этот путь сами.

Читать далее
Всего голосов 31: ↑30 и ↓1 +29
Комментарии 8

Как работать с Kafka-consumer в Spring-проектах

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

Эта статья сборник небольших рекомендаций как работать с Kafka-consumer в Spring основанных на личном опыте.

Читать далее
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 2

Kotlin Object Multiplatform Mapper

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

Складывается такое впечатление, что дописать свою приложение для Android мне суждено не скоро. Каждый раз начиная писать новую версию (так как старая была написана не до конца, использовалась только мной, а через пару-тройку лет простоя - проще написать заново) своего приложения задуманного еще в 2012 году, я сталкиваюсь с ситуацией, что мне не хватает какого-то функционала и начинаю писать свои библиотеки для этого. В первую попытку это был свой ORM (UcaOrm 1, 2, 3). Во вторую KCron - KMP библиотека, реализующая Cron. И вот, начав следующую итерацию, я вновь в таком же положении. Но обо всем по порядку!

Читать далее
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 3

Вклад авторов