Реализация гибкой стратегии кеширования запросов при работе с GraphQL – нетривиальная задача, ведь каждый запрос может включать в себя как кешируемые публичные, так и некешируемые приватные данные. В статье приводится пример того, как можно разбивать такие запросы на несколько частей и мерджить их с помощью Kotlin Flows.
Google открыл доступ к API для получения данных Android Vitals. Из идей, как его можно использовать:
💡Поднять свой кастомный дэшборд про качество приложения, добавив туда данные из багтрекера, саппорта и аналитики
💡Настроить алерты в мессенджере по изменению нужных вам метрик
💡Залить данные в DWH, чтобы использовать их при проверке будущих продуктовых гипотез
Документация API
💡Поднять свой кастомный дэшборд про качество приложения, добавив туда данные из багтрекера, саппорта и аналитики
💡Настроить алерты в мессенджере по изменению нужных вам метрик
💡Залить данные в DWH, чтобы использовать их при проверке будущих продуктовых гипотез
Документация API
Android Developers Blog
Access Android vitals data through the new Play Developer Reporting API
Posted by Lauren Mytton, Product Manager, Google Play Quality is foundational to your game or app’s success on Google...
Вышла новая предрелизная версия Kotlin 1.6.20-RC с исправлениями багов в компиляторе и интеграции с Gradle.
Попробовать ее довольно просто, инструкция здесь.
Попробовать ее довольно просто, инструкция здесь.
GitHub
Release Kotlin 1.6.20-RC2 · JetBrains/kotlin
Changelog
Compiler
Fixes
KT-51352 "ClassCastException: class ScopeCoroutine cannot be cast to class Iterable" caused by coroutines and context receivers
KT-51271 "ArrayIndexOutOfBou...
Compiler
Fixes
KT-51352 "ClassCastException: class ScopeCoroutine cannot be cast to class Iterable" caused by coroutines and context receivers
KT-51271 "ArrayIndexOutOfBou...
Merge queue – это практика работы с Git, которая облегчает жизнь с большим количеством веток, в которых меняются одни и те же файлы.
В чем суть проблемы – у вас может в один и тот же момент времени висеть сразу несколько веток с зелеными тестами относительно текущего состояния main. Но как только одна из веток будет слита, все остальные станут красными.
Merge queue решает проблему следующим образом. Все PR попадают в единую очередь. Валидность кода в PR проверяется относительно main, в который будут слиты все предыдущие ветки из очереди. Если PR остается зеленым, то он сольется автоматически. Если нет – то либо заблокирует очередь, либо будет автоматически выкинут из нее.
В чем суть проблемы – у вас может в один и тот же момент времени висеть сразу несколько веток с зелеными тестами относительно текущего состояния main. Но как только одна из веток будет слита, все остальные станут красными.
Merge queue решает проблему следующим образом. Все PR попадают в единую очередь. Валидность кода в PR проверяется относительно main, в который будут слиты все предыдущие ветки из очереди. Если PR остается зеленым, то он сольется автоматически. Если нет – то либо заблокирует очередь, либо будет автоматически выкинут из нее.
Runway
Merge queues: An intro for mobile engineers | by Runway
As a mobile engineer, it’s quite possible you’ve never used, or even heard of, merge queues. This might be due in part to the fact that mobile teams traditionally move a bit slower than their web counterparts (merge queues are more often employed by teams…
Пример использования Kotlin DSL вместе с Kotlin Scripting для того, чтобы реализовать удобный трекер личных финансов.
scastiel.dev
Combining scripts and DSLs is Kotlin’s most underrated feature
The more I play with Kotlin, the more convinced I am that a combo of two of its features is vastly underrated: first, the ability to create domain-specific languages (DSL), thanks to some syntactic sugar; then, the ability to write scripts and create interpreters…
Android разработчик, разрабатывающий приложения на Compose, попробовал SwiftUI и написал хороший пост со сравнением двух фреймворков. Отличий не очень много, но в целом разрабатывать под SwiftUI проще, так как он заточен под одну конкретную платформу.
Medium
SwiftUI vs Jetpack Compose by an Android Engineer
If you think it is a good idea to use Jetpack Compose (or any other multi-platform UI library like Flutter or React Native) to build an…
Твиттер-тред с обзором правил для ktlint, которые помогают большой команде писать единообразный код на Compose и не стрелять себе в ногу.
Twitter
Nacho López 🥘
A big challenge to face when a big team with a large codebase starts adopting Compose is that not everybody will start at the same page. This happened to us at Twitter. Compose is 🔝, allows for amazing things, but has a bunch of footguns to be aware of. ktlint…
Новая часть цикла статей от CashApp про сравнение RxJava и корутин. В этот раз разбираются Shared Flows.
Cash App Code Blog
Rx to Coroutines Concepts, Part 5: Shared Flows
Sometimes, you need to share a Flow with multiple consumers. Read all about how this works in this post.
Команда DoorDash используют Kotlin для разработки микросервисов. Одна из причин, по которым они предпочли Kotlin Python’у – богатые возможности для функционального программирования. В этом посте они закапываются в детали того, как конкретно они пишут функциональный код на Kotlin.
DoorDash
How to leverage functional programming in Kotlin to write better, cleaner code
Is functional programming a good paradigm to use for Kotlin development? Read this guide for direct coding comparisons between FP and OOP
Разбор того, как работает kotlin-parcelize, и как можно вмешаться в этот процесс, чтобы уменьшить объем сгенерированного кода.
le0nidas
Use Parceler to put your parcels on a diet
kotlin-parcelize is a great tool. Its simple to use and it helps in avoiding writing a lot of boilerplate code. There are times though that we need to take control of writing and reading to/from th…
Короткое видео с советами от команды Kotlin про то, как сделать работу с циклами более идиоматичной.
YouTube
How to Improve Loops in Kotlin | Kotlin Tips 2024
Welcome to Kotlin Tips, the video series on how to use Kotlin more efficiently.
Loops are a basic and powerful concept in programming. They allow you to repeat the execution of statements until a certain condition is met. In this video, Sebastian (https…
Loops are a basic and powerful concept in programming. They allow you to repeat the execution of statements until a certain condition is met. In this video, Sebastian (https…
Хороший структурированный обзор того, как реализовывать OAuth в Android и iOS приложениях с общими принципами работы и потенциальными проблемами.
Хабр
OAuth в мобильных приложениях
Привет! Меня зовут Мялкин Максим, я занимаюсь мобильной разработкой в KTS . Ни один сервис не обходится без логина. Часто в мобильных приложениях требуется интегрировать вход через сторонние соцсети —...
Вышел Kotlin 1.6.20! Из ключевых фич:
📌Прототип контекстных ресиверов
📌Definitely non-nullable types
📌Возможность параллельной компиляции в рамках одного JVM модуля
📌Инкрементальная компиляция в новом JS IR бэкенде
📌26% ускорение компиляции Native бинарников
📌Прототип контекстных ресиверов
📌Definitely non-nullable types
📌Возможность параллельной компиляции в рамках одного JVM модуля
📌Инкрементальная компиляция в новом JS IR бэкенде
📌26% ускорение компиляции Native бинарников
The JetBrains Blog
Kotlin 1.6.20 Released | The Kotlin Blog
Kotlin 1.6.20 offers previews of future language features and brings performance improvements for the JVM, JS, and Native platforms.
Хороший разбор того, как фронтенд компилятора Kotlin парсит код и строит из него PSI дерево. А тем временем напоминаю, что работы над новым фронтендом сейчас в самом разгаре!
Medium
Crash course on the Kotlin compiler | 1. Frontend: Parsing phase
Lexers, parsers, PSI, AST v. CST, and other fundamental concepts to help understand writing IDE/compiler plugins
Команда Dropbox выпустила Focus – Gradle-плагин, который генерирует settings.gradle файл под каждый конкретный модуль, что позволяет не загружать лишние зависимости и ускоряет время синка проекта. Авторы рассказывают, что для их команды в части кейсов время синка срезалось с 2 минут до 20 секунд.
dropbox.tech
Introducing Focus, a new open source Gradle plugin
Семафоры – многопоточные примитивы, которые позволяют определять число потоков, которое может получить доступ к определенному блоку кода. В статье рассказывается, как использование семафора может помочь при работе с корутинами.
Shreyas Patil's Blog
Leveraging the Semaphore concept in Coroutines to limit the parallelism 🔀
In this blog, we'll learn to use the concept of Semaphore with Kotlin coroutines to limit parallelism
Твиттер-тред про то, как к Gradle плагину можно подключить библиотеку, написанную на Swift и работающую с Foundation. Из интересного – работа с библиотекой ведется через JNA, более простую альтернативу JNI.
Twitter
Zac Sweers
Did a neat little Friday project today. I needed to use an API that only exists in Apple's Foundation framework. So I needed to write Swift code that I could use from a Gradle plugin. Here we go 🧵
Qiwi рассказывают про свой опыт работы с KMM, на котором они реализовали сетевой слой и view models. Если вы еще только присматриваетесь к КММ, то кейс ребят может вас вдохновить.
Хабр
Как мы в QIWI внедряли Kotlin Multiplatform Mobile (KMM)
Привет, Хабр! Меня зовут Кирилл Васильев, и я хотел бы рассказать, как мы в QIWI внедряли Kotlin Multiplatform Mobile (KMM). КММ — это технология кроссплатформенной разработки, позволяющая...
Представьте себе прямую, описываемую функцией
Джейк Уортон написал статью, в которой прикладывает эту модель к библиотекам Picasso, Retrofit и Dagger, и рассуждает, как ее использовать при создании новой библиотеки.
y=mx+b.
Параметр b показывает, насколько далеко от 0 находится место пересечения оси Y, а m – угол наклона. Это – удобная ментальная модель, чтобы оценивать сложность использования различных библиотек, где b – сложность первого старта, m – сложность, возникающая при усложнении кейсов использования.Джейк Уортон написал статью, в которой прикладывает эту модель к библиотекам Picasso, Retrofit и Dagger, и рассуждает, как ее использовать при создании новой библиотеки.
Jake Wharton
Slope-intercept library design – Jake Wharton
Системная статья про то, как в Compose работают сайд эффекты, каких антипаттернов стоит остерегаться, и как в них работать со сторонними зависимостями.
👨💻 Jorge Castillo
Jetpack Compose Effect Handlers
Learn how to run your side effects 🌀 bound to the @Composable lifecycle.
This post has been moved to the Effective Android newsletter.
This post has been moved to the Effective Android newsletter.