Про Server Driven UI.
Ранее автор разбирал ограничение Client Driven UI. А теперь продает нам преимущества SDUI.
👉 Как следует из названия, экраны отрисовываются по инструкциям с сервера
👉 Несмотря на кажущуюся независимость клиента от сервера, ваше приложение всё ещё будет ограничено существующими элементами
👉 Очень важный элемент — дизайн-система, которой следуют все приложения, иначе всё развалится
👉 A/B тесты, персонализация приложения под пользователя, обновление приложения на лету и независимый от сторов релиз-менеджмент — всё это вы получаете бонусом
👉 Сложность на Backend'е, невероятно долгая загрузка приложения, экспоненциально растущая сложность разработки и поддержки клиента — всё это вы также получаете бонусом c SDUI
Кто использует: Reddit, Tinder, AirBnB
Ранее автор разбирал ограничение Client Driven UI. А теперь продает нам преимущества SDUI.
👉 Как следует из названия, экраны отрисовываются по инструкциям с сервера
👉 Несмотря на кажущуюся независимость клиента от сервера, ваше приложение всё ещё будет ограничено существующими элементами
👉 Очень важный элемент — дизайн-система, которой следуют все приложения, иначе всё развалится
👉 A/B тесты, персонализация приложения под пользователя, обновление приложения на лету и независимый от сторов релиз-менеджмент — всё это вы получаете бонусом
👉 Сложность на Backend'е, невероятно долгая загрузка приложения, экспоненциально растущая сложность разработки и поддержки клиента — всё это вы также получаете бонусом c SDUI
Кто использует: Reddit, Tinder, AirBnB
Medium
Mastering SDUI: A Deep Dive into Server-Driven UI
What is Server-Driven UI (SDUI)?
👍4❤🔥1🔥1😁1
Есть ли у вас опыт с Server Driven UI? Что думаете об этом подходе?
Final Results
6%
Первый раз слышу об этом
40%
Слышал ранее, но не применял
41%
Поработал на проекте где несколько экранов отрисовывались по инструкциям с сервера
16%
Был проект полностью в этом подходе
👏4🤔1🐳1
This media is not supported in your browser
VIEW IN TELEGRAM
RemoteConfig на Гугл таблицах
В целом, гугл таблицы можно использовать как бекенд для вашего пет-проекта или если нужно быстро набросать POC. Еще 1 история успеха стартапа, который так и сделал - Levels.fyi
Под капотом ничего сложного - просто получение таблицы по ссылке и чтение данных из нее. Не безопасно, не поддерживаемо, но быстро и работает!
В целом, гугл таблицы можно использовать как бекенд для вашего пет-проекта или если нужно быстро набросать POC. Еще 1 история успеха стартапа, который так и сделал - Levels.fyi
Под капотом ничего сложного - просто получение таблицы по ссылке и чтение данных из нее. Не безопасно, не поддерживаемо, но быстро и работает!
🤯9👏3❤2👍2😁2😐1
А как собеседоваться в 2023?
На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком
👉 Просто оставить свое резюме на сайте компании больше почти не работает
👉 Найм сократился и большее предпочтение компании отдают рекомендациям. Ищите друзей и друзей-друзей и друзей-друзей-друзей в компанию куда вы хотите
👉 Ваше красивое 7 страничное резюме о том как вы делали свою работу в последние 10-15 лет скорее всего не прочитают. Когда на вакансию по 100+ заявок в день, выбирают того у кого понятно кто он и что он
👉 Системы, парсящие и оценивающие ваше резюме, не так умны, как кажется, так что лучше подстроиться под них. Проверить свое: resumeworded.com
👉 Как бы вам не нравилось оформлять LinkedIn - если через него вы ищете себе работу ИЛИ хотите чтоб работа там находила вас - это надо сделать
👉 Алгоритмические задачки/систем дизайн все еще неотъемлемая часть большинства собеседований - просто подготовьтесь. По-другому никак
По моему опыту - все так. Наибольшая конверсия при подаче через знакомого/существующий контакт в LinkedIn. Когда я подтюнил LinkedIn - мне начали писать рекрутеры с предложениями. Когда я подтюнил резюме - даже иногда стал пробиваться через холодные подачи на вакансию.
На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком
👉 Просто оставить свое резюме на сайте компании больше почти не работает
👉 Найм сократился и большее предпочтение компании отдают рекомендациям. Ищите друзей и друзей-друзей и друзей-друзей-друзей в компанию куда вы хотите
👉 Ваше красивое 7 страничное резюме о том как вы делали свою работу в последние 10-15 лет скорее всего не прочитают. Когда на вакансию по 100+ заявок в день, выбирают того у кого понятно кто он и что он
👉 Системы, парсящие и оценивающие ваше резюме, не так умны, как кажется, так что лучше подстроиться под них. Проверить свое: resumeworded.com
👉 Как бы вам не нравилось оформлять LinkedIn - если через него вы ищете себе работу ИЛИ хотите чтоб работа там находила вас - это надо сделать
👉 Алгоритмические задачки/систем дизайн все еще неотъемлемая часть большинства собеседований - просто подготовьтесь. По-другому никак
По моему опыту - все так. Наибольшая конверсия при подаче через знакомого/существующий контакт в LinkedIn. Когда я подтюнил LinkedIn - мне начали писать рекрутеры с предложениями. Когда я подтюнил резюме - даже иногда стал пробиваться через холодные подачи на вакансию.
👍5💯2🔥1
Улучшаем проигрывание видео через 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 чтобы собирать данные касательно плеера - не самый удобный, но лучше чем ничего
👍9🔥1💯1
Android Good Reads
А как собеседоваться в 2023? На этот раз менее техническая статья, больше про то как попасть на собеседования. Актуально для тех кто ищет работу в Европе/США. Статья стоит того чтоб ее прочитать целиком 👉 Просто оставить свое резюме на сайте компании больше…
Во вторник была жаркая дискуссия в комментариях (рекомендую почитать). Один из выводов - нужно расширять свою сеть контактов в linkedIn. Всех заинтересованных прошу оставлять ссылки на себя в комментариях
👍2
А как дела у 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
😐12😁5👍2💯1
Очередная хайп-статья непопулярных мнений
👉 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 ? 🫣)...
👍21💯7🔥2❤1🌚1
Распознование поз в реальном времени с 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.
🔥2💯1
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
👍3❤1💯1
Какой DI фреймворк используете?
Final Results
26%
Koin
38%
Dagger
20%
Hilt
1%
Kodein
3%
Toothpick
9%
Самописное решение
4%
Не используем DI
🔥3
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 вставляемый из клавиатуры (гифки или картинки из буфера обмена)
👍8🔥2🤔1💯1
This media is not supported in your browser
VIEW IN TELEGRAM
Добавляем проверку на номер задачки в TODO через линтер
Пустые
Пустые
TODO
маловероятно будут исправлены, если не имеют за собой закрепленной задачи. А имея задачу очень просто найти место где возникла проблема. Автоматизация проверки формата TODO
через lint и как ее делать: тут и тут👍6😁6💯1
Что используете в качестве статического анализатора кода в проекте?
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…
❤4👍3💯1
Как под капотом работает @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.
👍7🔥6❤3🤔1😢1
.aiexclude
файл по аналогии с .gitignore
в корень проекта и укажите директории или конкретные файлы.Документация: https://developer.android.com/studio/preview/gemini/aiexclude
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2😁2
Цикл статей про архитектуру от Zsolt.
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных
👉 Вводная часть про инструменты и что нас ждет в следующих частях
👉 Про обработку ошибок и Монады. Читаем про то что такое монады, как это связано с архитектурой Android и на какому слое приложить
👉 Mapping Зачем это делать и почему нельзя использовать 1 серверную модель на всех слоях. Нужно ли тестировать этот процесс, и как именовать функции чтобы не запутаться
👉 Response vs Reply классы Отличия и когда-какие используем. Организация нетворк слоя
Это не гайд для архитекторов, а скорее для мидлов, которым нужно начать углубляться в детали организации слоя данных
👍7🆒3🔥2
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 и расширение комьюнити.
👍21🔥8👎2
Android Good Reads
Как Google поможет найти уязвимости в вашем коде
В ходе проверки линтером выявляются известные уязвимости и выводятся рекомендации по их исправлению со ссылкой на источник. Это полезно, потому что держать в голове весь OWASP в области мобильной разработки (https://mas.owasp.org/MASVS/) попросту невозможно. Работает начиная с AS Giraffe+
В ходе проверки линтером выявляются известные уязвимости и выводятся рекомендации по их исправлению со ссылкой на источник. Это полезно, потому что держать в голове весь OWASP в области мобильной разработки (https://mas.owasp.org/MASVS/) попросту невозможно. Работает начиная с AS Giraffe+
👍5🔥3💯1