This media is not supported in your browser
VIEW IN TELEGRAM
RemoteConfig на Гугл таблицах
В целом, гугл таблицы можно использовать как бекенд для вашего пет-проекта или если нужно быстро набросать POC. Еще 1 история успеха стартапа, который так и сделал - Levels.fyi
Под капотом ничего сложного - просто получение таблицы по ссылке и чтение данных из нее. Не безопасно, не поддерживаемо, но быстро и работает!
В целом, гугл таблицы можно использовать как бекенд для вашего пет-проекта или если нужно быстро набросать POC. Еще 1 история успеха стартапа, который так и сделал - Levels.fyi
Под капотом ничего сложного - просто получение таблицы по ссылке и чтение данных из нее. Не безопасно, не поддерживаемо, но быстро и работает!
А как собеседоваться в 2023?
На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком
👉 Просто оставить свое резюме на сайте компании больше почти не работает
👉 Найм сократился и большее предпочтение компании отдают рекомендациям. Ищите друзей и друзей-друзей и друзей-друзей-друзей в компанию куда вы хотите
👉 Ваше красивое 7 страничное резюме о том как вы делали свою работу в последние 10-15 лет скорее всего не прочитают. Когда на вакансию по 100+ заявок в день, выбирают того у кого понятно кто он и что он
👉 Системы, парсящие и оценивающие ваше резюме, не так умны, как кажется, так что лучше подстроиться под них. Проверить свое: resumeworded.com
👉 Как бы вам не нравилось оформлять LinkedIn - если через него вы ищете себе работу ИЛИ хотите чтоб работа там находила вас - это надо сделать
👉 Алгоритмические задачки/систем дизайн все еще неотъемлемая часть большинства собеседований - просто подготовьтесь. По-другому никак
По моему опыту - все так. Наибольшая конверсия при подаче через знакомого/существующий контакт в LinkedIn. Когда я подтюнил LinkedIn - мне начали писать рекрутеры с предложениями. Когда я подтюнил резюме - даже иногда стал пробиваться через холодные подачи на вакансию.
На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком
👉 Просто оставить свое резюме на сайте компании больше почти не работает
👉 Найм сократился и большее предпочтение компании отдают рекомендациям. Ищите друзей и друзей-друзей и друзей-друзей-друзей в компанию куда вы хотите
👉 Ваше красивое 7 страничное резюме о том как вы делали свою работу в последние 10-15 лет скорее всего не прочитают. Когда на вакансию по 100+ заявок в день, выбирают того у кого понятно кто он и что он
👉 Системы, парсящие и оценивающие ваше резюме, не так умны, как кажется, так что лучше подстроиться под них. Проверить свое: resumeworded.com
👉 Как бы вам не нравилось оформлять LinkedIn - если через него вы ищете себе работу ИЛИ хотите чтоб работа там находила вас - это надо сделать
👉 Алгоритмические задачки/систем дизайн все еще неотъемлемая часть большинства собеседований - просто подготовьтесь. По-другому никак
По моему опыту - все так. Наибольшая конверсия при подаче через знакомого/существующий контакт в LinkedIn. Когда я подтюнил LinkedIn - мне начали писать рекрутеры с предложениями. Когда я подтюнил резюме - даже иногда стал пробиваться через холодные подачи на вакансию.
Улучшаем проигрывание видео через ExoPlayer
👉 В Reddit классически использовали DASH формат для Android и HLS для web/iOS. -> Заменили на mp4 для коротких видео длиной менее 45 секунд. Количество ошибок плейбека снизилось на 5%, просмотры за счет ускорения запуска увеличились на 1%
👉 Не стали использовать SimpleCache и стандартные методы хранения, а воспользовались DownloadManager. У этого метода есть и минусы. Например, подгрузить заранее первые 500kb данных из видео - нельзя
👉 Динамический размер буферизации для видео разной длины. Это сказалось на метриках, а вообще про буферизацию в реддит можно почитать тут
👉 Адаптивный битрейт через BandwidthMeter так же сказался на продуктовых метриках
👉 Для рендера использовали TextureView, но планируют перезжать на SurfaceView, который лучше работает с GPU, но может сказаться на перфомансе и потреблении батарейки
И что?
Проводите A/B тесты не только продуктовых фичей, но и платформенных чтобы понимать куда двигаться дальше. Связывайте продуктовые и платформенные метрики. ExoPlayer предоставляет неплохой интерфейс AnalyticsListener чтобы собирать данные касательно плеера - не самый удобный, но лучше чем ничего
👉 В Reddit классически использовали DASH формат для Android и HLS для web/iOS. -> Заменили на mp4 для коротких видео длиной менее 45 секунд. Количество ошибок плейбека снизилось на 5%, просмотры за счет ускорения запуска увеличились на 1%
👉 Не стали использовать SimpleCache и стандартные методы хранения, а воспользовались DownloadManager. У этого метода есть и минусы. Например, подгрузить заранее первые 500kb данных из видео - нельзя
👉 Динамический размер буферизации для видео разной длины. Это сказалось на метриках, а вообще про буферизацию в реддит можно почитать тут
👉 Адаптивный битрейт через BandwidthMeter так же сказался на продуктовых метриках
👉 Для рендера использовали TextureView, но планируют перезжать на SurfaceView, который лучше работает с GPU, но может сказаться на перфомансе и потреблении батарейки
И что?
Проводите A/B тесты не только продуктовых фичей, но и платформенных чтобы понимать куда двигаться дальше. Связывайте продуктовые и платформенные метрики. ExoPlayer предоставляет неплохой интерфейс AnalyticsListener чтобы собирать данные касательно плеера - не самый удобный, но лучше чем ничего
Android Good Reads
А как собеседоваться в 2023? На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком 👉 Просто оставить свое резюме на сайте компании больше…
Во вторник была жаркая дискуссия в комментариях (рекомендую почитать). Один из выводов - нужно расширять свою сеть контактов в linkedIn. Всех заинтересованных прошу оставлять ссылки на себя в комментариях
А как дела у SwiftUI в кроссплатформе
Немного сыровато, но постепенно разрастается.
Фреймворк для сборки SwiftUI под Android: https://skip.tools/
к сожалению он платный💵
Вариант использования предлагаемый командой -
Прицепить KMP к Skip
Немного сыровато, но постепенно разрастается.
Фреймворк для сборки SwiftUI под Android: https://skip.tools/
к сожалению он платный
Вариант использования предлагаемый командой -
Прицепить KMP к Skip
Please open Telegram to view this post
VIEW IN TELEGRAM
Очередная хайп-статья непопулярных мнений
👉 Android Разработка не про разработку на Jetpack Compose. Да, вам действительно нужно уметь работать с базой, строить архитектуру и следить за жизненным циклом приложения во время разработки, а не только верстать. Но ведь Compose это не только про UI, но и про подход к обращению с данными?
👉 DI это не только про Hilt/Dagger
Не зацикливайтесь на фреймворке при работе с паттерном
👉 Jetpack ViewModel это не ViewModel из MVVM
Первый позволяет вам создать компонент независимый от жизненного цикла приложения. Тогда как второй больше относится к абстракции в приложении и ограничению по работе между слоями данных. Вы можете использовать первую ViewModel, не поддерживать архитектуру MVVM но и наоборот
👉 Вы можете делать обращения к репозиторию напрямую из ViewModel.
Чистая архитектура подвергается критике последние несколько лет в том числе за ненужные слои абстракций. Если вам кажется, что очередная абстракция в виде usecase не решает никакой проблемы в вашем проекте - можете игнорировать этот слой
👉 Google рекомендации это всего лишь рекомендации
👉 Вы не bigtech.
Слепое следование лучшим практикам индустрии без оглядки на команду может стоить компании продукта. Лучшие практики, примеряемые в командах, где сотня только мобильных разработчиков, может сильно тормозить команду из 4 людей. Применяйте только то, что помогает вам работать, а не потому что так делают все
👉 Android Разработка не про разработку на Jetpack Compose. Да, вам действительно нужно уметь работать с базой, строить архитектуру и следить за жизненным циклом приложения во время разработки, а не только верстать. Но ведь Compose это не только про UI, но и про подход к обращению с данными?
👉 DI это не только про Hilt/Dagger
Не зацикливайтесь на фреймворке при работе с паттерном
👉 Jetpack ViewModel это не ViewModel из MVVM
Первый позволяет вам создать компонент независимый от жизненного цикла приложения. Тогда как второй больше относится к абстракции в приложении и ограничению по работе между слоями данных. Вы можете использовать первую ViewModel, не поддерживать архитектуру MVVM но и наоборот
👉 Вы можете делать обращения к репозиторию напрямую из ViewModel.
Чистая архитектура подвергается критике последние несколько лет в том числе за ненужные слои абстракций. Если вам кажется, что очередная абстракция в виде usecase не решает никакой проблемы в вашем проекте - можете игнорировать этот слой
👉 Google рекомендации это всего лишь рекомендации
👉 Вы не bigtech.
Слепое следование лучшим практикам индустрии без оглядки на команду может стоить компании продукта. Лучшие практики, примеряемые в командах, где сотня только мобильных разработчиков, может сильно тормозить команду из 4 людей. Применяйте только то, что помогает вам работать, а не потому что так делают все
Yves Kalume's Blog
Let's clarify some misconceptions around android development these days
Forget the Formalities ! There's no introduction for this blogpost 😅 (or maybe I have a blank page syndrome). Let's try debunking some myths around android development and clearing the air ! (oh actually this seems to be a good intro, isn't it ? 🫣)...
Распознование поз в реальном времени с ML kit
Расширяем кругозор и трогаем хайповый ML из Android. Не так сложно как кажется, так как все сокрыто за слоями абстракции Firebase.
Расширяем кругозор и трогаем хайповый ML из Android. Не так сложно как кажется, так как все сокрыто за слоями абстракции Firebase.
Medium
Real-Time Pose Detection in Camera with ML Kit in Android
We’ve already learned about pose detection in Android, where we could analyze body poses from pictures and videos.
Koin, ближайшие планы обновлений
В последнем обновлении 3.6 beta стабилизировали корутины, компоуз и в целом ядро Koin. Так же добавили интеграцию
А что вы используете для DI? Напишите в комментариях, что у вас используется в проекте. Из ваших вариантов соберу опросник в канале. Посмотрим на распределение
В последнем обновлении 3.6 beta стабилизировали корутины, компоуз и в целом ядро Koin. Так же добавили интеграцию
wasm
и поддержали ViewModel api
для compose miltiplatform
. Однако, команда решила не выкатывать релиз 3.6, а сразу двинуться к 4.0, где поддержат Kotlin 2 и почистят deprecated api
.А что вы используете для DI? Напишите в комментариях, что у вас используется в проекте. Из ваших вариантов соберу опросник в канале. Посмотрим на распределение
Medium
Koin Roadmap Update — From 3.6 to 4.0
In response to your feedback and the evolving landscape of Kotlin development, we are bridging from version 3.6 Beta to 4.0
Какой DI фреймворк используете?
Final Results
26%
Koin
38%
Dagger
20%
Hilt
1%
Kodein
3%
Toothpick
9%
Самописное решение
4%
Не используем DI
This media is not supported in your browser
VIEW IN TELEGRAM
Скрытые фичи текстового поля
Что рассмотрят по ссылке выше:
👉 Динамический градиентный текст и курсор, внося изменения всего в 2 строки
👉 Кастомизация
👉 Изменения шрифта без задания
👉 Текстовое поле с маской для кредитной карты
👉 Перехват взаимодействия пользователя с текстовым полем
👉 User tagging в реальном времени
👉 Подмена экшн кнопки в клавиатуре
👉 Haptic feedback для разных символов
👉 Как поддержать media content вставляемый из клавиатуры (гифки или картинки из буфера обмена)
Что рассмотрят по ссылке выше:
👉 Динамический градиентный текст и курсор, внося изменения всего в 2 строки
👉 Кастомизация
decorationBox
в зависимости от написанного текста👉 Изменения шрифта без задания
font
(как на гифке)👉 Текстовое поле с маской для кредитной карты
👉 Перехват взаимодействия пользователя с текстовым полем
👉 User tagging в реальном времени
👉 Подмена экшн кнопки в клавиатуре
👉 Haptic feedback для разных символов
👉 Как поддержать media content вставляемый из клавиатуры (гифки или картинки из буфера обмена)
This media is not supported in your browser
VIEW IN TELEGRAM
Добавляем проверку на номер задачки в TODO через линтер
Пустые
Пустые
TODO
маловероятно будут исправлены, если не имеют за собой закрепленной задачи. А имея задачу очень просто найти место где возникла проблема. Автоматизация проверки формата TODO
через lint и как ее делать: тут и тутЧто используете в качестве статического анализатора кода в проекте?
Final Results
73%
Detekt
46%
Lint
29%
ktLint
1%
PMD
0%
FindBugs
2%
bash скрипты 🤨
Android Good Reads
Какой DI фреймворк используете?
А вот вам еще 1 DI фреймворк, который никто не упомянул ранее!
Используем
Не рекомендация к использованию, а расширения кругозора ради: kotlin-inject (1200+⭐️ )
Сompile-time инъекция зависимостей, не переусложненная схема использования и поддержка multiplatform (по сути, единственная альтернатива koin)
Используем
kotlin-inject
в Kotlin/Compose Multiplatform проектеНе рекомендация к использованию, а расширения кругозора ради: kotlin-inject (1200+
Сompile-time инъекция зависимостей, не переусложненная схема использования и поддержка multiplatform (по сути, единственная альтернатива koin)
Please open Telegram to view this post
VIEW IN TELEGRAM
John O'Reilly
Using kotlin-inject in a Kotlin/Compose Multiplatform project
I’ve been using Koin in most of the Kotlin Multiplatform (KMP) samples I have but thought it would be good to include use of at least one other DI framework and this article outlines changes made to add kotlin-inject to the BikeShare KMP sample. This project…
Как под капотом работает @Preview?
👉 Для просмотра метода с
👉 Все это должно как то собираться воедино, да? Это происходит во время градловской команды
👉 Как можно этим воспользоваться? Например, положить
В статье больше технических примеров, рекомендую глянуть. Практического применения этим знаниям я не могу найти, поправьте меня в комментариях если у вас есть идеи, но знать как работает под капотом инструмент, которым ты пользуешься всегда полезно
👉 Для просмотра метода с
@Preview
аннотацией используется androidx.compose.ui.tooling.PreviewActivity
, который собирает параметры из @PreviewParameter
и свойства из @Preview
👉 Все это должно как то собираться воедино, да? Это происходит во время градловской команды
androidTest
. На выходе получаем apk с превьюшками, который выводится в Android Studio. 👉 Как можно этим воспользоваться? Например, положить
AndroidManifest.xml
в module/src/androidTest
и поменять параметры приложения, которое запускается для preview. А значит, мы можем и сами собрать приложение из наших @Preview
и любых @Composable
элементов на девайс! В статье больше технических примеров, рекомендую глянуть. Практического применения этим знаниям я не могу найти, поправьте меня в комментариях если у вас есть идеи, но знать как работает под капотом инструмент, которым ты пользуешься всегда полезно
Medium
Jetpack Compose Previews: Delving Deep Into Their Inner Workings
Uncover the secrets of Jetpack Compose Previews! Learn to run them with adb, how to compile them and the nuances in multi-module setups.
.aiexclude
файл по аналогии с .gitignore
в корень проекта и укажите директории или конкретные файлы.Документация: https://developer.android.com/studio/preview/gemini/aiexclude
Please open Telegram to view this post
VIEW IN TELEGRAM
Цикл статей про архитектуру от Zsolt.
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных
Google Workspace переносит свои продукты на KMP
Прошедший KotlinConf24 принес еще одну новость. Команда Google Workspace, а это такие приложения как Gmail, Docs, Meet, Calendar переводит свои продукты на KMP. Первым будет приложение Google Docs.
И это очень крутая поддержка для KMP и расширение комьюнити.
Прошедший KotlinConf24 принес еще одну новость. Команда Google Workspace, а это такие приложения как Gmail, Docs, Meet, Calendar переводит свои продукты на KMP. Первым будет приложение Google Docs.
И это очень крутая поддержка для KMP и расширение комьюнити.
Android Good Reads
Как Google поможет найти уязвимости в вашем коде
В ходе проверки линтером выявляются известные уязвимости и выводятся рекомендации по их исправлению со ссылкой на источник. Это полезно, потому что держать в голове весь OWASP в области мобильной разработки (https://mas.owasp.org/MASVS/) попросту невозможно. Работает начиная с AS Giraffe+
В ходе проверки линтером выявляются известные уязвимости и выводятся рекомендации по их исправлению со ссылкой на источник. Это полезно, потому что держать в голове весь OWASP в области мобильной разработки (https://mas.owasp.org/MASVS/) попросту невозможно. Работает начиная с AS Giraffe+
Тем временем команда Android Studio выпустила Ladybug Canary 5 🐞 , а недавний Feature Drop перешел в стадию релиз-кандидата
Что это значит для вас?
👉 Те кто сидит на Preview версии получил обновление IDE до 2024.2 + небольшие исправления существующего функционала. KMM плагин, как обычно, появится ближе к бете
👉 Для тех кто предпочитает стабильность, Koala получает финальные исправления и ждет вас с новым терминалом в стадии RC
Что это значит для вас?
👉 Те кто сидит на Preview версии получил обновление IDE до 2024.2 + небольшие исправления существующего функционала. KMM плагин, как обычно, появится ближе к бете
👉 Для тех кто предпочитает стабильность, Koala получает финальные исправления и ждет вас с новым терминалом в стадии RC
Please open Telegram to view this post
VIEW IN TELEGRAM
MutableState vs MutableStateFlow
👉 Область применения
👉 Потоки
👉 Жизненный цикл
В целом, это абсолютно разные вещи, несмотря на схожесть в нейминге. Не путайте❗️
👉 Область применения
MutableState
используется в основном совместно с Jetpack Compose обобщая состояниеMutableStateFlow
можно использовать на любом уровне абстракции в том числе на слое данных 👉 Потоки
MutableStateFlow
потокобезопасен в отличии от MutableState
у которого возникают сложности при объединении с фоновыми процессами👉 Жизненный цикл
MutableState
тесно связан с жизненным циклом Compose и гарантирует что не возникнет проблем на UIMutableStateFlow
больше привязан viewModelScope
и подойдет для асинхронной работы с даннымиВ целом, это абсолютно разные вещи, несмотря на схожесть в нейминге. Не путайте
State
и StateFlow
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
MutableState or MutableStateFlow: A Perspective on what to use in Jetpack Compose
When building applications with Jetpack Compose, developers face a pivotal choice: should they use MutableState or MutableStateFlow to manage the state? Does your team have guidelines on when to opt…