Forwarded from Mobile Compose
#Tools #Compose
Jetpack Compose SVG to Compose converter
Появился онлайн конвертер SVG файлов (можно загрузить как SVG код так и файл целиком) в Composable функции. В некоторых кейсах вполне полезный инструмент.
Jetpack Compose SVG to Compose converter
Появился онлайн конвертер SVG файлов (можно загрузить как SVG код так и файл целиком) в Composable функции. В некоторых кейсах вполне полезный инструмент.
❤2
Forwarded from Android Guards
Приложение может вести себя по-разному в зависимости от приходящих push-сообщений. Это может быть какая-то особая реакция на скрытый параметр, который в обычной ситуации никогда не присылается, а оставлен только для разработчиков. Или оно может переключатся в другой режим работы при получении какой-то особой полезной нагрузки. Чтобы быстро и без заморочек протестировать все эти варианты можно использовать локальную отправку пушей приложению через adb команду
#aht
adb shell su -c "am broadcast -a com.google.android.c2dm.intent.RECEIVE -n chat.rocket.whitelabel/com.google.firebase.iid.FirebaseInstanceIdReceiver --es "param1" "payload1" --ez "param2" true. Она позволит быстро проверить все гипотезы и освободить время на поиск уязвимости на отправку произвольных пушей целевому приложению 😉#aht
👍3❤2
Forwarded from StartAndroid
Краткий обзор фабрик, которые дают нам возможность повлиять на создание основных Android сущностей
- AppComponentFactory for customising the instantiation of application components
- LayoutInflater.Factory2 and View for customising view inflation
- FragmentFactory for customising fragment creation
- ViewModelProvider.Factory with CreationExtras for simplifying ViewModel creation
- WorkerFactory for customising Worker creation in WorkManager
#android #activity #fragment #viewmodel #di
https://marcellogalhardo.dev/posts/injection-points/
- AppComponentFactory for customising the instantiation of application components
- LayoutInflater.Factory2 and View for customising view inflation
- FragmentFactory for customising fragment creation
- ViewModelProvider.Factory with CreationExtras for simplifying ViewModel creation
- WorkerFactory for customising Worker creation in WorkManager
#android #activity #fragment #viewmodel #di
https://marcellogalhardo.dev/posts/injection-points/
🔥4👍2
Forwarded from Android Live 🤖
values() или entities()
#kotlin
В Kotlin 1.9.0 из стадии Experimental в Stable перешла функция entities(), которую можно вызывать для любых Enum и получить список всех элементов, которые в нём объявлены.
Зачем же нужна ещё одна функция, когда есть values()?
На самом деле, причин сразу несколько:
1️⃣ При каждом вызове функции создаётся новый Array: это одна из известных причин "скрытых" performance-багов.
2️⃣ При работе вызывается Array<E>, который мутабелен, а также меньше подходит для работы с коллекциями, чем список.
3️⃣ Ну и ещё — сложнее писать extension-функции для Array<E> вместо стандартных List<T>.
Ну а в entities() таких недостатков нет, а самое главное, что при вызове всегда используется один и тот же список и нет повторного создания.
Чуть больше информации можно найти тут. Теперь вы знаете, что ответить на собеседовании, и почему стоит перейти на entities().🤓
#kotlin
В Kotlin 1.9.0 из стадии Experimental в Stable перешла функция entities(), которую можно вызывать для любых Enum и получить список всех элементов, которые в нём объявлены.
Зачем же нужна ещё одна функция, когда есть values()?
На самом деле, причин сразу несколько:
Ну а в entities() таких недостатков нет, а самое главное, что при вызове всегда используется один и тот же список и нет повторного создания.
Чуть больше информации можно найти тут. Теперь вы знаете, что ответить на собеседовании, и почему стоит перейти на entities().
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔2
Forwarded from AppFiles - Mobile Development
Как я перестал волноваться и полюбил ошибки в Kotlin корутинах: Мифы обработки ошибок в корутинах
Обработка ошибок является важной частью изучения корутин, т.к. при недостаточном понимании можно легко упустить важные моменты и добавить ошибок в код. В рамках этого материала планируется предоставить объяснения и правила которые помогут проще разобраться как работает механизм обработки ошибок в корутинах.
Статья: https://habr.com/ru/articles/747146/
Платформа: Android
Обработка ошибок является важной частью изучения корутин, т.к. при недостаточном понимании можно легко упустить важные моменты и добавить ошибок в код. В рамках этого материала планируется предоставить объяснения и правила которые помогут проще разобраться как работает механизм обработки ошибок в корутинах.
Статья: https://habr.com/ru/articles/747146/
Платформа: Android
🤔3👍2
Forwarded from Mobile Developer (Pavel Kachan)
The State of Kotlin Multiplatform [RU]
https://habr.com/ru/companies/usetech/articles/747926/
"Про Kotlin Multiplatform (КММ) многие слышали, но пробовали далеко не все. Мы с командой использовали его в работе, и здесь я расскажу о своем опыте. Возможно, теперь у вас появится понимание, как аргументировать бизнесу зачем вообще нужен KMM и насколько это сейчас рабочая история."
https://habr.com/ru/companies/usetech/articles/747926/
"Про Kotlin Multiplatform (КММ) многие слышали, но пробовали далеко не все. Мы с командой использовали его в работе, и здесь я расскажу о своем опыте. Возможно, теперь у вас появится понимание, как аргументировать бизнесу зачем вообще нужен KMM и насколько это сейчас рабочая история."
Хабр
The State of Kotlin Multiplatform
Алексей Гладков Mobile Developer В мае 2023 года команда ГК Юзтех организовала в Томске Usetech Meetup «Тренды мобильной разработки», где своим опытом поделились эксперты российского ИТ-рынка. По...
👍2
Forwarded from Mobile Native ️️
От потоков к корутинам: как и почему видоизменились примитивы синхронизации в языке Kotlin. Часть 1.
Разбор изменений реализации примитивов синхронизации из стандартной библиотеки Java и пакета
Какие реализации примитивов синхронизации потоков актуальны в контексте корутин, а какие надо использовать с осторожностью и готовность текущих решений к использованию в Kotlin Multiplatform.
В статье рассматриваются
👉 Критические секции
👉 Атомарные переменные
👉 Реактивные переменные
👉 Барьерная синхронизация
Читать (Ru)
Разбор изменений реализации примитивов синхронизации из стандартной библиотеки Java и пакета
java.util.concurrentдля Kotlin Coroutines и для языка Kotlin в целом.
Какие реализации примитивов синхронизации потоков актуальны в контексте корутин, а какие надо использовать с осторожностью и готовность текущих решений к использованию в Kotlin Multiplatform.
В статье рассматриваются
👉 Критические секции
👉 Атомарные переменные
👉 Реактивные переменные
👉 Барьерная синхронизация
Читать (Ru)
👍3🤔2
Forwarded from Мобильная разработка
Как сделать удобное взаимодействие с Kotlin из Swift: обзор проблем и решений
Kotlin является удобным язык для мобильных разработчиков благодаря удобству создания кроссплатформенных приложений. Вы можете использовать одну и ту же кодовую базу как для Android, так и для iOS.
Но при разработке для iOS могут возникать проблемы, особенно когда необходимо взаимодействовать со Swift, ведь скомпилированный в Kotlin код, не выдает сразу Swift API. Как быть и что делать, рассказывает автор этой статьи:
https://habr.com/ru/articles/697966/
#kotlin #swift
Kotlin является удобным язык для мобильных разработчиков благодаря удобству создания кроссплатформенных приложений. Вы можете использовать одну и ту же кодовую базу как для Android, так и для iOS.
Но при разработке для iOS могут возникать проблемы, особенно когда необходимо взаимодействовать со Swift, ведь скомпилированный в Kotlin код, не выдает сразу Swift API. Как быть и что делать, рассказывает автор этой статьи:
https://habr.com/ru/articles/697966/
#kotlin #swift
👍2
Forwarded from Kotlin Multiplatform Broadcast (Кирилл Розов)
Статья (EN, 4 мин) про разные сценарии использования sealed class и sealed interface с примерами. Иногда спрашивал такое на собесах и часть людей не отвечала
Forwarded from Android Good Reads (Egor Tolstoy)
План Coil по поддержке Kotlin Multiplatform
Я уже упоминал, что недавно библиотека Coil получила грант от Kotlin Foundation направленный на поддержку KMP.
Вышел блогпост, где автор раскрывает больше деталей про миграцию. Основная задача переезда – полностью отвязать Coil от Android. Самым большим изменением API будет замена
План – завершить миграцию в течение нескольких месяцев.
Я уже упоминал, что недавно библиотека Coil получила грант от Kotlin Foundation направленный на поддержку KMP.
Вышел блогпост, где автор раскрывает больше деталей про миграцию. Основная задача переезда – полностью отвязать Coil от Android. Самым большим изменением API будет замена
Drawable на Image, который абстрагирует детали платформенной реализации изображений.План – завершить миграцию в течение нескольких месяцев.
Cash App Code Blog
Multiplatform image loading: Coil 3.0
Building towards Coil 3.0 with a focus on Compose Multiplatform.
👍4🔥2🤔1
Forwarded from Mobile Native ️️
Learn Kotlin Flow by real examples for Android
Проект с примерами для изучения Kotlin Flow.
• How to use Kotlin Flow in Android Project?
• Doing simple task in background using Kotlin Flow.
• Doing tasks in series using Kotlin Flow.
• Doing tasks in parallel using Kotlin Flow. Blog
• Making two network calls in parallel using Kotlin Flow.
• Using operators like filter, map, reduce, flatMapConcat, zip, and etc.
• Exception handling in Kotlin Flow
• How to use onCompletion in Flow?
• Retry Task using retry operator in Flow.
• Retry Task with Exponential Backoff in Flow.
• Using Kotlin Flow with Retrofit. Blog
• Using Kotlin Flow with Room Database. Blog
• Using Kotlin Flow with various 3rd party libraries.
• Making two network calls in parallel using Kotlin Flow.
• Doing task in series using Kotlin Flow.
• Writing Unit-Test for ViewModel which uses Kotlin Flow
• Flow and StateFlow
GitHub → Learn-Kotlin-Flow
Проект с примерами для изучения Kotlin Flow.
• How to use Kotlin Flow in Android Project?
• Doing simple task in background using Kotlin Flow.
• Doing tasks in series using Kotlin Flow.
• Doing tasks in parallel using Kotlin Flow. Blog
• Making two network calls in parallel using Kotlin Flow.
• Using operators like filter, map, reduce, flatMapConcat, zip, and etc.
• Exception handling in Kotlin Flow
• How to use onCompletion in Flow?
• Retry Task using retry operator in Flow.
• Retry Task with Exponential Backoff in Flow.
• Using Kotlin Flow with Retrofit. Blog
• Using Kotlin Flow with Room Database. Blog
• Using Kotlin Flow with various 3rd party libraries.
• Making two network calls in parallel using Kotlin Flow.
• Doing task in series using Kotlin Flow.
• Writing Unit-Test for ViewModel which uses Kotlin Flow
• Flow and StateFlow
GitHub → Learn-Kotlin-Flow
🔥3👍2🤓1
Forwarded from Стой под стрелой (Nikita Prokopov)
Когда Реддит прибил сторонние клиенты, и в том числе Аполло, СЕО Реддита объяснил это так: не, ну а чо они на нашем АПИ сидят, гребут деньги лопатой, а нам не отдают? У нас 50 программистов, их тоже чем-то кормить надо.
На что вроде бы очевидный ответ: так сделайте тоже нормального клиента и гребите эти деньги себе? В чем проблема?
А проблема в том, что того, что хватает одному программисту, не хватит, чтобы прокормить 50. Вот и получается, что у одного есть возможность делать удобно и хорошо для пользователей, а у пятидесяти такой возможности нет.
Поэтому я всегда стараюсь работать в маленьких командах. Большие это что-то про то, как кого-нибудь наебать, развести или еще каким-то способом отжать деньги, причем желательно сразу много. А маленькие могут себе позволить на самом деле уменьшать энтропию и вообще работать на пользователя.
Хотя казалось бы, 50 программистов, звучит так, что это должно быть лучше, чем один. Но нет. Парадокс.
На что вроде бы очевидный ответ: так сделайте тоже нормального клиента и гребите эти деньги себе? В чем проблема?
А проблема в том, что того, что хватает одному программисту, не хватит, чтобы прокормить 50. Вот и получается, что у одного есть возможность делать удобно и хорошо для пользователей, а у пятидесяти такой возможности нет.
Поэтому я всегда стараюсь работать в маленьких командах. Большие это что-то про то, как кого-нибудь наебать, развести или еще каким-то способом отжать деньги, причем желательно сразу много. А маленькие могут себе позволить на самом деле уменьшать энтропию и вообще работать на пользователя.
Хотя казалось бы, 50 программистов, звучит так, что это должно быть лучше, чем один. Но нет. Парадокс.
🤔3👍2
Forwarded from Локалхост (Никита Куликов)
Вчера прозоишло одно из важнейших событий для Flipper Zero и для меня - релиз Apps Catalog.
Теперь больше сотни приложений для Flipper Zero собрано в одном месте. Про существование многих из них я даже не подозревал. В процессе тестирования каталога ни раз качал какую-то игру на пробу и залипал там на час с лишним. Мой личный топ:
1) 2048 - очень качественно сделанная адаптация 2048, идеально ложится на формфактор флиппера
2) Doom - это не порт, а скорее клон, но отличный - со здоровьем, в 3д, с патронами и перезарядкой
3) WAV Player - флиппер может играть черный бумер, ну не чудо ли?
В каталоге еще полно приложений для энтузиастов - для детекта SWD, для чтения/записи UART, для подключенного счетчика гейгера, для модуля GPS, для прошивки ESP32 и так далее. Прямо сейчас оно мне не нужно, но я уверен что рано или поздно какое-то из этих приложений мне понадобится (например, сбросить какой-нибудь очередной грузинский роутер).
Вы сами можете посмотреть приложения в каталоге - флиппер для этого не требуется. Загрузите приложение из AppStore/Google Play, пропустите соединение и перейдите на вкладку "Hub"
Особенно важно это событие лично для меня, так как во флиппере я занимаюсь мобильным приложением, а Apps выпустились как раз там.
Можете потыкать, рассказать как оно вам:
Google Play: https://play.google.com/store/apps/details?id=com.flipperdevices.app
App Store: https://apps.apple.com/app/flipper-mobile-app/id1534655259
Теперь больше сотни приложений для Flipper Zero собрано в одном месте. Про существование многих из них я даже не подозревал. В процессе тестирования каталога ни раз качал какую-то игру на пробу и залипал там на час с лишним. Мой личный топ:
1) 2048 - очень качественно сделанная адаптация 2048, идеально ложится на формфактор флиппера
2) Doom - это не порт, а скорее клон, но отличный - со здоровьем, в 3д, с патронами и перезарядкой
3) WAV Player - флиппер может играть черный бумер, ну не чудо ли?
В каталоге еще полно приложений для энтузиастов - для детекта SWD, для чтения/записи UART, для подключенного счетчика гейгера, для модуля GPS, для прошивки ESP32 и так далее. Прямо сейчас оно мне не нужно, но я уверен что рано или поздно какое-то из этих приложений мне понадобится (например, сбросить какой-нибудь очередной грузинский роутер).
Вы сами можете посмотреть приложения в каталоге - флиппер для этого не требуется. Загрузите приложение из AppStore/Google Play, пропустите соединение и перейдите на вкладку "Hub"
Особенно важно это событие лично для меня, так как во флиппере я занимаюсь мобильным приложением, а Apps выпустились как раз там.
Можете потыкать, рассказать как оно вам:
Google Play: https://play.google.com/store/apps/details?id=com.flipperdevices.app
App Store: https://apps.apple.com/app/flipper-mobile-app/id1534655259
🔥3😱2👍1
Forwarded from Android Good Reads (Egor Tolstoy)
Почему рендеринг текста – это сложно
Отличная статья, про то, из каких элементов вообще состоит текст, почему все браузеры и другие графические движки чаще всего рендерят его неправильно, и с какими эзотерическими проблемами можно столкнуться.
Отличная статья, про то, из каких элементов вообще состоит текст, почему все браузеры и другие графические движки чаще всего рендерят его неправильно, и с какими эзотерическими проблемами можно столкнуться.
Faultlore
Text Rendering Hates You - Faultlore
🔥2
Forwarded from Compose Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
В новой версии Android Studio Giraffe появился полноценный Live Edit для Compose - превью UI будет обновляться по мере изменения Compose без необходимости компиляции и запуске на устройстве.
Не стоит путать Live Edit с Compose Preview и Apply Changes, так как Live Edit предназначено для работы с Compose и показа UI с реального устройства или эмулятора.
В статье найдете подробное описание как устроен Live Edit
#androidstudio #tooling
Не стоит путать Live Edit с Compose Preview и Apply Changes, так как Live Edit предназначено для работы с Compose и показа UI с реального устройства или эмулятора.
В статье найдете подробное описание как устроен Live Edit
#androidstudio #tooling
🔥9👨💻2
Forwarded from Mobile Developer (Алексей Гладков)
Gradle Caching [EN]
https://proandroiddev.com/gradle-cache-your-builds-best-friend-4970ad32420e
Статья от известного в Андроид коммьюнити Алексея Быкова
Что внутри:
👉 Как работает градл
👉 Какие варианты кэшей бывают
👉 Практические примеры
👉 и кое-что еще
Приятного чтения
https://proandroiddev.com/gradle-cache-your-builds-best-friend-4970ad32420e
Статья от известного в Андроид коммьюнити Алексея Быкова
Что внутри:
👉 Как работает градл
👉 Какие варианты кэшей бывают
👉 Практические примеры
👉 и кое-что еще
Приятного чтения
Medium
Gradle Cache: Your build’s best friend
Throughout most of my career, I have tried to avoid everything about Gradle as much as possible. For me, it was always just a tool that I…
🔥6👍2🤔2
Forwarded from Compose Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
Compose Multiplatform видеоплеер с поддержкой Android (ExoPlayer), iOS (AVPlayer) и Desktop (VLC)
#android #ios #desktop #media
#android #ios #desktop #media
🔥5👍2
Forwarded from Мобильное Чтиво
Сейчас работаю над учебным курсом по Архитектуре Андроид приложений. Решил, что максимально ёмкое и понятное определение слова Архитектура дал старина Мартин.
Пожалуй, сделаю презентацию из этого одного слайда. Лучше уже не будет.
Вообще он весельчак. Наверное большинство его знает как автора толстенных и скучных книг. Но кто смотрел его выступления знает, что он довольно живенький и интересно рассказывает.
Вот например его одно из выступлений.
Пожалуй, сделаю презентацию из этого одного слайда. Лучше уже не будет.
Вообще он весельчак. Наверное большинство его знает как автора толстенных и скучных книг. Но кто смотрел его выступления знает, что он довольно живенький и интересно рассказывает.
Вот например его одно из выступлений.
😁5👍2💩1👨💻1
Forwarded from iOS Makes Me Hate (Lev Bondarenko)
Собесы сеньора. 25 компаний, 54 этапа, 2 оффера
Интересная история. Если вы думали, что всем сеньорам легче джунов, то вы не правы. Быть конкурентным сеньором на рынке сложнее, чем сейчас тамаде стать джуном. Герой статьи показывает частую проблему сеньоров, когда актуальность их знаний в одной компании может не так оценена в другой.
Я сам думал, что став один раз сеньором/тимлидом/техлидом в одной компании, то автоматически ты становишься таким на рынке. Но это не так, чаще даже в одной компании, но в разных командах тебя могут оценить по-другому. Не говоря уже о динамично развивающемся рынке.
Здесь нет виноватых. Кто-то посочувствует автору, кто-то поругет. Но так работает рынок. Чем выше грейд, тем выше ожидания и сильнее реагируют на детали.
Этих деталей очень много: в одних компаниях сеньор должен знать кишки и теорию, но забывает об архитектурах. В других теорию опускают, а спрашивают практические алгоритмы. В других наоборот синтетические, а знание глубин работы с памятью необязательно, ибо нет практического применения. В этом многообразии важно одно — совместимость.
Вывод один. Нужно следить за рынком
https://habr.com/ru/articles/751284/
Интересная история. Если вы думали, что всем сеньорам легче джунов, то вы не правы. Быть конкурентным сеньором на рынке сложнее, чем сейчас тамаде стать джуном. Герой статьи показывает частую проблему сеньоров, когда актуальность их знаний в одной компании может не так оценена в другой.
Я сам думал, что став один раз сеньором/тимлидом/техлидом в одной компании, то автоматически ты становишься таким на рынке. Но это не так, чаще даже в одной компании, но в разных командах тебя могут оценить по-другому. Не говоря уже о динамично развивающемся рынке.
Здесь нет виноватых. Кто-то посочувствует автору, кто-то поругет. Но так работает рынок. Чем выше грейд, тем выше ожидания и сильнее реагируют на детали.
Этих деталей очень много: в одних компаниях сеньор должен знать кишки и теорию, но забывает об архитектурах. В других теорию опускают, а спрашивают практические алгоритмы. В других наоборот синтетические, а знание глубин работы с памятью необязательно, ибо нет практического применения. В этом многообразии важно одно — совместимость.
Вывод один. Нужно следить за рынком
https://habr.com/ru/articles/751284/
Хабр
Что порой кроется за «успехом»
Всем добрый день. Сегодня утром, полистывая статьи на Хабре, я наткнулся на истории карьерных неуспехов и подумал: почему бы мне не рассказать историю своих мытарств в 2022-2023? Честно признаюсь,...
🤔3🫡3😁1🥱1
Forwarded from AppFiles - Mobile Development
Stable Diffusion AI - это простое в использовании приложение, позволяющее быстро генерировать изображения из текста или других изображений с помощью всего нескольких щелчков мыши. С помощью этого приложения можно взаимодействовать с собственным сервером (можно использовать две серверные среды, Txt2Img и Img2Img модели) и генерировать высококачественные изображения за считанные секунды.
Stable Diffusion AI на GitHub: https://github.com/ShiftHackZ/Stable-Diffusion-Android
Платформа: Android
⭐️: 153
Stable Diffusion AI на GitHub: https://github.com/ShiftHackZ/Stable-Diffusion-Android
Платформа: Android
⭐️: 153
🤔2