Почему yaml – плохой формат
Скорее всего, до вас долетали обрывки споров про то, насколько хорошая идея использовать yaml для различных конфигов.
Все сводится к тому, что спецификация Yaml на порядок сложнее, чем JSON. Например, спека предусматривает 63 разных способа объявления multiline строк. Кроме того, она еще и значительно меняется от версии к версии.
Вот несколько примеров непредсказуемого поведения YAML конфигов:
*️⃣`- 22:22` в зависимости от версии парсера может быть прочитана как строка, а может – как число 1342.
*️⃣Некоторые символы считываются как строки, а некоторые оказываются зарезервированы под что-то еще. Например,
*️⃣Если где-то в конфиге встретится строчка
*️⃣Не стоит использовать
Скорее всего, до вас долетали обрывки споров про то, насколько хорошая идея использовать yaml для различных конфигов.
Все сводится к тому, что спецификация Yaml на порядок сложнее, чем JSON. Например, спека предусматривает 63 разных способа объявления multiline строк. Кроме того, она еще и значительно меняется от версии к версии.
Вот несколько примеров непредсказуемого поведения YAML конфигов:
*️⃣`- 22:22` в зависимости от версии парсера может быть прочитана как строка, а может – как число 1342.
*️⃣Некоторые символы считываются как строки, а некоторые оказываются зарезервированы под что-то еще. Например,
- *.png
– невалидный сниппет, так как * зарезервирована. А - !.git
будет считан, как пустая строка.*️⃣Если где-то в конфиге встретится строчка
- no,
она будет интерпретирована как false, а не как строка. У этого поведения есть даже свое имя – Norway problem, так как региональный код Норвегии, который часто можно встретить в таких конфигах, тоже no. Ах да, так ведет себя только самая новая версия yaml, что добавляет веселья.*️⃣Не стоит использовать
~,
так как это алиас для null.Ruudvanasseldonk
The yaml document from hell
As a data format, yaml is extremely complicated and it has many footguns. In this post I explain some of those pitfalls by means of an example, and I suggest a few simpler and safer yaml alternatives.
Уроки из реализации swipe to dismiss на Compose
Swipe to dismiss – довольно стандартная фича, реализация которой не должна занимать много времени. Тем не менее, автор статьи потратил три дня на дебаг нескольких неочевидных моментов, которыми и делится в статье.
Swipe to dismiss – довольно стандартная фича, реализация которой не должна занимать много времени. Тем не менее, автор статьи потратил три дня на дебаг нескольких неочевидных моментов, которыми и делится в статье.
Compose BOM для альфа версий компонентов
Недавно Google начал публиковать Gradle BOM для всех Compose зависимостей. Его использование освобождает вас от необходимости менеджерить все версии вручную.
Если вы хотите использовать в проекте не стабильные версии зависимостей, а альфа, первым получая все экспериментальные фичи, то можете переключиться на неофициальный автообновляемый BOM по ссылке.
Недавно Google начал публиковать Gradle BOM для всех Compose зависимостей. Его использование освобождает вас от необходимости менеджерить все версии вручную.
Если вы хотите использовать в проекте не стабильные версии зависимостей, а альфа, первым получая все экспериментальные фичи, то можете переключиться на неофициальный автообновляемый BOM по ссылке.
GitHub
GitHub - chrisbanes/compose-bom: Compose BOM (bill of materials) - alpha edition
Compose BOM (bill of materials) - alpha edition. Contribute to chrisbanes/compose-bom development by creating an account on GitHub.
This media is not supported in your browser
VIEW IN TELEGRAM
Пошаговая реализация Dynamic Island на Compose
Dynamic Island из iOS – спорный с точки зрения UX, но интересный с точки зрения реализации нестандартного UI компонент. Если вы ищете, на каких примерах потренироваться с анимациями на Compose, то как раз отлично подойдет.
Dynamic Island из iOS – спорный с точки зрения UX, но интересный с точки зрения реализации нестандартного UI компонент. Если вы ищете, на каких примерах потренироваться с анимациями на Compose, то как раз отлично подойдет.
3 причины стать мобильным разработчиком на Android
1. Реализовать идеи
Счётчик просмотренных фильмов или управление светом в холодильнике? Приложение можно создать под любую задачу, на любом компьютере, для разных устройств и брендов.
2. «Пощупать» результат
70% людей в мире, у которых есть смартфон, пользуются Android. Разработчики улучшают жизнь людей и видят отклик: всегда можно протестировать приложение на своём устройстве или почитать отзывы в магазине.
3. Зарабатывать
По данным Хабр Карьеры, начинающие Android-разработчики получают от 40 000 ₽ в месяц, а опытные уровня middle — от 120 000 ₽. Часто разработчики работают удалённо.
Если хотите попробовать себя в этой профессии, начните бесплатную вводную часть курса по Android-разработке. Она делится на два уровня: начальный и для более подготовленных. Вы с первого урока учитесь на реальных задачах и погружаетесь в рабочую среду.
Познакомьтесь с языками Java и Kotlin, напишите своё первое приложение бесплатно →
1. Реализовать идеи
Счётчик просмотренных фильмов или управление светом в холодильнике? Приложение можно создать под любую задачу, на любом компьютере, для разных устройств и брендов.
2. «Пощупать» результат
70% людей в мире, у которых есть смартфон, пользуются Android. Разработчики улучшают жизнь людей и видят отклик: всегда можно протестировать приложение на своём устройстве или почитать отзывы в магазине.
3. Зарабатывать
По данным Хабр Карьеры, начинающие Android-разработчики получают от 40 000 ₽ в месяц, а опытные уровня middle — от 120 000 ₽. Часто разработчики работают удалённо.
Если хотите попробовать себя в этой профессии, начните бесплатную вводную часть курса по Android-разработке. Она делится на два уровня: начальный и для более подготовленных. Вы с первого урока учитесь на реальных задачах и погружаетесь в рабочую среду.
Познакомьтесь с языками Java и Kotlin, напишите своё первое приложение бесплатно →
Яндекс Практикум
Курс «Android-разработчик» - онлайн-обучение разработке мобильных приложений под Андроид
Онлайн-курс «Android-разработчик» от сервиса Яндекс Практикум. 12 месяцев обучения разработке мобильных приложений под Андроид для начинающих (с нуля). Научитесь писать код на Java и Kotlin, создадите командный дипломный проект, с дипломом и помощью в трудоустройстве.
Обновленные данные Android's Platform Distribution
6 января Google обновил данные по распределению используемых версий Android. Теперь можно посмотреть, какой процент пользователей сидит на Android 13 – пока это 5%.
6 января Google обновил данные по распределению используемых версий Android. Теперь можно посмотреть, какой процент пользователей сидит на Android 13 – пока это 5%.
Scaffold в Jetpack Compose
- Scaffold – особый тип composeable, который выступает родительским элементом для всех остальных и задает основной лэйаут.
- Его основные задачи – выделять место для системных элементов вроде Top/Bottom Bars и FloatingActionButton, и автоматически применять цвета выбранной темы к бэкграунду.
- Есть несколько разных типов Scaffold. Например, BottomSheetScaffold или BackdropScaffold, которые приложены скринами к посту.
- Scaffold не обязателен для использования, и его функциональность можно реализовать вручную.
- Scaffold – особый тип composeable, который выступает родительским элементом для всех остальных и задает основной лэйаут.
- Его основные задачи – выделять место для системных элементов вроде Top/Bottom Bars и FloatingActionButton, и автоматически применять цвета выбранной темы к бэкграунду.
- Есть несколько разных типов Scaffold. Например, BottomSheetScaffold или BackdropScaffold, которые приложены скринами к посту.
- Scaffold не обязателен для использования, и его функциональность можно реализовать вручную.
Как работает Gradle
Команда Gradle начала новую серию постов про разные интересные детали того, как работает билд тулинг. В первом посте разбирается, чем отличаются разные способы запуска билда и что происходит в каждый момент под капотом.
Команда Gradle начала новую серию постов про разные интересные детали того, как работает билд тулинг. В первом посте разбирается, чем отличаются разные способы запуска билда и что происходит в каждый момент под капотом.
Бесплатные вебинары от Gradle
Только блогом активность Gradle не ограничивается. В январе пройдет несколько интересных вебинаров, которые открыты всем для участия:
📆Воркшоп по ускорению билдов и траблшутингу, 24 января
📆Интервью Николая Красько, тимлида инфраструктурной команды в Kotlin, про то, как оптимизируется опыт разработчиков внутри команды Kotlin, 25 января
📆Воркшоп по разным аспектам конфигурации Gradle с помощью Kotlin DSL, 26 января
📆Deep dive в Maven Build Cache, 31 января
Только блогом активность Gradle не ограничивается. В январе пройдет несколько интересных вебинаров, которые открыты всем для участия:
📆Воркшоп по ускорению билдов и траблшутингу, 24 января
📆Интервью Николая Красько, тимлида инфраструктурной команды в Kotlin, про то, как оптимизируется опыт разработчиков внутри команды Kotlin, 25 января
📆Воркшоп по разным аспектам конфигурации Gradle с помощью Kotlin DSL, 26 января
📆Deep dive в Maven Build Cache, 31 января
Develocity
Trainings Archive
Как Lyft собирает метрики потребления памяти в проде
Для каждой новой фичи, выпускаемой в виде эксперимента, Lyft дополнительно собирает различные технические метрики, в частности, потребление приложением памяти. Если при включенном эксперименте оно повышается, это служит сигналом наличия утечки памяти.
В статье рассказывается о метриках, по которым можно судить о потреблении памяти, границах их применимости, особенностях сбора и анализа.
Для каждой новой фичи, выпускаемой в виде эксперимента, Lyft дополнительно собирает различные технические метрики, в частности, потребление приложением памяти. Если при включенном эксперименте оно повышается, это служит сигналом наличия утечки памяти.
В статье рассказывается о метриках, по которым можно судить о потреблении памяти, границах их применимости, особенностях сбора и анализа.
Релиз compose.compiler 1.4.0
Вышла новая версия androidx.compose.compiler с поддержкой Kotlin 1.8.0. Промежутки между релизами Kotlin и совместимой версии Compose становятся все меньше, это радует!
Вышла новая версия androidx.compose.compiler с поддержкой Kotlin 1.8.0. Промежутки между релизами Kotlin и совместимой версии Compose становятся все меньше, это радует!
Android Developers
Compose Compiler | Jetpack | Android Developers
Как работает Activity
Цикл из двух статей, в которых разбирается, как стартует процесс приложения и все Activity, как показывается сплеш-скрин, в чем суть концепции Window, как вызываются методы жизненных циклов Activity и что происходит с Activity при сворачивании и разворачивании.
Цикл из двух статей, в которых разбирается, как стартует процесс приложения и все Activity, как показывается сплеш-скрин, в чем суть концепции Window, как вызываются методы жизненных циклов Activity и что происходит с Activity при сворачивании и разворачивании.
Роадмап Koin на 2023
Koin переходит на шестимесячный релизный цикл, синхронизированный с Kotlin. Основные планы (H1 – первый мажорный релиз, H2 – второй):
*️⃣KMM Compose API (H1/H2)
*️⃣Улучшения Koin Annotations (H1/H2)
*️⃣Оптимизация кишков (H2)
*️⃣Бридж с iOS и Kotlin Native (H1/H2)
*️⃣DSL и аннотации для Graph Test API (H2)
*️⃣Поддержка новых фичей Ktor (H1/H2)
Koin переходит на шестимесячный релизный цикл, синхронизированный с Kotlin. Основные планы (H1 – первый мажорный релиз, H2 – второй):
*️⃣KMM Compose API (H1/H2)
*️⃣Улучшения Koin Annotations (H1/H2)
*️⃣Оптимизация кишков (H2)
*️⃣Бридж с iOS и Kotlin Native (H1/H2)
*️⃣DSL и аннотации для Graph Test API (H2)
*️⃣Поддержка новых фичей Ktor (H1/H2)
Всем привет! Мы в команде Kotlin очень хотим пообщаться с теми, кто активно разрабатывает проекты на Flutter или React Native. Или, наоборот, попробовал, а потом вернулся к нативной разработке. Если готовы созвониться, рассказать про свой опыт и поотвечать на наши вопросы – заполняйте форму, за участие в интервью отсыпаем всяких ништяков.
Важный момент – эти ништяки мы отсыпать можем только тем, кто находится не в России/Беларуси, поэтому стоит отзываться, только если вы сейчас находитесь за пределами.
Важный момент – эти ништяки мы отсыпать можем только тем, кто находится не в России/Беларуси, поэтому стоит отзываться, только если вы сейчас находитесь за пределами.
Зачем нужен тип Either в ArrowKt
Arrow.Kt – библиотека, которая дает кучу типов и абстракций, которые помогают писать на Kotlin в функциональном стиле. Один из ее типов – Either. Он может содержать в себе значения одного из двух явно указанных типов. Самый стандартный юзкейс для него – быть одновременно и типом данных, представляющим успешный ответ сервера, и типом, представляющим ошибку с деталями.
Arrow.Kt – библиотека, которая дает кучу типов и абстракций, которые помогают писать на Kotlin в функциональном стиле. Один из ее типов – Either. Он может содержать в себе значения одного из двух явно указанных типов. Самый стандартный юзкейс для него – быть одновременно и типом данных, представляющим успешный ответ сервера, и типом, представляющим ошибку с деталями.
Новый UI доступен в Android Studio
В Android Studio Giraffe Canary 2 появилась возможность включить новый UI. Пробуйте и рассказывайте в комментах, что удобно, а что – не очень.
В Android Studio Giraffe Canary 2 появилась возможность включить новый UI. Пробуйте и рассказывайте в комментах, что удобно, а что – не очень.
dependency-guard – плагин для контроля зависимостей
В большой команде периодически возникают проблемы с изменением версий или добавлением зависимостей. Можно случайно добавить в продакшн тестовую зависимость, или вызвать креш в рантайме из-за поднятой версии какой-то из транзитивных зависимостей. Gradle-плагин dependency-guard позволяет это контролировать.
Он генерирует файл, содержащий явный список всех транзитивных зависимостей и их версий, что дает возможность следить за изменениями на PR и составлять черные списки библиотек.
В большой команде периодически возникают проблемы с изменением версий или добавлением зависимостей. Можно случайно добавить в продакшн тестовую зависимость, или вызвать креш в рантайме из-за поднятой версии какой-то из транзитивных зависимостей. Gradle-плагин dependency-guard позволяет это контролировать.
Он генерирует файл, содержащий явный список всех транзитивных зависимостей и их версий, что дает возможность следить за изменениями на PR и составлять черные списки библиотек.
GitHub
GitHub - dropbox/dependency-guard: A Gradle plugin that guards against unintentional dependency changes.
A Gradle plugin that guards against unintentional dependency changes. - dropbox/dependency-guard
Профилирование и оптимизация Compose
Разбор возможных проблем, которые могут повлечь за собой лишние рекомпозиции и ухудшить перфоманс Compose, и инструментов, которые помогают в дебаге.
Разбор возможных проблем, которые могут повлечь за собой лишние рекомпозиции и ухудшить перфоманс Compose, и инструментов, которые помогают в дебаге.