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 Home
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.
Вышел 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
Гайд по прохождению System design интервью
Подробный алгоритм прохождения архитектурной секции интервью с учетом мобильной специфики на примере ленты Твиттера:
- Как правильно собирать требования и какие уточняющие вопросы задавать
- Как отрисовать общую архитектурную схему и какие компоненты показать
- Как подойти к дизайну взаимодействия с бэкендом
- Как обсуждать организацию хранения данных
- Какие дополнительные темы могут всплывать
Подробный алгоритм прохождения архитектурной секции интервью с учетом мобильной специфики на примере ленты Твиттера:
- Как правильно собирать требования и какие уточняющие вопросы задавать
- Как отрисовать общую архитектурную схему и какие компоненты показать
- Как подойти к дизайну взаимодействия с бэкендом
- Как обсуждать организацию хранения данных
- Какие дополнительные темы могут всплывать
Подкаст про MockK
MockK – одна из популярных библиотек для создания моков в Kotlin. С ее автором записали эпизод подкаста The Developers’ Bakery, в котором разобрали нюансы работы с моками в JVM, отличия MockK от других библиотек, детали его реализации и оптимизации перфоманса.
MockK – одна из популярных библиотек для создания моков в Kotlin. С ее автором записали эпизод подкаста The Developers’ Bakery, в котором разобрали нюансы работы с моками в JVM, отличия MockK от других библиотек, детали его реализации и оптимизации перфоманса.
Gradle 8.0-RC
Вышла предрелизная версия Gradle. Большая часть касается улучшений поддержки KTS в Gradle:
- Появилась поддержка всех языковых и stdlib фичей Kotlin выше версии 1.4.0.
- Убрали лок на Java 8 для компиляции скриптов.
- Компиляция скриптов ускорена на 20% за счет кастомного интерпретатора для блока plugins {}.
Учитывая, что вместе с этим в Android Studio Canary в несколько раз улучшили перфоманс IDE, все движется к тому, что скоро .gradle.kts станет дефолтной опцией для написания билдскриптов.
Кроме этого, в Gradle 8.0 много улучшений для configuration cache и buildSrc билдов.
Вышла предрелизная версия Gradle. Большая часть касается улучшений поддержки KTS в Gradle:
- Появилась поддержка всех языковых и stdlib фичей Kotlin выше версии 1.4.0.
- Убрали лок на Java 8 для компиляции скриптов.
- Компиляция скриптов ускорена на 20% за счет кастомного интерпретатора для блока plugins {}.
Учитывая, что вместе с этим в Android Studio Canary в несколько раз улучшили перфоманс IDE, все движется к тому, что скоро .gradle.kts станет дефолтной опцией для написания билдскриптов.
Кроме этого, в Gradle 8.0 много улучшений для configuration cache и buildSrc билдов.
This media is not supported in your browser
VIEW IN TELEGRAM
Android приложение, написанное ChatGPT
За 78 вопросов и ответов к ChatGPT автор получил приложение, которое выводит 50 популярных бумаг с их ценами. Весь проект настроен и код сгенерирован нейронкой, а баги, если появлялись, исправлялись тоже с помощью чат-бота.
Код на GitHub
За 78 вопросов и ответов к ChatGPT автор получил приложение, которое выводит 50 популярных бумаг с их ценами. Весь проект настроен и код сгенерирован нейронкой, а баги, если появлялись, исправлялись тоже с помощью чат-бота.
Код на GitHub
Опыт использования Compose Desktop в продакшне
- Фреймворк лучше всего подходит для написания приложений, которым не требуется тесная интеграция с системой.
- Например, компонент для реализации меню в Tray выглядит и работает нормально в macOS, но на Windows он устаревший. А поддержки действий с уведомлениями вообще нет.
- Вызывать нативные API платформы тоже довольно больно, хотя и теоретически возможно.
Документация и примеры
- Фреймворк лучше всего подходит для написания приложений, которым не требуется тесная интеграция с системой.
- Например, компонент для реализации меню в Tray выглядит и работает нормально в macOS, но на Windows он устаревший. А поддержки действий с уведомлениями вообще нет.
- Вызывать нативные API платформы тоже довольно больно, хотя и теоретически возможно.
Документация и примеры