All Posts
-
#60 The Future of Android Apps with AppFunctions
Explore the potential of Android AppFunctions for AI agents. Learn how apps can share functionality with intelligent assistants using self-describing functions.
-
#59 session-bridge: I Made Two Claude Code Sessions Talk to Each Other
Building 'session-bridge': A Claude Code plugin that allows separate AI sessions to communicate and share context across different repositories.
-
#58 Exploring CompositionLocal API internals in Jetpack Compose
Deep dive into the internals of Jetpack Compose's CompositionLocal API. Trace how data flows implicitly through the composition tree under the hood.
-
#57 You Can't Multitask. Your AI Agent Can.
Boost your productivity with AI agents. Learn how to delegate complex tasks to AI tools like Claude Code and Gemini to overcome human multitasking limitations.
-
#56 DroidCon: Debugging App Performance at Scale
Recap of my DroidCon India 2025 talk on debugging Android app performance at scale. Watch the session and learn about performance profiling tools.
-
#55 A Simple key to a Better LazyList in Jetpack Compose
Learn how to optimize Jetpack Compose LazyList performance using keys. Understand how keys help reduce recompositions and improve scrolling efficiency.
-
#54 Exploring PausableComposition internals in Jetpack Compose
Explore the internals of PausableComposition in Jetpack Compose. Learn how Compose manages state and effects when a composition is paused or resumed.
-
#53 Deep dive into annotations in Jetpack Compose
An extensive deep dive into annotations in Jetpack Compose. Understand how @Composable, @Stable, @ReadOnlyComposable, and others work under the hood.
-
#52 Understanding Dispatchers: Main and Main.immediate
A deep dive into Kotlin Coroutine Dispatchers. Understand the subtle but important difference between Dispatchers.Main and Dispatchers.Main.immediate in Android.
-
#51 #51 - My developer blogging journey so far
A personal account of my journey as a tech blogger, from my first post in 2019 to becoming a GDE. Insights on English barriers, criticism, and why sharing matters.
-
#50 Benchmark Insights: Direct State Propagation vs. Lambda-based State in Jetpack Compose
Performance benchmarks of direct state propagation vs. lambda-based state in Jetpack Compose. Learn which approach minimizes recompositions for better UI performance.
-
#49 Skipping the invocation of intermediate composables
Learn how Jetpack Compose optimizes UI rendering by skipping intermediate composables. Understand how to design your UI for maximum performance.
-
#48 Kotlin Exception Handling: Why Singleton Exceptions are a bad idea
Understand why using singleton exceptions in Kotlin can be a bad practice and how it affects stack traces and debugging in your applications.
-
#47 Effortless Compose Compiler report analysis
A guide to analyzing Jetpack Compose compiler reports easily. Learn how to diagnose stability and skippability of your composables for better performance.
-
#46 Capturing composable to a bitmap without losing a state
Learn how to capture a Jetpack Compose Composable as a Bitmap without losing its current state. A deep dive into capturing high-quality UI screenshots programmatically.
-
#45 Rich media input from the keyboard in Compose
Learn how to handle rich media input (like GIFs and images) from the keyboard in Jetpack Compose, essential for modern chat applications.
-
#44 Collecting items from the Flow in chunks💦
Learn how to collect Kotlin Flow items in chunks or intervals without losing data. A practical guide to handling high-frequency data streams efficiently.
-
#43 Runtime Surprise: Kotlin Breaks Non-Nullability Promise on Developer Cheating in Field Initialization
A cautionary tale about Kotlin's non-nullability. Discover how incorrect field initialization can lead to unexpected NullPointerExceptions at runtime.
-
#42 Solving the mystery of recompositions in Compose's LazyList
Debugging recompositions in Jetpack Compose LazyLists. Learn why your list items might be recomposing unnecessarily and how to fix it.
-
#41 Sleepless Concurrency: delay() vs. Thread.sleep()
Explore the difference between delay() and Thread.sleep() in Kotlin. Understand how non-blocking concurrency works from a platform perspective.