<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Amr&apos;s Blog</title><description>Amr Yousef is a Software Engineer based in the UK.</description><link>https://amryousef.me/</link><item><title>How To Debug Your Android App Over Wi-Fi</title><link>https://amryousef.me/posts/2019-03-17-how-to-debug-your-android-app-over-wi-fi/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-03-17-how-to-debug-your-android-app-over-wi-fi/</guid><description>Setup wireless ADB and debug your Android app over Wi-Fi</description><pubDate>Sun, 17 Mar 2019 00:00:00 GMT</pubDate></item><item><title>Robolectric 4: A quick introduction</title><link>https://amryousef.me/posts/2019-03-27-robolectric-4-running-the-same-test-on-jvm-and-art/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-03-27-robolectric-4-running-the-same-test-on-jvm-and-art/</guid><description>This is the first part of a series of blogs about Robolectric 4. This part will go through project setup steps and running the first shared test.</description><pubDate>Wed, 27 Mar 2019 00:00:00 GMT</pubDate></item><item><title>Clean Architecture in Flutter</title><link>https://amryousef.me/posts/2019-07-06-clean-architecture-with-flutter-and-dart/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-07-06-clean-architecture-with-flutter-and-dart/</guid><description>In this series of blogs, I will discuss how I implemented clean architecture in a flutter project I am working on. Robert C. Martin (Uncle Bob), introduced clean architecture which enforces separation of concerns between the different layers of a system. This makes the system testable and independent of any frameworks. 

This blog outlines what is clean architecture and describes the different layers to be considered in a clean architecture project. </description><pubDate>Sat, 06 Jul 2019 00:00:00 GMT</pubDate></item><item><title>Clean Architecture in Flutter - FlutterLDN 2019</title><link>https://amryousef.me/posts/2019-10-19-clean-architecture-in-flutter-flutterldn-2019/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-10-19-clean-architecture-in-flutter-flutterldn-2019/</guid><description>In here you would fine the slides I presented at Flutter LDN meetup on 21st October 2019 for &quot;Clean Architecture in Flutter using BLoC&quot; talk.</description><pubDate>Sat, 19 Oct 2019 00:00:00 GMT</pubDate></item><item><title>AndroidDevSummit 2019: What&apos;s new in Android Fragments</title><link>https://amryousef.me/posts/2019-10-25-whats-new-in-android-fragments/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-10-25-whats-new-in-android-fragments/</guid><description>Google announced AndroidX fragment 1.2.0 At AndroidDevSummit 2019. In this blog post we will go through this release to see what&apos;s new and how can we use this new version in our projects.</description><pubDate>Fri, 25 Oct 2019 00:00:00 GMT</pubDate></item><item><title>Building a GraphQL server with Kotlin + Ktor</title><link>https://amryousef.me/posts/2020-01-21-building-a-graphql-server-with-kotlin-ktor/</link><guid isPermaLink="true">https://amryousef.me/posts/2020-01-21-building-a-graphql-server-with-kotlin-ktor/</guid><description>This blog post summarises the steps I took to build a GraphQL API with Kotlin and Ktor. It goes the logic needed define routes, execute GraphQL queries and mutations as well as adding JWT authentication with a simple permissions system for access control.</description><pubDate>Tue, 21 Jan 2020 00:00:00 GMT</pubDate></item><item><title>Robolectric 4: Bridging the gap between Robolectric and Espresso</title><link>https://amryousef.me/posts/2019-03-27-robolectric-4-introducing-base-test/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-03-27-robolectric-4-introducing-base-test/</guid><description>This is the second part of a series of blogs about Robolectric 4. It will explain how Robolectric works and what might go wrong. This blog will also explain how can we bridge the gap between Robolectric and Espresso.</description><pubDate>Wed, 27 Mar 2019 00:00:00 GMT</pubDate></item><item><title>Custom Views Lifecycle and handling onMeasure()</title><link>https://amryousef.me/posts/2019-04-12-custom-views-lifecycle-and-handling-onmeasure/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-04-12-custom-views-lifecycle-and-handling-onmeasure/</guid><description>A quick introduction to the lifecycle of Android Views and an example on how to implement onMeasure to negotiate your view&apos;s size.</description><pubDate>Fri, 12 Apr 2019 00:00:00 GMT</pubDate></item><item><title>HTTP requests on Android using Ktor</title><link>https://amryousef.me/posts/2019-05-02-http-requests-on-android-using-ktor/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-05-02-http-requests-on-android-using-ktor/</guid><description>Ktor is a new  framework for building asynchronous servers and clients. It&apos;s 100% Kotlin and runs on Coroutines. In this blog, we will explore using the Ktor client to make HTTP requests in an Android App.</description><pubDate>Thu, 02 May 2019 00:00:00 GMT</pubDate></item><item><title>WebRTC for Android</title><link>https://amryousef.me/posts/2019-05-29-webrtc-for-android/</link><guid isPermaLink="true">https://amryousef.me/posts/2019-05-29-webrtc-for-android/</guid><description>This article serves as a how-to guide for implementing basic video conferencing with WebRTC. WebRTC is a free, open project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs. The WebRTC components have been optimised to best serve this purpose.</description><pubDate>Wed, 29 May 2019 00:00:00 GMT</pubDate></item><item><title>Setting up a Kotlin multiplatform project</title><link>https://amryousef.me/posts/2020-08-02-setting-up-a-kotlin-multiplatform-project/</link><guid isPermaLink="true">https://amryousef.me/posts/2020-08-02-setting-up-a-kotlin-multiplatform-project/</guid><description>This blog will show you how to setup a Kotlin multiplatfrom project with an Android and an iOS application and a shared kotlin module.</description><pubDate>Sun, 02 Aug 2020 00:00:00 GMT</pubDate></item><item><title>Kotlin Coroutines and Synchronisation: An Example of using Mutex</title><link>https://amryousef.me/posts/2020-10-09-kotlin-coroutines-and-synchronisation-a-real-word-example/</link><guid isPermaLink="true">https://amryousef.me/posts/2020-10-09-kotlin-coroutines-and-synchronisation-a-real-word-example/</guid><description>Applications utilising concurrency must synchronise access to shared state. In this blog post, we will go through an example of building a class that can safely share access to mutable between concurrent operations with the help of `Mutex`.</description><pubDate>Fri, 09 Oct 2020 00:00:00 GMT</pubDate></item><item><title>Faking Dagger Injection in Instrumentation Tests</title><link>https://amryousef.me/posts/2020-11-08-faking-dagger-android-injection-in-instrumentation-tests/</link><guid isPermaLink="true">https://amryousef.me/posts/2020-11-08-faking-dagger-android-injection-in-instrumentation-tests/</guid><description>This blog explains a simple setup to fake Dagger Android injections when writing instrumented tests. We will explore the new `FagmentScenario` and `ActivityScenario` as well as using them to simplify writing instrumentation tests when using Dagger Android</description><pubDate>Sun, 08 Nov 2020 00:00:00 GMT</pubDate></item><item><title>Custom Side Drawer In Jetpack Compose</title><link>https://amryousef.me/posts/2021-01-07-custom-side-drawer-in-jetpack-compose/</link><guid isPermaLink="true">https://amryousef.me/posts/2021-01-07-custom-side-drawer-in-jetpack-compose/</guid><description>This post describes how to build a custom side drawer that opens from the right side of the screen using Jetpack compose</description><pubDate>Thu, 07 Jan 2021 00:00:00 GMT</pubDate></item><item><title>Building Whitelabel Apps at Scale</title><link>https://amryousef.me/posts/2021-10-27-building-whitelabel-apps-at-scale/</link><guid isPermaLink="true">https://amryousef.me/posts/2021-10-27-building-whitelabel-apps-at-scale/</guid><description>My DroidCon London 2021 talk about how I scaled our whitelabel e-commerce app to be built and deployed automatically as a no-code solution.</description><pubDate>Wed, 27 Oct 2021 00:00:00 GMT</pubDate></item><item><title>Protecting Private Content with Login on GatsbyJS websites</title><link>https://amryousef.me/posts/2022-01-27-building-a-video-streaming-platform-part-1-user-authentication/</link><guid isPermaLink="true">https://amryousef.me/posts/2022-01-27-building-a-video-streaming-platform-part-1-user-authentication/</guid><description>In this post, I will walkthrough how we supported user login inside our Gatsby website and protected statically generated private content.</description><pubDate>Sun, 30 Jan 2022 00:00:00 GMT</pubDate></item><item><title>Migrating Women in Tech SEO to Astro + Sanity</title><link>https://amryousef.me/posts/2024-05-27-migrating-women-in-tech-seo-to-astro--sanity/</link><guid isPermaLink="true">https://amryousef.me/posts/2024-05-27-migrating-women-in-tech-seo-to-astro--sanity/</guid><description>The story of how the Women in Tech SEO website migrated from Gatsby + Contentful to Astro + Sanity.</description><pubDate>Mon, 27 May 2024 00:00:00 GMT</pubDate></item><item><title>The hidden cost of using React Native</title><link>https://amryousef.me/posts/2025-01-05-react-native-cost/</link><guid isPermaLink="true">https://amryousef.me/posts/2025-01-05-react-native-cost/</guid><description>The hidden cost of using React Native details why React Native apps end up performing worse compared to native apps and what to do about it.</description><pubDate>Wed, 01 Jan 2025 00:00:00 GMT</pubDate></item><item><title>I can&apos;t write?</title><link>https://amryousef.me/posts/2025-06-17-i-cant-write/</link><guid isPermaLink="true">https://amryousef.me/posts/2025-06-17-i-cant-write/</guid><description>A blog about writing blogs..or the lack thereof</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate></item><item><title>From database crisis to Connection Pooling Success</title><link>https://amryousef.me/posts/database-crisis-connection-pooling/</link><guid isPermaLink="true">https://amryousef.me/posts/database-crisis-connection-pooling/</guid><description>A tale about migrating from Firebase to PostgreSQL: How naive connection handling brought down a database with just 500 users, and how implementing proper connection pooling with calculated parameters restored performance and stability.</description><pubDate>Thu, 10 Jul 2025 00:00:00 GMT</pubDate></item><item><title>A Redux implementation for Kotlin Multiplatform</title><link>https://amryousef.me/posts/2022-03-03-redux-implementation-for-kotlin-multiplatform/</link><guid isPermaLink="true">https://amryousef.me/posts/2022-03-03-redux-implementation-for-kotlin-multiplatform/</guid><description>Business logic is usually platform independent but UI state management is always influenced by the platform you are building on. In this post, I will outline how I implemented a Redux inspired state management solution for my recent Kotlin multiplatform project and how it is connected to UI on Android and iOS.</description><pubDate>Sun, 06 Mar 2022 00:00:00 GMT</pubDate></item><item><title>Using Tailwind CSS with Jetpack Compose for Web</title><link>https://amryousef.me/posts/2022-03-09-adding-tailwindcss-for-jetpack-compose-for-web/</link><guid isPermaLink="true">https://amryousef.me/posts/2022-03-09-adding-tailwindcss-for-jetpack-compose-for-web/</guid><description>This post outlines how to set up and use Tailwind CSS in Jetpack Compose for Web projects. </description><pubDate>Wed, 09 Mar 2022 00:00:00 GMT</pubDate></item></channel></rss>