<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Because Developers are Awesome</title><description>Musings about cloud development.</description><link>https://blog.adrianhall.uk/</link><item><title>Caching options in Cloudflare Workers</title><link>https://blog.adrianhall.uk/posts/2026/2026-07-01-cf-caching.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-07-01-cf-caching.html</guid><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><category>Cloud Development</category><category>cloudflare</category></item><item><title>Testing in an agentic coding world</title><link>https://blog.adrianhall.uk/posts/2026/2026-06-07-agentic-testing.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-06-07-agentic-testing.html</guid><pubDate>Sun, 07 Jun 2026 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>Build a video processing pipeline with Cloudflare</title><link>https://blog.adrianhall.uk/posts/2026/2026-05-28-cf-workflows.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-05-28-cf-workflows.html</guid><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate><category>Cloud Development</category><category>cloudflare</category></item><item><title>Has AI killed collaboration?</title><link>https://blog.adrianhall.uk/posts/2026/2026-05-25-death-of-collaboration.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-05-25-death-of-collaboration.html</guid><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate><category>AI</category></item><item><title>Async APIs with Cloudflare Workers and Queues</title><link>https://blog.adrianhall.uk/posts/2026/2026-05-05-cf-workers-4.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-05-05-cf-workers-4.html</guid><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate><category>Cloud Development</category><category>cloudflare</category></item><item><title>Maintaining state in a serverless world: Cloudflare Durable Objects</title><link>https://blog.adrianhall.uk/posts/2026/2026-05-01-cf-workers-3.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-05-01-cf-workers-3.html</guid><pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate><category>Cloud Development</category><category>cloudflare</category></item><item><title>Introduction to Cloudflare AI Gateway</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-29-cf-workers-2.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-29-cf-workers-2.html</guid><pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate><category>Cloud Development</category><category>cloudflare</category></item><item><title>Introduction to Cloudflare Workers</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-26-cf-workers-1.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-26-cf-workers-1.html</guid><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate><category>Cloud Development</category><category>cloudflare</category></item><item><title>Tools for troubleshooting DNS</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-21-dns-tools.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-21-dns-tools.html</guid><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate><category>Tools</category><category>dns</category></item><item><title>Setting up a project for Agentic AI</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-19-project-setup.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-19-project-setup.html</guid><pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>Effective prompts for agentic engineering</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-11-agentic-engineer-3.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-11-agentic-engineer-3.html</guid><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>Using Jobs-to-be-done to improve your agentic spec</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-09-agentic-engineer-2.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-09-agentic-engineer-2.html</guid><pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>Ten rules for spec-driven design</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-07-agentic-engineer-1.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-07-agentic-engineer-1.html</guid><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>Are we in an AI bubble or an AI revolution?</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-05-ai-bubble.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-05-ai-bubble.html</guid><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>The AI Maturity Model</title><link>https://blog.adrianhall.uk/posts/2026/2026-04-03-ai-discussion.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2026/2026-04-03-ai-discussion.html</guid><pubDate>Fri, 03 Apr 2026 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>Using SpecKit with multiple AI agents</title><link>https://blog.adrianhall.uk/posts/2025/2025-12-06-spec-kit.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2025/2025-12-06-spec-kit.html</guid><pubDate>Sat, 06 Dec 2025 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>AI Assisted Editors: A Comparison (Part 1)</title><link>https://blog.adrianhall.uk/posts/2025/2025-08-01-ai-editors.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2025/2025-08-01-ai-editors.html</guid><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>AI Assisted Editors: A Comparison (Part 2)</title><link>https://blog.adrianhall.uk/posts/2025/2025-08-03-oss-ai-editors.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2025/2025-08-03-oss-ai-editors.html</guid><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate><category>Devtools</category><category>ai</category></item><item><title>Customizing Keycloak with Aspire - Part 3</title><link>https://blog.adrianhall.uk/posts/2024/2024-10-04-aspire-keycloak-part3.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-10-04-aspire-keycloak-part3.html</guid><pubDate>Fri, 04 Oct 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspire</category><category>keycloak</category></item><item><title>Customizing Keycloak with Aspire - Part 2</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-30-aspire-keycloak-part2.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-30-aspire-keycloak-part2.html</guid><pubDate>Mon, 30 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspire</category><category>keycloak</category></item><item><title>Integrating Keycloak with Aspire - Part 1</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-26-aspire-keycloak-part1.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-26-aspire-keycloak-part1.html</guid><pubDate>Thu, 26 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspire</category><category>keycloak</category></item><item><title>ASP.NET Identity deep dive - Part 6 (Social logins)</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-20-aspnet-identity-part6.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-20-aspnet-identity-part6.html</guid><pubDate>Fri, 20 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspnet_identity</category></item><item><title>ASP.NET Identity deep dive - Part 5 (Sending email)</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-18-aspnet-identity-part5.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-18-aspnet-identity-part5.html</guid><pubDate>Wed, 18 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspnet_identity</category></item><item><title>ASP.NET Identity deep dive - Part 4 (Password reset)</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-16-aspnet-identity-part4.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-16-aspnet-identity-part4.html</guid><pubDate>Mon, 16 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspnet_identity</category></item><item><title>ASP.NET Identity deep dive - Part 3 (Authentication)</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-14-aspnet-identity-part3.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-14-aspnet-identity-part3.html</guid><pubDate>Sat, 14 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspnet_identity</category></item><item><title>ASP.NET Identity deep dive - Part 2 (Registration)</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-13-aspnet-identity-part2.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-13-aspnet-identity-part2.html</guid><pubDate>Fri, 13 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspnet_identity</category></item><item><title>ASP.NET Identity deep dive - Part 1 (Project setup)</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-11-aspnet-identity-part1.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-11-aspnet-identity-part1.html</guid><pubDate>Wed, 11 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>aspnet_identity</category></item><item><title>.NET Aspire configuration patterns</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-09-aspire-config.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-09-aspire-config.html</guid><pubDate>Mon, 09 Sep 2024 00:00:00 GMT</pubDate><category>Cloud</category><category>aspnetcore</category><category>aspire</category><category>azure_keyvault</category><category>azure_appconfig</category></item><item><title>Local development for the cloud: Transitioning to .NET Aspire</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-05-aspire-identity.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-05-aspire-identity.html</guid><pubDate>Thu, 05 Sep 2024 00:00:00 GMT</pubDate><category>Cloud</category><category>aspnetcore</category><category>aspire</category></item><item><title>Making ASP.NET Core applications readable - the options patterns</title><link>https://blog.adrianhall.uk/posts/2024/2024-09-03-aspnetcore-options.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-09-03-aspnetcore-options.html</guid><pubDate>Tue, 03 Sep 2024 00:00:00 GMT</pubDate><category>Web</category><category>csharp</category><category>aspnetcore</category></item><item><title>Centrally managing dependencies in your C# solutions</title><link>https://blog.adrianhall.uk/posts/2024/2024-08-15-centrally-managed-dependencies.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-08-15-centrally-managed-dependencies.html</guid><pubDate>Thu, 15 Aug 2024 00:00:00 GMT</pubDate><category>Tips</category><category>csharp</category><category>dependencies</category></item><item><title>Better data validation exceptions with C#</title><link>https://blog.adrianhall.uk/posts/2024/2024-08-10-easy-exceptions.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-08-10-easy-exceptions.html</guid><pubDate>Sat, 10 Aug 2024 00:00:00 GMT</pubDate><category>Tips</category><category>csharp</category><category>data_validation</category></item><item><title>Building Bootstrap apps from SASS with ASP.NET Core</title><link>https://blog.adrianhall.uk/posts/2024/2024-08-08-bootstrap-in-aspnetcore.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-08-08-bootstrap-in-aspnetcore.html</guid><pubDate>Thu, 08 Aug 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>scss</category><category>bootstrap</category></item><item><title>Organizing service injection in ASP.NET Core Minimal APIs</title><link>https://blog.adrianhall.uk/posts/2024/2024-08-07-organizing-services-in-aspnetcore.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-08-07-organizing-services-in-aspnetcore.html</guid><pubDate>Wed, 07 Aug 2024 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>minimal_apis</category></item><item><title>The State of JavaScript Testing Frameworks 2024</title><link>https://blog.adrianhall.uk/posts/2024/2024-08-03-testing-js-projects.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-08-03-testing-js-projects.html</guid><pubDate>Sat, 03 Aug 2024 00:00:00 GMT</pubDate><category>Devtools</category><category>testing</category><category>typescript</category><category>comparison</category></item><item><title>Enforcing code style with eslint, prettier, and husky</title><link>https://blog.adrianhall.uk/posts/2024/2024-07-22-eslint-husky-prettier.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-07-22-eslint-husky-prettier.html</guid><pubDate>Mon, 22 Jul 2024 00:00:00 GMT</pubDate><category>Devtools</category><category>typescript</category></item><item><title>Building TypeScript projects with the swc compiler</title><link>https://blog.adrianhall.uk/posts/2024/2024-07-11-swc-typescript.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-07-11-swc-typescript.html</guid><pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate><category>Devtools</category><category>typescript</category></item><item><title>TypeScript, ES Modules, and root-relative imports</title><link>https://blog.adrianhall.uk/posts/2024/2024-07-10-esm-typescript.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-07-10-esm-typescript.html</guid><pubDate>Wed, 10 Jul 2024 00:00:00 GMT</pubDate><category>Devtools</category><category>typescript</category></item><item><title>Converting a TypeScript project from CommonJS to ESM</title><link>https://blog.adrianhall.uk/posts/2024/2024-07-06-commonjs-to-esm.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-07-06-commonjs-to-esm.html</guid><pubDate>Sat, 06 Jul 2024 00:00:00 GMT</pubDate><category>Web</category><category>javascript</category><category>typescript</category></item><item><title>The State of React UI libraries in 2024</title><link>https://blog.adrianhall.uk/posts/2024/2024-06-27-react-ui-libraries.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-06-27-react-ui-libraries.html</guid><pubDate>Thu, 27 Jun 2024 00:00:00 GMT</pubDate><category>Web</category><category>react</category><category>javascript</category><category>comparison</category></item><item><title>The State of React state management in 2024</title><link>https://blog.adrianhall.uk/posts/2024/2024-06-25-react-state-mgmt.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-06-25-react-state-mgmt.html</guid><pubDate>Tue, 25 Jun 2024 00:00:00 GMT</pubDate><category>Web</category><category>react</category><category>javascript</category><category>comparison</category></item><item><title>Build a Blog: Going to production with Azure Static Web Apps</title><link>https://blog.adrianhall.uk/posts/2024/2024-06-08-swa-production.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-06-08-swa-production.html</guid><pubDate>Sat, 08 Jun 2024 00:00:00 GMT</pubDate><category>Cloud</category><category>bicep</category><category>azd</category><category>azure_swa</category><category>azure_dns</category></item><item><title>Build a Blog: Custom domains for Azure Static Web Apps</title><link>https://blog.adrianhall.uk/posts/2024/2024-06-07-swa-dns.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-06-07-swa-dns.html</guid><pubDate>Fri, 07 Jun 2024 00:00:00 GMT</pubDate><category>Cloud</category><category>bicep</category><category>azd</category><category>azure_swa</category><category>azure_dns</category></item><item><title>Build a Blog: Set up DNS in Azure</title><link>https://blog.adrianhall.uk/posts/2024/2024-06-06-azure-dns.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-06-06-azure-dns.html</guid><pubDate>Thu, 06 Jun 2024 00:00:00 GMT</pubDate><category>Cloud</category><category>bicep</category><category>azure_dns</category></item><item><title>Build a Blog: Deploy Azure Infrastructure three ways</title><link>https://blog.adrianhall.uk/posts/2024/2024-06-05-swa-deploy.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-06-05-swa-deploy.html</guid><pubDate>Wed, 05 Jun 2024 00:00:00 GMT</pubDate><category>Cloud</category><category>bicep</category><category>azd</category><category>azure_swa</category></item><item><title>Dev containers are a developers best friend</title><link>https://blog.adrianhall.uk/posts/2024/2024-06-04-devcontainers.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-06-04-devcontainers.html</guid><pubDate>Tue, 04 Jun 2024 00:00:00 GMT</pubDate><category>Devtools</category><category>containers</category><category>jekyll</category></item><item><title>Create an App Registration for RBAC with PowerShell and Microsoft Graph.</title><link>https://blog.adrianhall.uk/posts/2024/2024-01-19-pwsh-entra-appreg.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2024/2024-01-19-pwsh-entra-appreg.html</guid><pubDate>Fri, 19 Jan 2024 00:00:00 GMT</pubDate><category>Cloud</category><category>powershell</category><category>msgraph</category><category>azure_active_directory</category><category>microsoft_entra</category></item><item><title>Deleting Azure resources the right way.</title><link>https://blog.adrianhall.uk/posts/2023/2023-07-12-cleanup-azure-resources.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2023/2023-07-12-cleanup-azure-resources.html</guid><pubDate>Wed, 12 Jul 2023 00:00:00 GMT</pubDate><category>Cloud</category><category>azure</category><category>powershell</category></item><item><title>Purge Azure API Management soft-deleted services with ease.</title><link>https://blog.adrianhall.uk/posts/2023/2023-01-20-powershell-apim-rest.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2023/2023-01-20-powershell-apim-rest.html</guid><pubDate>Fri, 20 Jan 2023 00:00:00 GMT</pubDate><category>Cloud</category><category>azure</category><category>powershell</category></item><item><title>Type-checking Bicep arrays and objects</title><link>https://blog.adrianhall.uk/posts/2022/2022-11-28-bicep-type-checking.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-11-28-bicep-type-checking.html</guid><pubDate>Mon, 28 Nov 2022 00:00:00 GMT</pubDate><category>Cloud</category><category>bicep</category></item><item><title>Bicep, loops, and defaults</title><link>https://blog.adrianhall.uk/posts/2022/2022-11-21-bicep-loops-defaults.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-11-21-bicep-loops-defaults.html</guid><pubDate>Mon, 21 Nov 2022 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_apim</category><category>bicep</category></item><item><title>Top Ten things to consider when taking your GraphQL service into production</title><link>https://blog.adrianhall.uk/posts/2022/2022-11-07-top-ten-production-graphql-tips.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-11-07-top-ten-production-graphql-tips.html</guid><pubDate>Mon, 07 Nov 2022 00:00:00 GMT</pubDate><category>Cloud</category><category>graphql</category></item><item><title>Build a GraphQL API on Azure API Management using Bicep</title><link>https://blog.adrianhall.uk/posts/2022/2022-10-10-apim-graphql-api.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-10-10-apim-graphql-api.html</guid><pubDate>Mon, 10 Oct 2022 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_apim</category><category>graphql</category><category>bicep</category></item><item><title>Azure Active Directory Authentication for Blazor WASM (Part 4: SignalR)</title><link>https://blog.adrianhall.uk/posts/2022/2022-09-23-blazor-wasm-aad-signalr.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-09-23-blazor-wasm-aad-signalr.html</guid><pubDate>Fri, 23 Sep 2022 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>blazor</category><category>azure_active_directory</category><category>microsoft_entra</category><category>signalr</category></item><item><title>Azure Active Directory Authentication for Blazor WASM (Part 3: Production)</title><link>https://blog.adrianhall.uk/posts/2022/2022-09-03-blazor-wasm-aad-auth-part-3.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-09-03-blazor-wasm-aad-auth-part-3.html</guid><pubDate>Sat, 03 Sep 2022 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>blazor</category><category>azure_active_directory</category><category>microsoft_entra</category></item><item><title>Azure Active Directory Authentication for Blazor WASM (Part 2: The Client)</title><link>https://blog.adrianhall.uk/posts/2022/2022-09-02-blazor-wasm-aad-auth-part-2.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-09-02-blazor-wasm-aad-auth-part-2.html</guid><pubDate>Fri, 02 Sep 2022 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>blazor</category><category>azure_active_directory</category><category>microsoft_entra</category></item><item><title>Azure Active Directory Authentication for Blazor WASM (Part 1: The Server)</title><link>https://blog.adrianhall.uk/posts/2022/2022-09-01-blazor-wasm-aad-auth-part-1.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-09-01-blazor-wasm-aad-auth-part-1.html</guid><pubDate>Thu, 01 Sep 2022 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>blazor</category><category>azure_active_directory</category><category>microsoft_entra</category></item><item><title>Building Stylesheets for Blazor with SASS</title><link>https://blog.adrianhall.uk/posts/2022/2022-08-26-adding-sass-to-blazor.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-08-26-adding-sass-to-blazor.html</guid><pubDate>Fri, 26 Aug 2022 00:00:00 GMT</pubDate><category>Web</category><category>aspnetcore</category><category>blazor</category><category>scss</category></item><item><title>Building a serverless MUD infrastructure in Azure</title><link>https://blog.adrianhall.uk/posts/2022/2022-08-25-building-a-serverless-mud.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2022/2022-08-25-building-a-serverless-mud.html</guid><pubDate>Thu, 25 Aug 2022 00:00:00 GMT</pubDate><category>Cloud</category><category>azure</category></item><item><title>Building repositories for Azure Mobile Apps with ASP.NET 6</title><link>https://blog.adrianhall.uk/posts/2021/2021-11-12-zumo-irepository.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-11-12-zumo-irepository.html</guid><pubDate>Fri, 12 Nov 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>aspnetcore</category><category>azure_mobile_apps</category></item><item><title>Logging and Options for Azure Mobile Apps with ASP.NET 6</title><link>https://blog.adrianhall.uk/posts/2021/2021-11-11-logging-with-zumo.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-11-11-logging-with-zumo.html</guid><pubDate>Thu, 11 Nov 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>aspnetcore</category><category>azure_mobile_apps</category></item><item><title>Controlled access for Azure Mobile Apps for ASP.NET Core</title><link>https://blog.adrianhall.uk/posts/2021/2021-11-10-complex-zumo-auth.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-11-10-complex-zumo-auth.html</guid><pubDate>Wed, 10 Nov 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>aspnetcore</category><category>azure_mobile_apps</category></item><item><title>Add authentication to Azure Mobile Apps for ASP.NET Core</title><link>https://blog.adrianhall.uk/posts/2021/2021-11-09-adding-auth-to-zumo.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-11-09-adding-auth-to-zumo.html</guid><pubDate>Tue, 09 Nov 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>aspnetcore</category><category>azure_mobile_apps</category></item><item><title>Introducing Azure Mobile Apps for ASP.NET 6</title><link>https://blog.adrianhall.uk/posts/2021/2021-11-08-azure-mobile-apps-intro.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-11-08-azure-mobile-apps-intro.html</guid><pubDate>Mon, 08 Nov 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>aspnetcore</category><category>azure_mobile_apps</category></item><item><title>Adding an API Key to Azure Mobile Apps with API Management</title><link>https://blog.adrianhall.uk/posts/2021/2021-06-29-api-keys-with-apim.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-06-29-api-keys-with-apim.html</guid><pubDate>Tue, 29 Jun 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_apim</category><category>azure_mobile_apps</category></item><item><title>Service Routing for Azure Mobile Apps with API Management</title><link>https://blog.adrianhall.uk/posts/2021/2021-06-15-routing-based-on-request.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-06-15-routing-based-on-request.html</guid><pubDate>Tue, 15 Jun 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_apim</category><category>azure_mobile_apps</category></item><item><title>Enabling caching for Azure Mobile Apps with API Management</title><link>https://blog.adrianhall.uk/posts/2021/2021-06-11-adding-policies-to-apim.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-06-11-adding-policies-to-apim.html</guid><pubDate>Fri, 11 Jun 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_apim</category><category>azure_mobile_apps</category></item><item><title>Using API Management with Azure Mobile Apps</title><link>https://blog.adrianhall.uk/posts/2021/2021-06-08-using-apim-with-zumo.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-06-08-using-apim-with-zumo.html</guid><pubDate>Tue, 08 Jun 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_apim</category><category>azure_mobile_apps</category></item><item><title>Bottom Bar Tabs for your Xamarin Forms app</title><link>https://blog.adrianhall.uk/posts/2021/2021-05-15-xamarin-forms-tabs.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-05-15-xamarin-forms-tabs.html</guid><pubDate>Sat, 15 May 2021 00:00:00 GMT</pubDate><category>Mobile</category><category>xamarin</category><category>xamarin_forms</category></item><item><title>Adding an icon font to your Xamarin Forms apps</title><link>https://blog.adrianhall.uk/posts/2021/2021-05-09-xamarin-forms-glyph-fonts.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-05-09-xamarin-forms-glyph-fonts.html</guid><pubDate>Sun, 09 May 2021 00:00:00 GMT</pubDate><category>Mobile</category><category>xamarin</category><category>xamarin_forms</category></item><item><title>Choosing a hosting option for your web app in Azure</title><link>https://blog.adrianhall.uk/posts/2021/2021-03-10-hosting-static-assets-in-azure.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2021/2021-03-10-hosting-static-assets-in-azure.html</guid><pubDate>Wed, 10 Mar 2021 00:00:00 GMT</pubDate><category>Cloud</category><category>comparison</category><category>azure_swa</category><category>azure_appservice</category><category>azure_storage</category></item><item><title>Rounded corner panels and masks in SwiftUI</title><link>https://blog.adrianhall.uk/posts/2020/2020-05-03-swiftui-masks.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-05-03-swiftui-masks.html</guid><pubDate>Sun, 03 May 2020 00:00:00 GMT</pubDate><category>Mobile</category><category>swift</category><category>swiftui</category></item><item><title>Deploy your React app to Azure</title><link>https://blog.adrianhall.uk/posts/2020/2020-04-04-deploy-to-azure.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-04-04-deploy-to-azure.html</guid><pubDate>Sat, 04 Apr 2020 00:00:00 GMT</pubDate><category>Cloud</category><category>javascript</category><category>terraform</category><category>azure_storage</category></item><item><title>Add unit testing to your React app</title><link>https://blog.adrianhall.uk/posts/2020/2020-04-02-adding-unit-testing-to-template.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-04-02-adding-unit-testing-to-template.html</guid><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate><category>Web</category><category>testing</category><category>javascript</category></item><item><title>Add visual testing to your React app with Storybook</title><link>https://blog.adrianhall.uk/posts/2020/2020-03-31-adding-storybook-to-template.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-03-31-adding-storybook-to-template.html</guid><pubDate>Tue, 31 Mar 2020 00:00:00 GMT</pubDate><category>Web</category><category>testing</category><category>react</category><category>javascript</category></item><item><title>Building a React app with Parcel, Typescript, SASS, and ESLint</title><link>https://blog.adrianhall.uk/posts/2020/2020-03-29-parcel-typescript-react.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-03-29-parcel-typescript-react.html</guid><pubDate>Sun, 29 Mar 2020 00:00:00 GMT</pubDate><category>Web</category><category>react</category><category>javascript</category></item><item><title>Integrating Microsoft Login and MSAL with React and Redux</title><link>https://blog.adrianhall.uk/posts/2020/2020-03-06-msal-react-redux.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-03-06-msal-react-redux.html</guid><pubDate>Fri, 06 Mar 2020 00:00:00 GMT</pubDate><category>Web</category><category>react</category><category>javascript</category><category>azure_active_directory</category><category>microsoft_entra</category></item><item><title>Pre-build steps for Flutter using Visual Studio Code</title><link>https://blog.adrianhall.uk/posts/2020/2020-02-20-vscode-flutter.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-02-20-vscode-flutter.html</guid><pubDate>Thu, 20 Feb 2020 00:00:00 GMT</pubDate><category>Mobile</category><category>flutter</category><category>vscode</category></item><item><title>Adding a pre-build step to Android Studio builds</title><link>https://blog.adrianhall.uk/posts/2020/2020-01-20-build-gradle-files.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-01-20-build-gradle-files.html</guid><pubDate>Mon, 20 Jan 2020 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category></item><item><title>Reducing the deployment size of your JavaScript Azure Functions</title><link>https://blog.adrianhall.uk/posts/2020/2020-01-12-fixing-functions-deployment.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-01-12-fixing-functions-deployment.html</guid><pubDate>Sun, 12 Jan 2020 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_functions</category></item><item><title>Mocking Android resources with Mockito and Kotlin</title><link>https://blog.adrianhall.uk/posts/2020/2020-01-03-mockito-mocking-resources.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-01-03-mockito-mocking-resources.html</guid><pubDate>Fri, 03 Jan 2020 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Unit testing asynchronous Android network libraries</title><link>https://blog.adrianhall.uk/posts/2020/2020-01-01-unit-testing-service-methods.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2020/2020-01-01-unit-testing-service-methods.html</guid><pubDate>Wed, 01 Jan 2020 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Two tips for unit testing Android libraries</title><link>https://blog.adrianhall.uk/posts/2019/2019-12-24-unit-testing-android-libraries.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-12-24-unit-testing-android-libraries.html</guid><pubDate>Tue, 24 Dec 2019 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Build a better RecyclerView Adapter</title><link>https://blog.adrianhall.uk/posts/2019/2019-12-13-android-recyclerview-adapter.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-12-13-android-recyclerview-adapter.html</guid><pubDate>Fri, 13 Dec 2019 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Handle location and geocoding with SwiftUI</title><link>https://blog.adrianhall.uk/posts/2019/2019-11-05-swiftui-location.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-11-05-swiftui-location.html</guid><pubDate>Tue, 05 Nov 2019 00:00:00 GMT</pubDate><category>Mobile</category><category>swift</category><category>swiftui</category></item><item><title>Create a bubble background in SwiftUI</title><link>https://blog.adrianhall.uk/posts/2019/2019-11-02-swiftui-bubble-background.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-11-02-swiftui-bubble-background.html</guid><pubDate>Sat, 02 Nov 2019 00:00:00 GMT</pubDate><category>Mobile</category><category>swift</category><category>swiftui</category></item><item><title>Why SwiftUI might just convert me to an iOS developer</title><link>https://blog.adrianhall.uk/posts/2019/2019-10-31-swiftui-intro.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-10-31-swiftui-intro.html</guid><pubDate>Thu, 31 Oct 2019 00:00:00 GMT</pubDate><category>Mobile</category><category>swift</category><category>swiftui</category></item><item><title>Deploying an Azure Function App with Terraform</title><link>https://blog.adrianhall.uk/posts/2019/2019-10-23-terraform-functions.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-10-23-terraform-functions.html</guid><pubDate>Wed, 23 Oct 2019 00:00:00 GMT</pubDate><category>Cloud</category><category>azure_functions</category><category>terraform</category></item><item><title>Validating permissions on Android with Kotlin</title><link>https://blog.adrianhall.uk/posts/2019/2019-10-07-validating-permissions.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-10-07-validating-permissions.html</guid><pubDate>Mon, 07 Oct 2019 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Using Azure App Configuration for Remote Config with Android</title><link>https://blog.adrianhall.uk/posts/2019/2019-09-22-azure-app-config.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-09-22-azure-app-config.html</guid><pubDate>Sun, 22 Sep 2019 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>azure_appconfig</category></item><item><title>Building an efficient Logger in TypeScript</title><link>https://blog.adrianhall.uk/posts/2019/2019-06-30-building-an-efficient-logger-in-typescript.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-06-30-building-an-efficient-logger-in-typescript.html</guid><pubDate>Sun, 30 Jun 2019 00:00:00 GMT</pubDate><category>Cloud</category><category>typescript</category></item><item><title>Documenting open-source projects</title><link>https://blog.adrianhall.uk/posts/2019/2019-02-12-documenting-opensource-projects.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-02-12-documenting-opensource-projects.html</guid><pubDate>Tue, 12 Feb 2019 00:00:00 GMT</pubDate><category>Tips</category><category>documentation</category></item><item><title>Where do you start with GraphQL? I asked four engineers</title><link>https://blog.adrianhall.uk/posts/2019/2019-02-06-where-do-you-start-with-graphql.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-02-06-where-do-you-start-with-graphql.html</guid><pubDate>Wed, 06 Feb 2019 00:00:00 GMT</pubDate><category>Cloud</category><category>graphql</category></item><item><title>What AWS service should you use to publish a web site?</title><link>https://blog.adrianhall.uk/posts/2019/2019-01-31-which-aws-service-for-hosting.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-01-31-which-aws-service-for-hosting.html</guid><pubDate>Thu, 31 Jan 2019 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_amplify</category><category>comparison</category></item><item><title>The three ways to execute a GraphQL query from React with AWS AppSync (and how to choose)</title><link>https://blog.adrianhall.uk/posts/2019/2019-01-15-three-ways-graphql-react-awsappsync.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-01-15-three-ways-graphql-react-awsappsync.html</guid><pubDate>Tue, 15 Jan 2019 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>Early return from GraphQL Resolvers with AWS AppSync</title><link>https://blog.adrianhall.uk/posts/2019/2019-01-03-early-return-from-graphql-resolvers.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2019/2019-01-03-early-return-from-graphql-resolvers.html</guid><pubDate>Thu, 03 Jan 2019 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>Handling File Uploads with AWS AppSync</title><link>https://blog.adrianhall.uk/posts/2018/2018-12-18-handling-file-uploads-with-aws-appsync.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-12-18-handling-file-uploads-with-aws-appsync.html</guid><pubDate>Tue, 18 Dec 2018 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>Bootstrapping a React Native App: A Comparison</title><link>https://blog.adrianhall.uk/posts/2018/2018-12-10-bootstrapping-a-react-native-app.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-12-10-bootstrapping-a-react-native-app.html</guid><pubDate>Mon, 10 Dec 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category><category>comparison</category></item><item><title>Authentication with AWS Amplify and Android: Fraud Protection and Analytics</title><link>https://blog.adrianhall.uk/posts/2018/2018-11-05-auth-with-aws-amplify-8.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-11-05-auth-with-aws-amplify-8.html</guid><pubDate>Mon, 05 Nov 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Authentication with AWS Amplify and Android: Integrating Biometrics</title><link>https://blog.adrianhall.uk/posts/2018/2018-10-29-auth-with-aws-amplify-7.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-10-29-auth-with-aws-amplify-7.html</guid><pubDate>Mon, 29 Oct 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Backend GraphQL: How to trigger an AWS AppSync mutation from AWS Lambda</title><link>https://blog.adrianhall.uk/posts/2018/2018-10-26-backend-graphql-trigger-appsync.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-10-26-backend-graphql-trigger-appsync.html</guid><pubDate>Fri, 26 Oct 2018 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>Authentication with AWS Amplify and Android: Integrating TOTP</title><link>https://blog.adrianhall.uk/posts/2018/2018-10-22-auth-with-aws-amplify-6.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-10-22-auth-with-aws-amplify-6.html</guid><pubDate>Mon, 22 Oct 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Authentication with AWS Amplify and Android: 3rd Party OIDC Providers</title><link>https://blog.adrianhall.uk/posts/2018/2018-10-15-auth-with-aws-amplify-5.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-10-15-auth-with-aws-amplify-5.html</guid><pubDate>Mon, 15 Oct 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Authentication with AWS Amplify and Android: Google Login</title><link>https://blog.adrianhall.uk/posts/2018/2018-10-08-auth-with-aws-amplify-4.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-10-08-auth-with-aws-amplify-4.html</guid><pubDate>Mon, 08 Oct 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Learn to build mobile and web apps with AWS Amplify and Serverless Framework</title><link>https://blog.adrianhall.uk/posts/2018/2018-10-02-learn-to-build-modern-apps-with-aws-amplify-and-serverless.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-10-02-learn-to-build-modern-apps-with-aws-amplify-and-serverless.html</guid><pubDate>Tue, 02 Oct 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category><category>serverless</category></item><item><title>Authentication with AWS Amplify and Android: Facebook Login</title><link>https://blog.adrianhall.uk/posts/2018/2018-10-01-auth-with-aws-amplify-3.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-10-01-auth-with-aws-amplify-3.html</guid><pubDate>Mon, 01 Oct 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Authentication with AWS Amplify and Android: Customizing the UI</title><link>https://blog.adrianhall.uk/posts/2018/2018-09-23-auth-with-aws-amplify-2.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-09-23-auth-with-aws-amplify-2.html</guid><pubDate>Sun, 23 Sep 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Authentication with AWS Amplify and Android: The Basics</title><link>https://blog.adrianhall.uk/posts/2018/2018-09-18-auth-with-aws-amplify-1.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-09-18-auth-with-aws-amplify-1.html</guid><pubDate>Tue, 18 Sep 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Let your analytics drive engagement: Endpoint profiles with AWS Amplify and Android</title><link>https://blog.adrianhall.uk/posts/2018/2018-09-11-endpoint-profiles-with-aws-amplify.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-09-11-endpoint-profiles-with-aws-amplify.html</guid><pubDate>Tue, 11 Sep 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Integrate Analytics into your Android applications with AWS Amplify</title><link>https://blog.adrianhall.uk/posts/2018/2018-09-04-integrate-analytics-with-aws-amplify.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-09-04-integrate-analytics-with-aws-amplify.html</guid><pubDate>Tue, 04 Sep 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>aws_amplify</category></item><item><title>Build a GraphQL Service the easy way with AWS Amplify Model Transforms</title><link>https://blog.adrianhall.uk/posts/2018/2018-08-29-build-a-graphql-service-the-easy-way.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-08-29-build-a-graphql-service-the-easy-way.html</guid><pubDate>Wed, 29 Aug 2018 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>Native Android Development with AWS Amplify</title><link>https://blog.adrianhall.uk/posts/2018/2018-08-27-native-development-with-aws-amplify.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-08-27-native-development-with-aws-amplify.html</guid><pubDate>Mon, 27 Aug 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category></item><item><title>How to deploy a GraphQL API on AWS with the Serverless Framework</title><link>https://blog.adrianhall.uk/posts/2018/2018-08-14-how-to-deploy-graphql-api-serverless-framework.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-08-14-how-to-deploy-graphql-api-serverless-framework.html</guid><pubDate>Tue, 14 Aug 2018 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category><category>serverless</category></item><item><title>Converting types with Room and Kotlin</title><link>https://blog.adrianhall.uk/posts/2018/2018-08-08-converting-types-with-room-and-kotlin.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-08-08-converting-types-with-room-and-kotlin.html</guid><pubDate>Wed, 08 Aug 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Build a GraphQL Weather API with OpenWeatherMap and AWS AppSync</title><link>https://blog.adrianhall.uk/posts/2018/2018-07-20-build-a-graphql-weather-api-with-openweathermap-and-aws-appsync.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-07-20-build-a-graphql-weather-api-with-openweathermap-and-aws-appsync.html</guid><pubDate>Fri, 20 Jul 2018 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>Run TypeScript Mocha Tests in Visual Studio Code</title><link>https://blog.adrianhall.uk/posts/2018/2018-07-04-run-typescript-mocha-tests-in-vscode.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-07-04-run-typescript-mocha-tests-in-vscode.html</guid><pubDate>Wed, 04 Jul 2018 00:00:00 GMT</pubDate><category>Web</category><category>testing</category><category>typescript</category></item><item><title>Implement Search-on-type in Android with RxJava</title><link>https://blog.adrianhall.uk/posts/2018/2018-06-20-implementing-search-on-type-in-android-with-rxjava.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-06-20-implementing-search-on-type-in-android-with-rxjava.html</guid><pubDate>Wed, 20 Jun 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Build a Universal Search API with GraphQL and AWS AppSync</title><link>https://blog.adrianhall.uk/posts/2018/2018-06-19-build-a-universal-search-api-with-graphql.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-06-19-build-a-universal-search-api-with-graphql.html</guid><pubDate>Tue, 19 Jun 2018 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>How developers can authenticate and authorize users with AWS AppSync</title><link>https://blog.adrianhall.uk/posts/2018/2018-06-01-how-developers-can-auth-with-aws-appsync.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-06-01-how-developers-can-auth-with-aws-appsync.html</guid><pubDate>Fri, 01 Jun 2018 00:00:00 GMT</pubDate><category>Cloud</category><category>aws_appsync</category><category>graphql</category></item><item><title>Unit Testing in Android Studio with Kotlin</title><link>https://blog.adrianhall.uk/posts/2018/2018-05-12-unit-testing-with-kotlin.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-05-12-unit-testing-with-kotlin.html</guid><pubDate>Sat, 12 May 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category><category>testing</category></item><item><title>Easy EditText content validation with Kotlin</title><link>https://blog.adrianhall.uk/posts/2018/2018-04-11-easy-edittext-content-validation-with-kotlin.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-04-11-easy-edittext-content-validation-with-kotlin.html</guid><pubDate>Wed, 11 Apr 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Using dependency injection with Kotlin</title><link>https://blog.adrianhall.uk/posts/2018/2018-04-06-using-dependency-injection-with-koin.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-04-06-using-dependency-injection-with-koin.html</guid><pubDate>Fri, 06 Apr 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Lessons in Kotlin: Toolbar Icons and Reflection</title><link>https://blog.adrianhall.uk/posts/2018/2018-04-01-lessons-in-kotlin-the-toolbar-icons-reflection.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-04-01-lessons-in-kotlin-the-toolbar-icons-reflection.html</guid><pubDate>Sun, 01 Apr 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Lessons in Kotlin Threading: An Animated Splash Screen</title><link>https://blog.adrianhall.uk/posts/2018/2018-03-29-lessons-in-kotlin-animated-splash-screen.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-03-29-lessons-in-kotlin-animated-splash-screen.html</guid><pubDate>Thu, 29 Mar 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>The React Toolbox - 2018 Edition</title><link>https://blog.adrianhall.uk/posts/2018/2018-03-23-the-react-toolbox-2018-edition.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-03-23-the-react-toolbox-2018-edition.html</guid><pubDate>Fri, 23 Mar 2018 00:00:00 GMT</pubDate><category>Web</category><category>react</category><category>javascript</category></item><item><title>Why I&apos;m refactoring to Kotlin</title><link>https://blog.adrianhall.uk/posts/2018/2018-03-21-why-im-refactoring-to-kotlin.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-03-21-why-im-refactoring-to-kotlin.html</guid><pubDate>Wed, 21 Mar 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>android</category><category>kotlin</category></item><item><title>Testing Mobile Apps: A Primer</title><link>https://blog.adrianhall.uk/posts/2018/2018-03-11-testing-mobile-apps-a-primer.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-03-11-testing-mobile-apps-a-primer.html</guid><pubDate>Sun, 11 Mar 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>testing</category></item><item><title>The Six Mobile Apps You Should Write</title><link>https://blog.adrianhall.uk/posts/2018/2018-03-10-the-six-mobile-apps-you-should-write.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-03-10-the-six-mobile-apps-you-should-write.html</guid><pubDate>Sat, 10 Mar 2018 00:00:00 GMT</pubDate><category>Mobile</category></item><item><title>Creating a React Native bridge library</title><link>https://blog.adrianhall.uk/posts/2018/2018-01-19-creating-a-react-native-bridge-library.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2018/2018-01-19-creating-a-react-native-bridge-library.html</guid><pubDate>Fri, 19 Jan 2018 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category></item><item><title>AsyncStorage, TypeScript, and Async/await in React Native</title><link>https://blog.adrianhall.uk/posts/2017/2017-08-21-asyncstorage-typescript-and-async-await-in-react-native.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-08-21-asyncstorage-typescript-and-async-await-in-react-native.html</guid><pubDate>Mon, 21 Aug 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category><category>async_programming</category><category>typescript</category></item><item><title>Building a Master-Detail Pattern in React Native</title><link>https://blog.adrianhall.uk/posts/2017/2017-08-16-building-a-master-detail-pattern-in-react-native.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-08-16-building-a-master-detail-pattern-in-react-native.html</guid><pubDate>Wed, 16 Aug 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category><category>typescript</category></item><item><title>Universal iOS Apps with React Native</title><link>https://blog.adrianhall.uk/posts/2017/2017-08-14-universal-ios-apps-with-react-native.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-08-14-universal-ios-apps-with-react-native.html</guid><pubDate>Mon, 14 Aug 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category></item><item><title>Integrating React Native, TypeScript, and MobX</title><link>https://blog.adrianhall.uk/posts/2017/2017-08-11-integrating-react-native-typescript-mobx.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-08-11-integrating-react-native-typescript-mobx.html</guid><pubDate>Fri, 11 Aug 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category><category>typescript</category></item><item><title>Debugging React Native with TypeScript and Visual Studio Code</title><link>https://blog.adrianhall.uk/posts/2017/2017-08-09-debugging-react-native-with-typescript-and-vscode.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-08-09-debugging-react-native-with-typescript-and-vscode.html</guid><pubDate>Wed, 09 Aug 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category><category>debugging</category><category>typescript</category></item><item><title>Implementing swipe-right on a React Native FlatList</title><link>https://blog.adrianhall.uk/posts/2017/2017-08-07-implementing-swipe-right-on-a-react-native-flatlist.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-08-07-implementing-swipe-right-on-a-react-native-flatlist.html</guid><pubDate>Mon, 07 Aug 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category></item><item><title>Handling orientation changes in React Native</title><link>https://blog.adrianhall.uk/posts/2017/2017-07-26-handling-orientation-changes-in-react-native.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-07-26-handling-orientation-changes-in-react-native.html</guid><pubDate>Wed, 26 Jul 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category></item><item><title>The things I like (and don&apos;t like) about Swift?</title><link>https://blog.adrianhall.uk/posts/2017/2017-06-19-the-things-i-like-about-swift.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-06-19-the-things-i-like-about-swift.html</guid><pubDate>Mon, 19 Jun 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>swift</category></item><item><title>Which is better - React Native or Xamarin Forms?</title><link>https://blog.adrianhall.uk/posts/2017/2017-05-25-reactnative-vs-xamarinforms.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-05-25-reactnative-vs-xamarinforms.html</guid><pubDate>Thu, 25 May 2017 00:00:00 GMT</pubDate><category>Mobile</category><category>react_native</category><category>xamarin</category><category>comparisons</category></item><item><title>Building a service in the Cloud</title><link>https://blog.adrianhall.uk/posts/2017/2017-05-08-building-a-service-in-the-cloud.html</link><guid isPermaLink="true">https://blog.adrianhall.uk/posts/2017/2017-05-08-building-a-service-in-the-cloud.html</guid><pubDate>Mon, 08 May 2017 00:00:00 GMT</pubDate><category>Cloud</category><category>serverless</category></item></channel></rss>