Что ждете больше всего?
Anonymous Poll
13%
Стабильный K2 компилятор
3%
Новый K2 IDE плагин
23%
Стабильный КММ
7%
Ускорение компиляции Kotlin/Native
10%
Улучшения .gradle.kts
12%
Ускорение инкрементальной компиляции в Gradle
4%
Новые языковые фичи (non local break and continue, ..<, data objects)
7%
Новые фичи стандартной библиотеки, корутин и сериализации
21%
Посмотреть результаты
Remote Development в Uber
Отличная статья для тех, кто любит читать, как решаются проблемы в огромных командах разработки. После переезда всех сервисов и приложений Uber в монорепозиторий заметно просела скорость сборки и сложность поднятия локального окружения. Чтобы решить проблему, команда реализовала возможность быстрого поднятия контейнера с преднастроенным рабочим окружением, к которому можно коннектиться с помощью remote development фичей IntelliJ и VSCode.
В статье детали про архитектуру решения, его плюсы и известные проблемы.
Отличная статья для тех, кто любит читать, как решаются проблемы в огромных командах разработки. После переезда всех сервисов и приложений Uber в монорепозиторий заметно просела скорость сборки и сложность поднятия локального окружения. Чтобы решить проблему, команда реализовала возможность быстрого поднятия контейнера с преднастроенным рабочим окружением, к которому можно коннектиться с помощью remote development фичей IntelliJ и VSCode.
В статье детали про архитектуру решения, его плюсы и известные проблемы.
Все про работу со стейтом в Compose
var enabled by remember { mutableStateOf(true) }
☁️mutableStateOf(true) создает объект типа MutableState<Boolean>, который содержит сам стейт
☁️Функция remember говорит фреймворку о том, что выполнять лямбду при каждой рекомпозиции не нужно
☁️Ключевое слово by позволяет работать с переменной enabled как с Boolean
Статья начинается с разбора того, как именно определяется стейт, а затем уходит в детали:
🧷Что будет, если опустить что-то из перечисленных выше шагов
🧷Чем отличаются stateful и stateless composables, и когда стейт нужен
🧷Почему TextInput должен быть stateful
🧷Работа со стейтом во ViewModel
🧷Представление стейта с помощью Flow, rxJava и LiveData
var enabled by remember { mutableStateOf(true) }
☁️mutableStateOf(true) создает объект типа MutableState<Boolean>, который содержит сам стейт
☁️Функция remember говорит фреймворку о том, что выполнять лямбду при каждой рекомпозиции не нужно
☁️Ключевое слово by позволяет работать с переменной enabled как с Boolean
Статья начинается с разбора того, как именно определяется стейт, а затем уходит в детали:
🧷Что будет, если опустить что-то из перечисленных выше шагов
🧷Чем отличаются stateful и stateless composables, и когда стейт нужен
🧷Почему TextInput должен быть stateful
🧷Работа со стейтом во ViewModel
🧷Представление стейта с помощью Flow, rxJava и LiveData
У Сбера появилась платформа для разработчиков html-игр.
Здесь каждый может не только получить новый канал продвижения, но и монетизировать свои разработки — достаточно адаптировать игру под пульт, загрузить в каталог хостинга Сбера и начать зарабатывать на in-app покупках и рекламных интеграциях.
Для геймдевелоперов у Сбера действует ежемесячная программа мотивации.
Все подробности здесь
Здесь каждый может не только получить новый канал продвижения, но и монетизировать свои разработки — достаточно адаптировать игру под пульт, загрузить в каталог хостинга Сбера и начать зарабатывать на in-app покупках и рекламных интеграциях.
Для геймдевелоперов у Сбера действует ежемесячная программа мотивации.
Все подробности здесь
Как устроен и работает Kotlin DSL для описания конфига GitHub Actions
Автор проекта github-workflows-kt рассказывает о том, как настрадался с описанием конфигурации CI с помощью YAML и решил переписать все на Kotlin DSL.
Самое интересное в статье – то, как автор подошел к вопросам дизайна, выделял основные сущности и исправлял проблемы большого количества дублирующихся сущностей в YAML.
Автор проекта github-workflows-kt рассказывает о том, как настрадался с описанием конфигурации CI с помощью YAML и решил переписать все на Kotlin DSL.
Самое интересное в статье – то, как автор подошел к вопросам дизайна, выделял основные сущности и исправлял проблемы большого количества дублирующихся сущностей в YAML.
KotlinDL теперь на Android
ONNX – это спецификация deep learning моделей, которая поддерживается большинством фреймворков для их обучения, например, TensorFlow. KotlinDL дает возможность запускать такие модели прямо на устройстве с помощью простого API.
Вместе с библиотекой идут несколько уже обученных моделей для следующих задач:
👀Определение объектов
🌅Классификация изображений
💃Распознавание поз
😊Распознавание лиц
🫠Выравнивание лиц
Что еще есть в библиотеке:
- DSL для препроцессинга изображений до передачи их нейронке, с готовыми функциями для кропа, изменения масштаба и поворота.
- Поддержка аппаратного ускорения на девайсах со специальным железом.
- Поддержка любых кастомных ONNX моделей, которые обучили вы сами.
Делитесь фидбэком в комментариях, команде он очень важен!
ONNX – это спецификация deep learning моделей, которая поддерживается большинством фреймворков для их обучения, например, TensorFlow. KotlinDL дает возможность запускать такие модели прямо на устройстве с помощью простого API.
Вместе с библиотекой идут несколько уже обученных моделей для следующих задач:
👀Определение объектов
🌅Классификация изображений
💃Распознавание поз
😊Распознавание лиц
🫠Выравнивание лиц
Что еще есть в библиотеке:
- DSL для препроцессинга изображений до передачи их нейронке, с готовыми функциями для кропа, изменения масштаба и поворота.
- Поддержка аппаратного ускорения на девайсах со специальным железом.
- Поддержка любых кастомных ONNX моделей, которые обучили вы сами.
Делитесь фидбэком в комментариях, команде он очень важен!
This media is not supported in your browser
VIEW IN TELEGRAM
Самое простое интро в шейдеры
Если вы никогда не писали свои шейдеры, и просто киваете с умным видом, когда кто-то начинает говорить про оптимизированный под GPU код, обязательно прочитайте статью.
💻Отличие CPU от GPU в вопросах вычислений
🤔Ограничения в разработке шейдеров
🎨Примеры шейдеров
Если вы никогда не писали свои шейдеры, и просто киваете с умным видом, когда кто-то начинает говорить про оптимизированный под GPU код, обязательно прочитайте статью.
💻Отличие CPU от GPU в вопросах вычислений
🤔Ограничения в разработке шейдеров
🎨Примеры шейдеров
Yatagan – новый DI фреймворк
- Ребята из Яндекс Браузера написали и заопенсорсили новый DI фреймворк, практически полностью совместимый с Dagger по API. Его основной плюс в том, что он ускорил сборку их проекта в два раза.
- В статье с большим количеством деталей разбирается история управления зависимостями в их проекте, архитектура и реализация Yatagan.
- Ребята из Яндекс Браузера написали и заопенсорсили новый DI фреймворк, практически полностью совместимый с Dagger по API. Его основной плюс в том, что он ускорил сборку их проекта в два раза.
- В статье с большим количеством деталей разбирается история управления зависимостями в их проекте, архитектура и реализация Yatagan.
Как измерить, сколько времени выполняется блок кода
Самый простой способ узнать, сколько времени уходит на выполнение какого-то куска кода – обернуть его в экспериментальную функцию стандартной библиотеки measureTime. После выполнения лямбды возвращается объект Duration, содержащий информацию о времени ее исполнения.
Самый простой способ узнать, сколько времени уходит на выполнение какого-то куска кода – обернуть его в экспериментальную функцию стандартной библиотеки measureTime. После выполнения лямбды возвращается объект Duration, содержащий информацию о времени ее исполнения.
Architecture Templates от Google
Google завернули все свои архитектурные рекомендации в несколько шаблонов на GitHub.
Google завернули все свои архитектурные рекомендации в несколько шаблонов на GitHub.
apk.sh – консольный инструмент для реверс-инжиниринга
- Скрипт помогает автоматизировать рутинные задачи реверс-инжиниринга, в том числе загрузку, декодирование и патчинг APK.
- Под капотом используется apktool и frida.
- Скрипт помогает автоматизировать рутинные задачи реверс-инжиниринга, в том числе загрузку, декодирование и патчинг APK.
- Под капотом используется apktool и frida.
Релиз-трейны в команде Додо
Чем больше становится количество команд, разрабатывающих фичи в мобильном приложении, тем сложнее организовывать feature-driven релизы – теряется предсказуемость, повышается сложность тестирования интеграции фичей друг с другом.
Стандартное решение проблемы – организация релизного поезда. Все релизы катятся по строгому расписанию, вне зависимости от статуса готовности конкретных фичей. Фича готова – значит, попадет в релиз. Чуть-чуть не успели – поедет в следующий.
Команда Додо рассказала, какие проблемы в процессах подтолкнули их к организации релиз-трейнов, как они внедряли новый процесс, и как он повлиял на метрики разработки: lead time и среднее количество дефектов на релиз.
Чем больше становится количество команд, разрабатывающих фичи в мобильном приложении, тем сложнее организовывать feature-driven релизы – теряется предсказуемость, повышается сложность тестирования интеграции фичей друг с другом.
Стандартное решение проблемы – организация релизного поезда. Все релизы катятся по строгому расписанию, вне зависимости от статуса готовности конкретных фичей. Фича готова – значит, попадет в релиз. Чуть-чуть не успели – поедет в следующий.
Команда Додо рассказала, какие проблемы в процессах подтолкнули их к организации релиз-трейнов, как они внедряли новый процесс, и как он повлиял на метрики разработки: lead time и среднее количество дефектов на релиз.
Мини-курс по Rust от команды Android
Сравнительно недавно в AOSP занесли Rust для разработки части компонентов операционной системы. Чтобы разработчикам было проще заонбордиться, команда выпустила четырехдневный курс по Rust для новичков. Задачи курса – познакомить с базовым синтаксисом и концепциями языка, а заодно погрузить в Android-related специфику.
Если вы еще не придумали, чем заняться на новогодних каникулах, знакомство с Rust может быть отличной идеей!
Сравнительно недавно в AOSP занесли Rust для разработки части компонентов операционной системы. Чтобы разработчикам было проще заонбордиться, команда выпустила четырехдневный курс по Rust для новичков. Задачи курса – познакомить с базовым синтаксисом и концепциями языка, а заодно погрузить в Android-related специфику.
Если вы еще не придумали, чем заняться на новогодних каникулах, знакомство с Rust может быть отличной идеей!
This media is not supported in your browser
VIEW IN TELEGRAM
AdbOrc – простой шаринг Android девайсов в команде
AdbOrc создает распределенную виртуальную ферму девайсов. Им не нужно физически находиться в одном месте, достаточно просто подключить их к компьютеру и расшарить для подключения через консольную тулу.
Сеть состоит из трех ролей:
📲Supplier – тот, кто предоставляет свой девайс для использования.
💻Consumer – тот, кто подключается к чужому девайсу.
🔄MarketMaker – хаб, который регистрирует девайсы и менеджерит доступ к ним.
На каждый расшаренный девайс стартует ADB сервер, информация о котором расшаривается через MarketMaker. Для доступа к экрану девайса используется
AdbOrc на GitHub
AdbOrc создает распределенную виртуальную ферму девайсов. Им не нужно физически находиться в одном месте, достаточно просто подключить их к компьютеру и расшарить для подключения через консольную тулу.
Сеть состоит из трех ролей:
📲Supplier – тот, кто предоставляет свой девайс для использования.
💻Consumer – тот, кто подключается к чужому девайсу.
🔄MarketMaker – хаб, который регистрирует девайсы и менеджерит доступ к ним.
На каждый расшаренный девайс стартует ADB сервер, информация о котором расшаривается через MarketMaker. Для доступа к экрану девайса используется
scrcpy.
Все соединения шифруются.AdbOrc на GitHub
Pager API переезжает из Accompanist в Compose
API для работы с горизонтальными и вертикальными лэйаутами с постраничной прокруткой переезжает из Accompanist в Compose 1.4.0. Пока что под экспериментальным флагом.
API для работы с горизонтальными и вертикальными лэйаутами с постраничной прокруткой переезжает из Accompanist в Compose 1.4.0. Пока что под экспериментальным флагом.
История одного крэша
Расследование причин крэша с NoClassDefFoundError, который происходил на 21 API и сборке без R8. Спойлер –вся проблема в ограничении количества dex файлов в 100 штук на старых версиях Android .
Расследование причин крэша с NoClassDefFoundError, который происходил на 21 API и сборке без R8. Спойлер –
Обзор редко используемых фичей Kotlin
В статье разбирается несколько полезных, но сравнительно редко используемых фичей Kotlin:
👉fun interface / function types
👉type alias
👉import alias
👉value class
👉data object
В статье разбирается несколько полезных, но сравнительно редко используемых фичей Kotlin:
👉fun interface / function types
👉type alias
👉import alias
👉value class
👉data object
kau.sh
A few Kotlin constructs · Kaushik Gopal's Site
A few Kotlin constructs have been introduced into the language over time. I wrote this post as a personal/public service advisory to remind us of their significance.
Would love to credit img owner 1. fun interface (SAM) 1.1. (vs) function types 2. type alias…
Would love to credit img owner 1. fun interface (SAM) 1.1. (vs) function types 2. type alias…
Вышел Kotlin 1.8.0
- Значительна улучшена производительность kotlin-reflect
- Новый флаг -Xdebug, который отключает все оптимизации во время дебага
- Удален старый Kotlin/JVM бэкенд
- Новые аннотации в Kotlin/Native для улучшения интеропа с Objective-C/Swift
- Стабилизирован новый Kotlin/JS бэкенд
- Совместимость с Gradle 7.3
- Компиляторные флаги теперь можно задавать с помощью удобного Gradle DSL
- Значительна улучшена производительность kotlin-reflect
- Новый флаг -Xdebug, который отключает все оптимизации во время дебага
- Удален старый Kotlin/JVM бэкенд
- Новые аннотации в Kotlin/Native для улучшения интеропа с Objective-C/Swift
- Стабилизирован новый Kotlin/JS бэкенд
- Совместимость с Gradle 7.3
- Компиляторные флаги теперь можно задавать с помощью удобного Gradle DSL