{"@attributes":{"version":"2.0"},"channel":{"title":"David Pine \u2014 @IEvangelist","description":"Senior software engineer at Microsoft building aspire.dev, former Google Developer Expert in web technologies. Bestselling author, international speaker, and open source enthusiast.","link":"https:\/\/davidpine.dev","item":[{"title":"ASP.NET Core RC2 (Migration Guide)","link":"https:\/\/davidpine.dev\/posts\/migrating-to-rc2","guid":"https:\/\/davidpine.dev\/posts\/migrating-to-rc2","description":"Migrating from RC1 to RC2","pubDate":"Sat, 21 May 2016 00:00:00 GMT","author":"David Pine"},{"title":"The power of the global.json","link":"https:\/\/davidpine.dev\/posts\/the-global-json","guid":"https:\/\/davidpine.dev\/posts\/the-global-json","description":"Leveraging .NET Core Tooling Features","pubDate":"Tue, 19 Jul 2016 00:00:00 GMT","author":"David Pine"},{"title":"Angular2 Http with RxJS Observables","link":"https:\/\/davidpine.dev\/posts\/angular-2-http","guid":"https:\/\/davidpine.dev\/posts\/angular-2-http","description":"Subscribing has never been so easy","pubDate":"Wed, 31 Aug 2016 00:00:00 GMT","author":"David Pine"},{"title":"Overcoming Impostor Syndrome","link":"https:\/\/davidpine.dev\/posts\/imposter-syndrome","guid":"https:\/\/davidpine.dev\/posts\/imposter-syndrome","description":"Taking off the mask","pubDate":"Sat, 05 Nov 2016 00:00:00 GMT","author":"David Pine"},{"title":"ASP.NET Core Response Optimization","link":"https:\/\/davidpine.dev\/posts\/asp-net-core-optimization","guid":"https:\/\/davidpine.dev\/posts\/asp-net-core-optimization","description":"Static File Caching & Compression","pubDate":"Mon, 12 Dec 2016 00:00:00 GMT","author":"David Pine"},{"title":"Building a Magic Mirror","link":"https:\/\/davidpine.dev\/posts\/building-a-magic-mirror","guid":"https:\/\/davidpine.dev\/posts\/building-a-magic-mirror","description":"Windows 10 IoT Core, UWP, C#, Raspberry Pi 3","pubDate":"Fri, 23 Dec 2016 00:00:00 GMT","author":"David Pine"},{"title":"What happened to my Thread.CurrentPrincipal","link":"https:\/\/davidpine.dev\/posts\/principal-architecture-changes","guid":"https:\/\/davidpine.dev\/posts\/principal-architecture-changes","description":"This is not the IPrincipal you are looking for...","pubDate":"Fri, 27 Jan 2017 00:00:00 GMT","author":"David Pine"},{"title":"Overriding ASP.NET Core Framework-Provided Services","link":"https:\/\/davidpine.dev\/posts\/overriding-default-di","guid":"https:\/\/davidpine.dev\/posts\/overriding-default-di","description":"You take the red pill\u2014you stay in Wonderland, and I show you how deep the rabbit hole goes","pubDate":"Tue, 14 Feb 2017 00:00:00 GMT","author":"David Pine"},{"title":"Exploring C# 7","link":"https:\/\/davidpine.dev\/posts\/exploring-csharp-seven","guid":"https:\/\/davidpine.dev\/posts\/exploring-csharp-seven","description":"Expressiveness Redefined & #notasugly","pubDate":"Sun, 26 Mar 2017 00:00:00 GMT","author":"David Pine"},{"title":"TypeScript - JavaScript Reimagined","link":"https:\/\/davidpine.dev\/posts\/typescript-javascript-reimagined","guid":"https:\/\/davidpine.dev\/posts\/typescript-javascript-reimagined","description":"\"Making JavaScript tolerable\"","pubDate":"Tue, 02 May 2017 00:00:00 GMT","author":"David Pine"},{"title":"How to organize an amazing technical conference","link":"https:\/\/davidpine.dev\/posts\/how-to-organize-an-amazing-tech-conf","guid":"https:\/\/davidpine.dev\/posts\/how-to-organize-an-amazing-tech-conf","description":"Behind the scenes of MKE DOT NET","pubDate":"Sat, 24 Jun 2017 00:00:00 GMT","author":"David Pine"},{"title":"Perusing C# 7.1","link":"https:\/\/davidpine.dev\/posts\/csharp-seven-dot-one","guid":"https:\/\/davidpine.dev\/posts\/csharp-seven-dot-one","description":"The language features you've been waiting for","pubDate":"Sat, 29 Jul 2017 00:00:00 GMT","author":"David Pine"},{"title":"Demystifying .NET Standard","link":"https:\/\/davidpine.dev\/posts\/dot-net-standard-demystified","guid":"https:\/\/davidpine.dev\/posts\/dot-net-standard-demystified","description":"Clearing up the confusion","pubDate":"Wed, 16 Aug 2017 00:00:00 GMT","author":"David Pine"},{"title":"xUnit Roslyn Analyzers","link":"https:\/\/davidpine.dev\/posts\/xunit-powered-by-roslyn","guid":"https:\/\/davidpine.dev\/posts\/xunit-powered-by-roslyn","description":"Putting your code under the scope","pubDate":"Sat, 11 Nov 2017 00:00:00 GMT","author":"David Pine"},{"title":"C# Special Edition","link":"https:\/\/davidpine.dev\/posts\/csharp-special-edition","guid":"https:\/\/davidpine.dev\/posts\/csharp-special-edition","description":"Ranting about my favorite language","pubDate":"Sun, 17 Dec 2017 00:00:00 GMT","author":"David Pine"},{"title":"ASP.NET Core Configuration Tips","link":"https:\/\/davidpine.dev\/posts\/asp-net-core-configuration","guid":"https:\/\/davidpine.dev\/posts\/asp-net-core-configuration","description":"Configuration tips for success","pubDate":"Sat, 10 Mar 2018 00:00:00 GMT","author":"David Pine"},{"title":"ASP.NET Core Unit Testing For Security Attributes","link":"https:\/\/davidpine.dev\/posts\/asp-net-core-security-unit-testing","guid":"https:\/\/davidpine.dev\/posts\/asp-net-core-security-unit-testing","description":"Authorization Attribute Safety Net","pubDate":"Fri, 23 Mar 2018 00:00:00 GMT","author":"David Pine"},{"title":"Journey of a Lifetime","link":"https:\/\/davidpine.dev\/posts\/journey-of-a-lifetime","guid":"https:\/\/davidpine.dev\/posts\/journey-of-a-lifetime","description":"IT Konekt - Serbia (Belgrade, Ni\u0161 and Novi Sad)","pubDate":"Sat, 28 Apr 2018 00:00:00 GMT","author":"David Pine"},{"title":"ASP.NET Core + Angular Photo Booth App","link":"https:\/\/davidpine.dev\/posts\/photo-booth","guid":"https:\/\/davidpine.dev\/posts\/photo-booth","description":"Do it yourself","pubDate":"Fri, 22 Jun 2018 00:00:00 GMT","author":"David Pine"},{"title":"Angular HTTP Tips For Success","link":"https:\/\/davidpine.dev\/posts\/angular-http-gotchas","guid":"https:\/\/davidpine.dev\/posts\/angular-http-gotchas","description":"RxJS Map to the rescue!","pubDate":"Mon, 25 Jun 2018 00:00:00 GMT","author":"David Pine"},{"title":"WebAssembly","link":"https:\/\/davidpine.dev\/posts\/webassembly-interview","guid":"https:\/\/davidpine.dev\/posts\/webassembly-interview","description":"Interview with Steve Sanderson (Talking Blazor)","pubDate":"Sun, 05 Aug 2018 00:00:00 GMT","author":"David Pine"},{"title":"Writing a Blazor App","link":"https:\/\/davidpine.dev\/posts\/blazing-chuck","guid":"https:\/\/davidpine.dev\/posts\/blazing-chuck","description":"A Practical WebAssembly Application In C#","pubDate":"Mon, 20 Aug 2018 00:00:00 GMT","author":"David Pine"},{"title":"DMP in 3: RxJS Debounce","link":"https:\/\/davidpine.dev\/posts\/dmp-in-three-debounce","guid":"https:\/\/davidpine.dev\/posts\/dmp-in-three-debounce","description":"Three minute solution for delayed filtering to avoid performance implications","pubDate":"Sun, 11 Nov 2018 00:00:00 GMT","author":"David Pine"},{"title":"C# All The Things","link":"https:\/\/davidpine.dev\/posts\/csharp-all-the-things","guid":"https:\/\/davidpine.dev\/posts\/csharp-all-the-things","description":".NET Core Global Tools. You don't need glasses to C#.","pubDate":"Sun, 16 Dec 2018 00:00:00 GMT","author":"David Pine"},{"title":"Angular - The Color Guessing Game","link":"https:\/\/davidpine.dev\/posts\/angular-color-game","guid":"https:\/\/davidpine.dev\/posts\/angular-color-game","description":"Hashtag... #Winning","pubDate":"Thu, 14 Mar 2019 00:00:00 GMT","author":"David Pine"},{"title":"ASP.NET Core - Slack Slash Commands","link":"https:\/\/davidpine.dev\/posts\/asp-net-core-slack","guid":"https:\/\/davidpine.dev\/posts\/asp-net-core-slack","description":"C# Slack API Integrations","pubDate":"Thu, 21 Mar 2019 00:00:00 GMT","author":"David Pine"},{"title":"Building a GitHub profanity filter with .NET Core and Azure Functions","link":"https:\/\/davidpine.dev\/posts\/github-profanity-filter","guid":"https:\/\/davidpine.dev\/posts\/github-profanity-filter","description":"It's better to laugh it off","pubDate":"Sat, 23 Nov 2019 00:00:00 GMT","author":"David Pine"},{"title":"Blazorators","link":"https:\/\/davidpine.dev\/posts\/blazorators","guid":"https:\/\/davidpine.dev\/posts\/blazorators","description":"C# Source Generator for JavaScript Interop in Blazor","pubDate":"Thu, 08 Sep 2022 00:00:00 GMT","author":"David Pine"},{"title":"Learning Blazor","link":"https:\/\/davidpine.dev\/posts\/learning-blazor","guid":"https:\/\/davidpine.dev\/posts\/learning-blazor","description":"Build Single-Page Apps with WebAssembly and C#","pubDate":"Fri, 16 Sep 2022 00:00:00 GMT","author":"David Pine"},{"title":"Hello from the GitHub Actions: Core .NET SDK","link":"https:\/\/davidpine.dev\/posts\/github-actions-sdk","guid":"https:\/\/davidpine.dev\/posts\/github-actions-sdk","description":"The unofficial .NET equivalent of the official GitHub actions\/toolkit @actions\/core project.","pubDate":"Wed, 30 Nov 2022 00:00:00 GMT","author":"David Pine"},{"title":"A conversation with ChatGPT ","link":"https:\/\/davidpine.dev\/posts\/dotnet-dependency-injection","guid":"https:\/\/davidpine.dev\/posts\/dotnet-dependency-injection","description":"Focusing on .NET Dependency Injection","pubDate":"Thu, 08 Dec 2022 00:00:00 GMT","author":"David Pine"},{"title":"Exploring .NET streaming API scenarios","link":"https:\/\/davidpine.dev\/posts\/dotnet-async-enumerable","guid":"https:\/\/davidpine.dev\/posts\/dotnet-async-enumerable","description":"Use the IAsyncEnumerable<T> interface to stream data from a server to a client.","pubDate":"Mon, 19 Jun 2023 00:00:00 GMT","author":"David Pine"},{"title":"Deploying aspire.dev with aspire deploy","link":"https:\/\/davidpine.dev\/posts\/aspire-dot-dev","guid":"https:\/\/davidpine.dev\/posts\/aspire-dot-dev","description":"A journey of rebranding, replatforming, dogfooding, and mild existential crises","pubDate":"Mon, 27 Oct 2025 00:00:00 GMT","author":"David Pine"},{"title":"Migrating from Microsoft Learn to aspire.dev","link":"https:\/\/davidpine.dev\/posts\/aspire-mass-exodus","guid":"https:\/\/davidpine.dev\/posts\/aspire-mass-exodus","description":"Productivity exemplified: How I planned, prompted, and tamed AI to migrate aspire.dev.","pubDate":"Tue, 18 Nov 2025 00:00:00 GMT","author":"David Pine"},{"title":"How I taught AI to read Aspire docs","link":"https:\/\/davidpine.dev\/posts\/aspire-docs-mcp-tools","guid":"https:\/\/davidpine.dev\/posts\/aspire-docs-mcp-tools","description":"How I added list_docs, search_docs, and get_doc to the Aspire MCP server to help AI agents build better Aspire apps.","pubDate":"Mon, 02 Feb 2026 00:00:00 GMT","author":"David Pine"},{"title":"Building an OpenGraph preview canvas for GitHub Copilot","link":"https:\/\/davidpine.dev\/posts\/opengraph-preview-canvas","guid":"https:\/\/davidpine.dev\/posts\/opengraph-preview-canvas","description":"How I built an open-source Copilot canvas that previews social cards, audits OpenGraph metadata and agent readiness, and turns diagnostics into actionable work.","pubDate":"Tue, 14 Jul 2026 00:00:00 GMT","author":"David Pine"},{"title":"Adding Full-Text Search to Blazor WebAssembly with Pagefind","link":"https:\/\/davidpine.dev\/posts\/pagefind-blazor-webassembly","guid":"https:\/\/davidpine.dev\/posts\/pagefind-blazor-webassembly","description":"A standalone Blazor WebAssembly app hands Pagefind no static HTML to crawl. Here's how I indexed the Blazorators sample with Pagefind's Node API and wired search through JS interop.","pubDate":"Tue, 04 Aug 2026 00:00:00 GMT","author":"David Pine"}]}}