<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>void where_prohibited() { ... }</title><link>https://matt.kotsenas.com/</link><description>Recent content on void where_prohibited() { ... }</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Matt Kotsenas</copyright><lastBuildDate>Sun, 05 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://matt.kotsenas.com/rss.xml" rel="self" type="application/rss+xml"/><item><title>Aspire in a Sandbox</title><link>https://matt.kotsenas.com/posts/aspire-in-a-sandbox/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://matt.kotsenas.com/posts/aspire-in-a-sandbox/</guid><description>Running a .NET Aspire dev environment inside a Gondolin micro-VM.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/aspire-in-a-sandbox/feature.jpg"/></item><item><title>Sandboxing the Eager Deputy</title><link>https://matt.kotsenas.com/posts/sandboxing-the-eager-deputy/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><guid>https://matt.kotsenas.com/posts/sandboxing-the-eager-deputy/</guid><description>AI coding agents crossed from Level 2 to Level 3 autonomy. The infrastructure didn&amp;rsquo;t change with them.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/sandboxing-the-eager-deputy/feature.jpg"/></item><item><title>The Control Paradox</title><link>https://matt.kotsenas.com/posts/the-control-paradox/</link><pubDate>Thu, 05 Feb 2026 04:39:59 +0000</pubDate><guid>https://matt.kotsenas.com/posts/the-control-paradox/</guid><description>Your agent orchestrator probably gives you less control than you think.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/the-control-paradox/feature.jpg"/></item><item><title>MSBuild Traversal project best practices</title><link>https://matt.kotsenas.com/posts/traversal-project-best-practices/</link><pubDate>Fri, 07 Mar 2025 17:48:22 +0000</pubDate><guid>https://matt.kotsenas.com/posts/traversal-project-best-practices/</guid><description>Best practices for using MSBuild traversal projects</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/traversal-project-best-practices/feature.jpeg"/></item><item><title>Profiling and asynchronous initialization to improve PowerShell startup</title><link>https://matt.kotsenas.com/posts/pwsh-profiling-async-startup/</link><pubDate>Fri, 24 May 2024 20:15:11 +0000</pubDate><guid>https://matt.kotsenas.com/posts/pwsh-profiling-async-startup/</guid><description>Initialize your PowerShell profile asynchronously using idle events</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/pwsh-profiling-async-startup/feature.jpeg"/></item><item><title>Simplify MSBuild Directory.Build.props and .targets files with vertical slices</title><link>https://matt.kotsenas.com/posts/msbuild-targets-with-vertical-slices/</link><pubDate>Thu, 14 Sep 2023 00:07:20 +0000</pubDate><guid>https://matt.kotsenas.com/posts/msbuild-targets-with-vertical-slices/</guid><description>Use vertical slices / features as an organization mechanism and make Directory.Build.props and .targets files easier to work with</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/msbuild-targets-with-vertical-slices/feature.jpg"/></item><item><title>Implementing IOptionsFactory&lt;T> to create custom options instances</title><link>https://matt.kotsenas.com/posts/implementing-ioptionsfactory-to-create-options-instances/</link><pubDate>Thu, 15 Jun 2023 17:10:21 +0000</pubDate><guid>https://matt.kotsenas.com/posts/implementing-ioptionsfactory-to-create-options-instances/</guid><description>Recently, I was writing a .NET console app to integrate with a third-party library and had an opportunity to use the IOptions pattern. However, the settings object didn&amp;rsquo;t have a public, parameterless constructor. Here&amp;rsquo;s how I used IOptionsFactory to support these types of options classes&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/implementing-ioptionsfactory-to-create-options-instances/feature.png"/></item><item><title>Running post setup commands on Azure VMs with SetupComplete2</title><link>https://matt.kotsenas.com/posts/azure-setupcomplete2/</link><pubDate>Tue, 12 May 2020 04:19:48 +0000</pubDate><guid>https://matt.kotsenas.com/posts/azure-setupcomplete2/</guid><description>Trying to enable the Administrator account on a custom VM image for Azure lead down a rabbit hole</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/azure-setupcomplete2/feature.jpg"/></item><item><title>Programmatically skip / ignore tests in MSTest v2</title><link>https://matt.kotsenas.com/posts/ignoreif-mstest/</link><pubDate>Wed, 20 Mar 2019 17:38:20 +0000</pubDate><guid>https://matt.kotsenas.com/posts/ignoreif-mstest/</guid><description>Create a custom attribute to extend MSTest to programmatically skip / ignore tests based on factors like OS or framework version</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/ignoreif-mstest/feature.png"/></item><item><title>A 2017 Squamish 50/50 race report</title><link>https://matt.kotsenas.com/posts/squamish-2017-race-report/</link><pubDate>Tue, 19 Dec 2017 15:02:01 +0000</pubDate><guid>https://matt.kotsenas.com/posts/squamish-2017-race-report/</guid><description>Team RunRun has a tradition of writing race reports, both as an opportunity for reflection, and to share lessons learned with other runners. I decided to write a longer-than-usual report because in planning for this race I felt there wasn&amp;rsquo;t a lot of information about the Squamish races available.</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/squamish-2017-race-report/feature.jpg"/></item><item><title>Combining cron expressions in Azure WebJobs TimerTriggers</title><link>https://matt.kotsenas.com/posts/combining-cronschedules-in-webjobs/</link><pubDate>Wed, 09 Aug 2017 20:32:27 +0000</pubDate><guid>https://matt.kotsenas.com/posts/combining-cronschedules-in-webjobs/</guid><description>Azure supports using cron expressions to trigger WebJobs, but each job can have only a single cron schedule. Learn how to use the TimerSchedule class to create custom schedules and combine cron expressions</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/combining-cronschedules-in-webjobs/feature.png"/></item><item><title>Generating WPA Regions of Interest from performance marks</title><link>https://matt.kotsenas.com/posts/generate-wpa-regions-from-performance-marks/</link><pubDate>Wed, 26 Jul 2017 23:57:58 +0000</pubDate><guid>https://matt.kotsenas.com/posts/generate-wpa-regions-from-performance-marks/</guid><description>Automate creating WPA Regions of Interest files using PowerShell</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/generate-wpa-regions-from-performance-marks/feature.png"/></item><item><title>Using the Windows Performance Toolkit to analyze performance marks on Edge and Chrome</title><link>https://matt.kotsenas.com/posts/using-wpa-to-analyze-performance-marks/</link><pubDate>Mon, 24 Jul 2017 18:53:27 +0000</pubDate><guid>https://matt.kotsenas.com/posts/using-wpa-to-analyze-performance-marks/</guid><description>Learn how to use the Windows Performance Toolkit to drill into web app scenarios using performance.mark</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/using-wpa-to-analyze-performance-marks/feature.png"/></item><item><title>The curious case of PowerShell, Castle DynamicProxy and indexers</title><link>https://matt.kotsenas.com/posts/powershell-dynamicproxy-indexers/</link><pubDate>Tue, 19 Jul 2016 23:33:34 +0000</pubDate><guid>https://matt.kotsenas.com/posts/powershell-dynamicproxy-indexers/</guid><description>I seem to have hit some sort of edge case between the Castle DynamicProxy object and the binding / dispatching of method calls in PowerShell.</description></item><item><title>HTTP &amp; HTTPS in Service Fabric Web API</title><link>https://matt.kotsenas.com/posts/https-in-service-fabric-web-api/</link><pubDate>Wed, 27 Apr 2016 01:19:19 +0000</pubDate><guid>https://matt.kotsenas.com/posts/https-in-service-fabric-web-api/</guid><description>Updating the boilerplate code in a Service Fabric Web API to support HTTP and HTTPS endpoints simultaneously</description></item><item><title>Running docpad on Azure in 2015</title><link>https://matt.kotsenas.com/posts/running-docpad-on-azure-in-2015/</link><pubDate>Wed, 23 Dec 2015 14:19:19 +0000</pubDate><guid>https://matt.kotsenas.com/posts/running-docpad-on-azure-in-2015/</guid><description>I really needed to freshen up the site. It was created hastily and really didn&amp;rsquo;t follow best practices&amp;hellip;</description></item><item><title>New blog post over at Building Windows 8 blog</title><link>https://matt.kotsenas.com/posts/windows-8-blog-performance-lab/</link><pubDate>Thu, 16 Feb 2012 20:50:54 +0000</pubDate><guid>https://matt.kotsenas.com/posts/windows-8-blog-performance-lab/</guid><description>Exciting times! The Building Windows 8 blog recently published a post written by myself and my colleagues&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/windows-8-blog-performance-lab/feature.jpg"/></item><item><title>A tech demo showing canvas performance and quality in IE 10</title><link>https://matt.kotsenas.com/posts/ie10-graphics-performance-and-quality-demo/</link><pubDate>Wed, 29 Jun 2011 20:42:00 +0000</pubDate><guid>https://matt.kotsenas.com/posts/ie10-graphics-performance-and-quality-demo/</guid><description>In IE 10 we&amp;rsquo;re focusing on performance and quality of our canvas implementation&amp;hellip;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://matt.kotsenas.com/posts/ie10-graphics-performance-and-quality-demo/feature.png"/></item><item><title>About</title><link>https://matt.kotsenas.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://matt.kotsenas.com/about/</guid><description>&lt;p>Hi! I&amp;rsquo;m a software engineer living in Seattle, WA (originally from Pittsburgh, PA). I&amp;rsquo;m an engineer for Microsoft Defender and my job is to make the internet safer.&lt;/p>

&lt;h2 class="relative group">Get in Touch
 &lt;div id="get-in-touch" class="anchor">&lt;/div>
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#get-in-touch" aria-label="Anchor">#&lt;/a>
 &lt;/span>
 
&lt;/h2>
&lt;p>&lt;span class="relative inline-block align-text-bottom icon">&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512">&lt;path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/>&lt;/svg>&lt;/span> &lt;a href="https://github.com/MattKotsenas" target="_blank" rel="noreferrer">GitHub&lt;/a>&lt;/p></description></item><item><title>Photos</title><link>https://matt.kotsenas.com/photos/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://matt.kotsenas.com/photos/</guid><description>&lt;h3 class="relative group">Tanzania Safari (Jan 2013)
 &lt;div id="tanzania-safari-jan-2013" class="anchor">&lt;/div>
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none">
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#tanzania-safari-jan-2013" aria-label="Anchor">#&lt;/a>
 &lt;/span>
 
&lt;/h3>
&lt;p>Amy and I had the wonderful opportunity to visit Arusha, Tanzania, followed by a safari in the Ngorogoro crater and the Serengeti. Below are some of our favorites from the trip. head over to &lt;a href="https://www.flickr.com/photos/93796640@N08/albums/72157632908565468" target="_blank" rel="noreferrer">flickr&lt;/a> for the full album.&lt;/p>
&lt;div class="galleria">&lt;/div>
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js">&lt;/script>
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/galleria/1.4.2/galleria.min.js">&lt;/script>
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/galleria/1.4.2/plugins/flickr/galleria.flickr.min.js">&lt;/script>
&lt;script>
$(function () {
 Galleria.loadTheme('//cdnjs.cloudflare.com/ajax/libs/galleria/1.4.2/themes/classic/galleria.classic.js');
 Galleria.configure({
 responsive: true,
 height: 1
 });

 Galleria.run('.galleria', {
 flickr: 'set:72157632908565468',
 flickrOptions: {
 sort: 'date-posted-asc',
 max: 100
 }
 });
});
&lt;/script></description></item></channel></rss>