<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Kia Ora! on Michael McKenna</title>
    <link>https://michael-mckenna.com/</link>
    <description>Recent content in Kia Ora! on Michael McKenna</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <atom:link href="https://michael-mckenna.com/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>LittlePublisher</title>
      <link>https://michael-mckenna.com/projects/littlepublisher/</link>
      <pubDate>Sun, 24 May 2026 15:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/projects/littlepublisher/</guid>
      <description>A small publishing tool for tending posts, notes, activity, and IndieWeb interactions.</description>
    </item>
    <item>
      <title>My digital garden</title>
      <link>https://michael-mckenna.com/activity/2026/05/my-digital-garden/</link>
      <pubDate>Sun, 24 May 2026 14:30:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/activity/2026/05/my-digital-garden/</guid>
      <description>Well here it is, my perfectly imperfect.</description>
    </item>
    <item>
      <title>Namche Bazar, when I was young</title>
      <link>https://michael-mckenna.com/activity/2026/05/namche-bazar-when-i-was-young/</link>
      <pubDate>Sun, 24 May 2026 14:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/activity/2026/05/namche-bazar-when-i-was-young/</guid>
      <description>Travel photo from a different time; I didn&amp;rsquo;t truly appreciate the spontaneity of youth.</description>
    </item>
    <item>
      <title>Japan, Nagano, Somewhere</title>
      <link>https://michael-mckenna.com/activity/2026/05/japan-nagano-somewhere/</link>
      <pubDate>Fri, 22 May 2026 14:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/activity/2026/05/japan-nagano-somewhere/</guid>
      <description>The snow was amazing</description>
    </item>
    <item>
      <title>Authentication failed when copying files to Azure Blob Storage in DevOps with auto-provisioned service connection</title>
      <link>https://michael-mckenna.com/blog/azureblob-file-devops-copy-info-authentication-failed/</link>
      <pubDate>Sun, 18 May 2025 13:12:11 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/azureblob-file-devops-copy-info-authentication-failed/</guid>
      <description>I needed to configure a pipeline to copy some build artefacts to Azure Blob storage, however after setting up the AzureBlob File Copy task I kept getting an Authentication Failed error.</description>
    </item>
    <item>
      <title>Debouncing input change event in Vue 3; wait until user stops typing</title>
      <link>https://michael-mckenna.com/blog/debouncing-input-change-event-wait-until-user-stops-typing/</link>
      <pubDate>Sun, 23 Jun 2024 13:12:11 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/debouncing-input-change-event-wait-until-user-stops-typing/</guid>
      <description>Ever needed to create an auto-complete that&amp;rsquo;s powered by an auto-complete API, or have a search field you want to automatically run without forcing the user to hit enter? Use this technique to avoid excessive traffic to your endpoints.</description>
    </item>
    <item>
      <title>Multi-tenancy in ASP.NET Core 8 - Tenant Specific Options</title>
      <link>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-8-tenant-options/</link>
      <pubDate>Sun, 21 Apr 2024 23:29:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-8-tenant-options/</guid>
      <description>In this post we will configure options on a per-tenant basis using the Options Pattern.</description>
    </item>
    <item>
      <title>Multi-tenancy in ASP.NET Core 8 - Dependency Injection &amp; Tenant Specific Services</title>
      <link>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-8-tenant-services/</link>
      <pubDate>Sat, 13 Apr 2024 23:29:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-8-tenant-services/</guid>
      <description>In this post we look at how to have tenant specific services in a multi-tenant application in ASP.NET Core 8.</description>
    </item>
    <item>
      <title>Iterating over a resource collection in bicep - avoid BCP144</title>
      <link>https://michael-mckenna.com/notes/iterating-over-resource-collection-in-bicep-avoid-BCP144/</link>
      <pubDate>Tue, 26 Mar 2024 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/iterating-over-resource-collection-in-bicep-avoid-BCP144/</guid>
      <description>&lt;p&gt;Being doing a bit of IaC with Bicep recently and I ran into an issue when trying to iterate over a list of provisioned resources. I was trying to create a new resource for each one and I kept getting an error - bicep(BCP144)&lt;/p&gt;&#xA;&lt;h2 id=&#34;iterating-over-a-list-of-provisioned-resources&#34;&gt;Iterating over a list of provisioned resources&lt;/h2&gt;&#xA;&lt;p&gt;I had a scenario where I needed to iterate over a list of provisioned resources and create a new resource for each one. The secnario was I was configuring records on a collection of DNS Zones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The One Billion Row Challenge in .NET</title>
      <link>https://michael-mckenna.com/blog/csharp-dot-net-1brc/</link>
      <pubDate>Mon, 04 Mar 2024 23:29:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/csharp-dot-net-1brc/</guid>
      <description>I just saw the one billion row challenge. I&amp;rsquo;m a bit late as the challenge was back in January but I thought it would be a fun exercise to try and solve it in .NET.</description>
    </item>
    <item>
      <title>Multi-tenancy in ASP.NET Core 8 - Tenant Resolution</title>
      <link>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-8-tenant-resolution/</link>
      <pubDate>Sun, 03 Mar 2024 23:29:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-8-tenant-resolution/</guid>
      <description>Can you believe it, just like that it&amp;rsquo;s been 4 and a half years since I wrote my initial series on multi-tenancy in ASP.NET and now ASP.NET Core 8 is out. In this post I revisit multi-tenancy in ASP.NET Core and take a fresh look at how I&amp;rsquo;d implement multi-tenancy today.</description>
    </item>
    <item>
      <title>IndieAuth in ASP.NET</title>
      <link>https://michael-mckenna.com/blog/indieauth-in-asp-dot-net/</link>
      <pubDate>Wed, 27 Sep 2023 20:13:11 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/indieauth-in-asp-dot-net/</guid>
      <description>This is a long form blog post about how I added support for IndieAuth as an authentication method for a .NET 6 application.</description>
    </item>
    <item>
      <title>Adding snake_case support to System.Text.Json</title>
      <link>https://michael-mckenna.com/blog/add-snake-case-to-system-text-json/</link>
      <pubDate>Wed, 19 Jul 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/add-snake-case-to-system-text-json/</guid>
      <description>It&amp;rsquo;s not supported out of the box (yet) despite being quite popular (e.g. GitHub API) but it&amp;rsquo;s super simple to add if you need it.</description>
    </item>
    <item>
      <title>HttpCompletionOption.ResponseHeadersRead</title>
      <link>https://michael-mckenna.com/notes/httpcompletionoption-responseheadersread/</link>
      <pubDate>Fri, 07 Jul 2023 09:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/httpcompletionoption-responseheadersread/</guid>
      <description>&lt;p&gt;By default the .NET HttpClient will download the entire respones into memory before returning control to the caller. Which means if you&amp;rsquo;re processing data from the stream, your process won&amp;rsquo;t start operating on the stream until the entire response has been buffered into memory.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feedData&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;client&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GetAsync&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;feedUri&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;using&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;reader&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;XmlReader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;feedData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ReadAsStreamAsync&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The default behaviour makes sense because the response is loaded into memory and the sockets freed up as quickly as possible. That&amp;rsquo;s probably best for most applications. However for the application I was working on (&lt;a href=&#34;https://github.com/myquay/feedmd&#34;&gt;FeedMD - RSS/Atom to MD feed converter&lt;/a&gt;) if there&amp;rsquo;s no new posts near the top of the feed we decide to stop processing the feed very early on. I wanted to start acting on the stream right away.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Remember to have fun on the internet</title>
      <link>https://michael-mckenna.com/notes/remember-to-have-fun-on-the-internet/</link>
      <pubDate>Thu, 06 Jul 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/remember-to-have-fun-on-the-internet/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;I want you to know that you too can make new programs which create new fun ways of using computers and using the Internet.&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;I want you to realize that, if you can imagine a computer doing something, you can program a computer to do that.&lt;br&gt;&#xA;&lt;br&gt;&#xA;&lt;br&gt;&#xA;&amp;ndash; &lt;a href=&#34;https://www.w3.org/People/Berners-Lee/Kids.html&#34;&gt;Tim Berners-Lee&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;What a fantastic sentiment. It got me thinking back to my first experiences with the Interent. My first website was a Age of Empires fansite believe it or not. I wish I had a screenshot.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to upload a file to a GitHub release in a workflow</title>
      <link>https://michael-mckenna.com/blog/how-to-upload-file-to-github-release-in-a-workflow/</link>
      <pubDate>Wed, 05 Jul 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/how-to-upload-file-to-github-release-in-a-workflow/</guid>
      <description>Spoiler alert: you don&amp;rsquo;t need an Action contributed by a third party.</description>
    </item>
    <item>
      <title>Automated versioning and publishing of a SDK-style NuGet packages using GitHub Actions</title>
      <link>https://michael-mckenna.com/blog/automated-versioning-and-publishing-sdk-style-nuget-packages-using-github-actions/</link>
      <pubDate>Mon, 26 Jun 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/automated-versioning-and-publishing-sdk-style-nuget-packages-using-github-actions/</guid>
      <description>In this article we look at the method of automating the NuGet packaging process using GitHub Actions that we used for GuidOne.</description>
    </item>
    <item>
      <title>Upgrading to .NET 6 and Entity Framework table data annotation schema not working</title>
      <link>https://michael-mckenna.com/blog/upgrading-to-net-6-and-entity-framework-table-data-annotation-schema-not-working/</link>
      <pubDate>Fri, 23 Jun 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/upgrading-to-net-6-and-entity-framework-table-data-annotation-schema-not-working/</guid>
      <description>After upgrading a .NET 3.1 ASP.NET Web Application to .NET 6 and Entity Framework from 3.1.1 to 7.0.8 the schema applied using the table data annotation was no longer respected</description>
    </item>
    <item>
      <title>IConfigurationSection does not contain a definition for Get</title>
      <link>https://michael-mckenna.com/notes/iconfigurationsection-does-not-contain-a-definition-for-get/</link>
      <pubDate>Thu, 22 Jun 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/iconfigurationsection-does-not-contain-a-definition-for-get/</guid>
      <description>I ran into this issue when upgrading from Microsoft.Extensions.Configuration.Abstractions 3.1.10 to 7.0.0</description>
    </item>
    <item>
      <title>Automated versioning and publishing of a Non-SDK-style NuGet packages using GitHub Actions</title>
      <link>https://michael-mckenna.com/blog/automated-versioning-and-publishing-nuget-packages-using-github-actions/</link>
      <pubDate>Sun, 18 Jun 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/automated-versioning-and-publishing-nuget-packages-using-github-actions/</guid>
      <description>In this article we look at the method of automating the NuGet packaging process using GitHub Actions that we used for JsonPatch.</description>
    </item>
    <item>
      <title>Peripheral: The great blog refresh of 2023</title>
      <link>https://michael-mckenna.com/blog/introducing-peripheral/</link>
      <pubDate>Wed, 14 Jun 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/introducing-peripheral/</guid>
      <description>This blog just turned 10! It&amp;rsquo;s a strange milestone; so inconsequnetial for everyone in the world bar me. Instead of going down a rabbit hole of irrelevance a better use of my time is to give this blog yet another refresh.</description>
    </item>
    <item>
      <title>Linking to the latest commit in the header of your Hugo site on GitHub</title>
      <link>https://michael-mckenna.com/blog/linking-to-the-latest-commit-in-the-footer-of-your-hugo-static-site-on-github/</link>
      <pubDate>Sun, 07 May 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/linking-to-the-latest-commit-in-the-footer-of-your-hugo-static-site-on-github/</guid>
      <description>.GitInfo is linked to the current page, this is how we accessed the lastest commit information at build</description>
    </item>
    <item>
      <title>Wrong font size on iOS when using Chroma syntax highlighting with Hugo</title>
      <link>https://michael-mckenna.com/notes/wrong-font-size-on-ios-when-using-chroma-syntax-highlighting-with-hugo/</link>
      <pubDate>Thu, 04 May 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/wrong-font-size-on-ios-when-using-chroma-syntax-highlighting-with-hugo/</guid>
      <description>WebKit has this habit of trying to enlarge the &amp;ldquo;primary&amp;rdquo; text on the screen</description>
    </item>
    <item>
      <title>Host your Hugo Generated site on GitHub</title>
      <link>https://michael-mckenna.com/blog/host-your-hugo-generated-site-on-github/</link>
      <pubDate>Mon, 01 May 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/host-your-hugo-generated-site-on-github/</guid>
      <description>GitHub Pages are are a great way to host a blog, share your résumé, or even host a website about one of your projects.</description>
    </item>
    <item>
      <title>Goodreads API shutdown</title>
      <link>https://michael-mckenna.com/notes/goodreads-api-shutdown/</link>
      <pubDate>Thu, 27 Apr 2023 10:00:00 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/goodreads-api-shutdown/</guid>
      <description>Unfortunately the custodians of my literary history have decided to prevent all new API access in their quest to improve data control.</description>
    </item>
    <item>
      <title>JSON Patch Support with Swagger and ASP.NET Core 3.1</title>
      <link>https://michael-mckenna.com/blog/swagger-with-asp-net-core-3-1-json-patch/</link>
      <pubDate>Wed, 07 Oct 2020 13:11:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/swagger-with-asp-net-core-3-1-json-patch/</guid>
      <description>Generate the correct request schema for Patch operations in ASP.NET Core 3.1 which use JsonPatchDocument</description>
    </item>
    <item>
      <title>Migrating multi-tenancy to .NET Core 3.1 (LTS)</title>
      <link>https://michael-mckenna.com/blog/multi-tenancy-compatibility-dot-net-core-three/</link>
      <pubDate>Wed, 02 Oct 2019 13:11:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenancy-compatibility-dot-net-core-three/</guid>
      <description>.NET Core 3.1 is out and it&amp;rsquo;s a LTS release. Our 4 part multi-tenancy series is already out of date! Here we&amp;rsquo;ll cover off the breaking changes and the updates we need to make.</description>
    </item>
    <item>
      <title>Creating a multi-tenant .NET Core Application - Tenant specific authentication</title>
      <link>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-specific-authentication/</link>
      <pubDate>Mon, 15 Jul 2019 13:11:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-specific-authentication/</guid>
      <description>This time we are looking at how we can configure authentication on a per-tenant basis.</description>
    </item>
    <item>
      <title>Creating a multi-tenant .NET Core Application - Tenant specific options</title>
      <link>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-specific-configuration-options/</link>
      <pubDate>Mon, 01 Jul 2019 13:11:12 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-specific-configuration-options/</guid>
      <description>This time we are looking at how we can configure options on a per-tenant basis any third party service that supports the Options Pattern.</description>
    </item>
    <item>
      <title>Creating a multi-tenant .NET Core Application - Tenant containers</title>
      <link>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-containers/</link>
      <pubDate>Thu, 06 Jun 2019 20:13:11 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-containers/</guid>
      <description>This time we are looking at how we can configure services on a per-tenant basis which allows us to resolve a different service based on which tenant is active. An application isn&amp;rsquo;t truly multi-tenant unless you can have a different services container for each tenant.</description>
    </item>
    <item>
      <title>Creating a multi-tenant .NET Core Application - Tenant resolution</title>
      <link>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-resolution/</link>
      <pubDate>Sat, 25 May 2019 20:13:11 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/multi-tenant-asp-dot-net-core-application-tenant-resolution/</guid>
      <description>This series of blog posts is an exploration of how to achieve multi-tenancy in an ASP.NET Core web application. In this part of the series we resolve a request to a tenant and introduce the ability to access information about that tenant.</description>
    </item>
    <item>
      <title>Host your Hugo site on Azure Storage</title>
      <link>https://michael-mckenna.com/blog/host-your-hugo-site-on-azure-storage-deployed-with-vsts/</link>
      <pubDate>Thu, 03 Jan 2019 20:13:11 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/host-your-hugo-site-on-azure-storage-deployed-with-vsts/</guid>
      <description>Host your Hugo SSG using Azure Storage and KeyCDN.</description>
    </item>
    <item>
      <title>Using Azure Functions to text you when your servers are down</title>
      <link>https://michael-mckenna.com/blog/using-azure-functions-to-text-you-when-your-servers-are-down/</link>
      <pubDate>Tue, 06 Dec 2016 20:52:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/using-azure-functions-to-text-you-when-your-servers-are-down/</guid>
      <description>The thing I like most about it is that it&amp;rsquo;s serverless so no infrastructure to maintain and worry about.</description>
    </item>
    <item>
      <title>Could not load file or assembly &#39;Microsoft.VisualStudio.Web.PageInspector.Loader...</title>
      <link>https://michael-mckenna.com/notes/could-not-load-file-or-assembly-microsoft-visualstudio-web-pageinspector-loader/</link>
      <pubDate>Mon, 28 Nov 2016 20:52:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/could-not-load-file-or-assembly-microsoft-visualstudio-web-pageinspector-loader/</guid>
      <description>It looks like it&amp;rsquo;s an assembly that VS 2012 adds which is why it&amp;rsquo;s no longer available after uninstall.</description>
    </item>
    <item>
      <title>Update multiple Git repositories on Windows at once using Powershell</title>
      <link>https://michael-mckenna.com/blog/update-multiple-git-repositories-on-windows-at-once-using-powershell/</link>
      <pubDate>Thu, 17 Nov 2016 20:52:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/update-multiple-git-repositories-on-windows-at-once-using-powershell/</guid>
      <description>Let&amp;rsquo;s write the script - it&amp;rsquo;s super simple. It&amp;rsquo;s designed to be placed in the parent folder of your Git repositories.</description>
    </item>
    <item>
      <title>How to import Python extension modules in Azure Functions</title>
      <link>https://michael-mckenna.com/blog/how-to-import-python-extension-modules-in-azure-functions/</link>
      <pubDate>Thu, 03 Nov 2016 20:52:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/how-to-import-python-extension-modules-in-azure-functions/</guid>
      <description>I just needed to quickly run a few Python methods&amp;hellip; in Azure</description>
    </item>
    <item>
      <title>Optional arguments in C# interfaces</title>
      <link>https://michael-mckenna.com/blog/optional-arguments-in-c-sharp-interfaces/</link>
      <pubDate>Mon, 15 Aug 2016 20:52:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/optional-arguments-in-c-sharp-interfaces/</guid>
      <description>In the interest of code-safety I don&amp;rsquo;t put default values on implementing classes any more.</description>
    </item>
    <item>
      <title>Running Go on Azure App Services</title>
      <link>https://michael-mckenna.com/blog/running-go-on-azure-websites/</link>
      <pubDate>Sun, 03 Jul 2016 20:52:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/running-go-on-azure-websites/</guid>
      <description>It turns out Azure App Services have added native Go support.</description>
    </item>
    <item>
      <title>Getting started with Go on Windows</title>
      <link>https://michael-mckenna.com/blog/getting-started-with-go-on-windows/</link>
      <pubDate>Fri, 01 Jul 2016 10:33:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/getting-started-with-go-on-windows/</guid>
      <description>I&amp;rsquo;m giving this Go-lang thing a whirl, turns out it&amp;rsquo;s dead easy to set up on Windows.</description>
    </item>
    <item>
      <title>Creating custom knockout bindings in typescript.</title>
      <link>https://michael-mckenna.com/notes/creating-custom-knockout-bindings-in-typescript/</link>
      <pubDate>Tue, 07 Jun 2016 22:40:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/notes/creating-custom-knockout-bindings-in-typescript/</guid>
      <description>Something like &lt;code&gt;knockout.bindings.d.ts&lt;/code&gt; and provide a definition for your binding.</description>
    </item>
    <item>
      <title>Func&lt;T&gt; vs. Expression&lt;Func&lt;T&gt;&gt; in LINQ</title>
      <link>https://michael-mckenna.com/blog/func-t-vs-expression-func-t-in-linq/</link>
      <pubDate>Tue, 07 Jun 2016 22:40:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/func-t-vs-expression-func-t-in-linq/</guid>
      <description>Don&amp;rsquo;t worry if you haven&amp;rsquo;t noticed the differences, you call them with the exact same syntax.</description>
    </item>
    <item>
      <title>GUIDs Part 3: GUID one</title>
      <link>https://michael-mckenna.com/blog/guid-part-3-guid-one/</link>
      <pubDate>Tue, 24 May 2016 09:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/guid-part-3-guid-one/</guid>
      <description>Then to make it all stick I implemented the spec</description>
    </item>
    <item>
      <title>Sorting IQueryables using strings and reflection</title>
      <link>https://michael-mckenna.com/blog/sorting-iqueryables-using-strings-and-reflection/</link>
      <pubDate>Tue, 10 May 2016 09:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/sorting-iqueryables-using-strings-and-reflection/</guid>
      <description>Wouldn&amp;rsquo;t it be great to be able to specify the property to order on at runtime for a LINQ query?</description>
    </item>
    <item>
      <title>Reactive Extensions .NET: Implementing the circuit breaker pattern</title>
      <link>https://michael-mckenna.com/blog/reactive-extensions-dot-net-implementing-the-circuit-breaker-pattern/</link>
      <pubDate>Mon, 02 May 2016 09:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/reactive-extensions-dot-net-implementing-the-circuit-breaker-pattern/</guid>
      <description>We create an observable that either emits values from the source or the alternate source based on the status of the circuit breaker.</description>
    </item>
    <item>
      <title>GUIDs part 2: GUID as gold</title>
      <link>https://michael-mckenna.com/blog/guid-as-gold/</link>
      <pubDate>Thu, 28 Apr 2016 09:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/guid-as-gold/</guid>
      <description>How are GUIDs unique with out a central watch dog?</description>
    </item>
    <item>
      <title>Generating an Apple Push Notification Certificate on Windows</title>
      <link>https://michael-mckenna.com/blog/generating-an-apple-push-notification-certificate-on-windows/</link>
      <pubDate>Sat, 23 Apr 2016 09:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/generating-an-apple-push-notification-certificate-on-windows/</guid>
      <description>Following most instructions Apple seemed to think my IIS generated CSR was invalud.</description>
    </item>
    <item>
      <title>GUIDs part 1: What the GUID?</title>
      <link>https://michael-mckenna.com/blog/what-the-guid/</link>
      <pubDate>Tue, 19 Apr 2016 11:58:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/what-the-guid/</guid>
      <description>I asked myself some questions and ended up learning a lot about the humble GUID - they really are quite cool.</description>
    </item>
    <item>
      <title>Improving conversion rates in KickSmoking</title>
      <link>https://michael-mckenna.com/blog/improving-conversion-rates-in-kicksmoking/</link>
      <pubDate>Sun, 22 Mar 2015 08:45:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/improving-conversion-rates-in-kicksmoking/</guid>
      <description>People won&amp;rsquo;t give you money if you treat them poorly.</description>
    </item>
    <item>
      <title>Monetising KickSmoking</title>
      <link>https://michael-mckenna.com/blog/monetising-kicksmoking/</link>
      <pubDate>Tue, 03 Mar 2015 08:51:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/monetising-kicksmoking/</guid>
      <description>Despite being on the back-burner it&amp;rsquo;s still the number one quit smoking app on the Windows Phone app store.</description>
    </item>
    <item>
      <title>Migrating an Azure VM to a different region</title>
      <link>https://michael-mckenna.com/blog/migrating-an-azure-vm-to-a-different-region/</link>
      <pubDate>Thu, 04 Dec 2014 15:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/migrating-an-azure-vm-to-a-different-region/</guid>
      <description>Even though you can&amp;rsquo;t do it from the online interface it, it&amp;rsquo;s actually pretty simple.</description>
    </item>
    <item>
      <title>Setting up a Jekyll workflow on windows</title>
      <link>https://michael-mckenna.com/blog/setting-up-a-jekyll-workflow-on-windows/</link>
      <pubDate>Fri, 22 Aug 2014 15:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/setting-up-a-jekyll-workflow-on-windows/</guid>
      <description>For sites that are read heavy but get updated quite infrequently (like a blog, or marketing site) a static site is ideal.</description>
    </item>
    <item>
      <title>How to add JSON Patch support to ASP.NET Web API</title>
      <link>https://michael-mckenna.com/blog/how-to-add-json-patch-support-to-asp-net-web-api/</link>
      <pubDate>Thu, 24 Jul 2014 15:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/how-to-add-json-patch-support-to-asp-net-web-api/</guid>
      <description>We’re going to create a formatter that understands JSON Patch.</description>
    </item>
    <item>
      <title>Should I use www or not?</title>
      <link>https://michael-mckenna.com/blog/should-i-use-www-or-not/</link>
      <pubDate>Mon, 14 Jul 2014 15:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/should-i-use-www-or-not/</guid>
      <description>Is it still required? Or can we just use the &amp;ldquo;naked&amp;rdquo; domain?</description>
    </item>
    <item>
      <title>Setting up an elasticsearch cluster in azure</title>
      <link>https://michael-mckenna.com/blog/setting-up-an-elasticsearch-cluster-in-azure/</link>
      <pubDate>Mon, 07 Jul 2014 15:56:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/setting-up-an-elasticsearch-cluster-in-azure/</guid>
      <description>In this blog post we&amp;rsquo;ll investigate how to set up an elasticsearch cluster on Windows Azure.</description>
    </item>
    <item>
      <title>The great confusion about HTTP Patch</title>
      <link>https://michael-mckenna.com/blog/the-great-confusion-about-http-patch/</link>
      <pubDate>Fri, 20 Jun 2014 20:51:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/the-great-confusion-about-http-patch/</guid>
      <description>It&amp;rsquo;s designed to allow an API to support partial updates.</description>
    </item>
    <item>
      <title>Dependency injection for ASP.NET Web API action filters in 3 easy steps</title>
      <link>https://michael-mckenna.com/blog/dependency-injection-for-asp-net-web-api-action-filters-in-3-easy-steps/</link>
      <pubDate>Thu, 12 Jun 2014 20:51:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/dependency-injection-for-asp-net-web-api-action-filters-in-3-easy-steps/</guid>
      <description>This post looks at performing dependency injection on a WebAPI ActionFilter using Unity.</description>
    </item>
    <item>
      <title>Automatically marking required labels in ASP.NET MVC</title>
      <link>https://michael-mckenna.com/blog/automatically-marking-required-labels-in-asp-net-mvc/</link>
      <pubDate>Thu, 29 May 2014 20:51:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/automatically-marking-required-labels-in-asp-net-mvc/</guid>
      <description>I don&amp;rsquo;t want to re-implement the label HTML helper but I would like a way to inspect the model and update the label text based on the presence of the [Required] attribute.</description>
    </item>
    <item>
      <title>Implementing XML-RPC services in ASP.NET MVC</title>
      <link>https://michael-mckenna.com/blog/implementing-xml-rpc-services-in-asp-net-mvc/</link>
      <pubDate>Wed, 28 May 2014 13:51:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/implementing-xml-rpc-services-in-asp-net-mvc/</guid>
      <description>We&amp;rsquo;ll look at how we implemented XML-RPC services in ASP.NET MVC by creating a custom model binder.</description>
    </item>
    <item>
      <title>You probably don&#39;t want your development team to share a single database</title>
      <link>https://michael-mckenna.com/blog/you-probably-dont-want-your-development-team-to-share-a-single-database/</link>
      <pubDate>Wed, 14 Aug 2013 11:51:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/you-probably-dont-want-your-development-team-to-share-a-single-database/</guid>
      <description>If you&amp;rsquo;re currently working on a project where all developers are using the same centralized development database, then chances are that&amp;rsquo;s the way the project has been run since the beginning.</description>
    </item>
    <item>
      <title>The back button and browser caching</title>
      <link>https://michael-mckenna.com/blog/the-back-button-and-browser-caching/</link>
      <pubDate>Wed, 24 Apr 2013 11:40:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/the-back-button-and-browser-caching/</guid>
      <description>If the user navigated away then used the back button they would be shown the original page with the original data. They&amp;rsquo;d then think the fancy JavaScript was completely broken.</description>
    </item>
    <item>
      <title>Error handling in ASP.NET MVC Part 2: Our implementation</title>
      <link>https://michael-mckenna.com/blog/error-handling-in-asp-net-mvc-part-2-our-implementation/</link>
      <pubDate>Mon, 11 Mar 2013 02:09:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/error-handling-in-asp-net-mvc-part-2-our-implementation/</guid>
      <description>A simple exception handling strategy that enables detailed logging in MVC context but also provides support for general ASP.NET errors such as page not found exceptions.</description>
    </item>
    <item>
      <title>Error handling in ASP.NET MVC Part 1: Our options</title>
      <link>https://michael-mckenna.com/blog/error-handling-in-asp-net-mvc-part-1-our-options/</link>
      <pubDate>Mon, 04 Mar 2013 09:13:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/error-handling-in-asp-net-mvc-part-1-our-options/</guid>
      <description>This is the first post in a two part series, in this part we will look at the options available to us in ASP.NET MVC for Error Handling.</description>
    </item>
    <item>
      <title>Simple pluralisation in ASP.NET MVC</title>
      <link>https://michael-mckenna.com/blog/simple-pluralisation-in-asp-net-mvc/</link>
      <pubDate>Sun, 17 Feb 2013 20:31:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/simple-pluralisation-in-asp-net-mvc/</guid>
      <description>If you don&amp;rsquo;t bother with correct pluralisation your users will be less likely to appreciate the care you put into the rest of your application.</description>
    </item>
    <item>
      <title>Single sign out with Azure ACS</title>
      <link>https://michael-mckenna.com/blog/single-sign-out-with-azure-acs/</link>
      <pubDate>Mon, 11 Feb 2013 21:41:32 +1200</pubDate>
      <guid>https://michael-mckenna.com/blog/single-sign-out-with-azure-acs/</guid>
      <description>ACS may not directly support single sign out but you can easily log the user out of their identity provider as well as your website using this technique.</description>
    </item>
    <item>
      <title>About Me</title>
      <link>https://michael-mckenna.com/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://michael-mckenna.com/about/</guid>
      <description>&lt;p&gt;A study in imperfection; a collection of the intangible. Welcome to my website.&lt;/p&gt;&#xA;&lt;p&gt;I am Michael McKenna, a software developer in Hawke&amp;rsquo;s Bay, New Zealand. I write here about whatever takes my interest. Most often that is tech related.&lt;/p&gt;&#xA;&lt;p&gt;This is a personal website my views are my own. I write all my own words; everything you read on this site is my own.&lt;/p&gt;&#xA;&lt;p&gt;AI writes a lot of my code; most of what your computer reads was written by AI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>AI Policy</title>
      <link>https://michael-mckenna.com/ai-policy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://michael-mckenna.com/ai-policy/</guid>
      <description>&lt;h2 id=&#34;site-content&#34;&gt;Site content&lt;/h2&gt;&#xA;&lt;p&gt;Your voice is malleable, it&amp;rsquo;s forged by the words you choose. Your voice is distinct; your communication style is uniquely you. You lose what makes your words special when you reach for AI. The generated prose is dauntingly generic and vacant of thought and intent.&lt;/p&gt;&#xA;&lt;p&gt;All words on this site are my own. I have chosen each and every one of them.&lt;/p&gt;&#xA;&lt;h2 id=&#34;site-coding&#34;&gt;Site coding&lt;/h2&gt;&#xA;&lt;p&gt;I have witnessed the birth of the internet, I am a dinosaur. The new generation of tooling enabled by AI is liberating, intoxicating. I have been able to have fun again in the small moments of free time I am able to snatch from here and there.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Colophon</title>
      <link>https://michael-mckenna.com/colophon/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://michael-mckenna.com/colophon/</guid>
      <description>&lt;p&gt;This is my blog. You can view all the &lt;a href=&#34;https://github.com/myquay/michael-mckenna.com&#34;&gt;source code on GitHub here&lt;/a&gt;. It&amp;rsquo;s nothing special. It&amp;rsquo;s a bit over-engineered and it feels like I&amp;rsquo;ve spent more time creating code than writing content, but I am partial to it and enjouy the pursuit.&lt;/p&gt;&#xA;&lt;p&gt;I have been publishing since (checks notes) - look at that: February 11, 2013. I am basically a dinosaur in the tech world at this point; I consider myself fortunate to witness the awakening of the internet.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
