Выводы о KMM после небольшого приложения
#kmm
Попалась любопытная статья, где описываются выводы, свзянные с использованием KMM в небольшом проекте и рассказывается о тех сложностях, с которыми пришлось столкнуться.
Автор рекомендуют воспользоваться туториалом от Touchlab, связанным с испльзованием KMM, выглядит действительно здорово: целая коллекция инструментов, которые помогут легче вклиниться в проект.
Ну и далее любопытный список выводов, которые будут полезны, если вы думаете о создании проекта на KMM.
Кстати, если вы хотите мигрировать текущий проект, то вот вам хороший опыт о переезде, ну и описание преимуществ, которые в результате появились. ✌🏻
#kmm
Попалась любопытная статья, где описываются выводы, свзянные с использованием KMM в небольшом проекте и рассказывается о тех сложностях, с которыми пришлось столкнуться.
Автор рекомендуют воспользоваться туториалом от Touchlab, связанным с испльзованием KMM, выглядит действительно здорово: целая коллекция инструментов, которые помогут легче вклиниться в проект.
Ну и далее любопытный список выводов, которые будут полезны, если вы думаете о создании проекта на KMM.
Кстати, если вы хотите мигрировать текущий проект, то вот вам хороший опыт о переезде, ну и описание преимуществ, которые в результате появились. ✌🏻
Серия статей Flows и Channels
#flow #kotlin
Крутая серия статей, которая посвящена более глубокой проработке вопроса, связанного с
Автор начинает рассказ с общего понятия потоков, cold и hot streams, их разницы и кейсов применения. Так что это всё подойдёт тем, кто совсем не в теме и хочет детально с этим разобраться.
Серия состоит из 5 частей и охватывает большинство кейсов. Ссылка на первую часть тут.
А вот и пример, где автор применяет полученные знания на практике.
#flow #kotlin
Крутая серия статей, которая посвящена более глубокой проработке вопроса, связанного с
Flow
и Channel
. Автор начинает рассказ с общего понятия потоков, cold и hot streams, их разницы и кейсов применения. Так что это всё подойдёт тем, кто совсем не в теме и хочет детально с этим разобраться.
Серия состоит из 5 частей и охватывает большинство кейсов. Ссылка на первую часть тут.
А вот и пример, где автор применяет полученные знания на практике.
Настройка видимости extension-функций
#kotlin
Extension-функции — довольно крутая фича языка Kotlin. Это позволяет расширять функциональность классов без изменения класса. Ну а вызываются эти функции совершенно также, как и те, которые относятся к этому классу, правда выделяются другим цветом в IDE.
Сегодня я нашёл не самую очевидную функциональность, которая позволяет настраивать области видимости этих функций при помощи интерфейсов и дженериков.
Ознакомиться подробнее и почитать примеры можно в этой статье, но в двух словах это выглядит так.
Допустим, у нас есть класс
и которую логично применить только для автомобиля.
Вместо описанной выше функции мы можем написать такую, сделав пустой интерфейс:
Таким образом, мы будем применять эту функцию только для классов, которые являются
#kotlin
Extension-функции — довольно крутая фича языка Kotlin. Это позволяет расширять функциональность классов без изменения класса. Ну а вызываются эти функции совершенно также, как и те, которые относятся к этому классу, правда выделяются другим цветом в IDE.
Сегодня я нашёл не самую очевидную функциональность, которая позволяет настраивать области видимости этих функций при помощи интерфейсов и дженериков.
Ознакомиться подробнее и почитать примеры можно в этой статье, но в двух словах это выглядит так.
Допустим, у нас есть класс
Vehicle
, который может относиться одновременно и к автомобилю, и к космическому кораблю. И есть extension-функция, которая называется:fun Vehicle.cruiseTheBoulevard(): String {
return "cruising the boulevard with my ${getMakeAndModel()}"
}
и которую логично применить только для автомобиля.
Вместо описанной выше функции мы можем написать такую, сделав пустой интерфейс:
fun <T> T.cruiseTheBoulevard(): String where T: Vehicle, T: LandVehicle {
return "cruising the boulevard with my ${getMakeAndModel()}"
}
Таким образом, мы будем применять эту функцию только для классов, которые являются
Vehicle
и LandVehicle
. Выглядит немного сложнее, чем стандартная функция, однако о такой возможности тоже полезно знать.Конечный автомат на Jetpack Compose
#compose
Думаю, что многие слышали о понятии конечного автомата, но не многие применяли это понятие на практике. В Android-разработке оно очень здорово ложится на работу со сложными экранами, у которых есть большое число различных кейсов использования. А ещё оно идеально вписывается в концепцию Jetpack Compose.
Давайте рассмотрим небольшой практический пример, описанный в статье. Тут автор делает экран, где есть достаточно большое количество состояний, но с подходом Finite State Machine — получается всё предсказуемо и просто.
По сути, у конечного автомата есть следующие характеристики:
• количество состояний определено и оно конечное;
• количество действий также конечное;
• система может находиться только в одном из описанных состояний;
• одно и то же состояние всегда будет результатом одного и того же действия, независимо от того, как быстро и сколько раз это действие происходит.
Для начала автор советует описать в виде таблицы все возможные состояния текущего экрана. Из этой таблицы напрямую видны те состояния и действия, которые нужно закодить, а также убрать повторяющиеся.
На выходе мы получаем
#compose
Думаю, что многие слышали о понятии конечного автомата, но не многие применяли это понятие на практике. В Android-разработке оно очень здорово ложится на работу со сложными экранами, у которых есть большое число различных кейсов использования. А ещё оно идеально вписывается в концепцию Jetpack Compose.
Давайте рассмотрим небольшой практический пример, описанный в статье. Тут автор делает экран, где есть достаточно большое количество состояний, но с подходом Finite State Machine — получается всё предсказуемо и просто.
По сути, у конечного автомата есть следующие характеристики:
• количество состояний определено и оно конечное;
• количество действий также конечное;
• система может находиться только в одном из описанных состояний;
• одно и то же состояние всегда будет результатом одного и того же действия, независимо от того, как быстро и сколько раз это действие происходит.
Для начала автор советует описать в виде таблицы все возможные состояния текущего экрана. Из этой таблицы напрямую видны те состояния и действия, которые нужно закодить, а также убрать повторяющиеся.
На выходе мы получаем
sealed class
, который легко расширяется в случае добавления нового состояния. Подход классный и отлично масштабируется, поэтому рекомендую обратить внимание на пример.🤟Landscapist для изображений в Jetpack Compose
#compose #library
С появлением Jetpack Compose появилось много библиотек, которые совместимы с его парадигмой и требованиями.
Для загрузки изображений уже существует несколько вариантов, и самым известным является библиотека Coil. И хотя я не пробовал её на практике, выглядит она многообещающей: под капотом использует coroutines, добавляет не так много методов по сравнению с аналогами и из коробки поддерживает Compose.
Правда, если у вас в проекте уже есть добавленная зависимость для загрузки изображений, такая как Glide или Picasso и вы не хотите переходить на аналог, то вы можете воспользоваться библиотекой Landscapist для загрузки через одну из них в Compose.
Поддерживается большая часть современных библиотек и их возможностей по работе с изображениями. Почитать подробнее про использование можно тут.
#compose #library
С появлением Jetpack Compose появилось много библиотек, которые совместимы с его парадигмой и требованиями.
Для загрузки изображений уже существует несколько вариантов, и самым известным является библиотека Coil. И хотя я не пробовал её на практике, выглядит она многообещающей: под капотом использует coroutines, добавляет не так много методов по сравнению с аналогами и из коробки поддерживает Compose.
Правда, если у вас в проекте уже есть добавленная зависимость для загрузки изображений, такая как Glide или Picasso и вы не хотите переходить на аналог, то вы можете воспользоваться библиотекой Landscapist для загрузки через одну из них в Compose.
Поддерживается большая часть современных библиотек и их возможностей по работе с изображениями. Почитать подробнее про использование можно тут.
Переговоры о зарплате
Одной из самых неприятных частей у разработчиков (да и не только 🙄) при найме на работу является обсуждение зарплаты.
Довольно часто мы недооцениваем свои знания и боимся торговаться при трудоустройстве на новое место. Думаю, что одной из причин является то, что слово торг в нашей голове — звучит как что-то неприятное да и в целом не близкое к обсуждению высоких зарплат.
Крутая статья, которая описывает процесс переговоров о зарплатных ожиданиях из которой можно почерпнуть несколько интересных кейсов. Тут перевод на русский, хотя лучше читать в оригинале.
Для себя выделил интересный момент с тем, что та сумма, которая для нас кажется большой — для работодателя выглядит не такой громадной: ведь помимо зарплаты, он платит налоги и отчисления, а несколько тысяч рублей не сильно увеличат сумму этих платежей, однако он может получить хорошего специалиста себе в штат.
Вообще, обсуждение зарплаты очень интересная тема, поэтому буду рад, если поделитесь полезными статьями в этой сфере. ✌🏻
Одной из самых неприятных частей у разработчиков (да и не только 🙄) при найме на работу является обсуждение зарплаты.
Довольно часто мы недооцениваем свои знания и боимся торговаться при трудоустройстве на новое место. Думаю, что одной из причин является то, что слово торг в нашей голове — звучит как что-то неприятное да и в целом не близкое к обсуждению высоких зарплат.
Крутая статья, которая описывает процесс переговоров о зарплатных ожиданиях из которой можно почерпнуть несколько интересных кейсов. Тут перевод на русский, хотя лучше читать в оригинале.
Для себя выделил интересный момент с тем, что та сумма, которая для нас кажется большой — для работодателя выглядит не такой громадной: ведь помимо зарплаты, он платит налоги и отчисления, а несколько тысяч рублей не сильно увеличат сумму этих платежей, однако он может получить хорошего специалиста себе в штат.
Вообще, обсуждение зарплаты очень интересная тема, поэтому буду рад, если поделитесь полезными статьями в этой сфере. ✌🏻
Сегодня не совсем #опрос, но неплохая тема для оффтопа.
Расскажите о самом ужасном опыте собеседования в компанию?
Это может быть всё что угодно: странные требования, несоответствие описанию, или например, неадекватные вопросы… да и вообще то, после чего у вас осталось неприятное ощущение и чувство потерянного времени.
Если хотите, то можете написать сразу в комментариях, а если комфортнее сохранить анонимность – пишите в личку, рассказ "без имен" опубликую за вас.
Ну и огромная просьба не писать названия компаний или прямых намёков на неё. Такие сообщения будут удаляться. Ведь это ваш опыт, а разводить холивар о компаниях не тема этого треда. 🙃
Расскажите о самом ужасном опыте собеседования в компанию?
Это может быть всё что угодно: странные требования, несоответствие описанию, или например, неадекватные вопросы… да и вообще то, после чего у вас осталось неприятное ощущение и чувство потерянного времени.
Если хотите, то можете написать сразу в комментариях, а если комфортнее сохранить анонимность – пишите в личку, рассказ "без имен" опубликую за вас.
Ну и огромная просьба не писать названия компаний или прямых намёков на неё. Такие сообщения будут удаляться. Ведь это ваш опыт, а разводить холивар о компаниях не тема этого треда. 🙃
Jetpack Compose и эквивалентные View
#compose
Я уже упоминал на канале классный ресурс, который здорово экономит время при переходе с обычных xml View на Compose. Однако с релизом Jetpack Compose он стал ещё более актуальным. 👍🏻
Сайт позволяет найти эквиваленты различным свойствам, функциям и
Конечно, там описаны далеко не все элементы, но основные в наличии.
Ссылка на ресурс тут.
#compose
Я уже упоминал на канале классный ресурс, который здорово экономит время при переходе с обычных xml View на Compose. Однако с релизом Jetpack Compose он стал ещё более актуальным. 👍🏻
Сайт позволяет найти эквиваленты различным свойствам, функциям и
View
в Jetpack Compose. Всё, что нужно сделать — это ввести соответсвующее свойство в поле ввода и получить результат.Конечно, там описаны далеко не все элементы, но основные в наличии.
Ссылка на ресурс тут.
Уязвимости в приложениях Samsung
#security
Любопытное исследование, которое рассказывает о списке уязвимостей в предустановленных приложениях на телефонах Samsung.
Автор провёл несколько недель в поиске уязвимостей в родных приложениях Samsung и нашёл несколько интересных деталей о том, как можно подменить установку этих приложений, как дать доступ к контактам, SMS или файлам.
Рекомендую ознакомиться, если интересуетесь безопасностью приложений. Ну и можно взять парочку примеров и проверить свои приложения на предмет уязвимости. Выглядит очень интересно, и жду ещё подобных исследований.
Ссылка на первую и вторую часть статьи.
#security
Любопытное исследование, которое рассказывает о списке уязвимостей в предустановленных приложениях на телефонах Samsung.
Автор провёл несколько недель в поиске уязвимостей в родных приложениях Samsung и нашёл несколько интересных деталей о том, как можно подменить установку этих приложений, как дать доступ к контактам, SMS или файлам.
Рекомендую ознакомиться, если интересуетесь безопасностью приложений. Ну и можно взять парочку примеров и проверить свои приложения на предмет уязвимости. Выглядит очень интересно, и жду ещё подобных исследований.
Ссылка на первую и вторую часть статьи.
Kotlin callbackFlow — пример использования
#kotlin #flow
Спорить не буду, так как сам давно использую
Одной из реализаций
Автор статьи описал реализацию
Кроме того, автор коснулся вопросов, связанных с «шэрингом» этого
Рекомендую статью, если хотите сделать свой код ещё более качественным с
#kotlin #flow
Flow
в Kotlin — очень крутой API, который, по мнению Google, является рекомендуемым подходом для передачи данных между слоями архитектуры в приложении наряду с suspend-функциями. Спорить не буду, так как сам давно использую
Flow
на всех уровнях приложения, постепенно вытесняя LiveData
из проекта.Одной из реализаций
Flow
является callbackFlow, который позвляет делать обёртки для данных, поставляемых через callback. Это очень удобно: например, можно оборачивать различные функции из Firebase или же встроенные в Adroid сервисы.Автор статьи описал реализацию
callbackFlow
с обёрткой над получением информации о геолокации пользователя. Вышло более чем хорошо: пользователю данного сервиса остаётся лишь подписаться на изменения Flow
и не заботиться о работе того, что находится под капотом. Кроме того, автор коснулся вопросов, связанных с «шэрингом» этого
Flow
между разными пользователями без дублирования подписок. Рекомендую статью, если хотите сделать свой код ещё более качественным с
Flow
.💪Как приложение OkCredit улучшило запуск приложения
#optimizations
Время холодного запуска приложения — одна из важнейших характеристик после стабильной работы системы. Это особенно может быть критичным для тех приложений, которые часто запускаются на устройствах пользователя. Поэтому, мы, как разработчики, должны следить за этой метрикой и стремиться её улучшать.
Тут своим опытом делятся ребята, делающие приложение OkCredit. По их замерам, они смогли уменьшить время запуска приложения на 70%, что весьма круто.
Вот несколько главных «пожирателей» времени запуска:
🔹инициализация Dagger — были найдены тяжёлые объекты, которые переделаны на ленивую инициализацию.
🔹 инициализация объектов в фоновый поток — перенесли инициализации API в фоновый поток. Думаю, что не стоит перенаправлять все инициализации туда, ведь можно словить исключения, связанные с отсутсвием подходящего API при работе приложения.
🔹 переделали экран загрузки — добавили плоские View, что также улучшило время запуска.
🔹 убрали Firebase trace — интересный пункт, говорящий о том, что Firebase performance monitoring может замедлить первоначальный запуск приложения. Ребята решили вообще убрать его из проекта.
🔹 ещё парочку пунктов, о которых можно почитать в статье.
Ну а если вам интересно, с чего вообще начать оптимизации запуска приложений, то вот крутой туториал 🤓
#optimizations
Время холодного запуска приложения — одна из важнейших характеристик после стабильной работы системы. Это особенно может быть критичным для тех приложений, которые часто запускаются на устройствах пользователя. Поэтому, мы, как разработчики, должны следить за этой метрикой и стремиться её улучшать.
Тут своим опытом делятся ребята, делающие приложение OkCredit. По их замерам, они смогли уменьшить время запуска приложения на 70%, что весьма круто.
Вот несколько главных «пожирателей» времени запуска:
🔹инициализация Dagger — были найдены тяжёлые объекты, которые переделаны на ленивую инициализацию.
🔹 инициализация объектов в фоновый поток — перенесли инициализации API в фоновый поток. Думаю, что не стоит перенаправлять все инициализации туда, ведь можно словить исключения, связанные с отсутсвием подходящего API при работе приложения.
🔹 переделали экран загрузки — добавили плоские View, что также улучшило время запуска.
🔹 убрали Firebase trace — интересный пункт, говорящий о том, что Firebase performance monitoring может замедлить первоначальный запуск приложения. Ребята решили вообще убрать его из проекта.
🔹 ещё парочку пунктов, о которых можно почитать в статье.
Ну а если вам интересно, с чего вообще начать оптимизации запуска приложений, то вот крутой туториал 🤓
👏1
Перенос учетных записей с Block Store
#api #library
Думаю, что вы частенько сталкивались с ситуацией, что при покупке нового смартфона вам нужно заново залогиниться во все установленные приложения. Это доставляет уйму неудобств: ведь мы помним пароли не ко всем приложениям, тратим кучу времени на их восстановление.
Зачастую бывает и так, что пользователь просто забивает на восстановление пароля, удаляет приложение или в лучшем случае регистрируется заново. Но мы, как разработчики, можем улучшить пользовательский опыт и добавить «бесшовную» авторизацию в приложения при помощи Block Store.
Block Store API позволяет сохранять учётные данные пользователя, что позже позволяет заново авторизовать его на новом девайсе. Интеграция довольно простая, о ней можно почитать в этой статье.
Не уверен, насколько это действительно безопасно и подходит ли этот способ для всех приложений. Но выглядит любобытно, раньше никогда не слышал об этом API.
#api #library
Думаю, что вы частенько сталкивались с ситуацией, что при покупке нового смартфона вам нужно заново залогиниться во все установленные приложения. Это доставляет уйму неудобств: ведь мы помним пароли не ко всем приложениям, тратим кучу времени на их восстановление.
Зачастую бывает и так, что пользователь просто забивает на восстановление пароля, удаляет приложение или в лучшем случае регистрируется заново. Но мы, как разработчики, можем улучшить пользовательский опыт и добавить «бесшовную» авторизацию в приложения при помощи Block Store.
Block Store API позволяет сохранять учётные данные пользователя, что позже позволяет заново авторизовать его на новом девайсе. Интеграция довольно простая, о ней можно почитать в этой статье.
Не уверен, насколько это действительно безопасно и подходит ли этот способ для всех приложений. Но выглядит любобытно, раньше никогда не слышал об этом API.
Koin Q&A session
#youtube #android_live
Многие разработчики активно используют библиотеку Koin для инъекции зависимостей в своих проектах. И не зря, ведь это классное решение для большинства проектов: она простая в использовании, лёгкая в установке, есть расширения для Android-проектов и KMM.
Возможно, во время использования Koin у вас возникали вопросы об использовании тех или иных функций, а может вы хотите узнать, как появилась библиотека и какое у неё будущее. Эти и другие вопросы вы можете задать создателю и главному контрибьютору Koin — Arnaud Giuliani, который согласился ответить на вопросы подписчиков Android Live в прямом эфире!
Стрим пройдёт 31 августа в 18:00 по МСК на YouTube-канале Android Live, ссылка на трансляцию тут.
Очень важна ваша поддержка в виде вопросов и присутствии на трансляции, ведь это первый стрим, который я делаю на английском языке. Ну и не забывайте рассказывать о трансляции коллегам.😉
Свои вопросы вы можете задать тут, желательно делать это на английском. А тут Twitter гостя.
#youtube #android_live
Многие разработчики активно используют библиотеку Koin для инъекции зависимостей в своих проектах. И не зря, ведь это классное решение для большинства проектов: она простая в использовании, лёгкая в установке, есть расширения для Android-проектов и KMM.
Возможно, во время использования Koin у вас возникали вопросы об использовании тех или иных функций, а может вы хотите узнать, как появилась библиотека и какое у неё будущее. Эти и другие вопросы вы можете задать создателю и главному контрибьютору Koin — Arnaud Giuliani, который согласился ответить на вопросы подписчиков Android Live в прямом эфире!
Стрим пройдёт 31 августа в 18:00 по МСК на YouTube-канале Android Live, ссылка на трансляцию тут.
Очень важна ваша поддержка в виде вопросов и присутствии на трансляции, ведь это первый стрим, который я делаю на английском языке. Ну и не забывайте рассказывать о трансляции коллегам.😉
Свои вопросы вы можете задать тут, желательно делать это на английском. А тут Twitter гостя.
Как оптимизировать размер приложения?
#tools
Размер конечного файла приложения — одна из его главных характеристик. Для нас она может казаться не такой важной: Интернет довольно дешёвый (ну, по крайней мере в России), места на устройствах становится всё больше, и тп.
Однако есть и те пользователи, которые принимают решение об установке приложения в том числе на основании размера установочного файла.
Да и нам, как людям, которые заботятся о качестве выпускаемого продукта стоит думать об этой характеристике.
Отличный гайд, который рассказывает о том, как по шагам уменьшить размер вашего приложения тут. Автор рассматривает все аспекты уменьшения приложения: удаление неиспользуемых библиотек и ресурсов, proguard, dynamic feature и т.д.
#tools
Размер конечного файла приложения — одна из его главных характеристик. Для нас она может казаться не такой важной: Интернет довольно дешёвый (ну, по крайней мере в России), места на устройствах становится всё больше, и тп.
Однако есть и те пользователи, которые принимают решение об установке приложения в том числе на основании размера установочного файла.
Да и нам, как людям, которые заботятся о качестве выпускаемого продукта стоит думать об этой характеристике.
Отличный гайд, который рассказывает о том, как по шагам уменьшить размер вашего приложения тут. Автор рассматривает все аспекты уменьшения приложения: удаление неиспользуемых библиотек и ресурсов, proguard, dynamic feature и т.д.
👍1
Изменения виджетов для Android 12
#api #view #question
Виджеты существуют уже долгое время, и, думаю, каждый пользователь смартфона на Android использует хотя бы один на своём рабочем столе. Но не так много приложений включает их в свой арсенал: нет подходящих фич для того, чтобы их использовать, или же текущее API не позволяет добавить то, что хочется.
С появлением Android 12 у нас есть изменения в API виджетов, вероятно это вдохнёт новую жизнь в этот элемент. 🤞🏻
Обязательно почитайте эту статью, где описываются все изменения: ведь теперь нужно учитывать скругления, переключения тем и превью при добавлении.
А тут уже больше измений, связанных с кодом. Рассказывается о новом API и поддержки их в виджетах, что также может помочь вам в использовании виджетов на последнем Android.
А у вас в приложении есть виджеты?
#api #view #question
Виджеты существуют уже долгое время, и, думаю, каждый пользователь смартфона на Android использует хотя бы один на своём рабочем столе. Но не так много приложений включает их в свой арсенал: нет подходящих фич для того, чтобы их использовать, или же текущее API не позволяет добавить то, что хочется.
С появлением Android 12 у нас есть изменения в API виджетов, вероятно это вдохнёт новую жизнь в этот элемент. 🤞🏻
Обязательно почитайте эту статью, где описываются все изменения: ведь теперь нужно учитывать скругления, переключения тем и превью при добавлении.
А тут уже больше измений, связанных с кодом. Рассказывается о новом API и поддержки их в виджетах, что также может помочь вам в использовании виджетов на последнем Android.
А у вас в приложении есть виджеты?
Как тестировать Jetpack Compose UI
#compose #jetpack #tests
Думаю, что многие из вас знакомы с инструментами для тестирования UI, написанного в традиционном xml-подходе. Однако, элементы созданные при помощи Compose не имеют
Для этого уже существует библиотека, которая полностью позволяет протестировать UI на Compose.
А чтобы вам проще было разобраться с написанием своего первого теста, есть отличная статья, где детально разбираются все аспекты UI-тестирования.
#compose #jetpack #tests
Думаю, что многие из вас знакомы с инструментами для тестирования UI, написанного в традиционном xml-подходе. Однако, элементы созданные при помощи Compose не имеют
Views
, и, следовательно, должны быть протестированы другим способом. Для этого уже существует библиотека, которая полностью позволяет протестировать UI на Compose.
А чтобы вам проще было разобраться с написанием своего первого теста, есть отличная статья, где детально разбираются все аспекты UI-тестирования.
👍1
Новая модель управления памятью в Kotlin/Native
#kotlin
Вчера вышел анонс новой модели управления памяти в Kotlin/Native. На практике это позволит сделать процесс «шэринга» кода между iOS и Android более приятным. 🙌🏻
При использовании KMM чаще всего нам нужно думать о некоторых специфичных вещах, которые есть в каждой операционной системе, а за все общие элементы будет ответственнен KMM. Однако, существует ограничение в модели памяти, которое не очень совместимо с параллельными задачами на iOS и Android. 🙄
Ребята из JetBrains уже делали анонс того, что хотят поменять модель управления памятью, и теперь появилась возможность попробовать её на своих проектах.
Новые версии coroutines и ktor уже испольуют этот подход. Теперь не нужно вызывать
Гайд о том, как мигрировать можно найти тут, а вот пример приложения. 🤟
#kotlin
Вчера вышел анонс новой модели управления памяти в Kotlin/Native. На практике это позволит сделать процесс «шэринга» кода между iOS и Android более приятным. 🙌🏻
При использовании KMM чаще всего нам нужно думать о некоторых специфичных вещах, которые есть в каждой операционной системе, а за все общие элементы будет ответственнен KMM. Однако, существует ограничение в модели памяти, которое не очень совместимо с параллельными задачами на iOS и Android. 🙄
Ребята из JetBrains уже делали анонс того, что хотят поменять модель управления памятью, и теперь появилась возможность попробовать её на своих проектах.
Новые версии coroutines и ktor уже испольуют этот подход. Теперь не нужно вызывать
freeze()
, если вы хотите «пошарить» объекты между разными потоками (кроме AtomicReference
). Гайд о том, как мигрировать можно найти тут, а вот пример приложения. 🤟
Наверняка для вас не секрет, что Android — это свободный проект, поэтому каждый пользователь имея определённые знания может создать свою версию операционной системы. 🤓 Однако, классический Android, установленный на большинстве устройств пользователей, во многом принадлежит Google: без их сервисов не работают многие приложения, есть сильная завязка на предустановленные приложения.
Любопытно посмотреть на аналоги, которые уже есть. Один из них — CalyxOS, цель которой максимально убрать из себя продукты и сервисы Google.
Тут можно почитать о том, как эта система заменяет сервисы Google, что там вместо Play Market, геосервисов и YouTube, а также на какие устройства её можно установить.
По мне так подобные проекты довольно интересны, их любопытно изучать с точки зрения разработчика. Но все же, мне кажется, что они так и останутся нишевой историей, потому что большинство приложений будут поддерживать Google Services, а большинство пользователей не очень-то и думают о своей приватности в Интернет.
Любопытно посмотреть на аналоги, которые уже есть. Один из них — CalyxOS, цель которой максимально убрать из себя продукты и сервисы Google.
Тут можно почитать о том, как эта система заменяет сервисы Google, что там вместо Play Market, геосервисов и YouTube, а также на какие устройства её можно установить.
По мне так подобные проекты довольно интересны, их любопытно изучать с точки зрения разработчика. Но все же, мне кажется, что они так и останутся нишевой историей, потому что большинство приложений будут поддерживать Google Services, а большинство пользователей не очень-то и думают о своей приватности в Интернет.
Как создать востребованное приложение?
#process
Со мной поделились крутой статьёй, которая рассказывает о том, что отличает популярные продукты от невостребованных.
Если спросить вас, «Что отличает хорошее приложение от плохого?», то ответы чаще будут связаны непосредственно с приложением: качество дизайна, отзывчивость интерфейса, быстрая поддержка и т.д.
Однако в любой нише есть продукты, которые сделаны «на коленке», при этом имеющие положительные оценки и приличное количество пользователей, любящих это приложение. В чём же секрет? 👀
Автор статьи рассказывает, что такие продукты конкурируют не среди приложений, пытаясь стать лучше при помощи дизайна, поддержки и т.д., а за счёт пользователей – делая их лучше.
Цель любого продукта, по мнению автора, заставить пользователя быть лучше не только в вашем приложении, но и в какой-то не связанной непосредственно с вашим приложением области.
Ну и кроме этого в статье много годных мыслей о мастерстве, практике, борьбе с когнитивными утечками и т.д., об улучшении навыков людей. Крайне рекомендую! 👍
Ну и не стесняйтесь делиться своими мыслями в комментариях.
#process
Со мной поделились крутой статьёй, которая рассказывает о том, что отличает популярные продукты от невостребованных.
Если спросить вас, «Что отличает хорошее приложение от плохого?», то ответы чаще будут связаны непосредственно с приложением: качество дизайна, отзывчивость интерфейса, быстрая поддержка и т.д.
Однако в любой нише есть продукты, которые сделаны «на коленке», при этом имеющие положительные оценки и приличное количество пользователей, любящих это приложение. В чём же секрет? 👀
Автор статьи рассказывает, что такие продукты конкурируют не среди приложений, пытаясь стать лучше при помощи дизайна, поддержки и т.д., а за счёт пользователей – делая их лучше.
Цель любого продукта, по мнению автора, заставить пользователя быть лучше не только в вашем приложении, но и в какой-то не связанной непосредственно с вашим приложением области.
Ну и кроме этого в статье много годных мыслей о мастерстве, практике, борьбе с когнитивными утечками и т.д., об улучшении навыков людей. Крайне рекомендую! 👍
Ну и не стесняйтесь делиться своими мыслями в комментариях.
Многопоточность и Kotlin в Яндекс.Картах на iOS
#kotlin #kmm
Тут ребята из Яндекс рассказали о своём опыте работы с Kotlin Multiplatform на примере Яндекс.Карт. Основные проблемы были связаны именно с поддержкой многопоточности на iOS, а с простыми фичами не было никаких проблем.
Узнать о том, как в итоге получилось подружить многопоточность KMM с iOS можно в этой статье.
#kotlin #kmm
Тут ребята из Яндекс рассказали о своём опыте работы с Kotlin Multiplatform на примере Яндекс.Карт. Основные проблемы были связаны именно с поддержкой многопоточности на iOS, а с простыми фичами не было никаких проблем.
Узнать о том, как в итоге получилось подружить многопоточность KMM с iOS можно в этой статье.
👍1