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
Гайд по прохождению 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 платформы тоже довольно больно, хотя и теоретически возможно.
Документация и примеры