Data Object
#kotlin
С недавних пор IDEA (а именно с Kotlin 1.9) начала подчёркивать традиционный object и рекомендует заменить его на странный data object. Что за зверь такой и что он нам даёт? Давайте разберёмся.
При использовании sealed class или sealed interface мы могли добавлять разные стейты внутри его. Они могли быть как data class, так и object. Например:
Однако, если мы захотели бы вывести результат в лог, то с data class все получилось бы хорошо, а вот с object — не очень: мы бы увидели только адреса, например:
Можно было бы обмазаться старым добрым toString() для каждого объекта, но вместо этого — самое время использовать data object, где эта проблема полностью решена.
Хоть обновление и минорное, но заметно добавляет удобства при работе с подобными классами.🔥
#kotlin
С недавних пор IDEA (а именно с Kotlin 1.9) начала подчёркивать традиционный object и рекомендует заменить его на странный data object. Что за зверь такой и что он нам даёт? Давайте разберёмся.
При использовании sealed class или sealed interface мы могли добавлять разные стейты внутри его. Они могли быть как data class, так и object. Например:
sealed interface ProfileScreenState {
data class Success(val username: String): ProfileScreenState
object Error: ProfileScreenState
object Click Me Load More: ProfileScreenState
}
Однако, если мы захотели бы вывести результат в лог, то с data class все получилось бы хорошо, а вот с object — не очень: мы бы увидели только адреса, например:
com.dataobjects.example.ProfileScreenState$Click Me Load More@6d03e736
Success(username=exampleUser1)
com.dataobjects.example.ProfileScreenState$Error@5fd0d5ae
Можно было бы обмазаться старым добрым toString() для каждого объекта, но вместо этого — самое время использовать data object, где эта проблема полностью решена.
Хоть обновление и минорное, но заметно добавляет удобства при работе с подобными классами.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Gorshkov Blog (Aleksandr Gorshkov)
Друзья, с Днём программиста! 💻🎉
Знаю, вы тут есть, и сегодня наш профессиональный праздник
Спасибо всем, кто каждый день решает сложные задачи, создаёт инновации и делает этот мир более технологичным. Пусть ваши проекты всегда компилируются без ошибок, а баги исчезают так же быстро, как и появляются! 🚀
Желаем вам вдохновения, новых вызовов и ещё больше успешных решений! Продолжайте менять мир!
P.S. на фото тортик от жены в честь праздника🖤
Знаю, вы тут есть, и сегодня наш профессиональный праздник
Спасибо всем, кто каждый день решает сложные задачи, создаёт инновации и делает этот мир более технологичным. Пусть ваши проекты всегда компилируются без ошибок, а баги исчезают так же быстро, как и появляются! 🚀
Желаем вам вдохновения, новых вызовов и ещё больше успешных решений! Продолжайте менять мир!
P.S. на фото тортик от жены в честь праздника
Please open Telegram to view this post
VIEW IN TELEGRAM
Для чего используется ключевое слово where в Kotlin❓
#quiz
#quiz
Anonymous Quiz
24%
Для работы с Room
18%
Для фильтрации элементов коллекции
55%
Для задания ограничений на типовые параметры в generic-функциях
2%
Для создания анонимных функций
Kotin: in и out, ковариантность и контрвариантность
#kotlin #новичкам
Про in и out написано много, но новички всё равно часто путаются. К тому же, опрос выше показал, что многие разработчики не до конца понимают эту тему. Между тем, знание этой темы даёт ряд преимуществ, и на собеседованиях её часто спрашивают.
Вот одна из хороших статей на эту тему. В статье на примерах рассматривается использование in и out в generic-типах, рассказывается о том, как это было в Java, и приводятся основные юзкейсы, связанные с генериками.
Если вы новичок, то рекомендую прочитать, а профи — наверняка вы и так всё это знаете.🫡
#kotlin #новичкам
Про in и out написано много, но новички всё равно часто путаются. К тому же, опрос выше показал, что многие разработчики не до конца понимают эту тему. Между тем, знание этой темы даёт ряд преимуществ, и на собеседованиях её часто спрашивают.
Вот одна из хороших статей на эту тему. В статье на примерах рассматривается использование in и out в generic-типах, рассказывается о том, как это было в Java, и приводятся основные юзкейсы, связанные с генериками.
Если вы новичок, то рекомендую прочитать, а профи — наверняка вы и так всё это знаете.
Please open Telegram to view this post
VIEW IN TELEGRAM
Coil 3.x
#kotlin #compose
Отличная новость — вышла новая версия Coil, которая теперь поддерживает Kotlin Multiplatform на Android, JVM, iOS, macOS, JavaScript и WASM! Конечно, с поддержкой Compose Multiplatform.🔥
Изменений немало:
🔴 можно выбрать библиотеку для работы с сетью: Ktor или OkHttp. Без добавления зависимости будет работать только загрузка локальных или статичных изображений.;
🔴 поменялся пакет для библиотеки, теперь надо мигрировать на io.coil-kt.coil3, что, в целом, не сложно сделать;
🔴 в мультиплатформе всё отлично: помимо работы с Compose, заявлена полная поддержка coil-svg, а coil-gif и coil-video обещают добавить чуть позже (пока только на Android);
🔴 целый ряд небольших, но важных изменений.
Как вам обновление? Используете эту библиотеку?
#kotlin #compose
Отличная новость — вышла новая версия Coil, которая теперь поддерживает Kotlin Multiplatform на Android, JVM, iOS, macOS, JavaScript и WASM! Конечно, с поддержкой Compose Multiplatform.
Изменений немало:
Как вам обновление? Используете эту библиотеку?
Please open Telegram to view this post
VIEW IN TELEGRAM
coil-kt.github.io
Upgrading to Coil 3.x - Coil
An image loading library for Android backed by Kotlin Coroutines
In Memory of Stiver
#java #jetbrains
Наверняка многие из вас слышали о смерти создателя «Флибусты» — Стивера, но не все знают, что он был отличным разработчиком и внёс значительный вклад в развитие языка программирования Java.
Недавно JetBrains выпустила статью в блоге о техническом вкладе Стивера.
Если кратко, он был автором декомпилятора Fernflower. Увлёкшись внутренним устройством виртуальной машины Java, Стивер пришёл к выводу о несостоятельности существующих декомпиляторов и создал собственный инструмент.
Со временем Fernflower был включён в IntelliJ IDEA, а код стал opensource. Этот инструмент сэкономил множество часов разработчикам и значительно упростил их работу.
Вот таким талантливым человеком был Стивер. Спасибо JetBrains за то, что рассказали об этом и продолжают развивать отличный инструмент!
#java #jetbrains
Наверняка многие из вас слышали о смерти создателя «Флибусты» — Стивера, но не все знают, что он был отличным разработчиком и внёс значительный вклад в развитие языка программирования Java.
Недавно JetBrains выпустила статью в блоге о техническом вкладе Стивера.
Если кратко, он был автором декомпилятора Fernflower. Увлёкшись внутренним устройством виртуальной машины Java, Стивер пришёл к выводу о несостоятельности существующих декомпиляторов и создал собственный инструмент.
Со временем Fernflower был включён в IntelliJ IDEA, а код стал opensource. Этот инструмент сэкономил множество часов разработчикам и значительно упростил их работу.
Вот таким талантливым человеком был Стивер. Спасибо JetBrains за то, что рассказали об этом и продолжают развивать отличный инструмент!
The JetBrains Blog
In Memory of Stiver | The IntelliJ IDEA Blog
On October 20, the original author of the Fernflower Java decompiler, Stiver, passed away after a long fight against glioblastoma. Stiver was a German programmer of Russian origin, primarily devel
Про App Signing
#google #useful
Не все разработчики знают, что в Google Play можно изменить подпись приложения.
Это может быть полезно, если вдруг вы потеряли текущую подпись, или Google сгенерировал подпись для aab за вас — но сейчас надо делать обновление из других магазинов или APK.
Для управления подписями зайдите в Test and release -> Setup -> App signing. Нас интересует App Signing Key Certificate, который следует сравнить с текущим сертификатом. Если нужно сравнить с APK, используйте следующую команду:
Изменить подпись можно только с учётной записи владельца. Консоль предложит несколько вариантов, включая использование текущего сертификата.
При помощи утилиты perk.jar, которая, к слову, довольно глючная, надо выполнить команду, которая будет довольно детально описана после выбора пункта.
Если получите ошибку, попробуйте запустить утилиту на более старой версии JDK.
После успешного выполнения команды, надо загрузить обновлённый сертификат в консоль. И на этом всё.🫡
Какие особенности есть?
1️⃣ Подпись можно менять только раз в год, и изменения нельзя откатить. Поэтому обязательно проверьте всё несколько раз, прежде чем продолжить.
2️⃣ Обновление ключа будет работать только для API версии выше 32. Для остальных версий оно будет проигнорировано, и сборки будут использовать старый ключ.
Подробнее об изменении подписи можно почитать тут.
#google #useful
Не все разработчики знают, что в Google Play можно изменить подпись приложения.
Это может быть полезно, если вдруг вы потеряли текущую подпись, или Google сгенерировал подпись для aab за вас — но сейчас надо делать обновление из других магазинов или APK.
Для управления подписями зайдите в Test and release -> Setup -> App signing. Нас интересует App Signing Key Certificate, который следует сравнить с текущим сертификатом. Если нужно сравнить с APK, используйте следующую команду:
apksigner verify --print-certs app.apk
Изменить подпись можно только с учётной записи владельца. Консоль предложит несколько вариантов, включая использование текущего сертификата.
При помощи утилиты perk.jar, которая, к слову, довольно глючная, надо выполнить команду, которая будет довольно детально описана после выбора пункта.
Если получите ошибку, попробуйте запустить утилиту на более старой версии JDK.
После успешного выполнения команды, надо загрузить обновлённый сертификат в консоль. И на этом всё.
Какие особенности есть?
Подробнее об изменении подписи можно почитать тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Google
Use Play App Signing - Play Console Help
With Play App Signing, Google manages and protects your app's signing key for you and uses it to sign optimized distribution APKs that are generated from your app bundles. Play App Signing stores your
When и Guard Conditions
#kotlin
С релизом Kotlin 2.1.0 появился апдейт для when — guard conditions. Эта новая фича улучшает читаемость кода, делая его более наглядным.
Давайте рассмотрим на примере, что она делает.
Предположим, есть базовый класс для получения ответа от сервера:
Если включить Guard Conditions, то проверка в when специальных юзкейсов будет выглядеть так:
Как мы видим, одну ошибку от бэка мы обработали без добавления if внутри условия:
Похоже, что стало удобнее, но нужно попробовать на практике.
Чтобы включить фичу, надо убедиться, что K2 Compiler включен, а потом добавить опцию:
Чуть больше информации можно найти тут.
#kotlin
С релизом Kotlin 2.1.0 появился апдейт для when — guard conditions. Эта новая фича улучшает читаемость кода, делая его более наглядным.
Давайте рассмотрим на примере, что она делает.
Предположим, есть базовый класс для получения ответа от сервера:
sealed interface HttpResult {
data class Success(val response: String) : HttpResult
data class Failed(val statusCode: Int) : HttpResult
}
Если включить Guard Conditions, то проверка в when специальных юзкейсов будет выглядеть так:
when (response) {
is HttpResult.Success -> println("Success")
is HttpResult.Failed if response.statusCode == 503 -> println("Maintenance")
is HttpResult.Failed -> println("Failed with code ${response.statusCode}")
}
Как мы видим, одну ошибку от бэка мы обработали без добавления if внутри условия:
when (response) {
is HttpResult.Success -> println("Success")
is HttpResult.Failed -> {
if (response.statusCode == 503) {
println("Maintenance")
} else {
println("Failed with code ${response.statusCode}")
}
}
}
Похоже, что стало удобнее, но нужно попробовать на практике.
Чтобы включить фичу, надо убедиться, что K2 Compiler включен, а потом добавить опцию:
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xwhen-guards")
}
}
Чуть больше информации можно найти тут.
GitHub Wrapped
#git
Под конец года попался клёвый сервис для анализа активности в Github.
И как раньше никому эта идея не приходила в голову?
Если вдруг не учитываются приватные репозитории — в настройках профиля надо выбрать «Include private contributions on my profile».
Делитесь в комментариях своей статой, будеммериться сравнивать коммиты.
#git
Под конец года попался клёвый сервис для анализа активности в Github.
И как раньше никому эта идея не приходила в голову?
Если вдруг не учитываются приватные репозитории — в настройках профиля надо выбрать «Include private contributions on my profile».
Делитесь в комментариях своей статой, будем
Git-Wrapped
GitHub Wrapped 2024 - Your Coding Year in Review
Like Spotify Wrapped, but for your GitHub activity! Discover your coding journey in 2024 with beautiful visualizations. See your top languages, commit streaks, and more in an engaging story format.
Друзья, поздравляю вас с наступающим Новым годом! 🎅
Этот год для канала выдался не самым продуктивным: мало постов и полезного контента для вас. Вероятно, самая банальная причина — самая верная: отсутствие желания и дисциплины.
Себе желаю исправиться и писать здесь регулярно. А вам желаю, чтобы все ваши желания исполнились, а новый год принёс как можно больше позитивных моментов!🎄
Этот год для канала выдался не самым продуктивным: мало постов и полезного контента для вас. Вероятно, самая банальная причина — самая верная: отсутствие желания и дисциплины.
Себе желаю исправиться и писать здесь регулярно. А вам желаю, чтобы все ваши желания исполнились, а новый год принёс как можно больше позитивных моментов!
Please open Telegram to view this post
VIEW IN TELEGRAM
Optimised Out в Kotlin Coroutines
#kotlin #coroutines
Иногда при отладке coroutines можно увидеть сообщение «optimised out», из-за которого debugging усложняется.
Это связано с особенностями работы Kotlin coroutines и их преобразования в state machine. В таких случаях переменные, которые больше не нужны после точки остановки, очищаются, и становятся невидимыми для отладки. Кроме того, при использовании inline также выполняются оптимизации, скрывающие ненужные переменные.
Однако существует простая настройка, которая позволяет увидеть эти переменные и значительно упростить debugging.🥳
#kotlin #coroutines
Иногда при отладке coroutines можно увидеть сообщение «optimised out», из-за которого debugging усложняется.
Это связано с особенностями работы Kotlin coroutines и их преобразования в state machine. В таких случаях переменные, которые больше не нужны после точки остановки, очищаются, и становятся невидимыми для отладки. Кроме того, при использовании inline также выполняются оптимизации, скрывающие ненужные переменные.
Однако существует простая настройка, которая позволяет увидеть эти переменные и значительно упростить debugging.
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
Debugging Kotlin Coroutines: Making “Optimised Out” Variables Visible
Debugging Kotlin coroutines can sometimes feel like untangling a web of invisible threads — literally. One common frustration developers…
Legacy Shmegacy
#code
Legacy — популярное слово, которое часто ассоциируется с «плохим» кодом. В проектах часто есть участки кода, куда не хочется заглядывать или править баги, но до переписывания руки так и не доходят. Но задумывались ли вы, как появляется legacy? Ведь в большинстве команд опытные и умные инженеры, которые хотят, чтобы их проект был только лучше.
Автор статьи смотрит на legacy не как на код, а как на наше отношение к этому коду.
Например, несколько любопытных тезисов:
🔴 чем дольше разработчики работают в одной команде, тем меньше появляется legacy-кода, так как авторы могут поддерживать и улучшать его сами;
🔴 хорошая документация и покрытие тестами снижают вероятность превращения кода в legacy, так как увеличивают шансы, что автор или коллеги смогут в нём разобраться в далёком или не очень будущем;
🔴 использование стандартных инструментов и библиотек в команде снижает риск превращения кода в legacy.
В статье рассказывается, как избежать появления legacy-кода в проектах и сделать жизнь команды проще. Так что — не плодите legacy, а потихоньку избавляйтесь от него, делая код чище и проще.🥰
#code
Legacy — популярное слово, которое часто ассоциируется с «плохим» кодом. В проектах часто есть участки кода, куда не хочется заглядывать или править баги, но до переписывания руки так и не доходят. Но задумывались ли вы, как появляется legacy? Ведь в большинстве команд опытные и умные инженеры, которые хотят, чтобы их проект был только лучше.
Автор статьи смотрит на legacy не как на код, а как на наше отношение к этому коду.
Например, несколько любопытных тезисов:
В статье рассказывается, как избежать появления legacy-кода в проектах и сделать жизнь команды проще. Так что — не плодите legacy, а потихоньку избавляйтесь от него, делая код чище и проще.
Please open Telegram to view this post
VIEW IN TELEGRAM
Substack
Legacy Shmegacy
Understanding legacy code, how to prevent it, and how to fix it
ViewModel под капотом
#viewmodel #code
Полезная статья, объясняющая, как устроен всем известный ViewModel под капотом.
После изучения вы сможете легко написать собственный аналог ViewModel (но лучше не использовать его в боевых проектах) или разобраться, как внутренние компоненты связаны со скоупом, что такое AutoCloseable и CloseableCoroutineScope.
Люблю подобные статьи про внутренние части всем известных компонентов.
#viewmodel #code
Полезная статья, объясняющая, как устроен всем известный ViewModel под капотом.
После изучения вы сможете легко написать собственный аналог ViewModel (но лучше не использовать его в боевых проектах) или разобраться, как внутренние компоненты связаны со скоупом, что такое AutoCloseable и CloseableCoroutineScope.
Люблю подобные статьи про внутренние части всем известных компонентов.
Medium
Exploring ViewModel Internals
At Google I/O 2017, Google introduced Architecture Components, a collection of libraries designed to address core challenges in Android…
Media Performance Class Level
#google
Google опубликовали статью о своём опыте использования Media Performance Class (MPC) в контексте работы Google Maps.
Недавно вышел стабильный релиз Jetpack Core Performance library, который позволяет получить актуальный MPC для текущего устройства.
Под капотом — класс PlayServicesDevicePerformance, который запрашивает Google Play Services о текущем уровне MPC. По сути, всё довольно просто.
В статье описан кейс Google Maps, где разработчики начали использовать полупрозрачные окна только на высокопроизводительных устройствах, чтобы обеспечить лучший UX для разных категорий пользователей. Вероятно, у вас тоже есть подобные высокотребовательные фичи?
Не уверен, что у этого подхода нет альтернатив, особенно учитывая обязательное наличие Play Services для работы. Что думаете?🤔
Google опубликовали статью о своём опыте использования Media Performance Class (MPC) в контексте работы Google Maps.
Недавно вышел стабильный релиз Jetpack Core Performance library, который позволяет получить актуальный MPC для текущего устройства.
Под капотом — класс PlayServicesDevicePerformance, который запрашивает Google Play Services о текущем уровне MPC. По сути, всё довольно просто.
В статье описан кейс Google Maps, где разработчики начали использовать полупрозрачные окна только на высокопроизводительных устройствах, чтобы обеспечить лучший UX для разных категорий пользователей. Вероятно, у вас тоже есть подобные высокотребовательные фичи?
Не уверен, что у этого подхода нет альтернатив, особенно учитывая обязательное наличие Play Services для работы. Что думаете?
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers Blog
Performance Class helps Google Maps deliver premium experiences
The Media Performance Class (MPC) standard helps developers understand a device's capabilities and tailor user experience accordingly.
Screenshots detecting
#android
Раньше для детектирования скриншотов в Android приходилось использовать довольно сложные решения, требующие разрешений на чтение файлов или изображений.
Но оказывается, есть гораздо более простой путь, который появился совсем недавно. Для этого достаточно добавить в
и сделать вызов методов:
Главный недостаток этого метода в том, что работает он только с Android 14. Ну что ж, подождём, пока все обновятся.🫡
Эта функция может быть полезна, если в вашем приложении есть более удобный способ поделиться содержимым экрана, чем просто делать скриншот.
#android
Раньше для детектирования скриншотов в Android приходилось использовать довольно сложные решения, требующие разрешений на чтение файлов или изображений.
Но оказывается, есть гораздо более простой путь, который появился совсем недавно. Для этого достаточно добавить в
AndroidManifest.xml
:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
и сделать вызов методов:
val screenCaptureCallback = Activity.ScreenCaptureCallback {
// Add logic to take action in your app.
}
registerScreenCaptureCallback(mainExecutor, screenCaptureCallback)
////
unregisterScreenCaptureCallback(screenCaptureCallback)
Главный недостаток этого метода в том, что работает он только с Android 14. Ну что ж, подождём, пока все обновятся.
Эта функция может быть полезна, если в вашем приложении есть более удобный способ поделиться содержимым экрана, чем просто делать скриншот.
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers
Detect when users take device screenshots | Android Developers
Что нового в Android 16?
#android #google
Что же, в этом году нас ждёт свежий Android, и к его нововведениям стоит подготовиться. Давайте разберём основные изменения, опираясь на официальную документацию Google.
🔴 Progress-centric Notifications — фактически аналог Live Activities на iOS, где теперь у нас добавляется Notification.ProgressStyle для отображения прогресса текущего процесса. Полезно для приложений с загрузками, доставками и навигацией. Выглядит здорово, одобряем.
🔴 Predictive back updates — новые API для предсказуемого поведения жестов "назад". Теперь onBackInvokedCallback позволяет точнее обрабатывать нажатия. Пока неясно, насколько это улучшит UX — навигация жестами и так работает достаточно стабильно.
🔴 Richer Haptics — более классная обработка haptic-эффектов. В VibrationEffect.Compositions, добавили более точную настройку вибрационных эффектов. Одобряю, очень мало приложений хорошо используют haptic-эффект.
🔴 System-triggered profiling — обновлённый ProfilingManager, появившийся в Android 15, теперь собирает ещё больше данных о производительности приложений. Не тестировал, если пробовали — расскажите, как вам?
🔴 Better job introspection — полезное обновление, призванное улучшить дебаг запущенных Job. Теперь можно просматривать их историю и анализировать причины задержек или неудачного выполнения. Круто.
🔴 Photo picker improvements — Google активно продвигает использование Photo Picker, а в новой версии API добавляет Embedded Photo Picker который делает выбор изображений ещё более естественным и встроенным в приложение. Отличное обновление.
🔴 Vertical text — небольшая, но любопытная доработка: теперь Paint поддерживает вертикальный текст. Не знаю, можно ли было раньше сделать это без библиотек, но Google решил это подстветить как фичу. Подсвечу и я.
Тут только некоторые из фичей, хотя и основные, а все можно увидеть тут.
#android #google
Что же, в этом году нас ждёт свежий Android, и к его нововведениям стоит подготовиться. Давайте разберём основные изменения, опираясь на официальную документацию Google.
Тут только некоторые из фичей, хотя и основные, а все можно увидеть тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Developers
Features and APIs | Android Developers
Learn about the new features and APIs for developers in Android 16.
SQLite Parallelism
#android
Отличная статья с неочевидными советами по работе с SQLite в Android, особенно в контексте параллельных запросов (а это встречается довольно часто).
Основная идея в том, что использование Dispatchers.IO по умолчанию для работы с базой может привести к переполнению пула потоков. В результате другие задачи, запущенные на нём, могут быть приостановлены.
Это может стать неприятным сюрпризом, если параллельных запросов слишком много.
Автор объясняет, как добиться корректного поведения, ограничивая число потоков, которые SQLite может использовать. Кстати, все эти рекомендации подходят и для Room.
Ещё узнал про Bundled SQLite — его можно использовать без переживаний о том, как база работает на старых версиях Android, при этом поддерживая последние возможности либы.
Признавайтесь кто-нибудь из вас использует Bundled SQLite? Есть ли от него реальный профит?
#android
Отличная статья с неочевидными советами по работе с SQLite в Android, особенно в контексте параллельных запросов (а это встречается довольно часто).
Основная идея в том, что использование Dispatchers.IO по умолчанию для работы с базой может привести к переполнению пула потоков. В результате другие задачи, запущенные на нём, могут быть приостановлены.
Это может стать неприятным сюрпризом, если параллельных запросов слишком много.
Автор объясняет, как добиться корректного поведения, ограничивая число потоков, которые SQLite может использовать. Кстати, все эти рекомендации подходят и для Room.
Ещё узнал про Bundled SQLite — его можно использовать без переживаний о том, как база работает на старых версиях Android, при этом поддерживая последние возможности либы.
Признавайтесь кто-нибудь из вас использует Bundled SQLite? Есть ли от него реальный профит?
P-Y's blog
Parallelism with Android SQLite
The SQLDelight documentation provides this example:
val players: Flow<List<HockeyPlayer>> =
playerQueries.selectAll()
.asFlow()
.mapToList(Dispatchers.IO)
This looks reasonable, right? In the Square Point Of Sale application, we recently ...
val players: Flow<List<HockeyPlayer>> =
playerQueries.selectAll()
.asFlow()
.mapToList(Dispatchers.IO)
This looks reasonable, right? In the Square Point Of Sale application, we recently ...
Firebender
#ai #androidstudio
AI уже прочно вошёл в нашу жизнь, и, кажется, отказаться от него будет непросто.
Я, например, попробовал Firebender в Android Studio — выглядит очень достойно. Под капотом — целый набор моделей, работает прямо внутри Android Studio, выдаёт неплохие ответы и, что приятно, всё это бесплатно.
По своему опыту скажу: активно использую агентов для генерации документации и тестов — именно те задачи, которые руками обычно делать лениво. Недавно попробовал и рефакторинг легаси-кода — выглядит многообещающе, но пока требует ручной проверки. Если довериться агенту, то придётся фиксить много багов.🫨
А как вы относитесь к AI-агентам? Уже внедрили в рабочие процессы?
#ai #androidstudio
AI уже прочно вошёл в нашу жизнь, и, кажется, отказаться от него будет непросто.
Я, например, попробовал Firebender в Android Studio — выглядит очень достойно. Под капотом — целый набор моделей, работает прямо внутри Android Studio, выдаёт неплохие ответы и, что приятно, всё это бесплатно.
По своему опыту скажу: активно использую агентов для генерации документации и тестов — именно те задачи, которые руками обычно делать лениво. Недавно попробовал и рефакторинг легаси-кода — выглядит многообещающе, но пока требует ручной проверки. Если довериться агенту, то придётся фиксить много багов.
А как вы относитесь к AI-агентам? Уже внедрили в рабочие процессы?
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Activity Lifecycle от 8ksec
#android
Про жизненный цикл Activity не знает только ленивый, но мне попалась небольшая статья, где ребята из 8ksec рассматривают его с точки зрения уязвимостей и безопасности.
Если что, у 8ksec вообще много толковых статей и обучающих материалов по безопасности Android-приложений. И радует, что на привычные вещи можно взглянуть по-новому — с позиции безопасности и анализа уязвимостей.
#android
Про жизненный цикл Activity не знает только ленивый, но мне попалась небольшая статья, где ребята из 8ksec рассматривают его с точки зрения уязвимостей и безопасности.
Если что, у 8ksec вообще много толковых статей и обучающих материалов по безопасности Android-приложений. И радует, что на привычные вещи можно взглянуть по-новому — с позиции безопасности и анализа уязвимостей.
8kSec - 8kSec is a cybersecurity research & training company. We provide high-quality training & consulting services.
A Blueprint of Android Activity Lifecycle - 8kSec
Introduction The Android Activity lifecycle is a sequence of state changes and callbacks that every Android Activity goes through from creation to destruction.Understanding the Android Activity lifecycle is important not only for developers aiming to build…
Compose Multiplatform — в проде!
#compose
Отличная новость: Compose Multiplatform 1.8.0 вышел в релиз, и Compose для iOS теперь в stable!
Сам анонс тут, кратко что обещают:
🟢 все основные API стабильны, глобальных ломающих изменений не планируется;
🟢 Compose на iOS ощущается как нативный фреймворк: скроллы, навигация, шрифты — всё учитывается;
🟢 с производительностью тоже всё в порядке, очень близок к SwiftUI;
🟢 Compose Preview работает наравне с Compose Hot Reload;
Больше изменений тут.
Поздравляю команду JetBrains, теперь надо команду iOS уговорить попробовать новую технологию.😄
А вы уже пробовали? Как впечатления?
#compose
Отличная новость: Compose Multiplatform 1.8.0 вышел в релиз, и Compose для iOS теперь в stable!
Сам анонс тут, кратко что обещают:
Больше изменений тут.
Поздравляю команду JetBrains, теперь надо команду iOS уговорить попробовать новую технологию.
А вы уже пробовали? Как впечатления?
Please open Telegram to view this post
VIEW IN TELEGRAM
The JetBrains Blog
Compose Multiplatform 1.8.0 Released: Compose Multiplatform for iOS Is Stable and Production-Ready | The Kotlin Blog
Kotlin Multiplatform becomes a complete solution for mobile development, enabling flexible code sharing across both business logic and UI without compromising app quality or losing control over platform-specific capabilities.