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

Kotlin *

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

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

Осознанная оптимизация Compose

Уровень сложности Средний
Время на прочтение 28 мин
Количество просмотров 229
Блог компании Ozon Tech Программирование *Разработка мобильных приложений *Разработка под Android *Kotlin *
Туториал

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

Наша команда Ozon Seller также столкнулась с этой проблемой. Мы решили собрать воедино все советы и наработки по написанию оптимизированного Compose-кода. Активное применение этих советов при оптимизации существующих экранов и написании новых существенно улучшило наши метрики: длительность лага по отношению к длительности скролла (hitch rate; чем меньше, тем лучше) экранов со списками упала в среднем с 15-19 % до 5-7 % (на 90-м перцентиле). Все эти советы и наработки мы описали в этой статье. Она будет полезна и начинающим, и опытным разработчикам, в ней подробно описаны оптимизации и механизмы Compose, а также рассказано про слабо задокументированных особенности и исправления ошибок, которые есть в других статьях. Давайте же начнём.

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

Новости

Реализация Transactional outbox pattern и немного DDD

Уровень сложности Средний
Время на прочтение 8 мин
Количество просмотров 2.8K
Программирование *Java *Kotlin *Микросервисы *

Уверен, что многие, кто интересовался подходами к разработке микросервисной архитектуры, знакомы с трудами Криса Ричардсона на эту тему и уже встречали transactional outbox pattern. А для тех, кто не знаком, кратко расскажу основную идею:

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

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

Kotlin вместо bash. Прокачиваем автоматизацию на сервере

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 2.7K
Блог компании OTUS Системное администрирование *Kotlin *
Туториал

Для решения задач автоматизации рутинных процессов для системных администраторов и DevOps чаще всего используются или bash-сценарии или python. Первое решение косвенно используется и в описании Dockerfile, поскольку сценарий исполняемых команд принципиально ничем не отличается от запуска скрипта в какой-либо shell, второй подход чаще ассоциируется с автоматизацией, связанных с взаимодействием с хранилищами данных. Но несправедливо было бы обойти стороной возможность создания исполняемых сценариев на языке Kotlin, которые могут стать полноценной заменой bash-сценариям.

В этой статье мы рассмотрим несколько примеров использования Kotlin Scripting (KTS) для автоматизации в распределенной системе, будем использовать долгоживущие скрипты с ожиданием заданий через RabbitMQ, а также поработаем с файловой системой, внешними сервисами, а также попробуем использовать KTS для сборки Docker-контейнеров.

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

Кто и в каких задачах быстрее? Coroutines, RxJava, Executor?

Уровень сложности Простой
Время на прочтение 14 мин
Количество просмотров 3.5K
Блог компании Циан Java *Разработка мобильных приложений *Разработка под Android *Kotlin *
FAQ

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

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

Истории

Где и как можно ускорить приложение на Android

Уровень сложности Средний
Время на прочтение 14 мин
Количество просмотров 3.2K
Блог компании Яндекс Разработка мобильных приложений *Разработка под Android *Kotlin *

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

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

Пост рекомендуется к прочтению:

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

— продуктовым и техническим менеджерам для осознания, что можно довольно дешёвыми способами ускорить приложение;

— UX‑дизайнерам, чтобы удостовериться, что мобильные приложения должны быть быстрыми и в это нужно вкладываться.

Почерпнуть, осознать, удостовериться
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 9

Расширение Kafka для взаимодействия с TDEngine

Уровень сложности Средний
Время на прочтение 9 мин
Количество просмотров 1K
Блог компании OTUS Высокая производительность *IT-инфраструктура *Kotlin *Распределённые системы *
Туториал

Apache Kafka нередко используется как инструмент накопления истории событий или посредник для взаимодействия микросервисов, работающих с разной скоростью или ожидающих доступа к историческим данным для анализа трендов исторических данных (и в этом случае может использоваться как альтернативное решение для Time Series Database). В большинстве случаев в роли producer и consumer выступают сетевые приложения, которые взаимодействуют через драйвер с поддержкой протокола Kafka, но иногда требуется настроить интеграцию с унаследованными системами или готовыми решениями и для этого может использоваться вспомогательный инструмент Kafka Connect, представляющий большое количество готовых коннекторов. В первой части статьи мы рассмотрели способ создания коннектора для опроса REST API и анализа данных с использованием Hazelcast. В этой статье мы последовательно разберемся с созданием коннекторов для пересылки сообщений из топика во внешнюю систему (Sink Connector) для отправки данных из Kafka в TSDB базу данных TDEngine, а также обсудим, как можно выполнить нагрузочное тестирование всего стека с использованием xk6-kafka.

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

Не один только Ktor. Микрофреймворк Jooby

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 917
Блог компании OTUS Kotlin *
Туториал

Когда речь заходит о создании REST-сервера для Kotlin часто на ум приходит фреймворк Ktor (от Jetbrains), использующий важные особенности Kotlin, такие как корутины и DSL-синтаксис. Ktor является модульным решением, для которого созданы расширения для всех наиболее важных аспектов разработки бэкэнда (безопасность, маршрутизация, сериализация данных, применение шаблонов, поддержка сетевых протоколов, управление сессиями, операции с заголовками, извлечение метрик и автоматическая генерация документации по API). Однако это не единственный веб-фреймворк и в некоторых случаях его синтаксис оказывается несколько запутанным (например, операции взаимодействия с неявным объектом call внутри корутин обработки запросов). В этой статье мы рассмотрим альтернативный фреймворк Jooby, который предоставляет схожий с Ktor набор функциональности, но дает больше свободы в выборе механизмов неблокирующей многозадачности и, в ряде случаев, более короткий и явный синтаксис, а также показывает более высокую производительность по результатам тестов.

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

Compose-recompose: почему происходят рекомпозиции и как уменьшить их количество

Время на прочтение 17 мин
Количество просмотров 3.8K
Блог компании Яндекс Программирование *Разработка мобильных приложений *Kotlin *Jetpack Compose *

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

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

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

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

Обработка данных в реальном времени из API через Apache Kafka + Hazelcast

Уровень сложности Средний
Время на прочтение 16 мин
Количество просмотров 1.3K
Блог компании OTUS Высокая производительность *IT-инфраструктура *Kotlin *Распределённые системы *
Туториал

Для надежной поточной обработки данных в реальном времени и принятия решений на основе анализа данных из внешнего источника нужно обеспечить организацию конвейера обработки и хранения данных, который может быть кластеризирован и распараллелен для достижения необходимой производительности и отказоустойчивости. Кроме того, нужно обеспечить механизм своевременной доставки обновленных данных (на основе периодического опроса или использования Web Sockets/SSE) в систему анализа, которая также должна иметь доступ к истории изменений (например, для анализа тренда или получения усредненных значений по временному окну). В этой статье мы поговорим про использование Apache Kafka совместно с Hazelcast для анализа данных в реальном времени, а также разработаем коннектор для Kafka Connect для извлечения данных из внешнего источника (на примере WeatherStack API)

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

Как заходить в android automation (часть 1 — Kotlin для тестировщика)

Уровень сложности Простой
Время на прочтение 12 мин
Количество просмотров 1.6K
Разработка под Android *Kotlin *
Роадмэп

В интернетах не так много гайдов, как можно освоить нативную мобильную автоматизацию. Многие отказываются от этой затеи, потому что сложно. Поэтому я решил написать цикл статей, которые на мой взгляд, могут помочь в освоении этого ремесла.... (часть 1 - Kotlin для тестировщика)

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

Пару слов о полях и свойствах в Kotlin

Время на прочтение 3 мин
Количество просмотров 1.5K
Блог компании OTUS Разработка под Android *Kotlin *
Перевод

Терминология свойств и полей в Kotlin может немного сбивать с толку, потому что технически в Kotlin нет полей. Вы не можете объявить поле. Все — свойства! Однако, во избежании путаницы, я предпочитаю разделять определения полей и свойств на следующей основе — полями являются приватные переменные-члены класса. Это то, для чего выделена память. Свойствами являются публичные или защищенные (protected) функциями геттеры и сеттеры, которые позволяют вам получить доступ к приватным полям.

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

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

Java Digest #1

Уровень сложности Простой
Время на прочтение 5 мин
Количество просмотров 5.5K
Блог компании TINKOFF Программирование *Java *Kotlin *
Дайджест

Всем привет! 👋 👋 👋

Мы — Java-разработчики Тинькофф: Константин, Андрей и Арсений. Собираем интересные новости, статьи, туториалы и другие материалы из мира Java-разработки и решили делиться этим не только с коллегами, но и со всем сообществом. 

Льюис Кэрролл писал: «Нужно бежать со всех ног, чтобы только оставаться на месте, а чтобы куда-то попасть, надо бежать как минимум вдвое быстрее!» Надеемся, что поможем немного сберечь силы в этом марафоне всем читателям. Stay tuned! 😉

Читать первый выпуск
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 3

Своя библиотека под Android за один вечер

Уровень сложности Простой
Время на прочтение 6 мин
Количество просмотров 2.5K
Разработка мобильных приложений *Разработка под Android *Kotlin *
Туториал
В процессе написания статьи она незаметно для меня трансформировалась из туториала по публикации Android-проекта как библиотеки в максимально душную статью о том, как математика пригодилась разработчику с гуманитарным бэкграундом в отрисовке анимашек. Статью подробную, разжеванную, с множеством строк кода. Возможно, не для слабонервных.

Что, если у вас появилась потребность использовать один и тот же код на Jetpack Compose между несколькими проектами, да еще так, чтобы он импортировался одинаково и автоматически на нескольких машинах? Такая ситуация может возникнуть с большой вероятностью, потому что Compose не блещет обилием предоставляемых из коробки виджетов и тулзов (хотя их количество постоянно растет). Быть может, ваш дизайнер пришел к вам с чем-то настолько диковинным, что готовыми компонентами просто не обойтись. Тогда тот пайплайн разработки и публикации собственной библиотеки, который я опишу ниже, может оказаться для вас полезным.

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


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

Практическое руководство по Jetpack Compose: создаем анимированную кнопку-счетчик

Время на прочтение 26 мин
Количество просмотров 1.1K
Блог компании OTUS Разработка под Android *Kotlin *Jetpack Compose *
Перевод

Недавно передо мной возникла необходимость создать кнопку счетчика для небольшого приложения. Бороздя просторы интернета в поисках хороших готовых решений, я наткнулся на этот дизайн от Эхсана Рахими (Ehsan Rahimi) на Dribble. Придя к выводу, что воссоздать его в Compose — задача нетривиальная, я закатал рукава и принялся экспериментировать. В этом руководстве я поделюсь с вами каждым шагом, который я предпринял для реализации этого дизайна в Jetpack Compose.

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

Масштабируемая Big Data система в Kubernetes с использованием Spark и Cassandra

Уровень сложности Средний
Время на прочтение 39 мин
Количество просмотров 2.2K
Java *Big Data *Kotlin *
Туториал
💼 Сезон Big Data

В предыдущей статье я рассказал, как организовать систему распределенного машинного обучения на GPU NVidia, используя язык Java с фреймворками Spring, Spark ML, XGBoost, DJL в standalone кластере Spark. Особенностью поставленной задачи являлось организация системы под управлением ОС Windows 10 Pro, в Docker‑контейнерах. Эксперимент оказался не вполне успешным. В данной статье я покажу, как воспользоваться имеющимися наработками и запустить Spark Jobs в Kubernetes в режимах client и cluster, опишу особенности работы с Cassandra в Spark, покажу пример обучения модели и ее дальнейшего использования. В этот раз буду использовать язык Kotlin. Репозиторий с кодом доступен на GitLab.

Данная статья представляет интерес для тех, кто интересуется системами Big Data и стремится создать систему, позволяющую, в том числе, выполнять задачи распределенного машинного обучения на Spark в Kubernetes, используя GPU NVidia и Cassandra для хранения данных.

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

Многопоточность в мобильной разработке

Уровень сложности Средний
Время на прочтение 26 мин
Количество просмотров 6.6K
Java *Разработка мобильных приложений *Разработка под Android *Kotlin *
Из песочницы

Всем привет! На связи Сергей, Android-разработчик Студии Олега Чулакова на проектах Сбера.

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

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

COROUTINES-23: code review fixes

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 3.7K
Блог компании Альфа-Банк Разработка под Android *Kotlin *Управление разработкой *
Кейс

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

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

Как в 3 раза снизить затраты на отказоустойчивую инфраструктуру, переехав с Hazelcast на Redis

Уровень сложности Простой
Время на прочтение 10 мин
Количество просмотров 3.3K
Блог компании Альфа-Банк Java *Администрирование баз данных *Kotlin *
Туториал

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

Читать далее
Всего голосов 29: ↑28 и ↓1 +27
Комментарии 16

Интеграция рекламы в Android-приложение: Yandex Mobile Ads Vs. Google AdMob

Уровень сложности Средний
Время на прочтение 13 мин
Количество просмотров 1.7K
Блог компании SimbirSoft Программирование *Разработка мобильных приложений *Разработка под Android *Kotlin *
Туториал

Привет, Хабр! Меня зовут Александр, я Android-разработчик в IT-компании SimbirSoft. В конце 2022 года на одном из проектов мы с командой столкнулись с трудностями в работе мобильной рекламы — тогда у нас была подключена сеть AdMob от Google. Приходилось искать много обходных путей для продолжения монетизации приложения. Поэтому решили мигрировать на платформу, с которой не будет проблем из-за санкций. Коллеги-аналитики взялись изучить доступные платформы. 

Я поделюсь результатами этой работы и совместными выводами. Но главным образом разберу процесс интеграции Google AdMob и Yandex SDK, их плюсы и минусы, шаги интеграции, и расскажу, почему мы выбрали Yandex SDK. 

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

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

Пишем Telegram-бота для скачивания видео из VK на Spring Boot и деплоим в Kubernetes

Уровень сложности Сложный
Время на прочтение 10 мин
Количество просмотров 5.9K
Программирование *Java *Kotlin *Kubernetes *

В последнее время на Хабре несколько раз всплывала тема загрузки видео из VK для дальнейшего просмотра оффлайн. Я решил подойти к этому вопросу немного с другой стороны, и решить вопрос с помощью телеграм-бота.

Таким образом, убиваем сразу нескольких зайцев:

не нужно ставить никаких дополнительный приложений или плагинов: скорее всего Telegram и так уже установлен на телефоне и/или на компе;

автоматическая синхронизация видео между устройствами - поставили на закачку на компе, пошли на улицу, а тот же файл - в телефоне;

Telegram позволяет загружать файлы для последующего просмотра/прослушивания оффлайн, и это работает с выключенным экраном из коробки (привет, премиум подписки vk/youtube).

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

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