﻿<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
	<channel>
		<title>Peter Ritchie's Blog</title>
		<link>http://blog.peterritchie.com/</link>
		<description>Peter Ritchie</description>
		<copyright>2026</copyright>
		<pubDate>Mon, 27 Apr 2026 17:36:44 GMT</pubDate>
		<lastBuildDate>Mon, 27 Apr 2026 17:36:44 GMT</lastBuildDate>
		<item>
			<title>Things That Caught My Attention Last Week - April 26</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-26</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-26</guid>
			<pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source

## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://karoxi.dev/blog/kafka_not_an_event_store?utm_source=blog.peterritchie.com"&gt;Kafka Is Not An Event Store&lt;/a&gt; by karoxi&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/just-use-postgres-as-a-queue/?utm_source=blog.peterritchie.com"&gt;Just Use Postgres as a Queue?&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;!--## GitHib

## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/resharper-made-vs-code-a-real-option-for-my-net-work/?utm_source=blog.peterritchie.com"&gt;ReSharper Made VS Code a Real Option for My .NET Work&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/display-project-attribute-c-319d?utm_source=blog.peterritchie.com"&gt;Display project Attribute (C#)&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/whats-new-for-dotnet-in-ubuntu-2604/?utm_source=blog.peterritchie.com"&gt;What's new for .NET in Ubuntu 26.04&lt;/a&gt; by Richard Lander&lt;/p&gt;
&lt;p&gt;&lt;a href="https://barretblake.dev/posts/development/2026/04/give-dotnet-its-props/?utm_source=blog.peterritchie.com"&gt;Give .NET Its Props - Central Package Management&lt;/a&gt; by Barret Blake&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/04/22/like-vertical-slice-architecture-meet-wolverine-http/?utm_source=blog.peterritchie.com"&gt;Like Vertical Slice Architecture? Meet Wolverine.Http!&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-10-0-7-oob-security-update/?utm_source=blog.peterritchie.com"&gt;.NET 10.0.7 Out-of-Band Security Update&lt;/a&gt; by Rahul Bhandari (MSFT)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/04/21/ef-core-is-better-with-wolverine/?utm_source=blog.peterritchie.com"&gt;EF Core is Better with Wolverine – The Shade Tree Developer&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/removingbyte-array-allocations-in-dotnet-framework-using-readonlyspan-t/?utm_source=blog.peterritchie.com"&gt;Removing byte[] allocations in .NET Framework using ReadOnlySpan&lt;T&gt;&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/04/20/customizing-the-wolverine-code-generation-model/?utm_source=blog.peterritchie.com"&gt;Customizing the Wolverine Code Generation Model – The Shade Tree Developer&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

 --&gt;
&lt;h2 id="project-managementadministration"&gt;Project Management/Administration&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://agilepainrelief.com/blog/product-management-and-genai/?utm_source=blog.peterritchie.com"&gt;Product Management with GenAI: What Changes and What Doesn't&lt;/a&gt; by Mark Levison&lt;/p&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apievangelist.com/blog/2026/04/24/with-api-knowledge-comes-great-power/?utm_source=blog.peterritchie.com"&gt;With API Knowledge Comes Great Power&lt;/a&gt; by Kin Lane&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/?utm_source=blog.peterritchie.com"&gt;Azure MCP Server now available as an MCP Bundle (.mcpb)&lt;/a&gt; by Victor Colin Amador&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/axios-npm-supply-chain-compromise-guidance-for-azure-pipelines-customers/?utm_source=blog.peterritchie.com"&gt;Axios npm Supply Chain Compromise – Guidance for Azure Pipelines Customers&lt;/a&gt; by Josef Sin&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/?utm_source=blog.peterritchie.com"&gt;Write azd hooks in Python, JavaScript, TypeScript, or .NET&lt;/a&gt; by Kristen Womack&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/7-tips-to-optimize-azure-cosmos-db-costs-for-ai-and-agentic-workloads/?utm_source=blog.peterritchie.com"&gt;7 tips to optimize Azure Cosmos DB costs for AI and agentic workloads&lt;/a&gt; by Michal Toiba&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/optimizing-git-policy-management-at-scale/?utm_source=blog.peterritchie.com"&gt;Optimizing Git policy management at scale&lt;/a&gt; by Azat Galiev&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-sdk-release-april-2026/?utm_source=blog.peterritchie.com"&gt;Azure SDK Release (April 2026)&lt;/a&gt; by Ronnie Geraghty&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/general-availability-dynamic-data-masking-for-azure-cosmos-db/?utm_source=blog.peterritchie.com"&gt;General Availability: Dynamic Data Masking for Azure Cosmos DB&lt;/a&gt; by Sudhanshu Khera&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/azure-devops-mcp-server-april-update/?utm_source=blog.peterritchie.com"&gt;Azure DevOps MCP Server April Update&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/the-test-pyramid-is-a-lie-and-what-i-do-instead?utm_source=blog.peterritchie.com"&gt;The Test Pyramid Is a Lie (and What I Do Instead)&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/open-source/git/highlights-from-git-2-54/?utm_source=blog.peterritchie.com"&gt;Highlights from Git 2.54&lt;/a&gt; by Taylor Blau&lt;/p&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.forbes.com/sites/jasonwingard/2026/04/23/vibe-coding-will-break-your-company/?utm_source=blog.peterritchie.com"&gt;Vibe Coding Will Break Your Company&lt;/a&gt; by Dr. Jason Wingard&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/the-ai-great-leap-forward-a-warning?utm_source=blog.peterritchie.com"&gt;The AI Great Leap Forward (a warning)&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/vibing-harness-and-ooda-loop?utm_source=blog.peterritchie.com"&gt;Vibing, Harness and OODA loop&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ardalis.com/setting-up-claude-code-agent-teams-with-wsl2-and-tmux-on-windows/?utm_source=blog.peterritchie.com"&gt;Setting Up Claude Code Agent Teams With Wsl2 and Tmux on Windows&lt;/a&gt; by Ardalis (Steve Smith)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.josephguadagno.net/2026/04/20/are-we-the-parents-in-the-ai-agent-relationship?utm_source=blog.peterritchie.com"&gt;Are we the parents in the AI Agent relationship? The drama continues&lt;/a&gt; by Joseph Guadagno&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/?utm_source=blog.peterritchie.com"&gt;GitHub Copilot meets Azure Developer CLI: AI-assisted project setup and error troubleshooting&lt;/a&gt; by Kristen Womack&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/news-insights/company-news/changes-to-github-copilot-individual-plans/?utm_source=blog.peterritchie.com"&gt;Changes to GitHub Copilot Individual plans&lt;/a&gt; by Joe Binder&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

--&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - April 19</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-19</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-19</guid>
			<pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/security/application-security/how-exposed-is-your-code-find-out-in-minutes-for-free/?utm_source=blog.peterritchie.com"&gt;How exposed is your code? Find out in minutes—for free&lt;/a&gt; by Dorothy Pearce, Eric Tooley&lt;/p&gt;
&lt;!-- ## Open-source

## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/yoda-principle-for-better-integrations?utm_source=blog.peterritchie.com"&gt;Yoda Principle for better integrations&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/evaluating-cron-and-rrule-expressions-in-dotnet.htm?utm_source=blog.peterritchie.com"&gt;Evaluating CRON and RRule expressions in .NET&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/why-i-switched-to-primary-constructors-for-di-in-csharp?utm_source=blog.peterritchie.com"&gt;Why I Switched to Primary Constructors for DI in C#&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;h2 id="githib"&gt;GitHib&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/news-insights/company-news/bringing-more-transparency-to-githubs-status-page/?utm_source=blog.peterritchie.com"&gt;Bringing more transparency to GitHub’s status page&lt;/a&gt; by Jakub Oleksy&lt;/p&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.poppastring.com/blog/its-time-for-a-visual-studio-upgrade?utm_source=blog.peterritchie.com"&gt;It's Time for a Visual Studio Upgrade&lt;/a&gt; by Mark Downie&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.josephguadagno.net/2024/07/13/docker-volume-location-on-windows?utm_source=blog.peterritchie.com"&gt;Docker Volume Location on Windows&lt;/a&gt; by Joseph Guadagno&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/from-ai-to-net-20-vs-live-las-vegas-sessions-you-can-watch-now/?utm_source=blog.peterritchie.com"&gt;From AI to .NET: 20 VS Live! Las Vegas Sessions You Can Watch Now&lt;/a&gt; by Jim Harrer&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/pin-clustering-in-dotnet-maui-maps/?utm_source=blog.peterritchie.com"&gt;Pin Clustering in .NET MAUI Maps&lt;/a&gt; by David Ortinau&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/04/15/critter-stack-sample-projects-and-our-curated-ai-skills/?utm_source=blog.peterritchie.com"&gt;Critter Stack Sample Projects and Our Curated AI Skills&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/stop-hunting-bugs-meet-the-new-visual-studio-debugger-agent/?utm_source=blog.peterritchie.com"&gt;Stop Hunting Bugs: Meet the New Visual Studio Debugger Agent Workflow&lt;/a&gt; by Harshada Hole&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-11-preview-3/?utm_source=blog.peterritchie.com"&gt;.NET 11 Preview 3 is now available!&lt;/a&gt; by .NET Team&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/htmxrazor-v2-0-0-platform-and-dx/?utm_source=blog.peterritchie.com"&gt;htmxRazor v2.0.0: Platform and DX&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/suppressing-roslyn-analyzer-warnings-programmatically-using-diagnosticsuppressor.htm?utm_source=blog.peterritchie.com"&gt;Suppressing Roslyn Analyzer Warnings Programmatically using DiagnosticSuppressor&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/newsletter/how-do-you-paywall-an-api/?utm_source=blog.peterritchie.com"&gt;How DO you Paywall an API?&lt;/a&gt; by Alexander Karan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://apievangelist.com/2026/04/16/an-api-consumer-interoperability-mindset/?utm_source=blog.peterritchie.com"&gt;An API Consumer Interoperability Mindset&lt;/a&gt; by Kin Lane&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/one-click-security-scanning-and-org-wide-alert-triage-come-to-advanced-security/?utm_source=blog.peterritchie.com"&gt;One-click security scanning and org-wide alert triage come to Advanced Security&lt;/a&gt; by Laura Jiang&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/?utm_source=blog.peterritchie.com"&gt;Stop juggling package managers—just run &lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; by Kristen Womack&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20260415-00/?p=112235?utm_source=blog.peterritchie.com"&gt;Why is there a long delay between a thread exiting and the Wait­For­Single­Object returning?&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/testing-needs-a-seam-not-an-interface/?utm_source=blog.peterritchie.com"&gt;Testing Needs a Seam, Not an Interface&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ardalis.com/how-software-developers-fail/?utm_source=blog.peterritchie.com"&gt;How Software Developers Fail&lt;/a&gt; by Ardalis (Steve Smith)&lt;/p&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://ardalis.com/optimizing-ai-agents-with-progressive-disclosure/?utm_source=blog.peterritchie.com"&gt;Optimizing AI Agents with Progressive Disclosure&lt;/a&gt; by Ardalis (Steve Smith)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/?utm_source=blog.peterritchie.com"&gt;Azure MCP tools now ship built into Visual Studio 2022 — no extension required&lt;/a&gt; by Yun Jung Choi&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/running-ai-agents-with-customized-templates-in-docker-sandbox/?utm_source=blog.peterritchie.com"&gt;Running AI agents with customized templates using docker sandbox&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/a-useful-definition-at-the-right?utm_source=blog.peterritchie.com"&gt;A useful definition at the right time&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

--&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - April 12</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-12</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-12</guid>
			<pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source

## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/passive-aggresive-event?utm_source=blog.peterritchie.com"&gt;Anti-patterns in event modelling - Passive-Aggressive Events&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/why-clean-code-is-killing-your-velocity/?utm_source=blog.peterritchie.com"&gt;Why &amp;quot;Clean Code&amp;quot; is Killing Your Velocity&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/csharp-15-union-types/?utm_source=blog.peterritchie.com"&gt;Explore union types in C# 15&lt;/a&gt; by Bill Wagner&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/suppressing-roslyn-analyzer-warnings-programmatically-using-diagnosticsuppressor.htm?utm_source=blog.peterritchie.com"&gt;Suppressing Roslyn Analyzer Warnings Programmatically using DiagnosticSuppressor&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/04/12/the-fastest-possible-http-queries-with-marten/?utm_source=blog.peterritchie.com"&gt;The Fastest Possible HTTP Queries with Marten&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/implementing-the-saga-pattern-with-wolverine?utm_source=blog.peterritchie.com"&gt;Implementing the Saga Pattern With Wolverine&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://barretblake.dev/posts/development/2026/04/ef-migrations-best-practices/?utm_source=blog.peterritchie.com"&gt;EF Core Migrations Best Practices&lt;/a&gt; by Barret Blake&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/how-to-delete-and-update-millions-of-rows-in-ef-core-without-loading-a-single-entity/?utm_source=blog.peterritchie.com"&gt;How to Delete and Update Millions of Rows in EF Core Without Loading a Single Entity&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/aspnet-core-2-3-end-of-support/?utm_source=blog.peterritchie.com"&gt;ASP.NET Core 2.3 end of support announcement&lt;/a&gt; by Daniel Roth&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/take-full-control-of-your-floating-windows-in-visual-studio/?utm_source=blog.peterritchie.com"&gt;Take full control of your floating windows in Visual Studio&lt;/a&gt; by Mads Kristensen&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apievangelist.com/2026/04/08/you-see-a-spec-i-see-a-common-language-and-a-common-understanding/?utm_source=blog.peterritchie.com"&gt;You See a Spec, I See a Common Language, and a Common Understanding&lt;/a&gt; by Kin Lane&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/?utm_source=blog.peterritchie.com"&gt;Announcing Azure MCP Server 2.0 Stable Release for Self-Hosted Agentic Cloud Automation&lt;/a&gt; by Sandeep Sen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/scalable-ai-with-azure-cosmos-db-tredence-intelligent-document-processing-idp-march-2026/?utm_source=blog.peterritchie.com"&gt;Scalable AI with Azure Cosmos DB: Tredence Intelligent Document Processing (IDP)&lt;/a&gt; by Manish Sharma&lt;/p&gt;
&lt;!--## Software Development

 ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.poppastring.com/blog/old-protocols-new-pipes?utm_source=blog.peterritchie.com"&gt;Old Protocols, New Pipes&lt;/a&gt; by Mark Downie&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hbr.org/2026/04/to-succeed-with-ai-youve-got-to-nail-the-basics?utm_source=blog.peterritchie.com"&gt;To Succeed with AI, You’ve Got to Nail the Basics&lt;/a&gt; by Thomas C. Redman&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.techcentral.ie/forget-ai-slop-were-entering-our-generative-smog-era/?utm_source=blog.peterritchie.com"&gt;Forget AI slop. We’re entering our generative smog era&lt;/a&gt; by Niall Kitson&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=yO_TH3R8KMw?utm_source=blog.peterritchie.com"&gt;On .NET Live - AI offers benefits, but at what cost? - YouTube&lt;/a&gt; by Steve Smith&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/04/13/secret-agentic-ai/?utm_source=blog.peterritchie.com"&gt;Secret agentic AI&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.wildermuth.com/2026/04/12/ai-is-it-that-intelligent/?utm_source=blog.peterritchie.com"&gt;How Intelligent is AI?&lt;/a&gt; by Shawn Wildermuth&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

--&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - April 5</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-5</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-april-5</guid>
			<pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security
 --&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/security/supply-chain-security/securing-the-open-source-supply-chain-across-github/?utm_source=blog.peterritchie.com"&gt;Securing the open source supply chain across GitHub&lt;/a&gt; by Zachary Steindler&lt;/p&gt;
&lt;!-- ## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/the-next-big-thing-is-small-redux?utm_source=blog.peterritchie.com"&gt;The Next Big Thing Is Small (Redux)&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/csharp-15-union-types/?utm_source=blog.peterritchie.com"&gt;Explore union types in C# 15&lt;/a&gt; by Bill Wagner&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=WOSrI2cgk10?utm_source=blog.peterritchie.com"&gt;Chris Woodruff and Joe Guadagno on morespeakers com - YouTube&lt;/a&gt; by David Giard&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=CGRGun-Bw40?utm_source=blog.peterritchie.com"&gt;Replace Switch Statements with the Strategy Pattern in C# - YouTube&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/accessing-files-from-the-action-repository-in-a-github-composite-action.htm?utm_source=blog.peterritchie.com"&gt;Accessing files from the action repository in a GitHub Composite Action&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/implementing-the-inbox-pattern-for-reliable-message-consumption?utm_source=blog.peterritchie.com"&gt;Implementing the Inbox Pattern for Reliable Message Consumption&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/04/01/multi-tenancy-in-the-critter-stack/?utm_source=blog.peterritchie.com"&gt;Multi-Tenancy in the Critter Stack&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://barretblake.dev/posts/development/2026/04/fastendpoints-vs-minimal-apis/?utm_source=blog.peterritchie.com"&gt;FastEndpoints vs ASP.NET Minimal APIs in 2026&lt;/a&gt; by Barret Blake&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ardalis.com/dotnetconf-most-popular-sessions-tool/?utm_source=blog.peterritchie.com"&gt;.NET Conf Most Popular Sessions Tool&lt;/a&gt; by Ardalis (Steve Smith)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/?utm_source=blog.peterritchie.com"&gt;Visual Studio March Update - Build Your Own Custom Agents&lt;/a&gt; by Mark Downie&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/configuring-contextual-options-with-microsoft-extensions-options-contextual/?utm_source=blog.peterritchie.com"&gt;Configuring contextual options with Microsoft.Extensions.Options.Contextual&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/url-pattern-matching-in-dotnet.htm?utm_source=blog.peterritchie.com"&gt;URL Pattern Matching in .NET&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

 --&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/improving-the-markdown-editor-for-work-items/?utm_source=blog.peterritchie.com"&gt;Improving the Markdown Editor for Work Items&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;!-- ## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

## REST/APIs
 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/?utm_source=blog.peterritchie.com"&gt;Azure Developer CLI (azd) - March 2026: Run and Debug AI Agents Locally, GitHub Copilot Integration, &amp;amp; Container App Jobs&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.jsnover.com/blog/2026/03/13/microsoft-hasnt-had-a-coherent-gui-strategy-since-petzold/?utm_source=blog.peterritchie.com"&gt;Microsoft Hasn’t Had a Coherent GUI Strategy Since Petzold&lt;/a&gt; by Jeffrey Snover&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.newardassociates.com/blog/2026/titit-touching-code.html?utm_source=blog.peterritchie.com"&gt;Things I Think I Think... About Touching Code&lt;/a&gt; by Ted Neward&lt;/p&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://futurism.com/artificial-intelligence/wikipedia-editors-ban-ai-content?utm_source=blog.peterritchie.com"&gt;Wikipedia Editors Tried and Tried to Work With AI Content, Eventually Realized It Was Total Trash and Banned It Entirely&lt;/a&gt; by Frank Landymore&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/the-keyboard-was-never-the-bottleneck?utm_source=blog.peterritchie.com"&gt;The keyboard was never the bottleneck&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/run-multiple-agents-at-once-with-fleet-in-copilot-cli/?utm_source=blog.peterritchie.com"&gt;Run multiple agents at once with /fleet in Copilot CLI&lt;/a&gt; by Matt Nigh, Brian LaFlamme&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/agent-driven-development-in-copilot-applied-science/?utm_source=blog.peterritchie.com"&gt;Agent-driven development in Copilot Applied Science&lt;/a&gt; by Tyler McGoffin&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

--&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention The Last Two Weeks - March 29</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-29</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-29</guid>
			<pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://arstechnica.com/security/2026/03/supply-chain-attack-using-invisible-code-hits-github-and-other-repositories/?utm_source=blog.peterritchie.com"&gt;Supply-chain attack using invisible code hits GitHub and other repositories&lt;/a&gt; by Dan Goodin&lt;/p&gt;
&lt;p&gt;&lt;a href="https://socket.dev/blog/trivy-under-attack-again-github-actions-compromise?utm_source=blog.peterritchie.com"&gt;Trivy Under Attack Again: Widespread GitHub Actions Tag Comp...&lt;/a&gt; by Philipp Burckhardt&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.adexchanger.com/data-driven-thinking/the-privacy-zealots-were-right-ad-techs-infrastructure-was-always-a-risk/?utm_source=blog.peterritchie.com"&gt;The Privacy ‘Zealots’ Were Right: Ad Tech’s Infrastructure Was Always A Risk&lt;/a&gt; by AdExchanger Guest Columnist&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.howtogeek.com/passkeys-were-supposed-to-replace-passwords-but-theyre-failing-for-the-most-predictable-reason/?utm_source=blog.peterritchie.com"&gt;Passkeys were supposed to replace passwords, but they're failing for the most predictable reason&lt;/a&gt; by Sydney Butler&lt;/p&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/security/supply-chain-security/investing-in-the-people-shaping-open-source-and-securing-the-future-together/?utm_source=blog.peterritchie.com"&gt;Investing in the people shaping open source and securing the future together&lt;/a&gt; by Kevin Crosby&lt;/p&gt;
&lt;!-- ## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/the-one-where-oskar-explains-example?utm_source=blog.peterritchie.com"&gt;The one where Oskar explains Example Mapping&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vladikk.com/2026/03/30/solid-principles-ai-era/?utm_source=blog.peterritchie.com"&gt;Are SOLID Principles Still Relevant in the AI Era?&lt;/a&gt; by Vlad Khononov&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/is-event-driven-architecture-overkill-for-most-apps/?utm_source=blog.peterritchie.com"&gt;Is Event-Driven Architecture Overkill for Most Apps?&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=9zcg206kEoI&amp;amp;utm_source=blog.peterritchie.com"&gt;Make your programs run faster with one click in Visual Studio 2026 - YouTube&lt;/a&gt; by Microsoft Visual Studio&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/aspnet-core-startup-validation-part-4-597d?utm_source=blog.peterritchie.com"&gt;ASP.NET Core startup validation part 4y&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/htmxrazor-v1-4-0-sse-streaming-multi-step-wizard-and-optimistic-ui/?utm_source=blog.peterritchie.com"&gt;htmxRazor v1.4.0: SSE Streaming, Multi-step Wizard, and Optimistic UI&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/03/22/announcing-polecat-event-sourcing-with-sql-server/?utm_source=blog.peterritchie.com"&gt;Announcing Polecat: Event Sourcing with SQL Server&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.tabsoverspaces.com/233965-fbnetexternalengine-7-0-released?utm_source=blog.peterritchie.com"&gt;FbNetExternalEngine 7.0 released&lt;/a&gt; by Jiří Činčura&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/scaling-signalr-with-redis-backplane?utm_source=blog.peterritchie.com"&gt;Scaling SignalR With a Redis Backplane&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/accelerating-dotnet-maui-with-ai-agents/?utm_source=blog.peterritchie.com"&gt;Accelerating .NET MAUI Development with AI Agents&lt;/a&gt; by David Ortinau&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/03/17/re-sequencer-and-global-message-partitioning-in-wolverine/?utm_source=blog.peterritchie.com"&gt;Re-Sequencer and Global Message Partitioning in Wolverine&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/rt-assistant-a-realtime-multiagent-voice-bot-using-dotnet-and-open-ai-api/?utm_source=blog.peterritchie.com"&gt;RT.Assistant: A Multi-Agent Voice Bot Using .NET and OpenAI&lt;/a&gt; by Faisal Waris&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/url-pattern-matching-in-dotnet.htm?utm_source=blog.peterritchie.com"&gt;URL Pattern Matching in .NET&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://barretblake.dev/posts/development/2026/03/ef-core-global-query-filters/?utm_source=blog.peterritchie.com"&gt;EF Core Global Query Filters - The Soft Delete Pattern You Should Be Using&lt;/a&gt; by Barret Blake&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/newsletter/openapi-tools-is-growing/?utm_source=blog.peterritchie.com"&gt;OpenAPI.tools is Growing&lt;/a&gt; by Alexander Karan&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview/?utm_source=blog.peterritchie.com"&gt;Azure DevOps Remote MCP Server (public preview)&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/march-patches-for-azure-devops-server-4/?utm_source=blog.peterritchie.com"&gt;March Patches for Azure DevOps Server&lt;/a&gt; by Gloridel Morales&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-run-invoke/?utm_source=blog.peterritchie.com"&gt;Azure Developer CLI (azd): Run and test AI agents locally with azd&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/introducing-the-azure-cosmos-db-plugin-for-cursor/?utm_source=blog.peterritchie.com"&gt;Introducing the Azure Cosmos DB Plugin for Cursor&lt;/a&gt; by Sajeetharan Sinnathurai&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-sdk-release-march-2026/?utm_source=blog.peterritchie.com"&gt;Azure SDK Release (March 2026)&lt;/a&gt; by Ronnie Geraghty&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/03/30/programming-languages-for-ai/?utm_source=blog.peterritchie.com"&gt;Programming languages for AI&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/news-insights/product-news/whats-coming-to-our-github-actions-2026-security-roadmap/?utm_source=blog.peterritchie.com"&gt;What's coming to our GitHub Actions 2026 security roadmap&lt;/a&gt; by Greg Ose, Stephen Glass&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/css-todometer/?utm_source=blog.peterritchie.com"&gt;A history of styling choices leading to native CSS&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.josephguadagno.net/2026/03/21/squad-tips-tricks-and-lessons-learned?utm_source=blog.peterritchie.com"&gt;Squad: Tips, Tricks, and Lessons Learned&lt;/a&gt; by Joseph Guadagno&lt;/p&gt;
&lt;p&gt;&lt;a href="https://futurism.com/artificial-intelligence/ai-coding-error-debt?utm_source=blog.peterritchie.com"&gt;A Grim Truth Is Emerging in Employers' AI Experiments&lt;/a&gt; by Victor Tangermann&lt;/p&gt;
&lt;p&gt;&lt;a href="https://futurism.com/future-society/ai-bubble-billionaires-burst?utm_source=blog.peterritchie.com"&gt;Tech Billionaires Are Quietly Rooting for AI Bubble to Collapse&lt;/a&gt; by Joe Wilkins&lt;/p&gt;
&lt;p&gt;&lt;a href="https://getwired.com/2026/03/16/ai-is-sea-monkeys/?utm_source=blog.peterritchie.com"&gt;AI is Sea Monkeys&lt;/a&gt; by Wes Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/unlocking-the-full-power-of-copilot-code-review-master-your-instructions-files/?utm_source=blog.peterritchie.com"&gt;Unlocking the full power of Copilot code review: Master your instructions files&lt;/a&gt; by Ria Gopu&lt;/p&gt;
&lt;p&gt;&lt;a href="https://trailheadtechnology.com/with-ai-writing-code-what-are-developers-for/?utm_source=blog.peterritchie.com"&gt;With AI Writing Code, What Are Developers For?&lt;/a&gt; by J. Tower&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ardalis.com/ai-benefits---but-at-what-cost/?utm_source=blog.peterritchie.com"&gt;AI Benefits - But at What Cost?&lt;/a&gt; by Ardalis (Steve Smith)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/open-source/maintainers/rethinking-open-source-mentorship-in-the-ai-era/?utm_source=blog.peterritchie.com"&gt;Rethinking open source mentorship in the AI era&lt;/a&gt; by Abigail Cabunoc Mayes&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/?utm_source=blog.peterritchie.com"&gt;Remote MCP Server preview in Microsoft Foundry&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/how-squad-runs-coordinated-ai-agents-inside-your-repository/?utm_source=blog.peterritchie.com"&gt;How Squad runs coordinated AI agents inside your repository&lt;/a&gt; by Brady Gaster&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/coding-isnt-the-hard-part/?utm_source=blog.peterritchie.com"&gt;Coding Isn’t the Hard Part&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/interactive-rubber-ducking-with-genai?utm_source=blog.peterritchie.com"&gt;Interactive Rubber Ducking with GenAI&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/weizenbaums-four-warnings-for-the?utm_source=blog.peterritchie.com"&gt;Weizenbaum’s Four Warnings for the AI Era&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sadukie.com/2026/03/24/is-ai-a-yes-man.html?utm_source=blog.peterritchie.com"&gt;Is AI a Yes Man?&lt;/a&gt; by sadukie&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

--&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - March 15</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-15</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-15</guid>
			<pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

 --&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/htmxrazor-v1-3-0-data-table-accessibility-and-modern-css/?utm_source=blog.peterritchie.com"&gt;htmxRazor v1.3.0: Data Table, Accessibility, and Modern CSS&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;!-- ## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/implementing-rfc-compliant-http-caching-for-httpclient-in-dotnet.htm?utm_source=blog.peterritchie.com"&gt;Implementing RFC-compliant HTTP caching for HttpClient in .NET&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/03/15/validation-options-in-wolverine/?utm_source=blog.peterritchie.com"&gt;Validation Options in Wolverine&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/optimizing-bulk-database-updates-in-dotnet?utm_source=blog.peterritchie.com"&gt;Optimizing Bulk Database Updates in .NET: From Naive to Lightning-Fast&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/modernize-dotnet-anywhere-with-ghcp/?utm_source=blog.peterritchie.com"&gt;Modernize .NET Anywhere with GitHub Copilot&lt;/a&gt; by Mika Dumont&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-10-0-5-oob-release-macos-debugger-fix/?utm_source=blog.peterritchie.com"&gt;.NET 10.0.5 Out-of-Band Release - macOS Debugger Fix&lt;/a&gt; by Rahul Bhandari (MSFT)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.tabsoverspaces.com/233963-dnsendpoint-where-have-you-been?utm_source=blog.peterritchie.com"&gt;DnsEndPoint – where have you been?&lt;/a&gt; by Jiří Činčura&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-11-preview-2/?utm_source=blog.peterritchie.com"&gt;.NET 11 Preview 2 is now available!&lt;/a&gt; by .NET Team&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-march-2026-servicing-updates/?utm_source=blog.peterritchie.com"&gt;.NET and .NET Framework March 2026 servicing releases updates&lt;/a&gt; by Rahul Bhandari (MSFT)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/03/10/new-improvements-to-martens-linq-support/?utm_source=blog.peterritchie.com"&gt;New Improvements to Marten’s LINQ Support&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://platform.uno/blog/configuring-claude-code-for-real-net-projects/?utm_source=blog.peterritchie.com"&gt;Configuring Claude Code for Real .NET Projects&lt;/a&gt; by Matt Mattei&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile --&gt;
&lt;h2 id="agilework-life"&gt;Agile/Work Life&lt;/h2&gt;
&lt;!-- ## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/newsletter/openapi-tools-is-growing/?utm_source=blog.peterritchie.com"&gt;OpenAPI.tools is Growing&lt;/a&gt; by Alexander Karan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/podcast/supergood-is-building-unofficial-apis-for-everything/?utm_source=blog.peterritchie.com"&gt;Supergood is building unofficial APIs for everything&lt;/a&gt; by Mike Bifulco&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-mirroring-fabric-private-networks-ga/?utm_source=blog.peterritchie.com"&gt;Azure Cosmos DB Mirroring in Microsoft Fabric: Private Network Support Now Generally Available&lt;/a&gt; by Jai Maldonado&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/march-patches-for-azure-devops-server-4/?utm_source=blog.peterritchie.com"&gt;March Patches for Azure DevOps Server&lt;/a&gt; by Gloridel Morales&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-logs-status/?utm_source=blog.peterritchie.com"&gt;Azure Developer CLI (azd): Debug hosted AI agents from your terminal&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-conf-2026-preview/?utm_source=blog.peterritchie.com"&gt;Azure Cosmos DB Conf 2026 Preview: What to Expect&lt;/a&gt; by Jay Gordon&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/pushing-skills-to-a-new-level-5cdj?utm_source=blog.peterritchie.com"&gt;Pushing skills to a new level&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vladikk.com/2026/03/15/machine-errors/?utm_source=blog.peterritchie.com"&gt;Machine Errors and Non-Deterministic Humans&lt;/a&gt; by Vlad Khononov&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20260313-00/?p=112138?utm_source=blog.peterritchie.com"&gt;Windows stack limit checking retrospective: MIPS&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mostlylucid.net/blog/behavioural-inference-systems-blog?utm_source=blog.peterritchie.com"&gt;Behavioural Inference: How I Learned to Stop Worrying and Love Probabilistic Systems (English)&lt;/a&gt; by Scott Galloway&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/news-insights/company-news/github-availability-report-february-2026/?utm_source=blog.peterritchie.com"&gt;GitHub availability report: February 2026&lt;/a&gt; by Jakub Oleksy&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/news-insights/company-news/addressing-githubs-recent-availability-issues-2/?utm_source=blog.peterritchie.com"&gt;Addressing GitHub’s recent availability issues&lt;/a&gt; by Vlad Fedorov&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20260311-00/?p=112134?utm_source=blog.peterritchie.com"&gt;How do compilers ensure that large stack allocations do not skip over the guard page?&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://barretblake.dev/posts/development/2026/03/i-made-an-api/?utm_source=blog.peterritchie.com"&gt;I Made an API&lt;/a&gt; by Barret Blake&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.xda-developers.com/obsidian-cli-is-the-new-best-way-to-automate-your-notes/?utm_source=blog.peterritchie.com"&gt;Obsidian CLI is the new best way to automate your notes&lt;/a&gt; by Patrick Hearn&lt;/p&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/interactive-rubber-ducking-with-genai?utm_source=blog.peterritchie.com"&gt;Interactive Rubber Ducking with GenAI&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/weizenbaums-four-warnings-for-the?utm_source=blog.peterritchie.com"&gt;Weizenbaum’s Four Warnings for the AI Era&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://thenewstack.io/jetbrains-names-the-debt-ai-agents-leave-behind?utm_source=blog.peterritchie.com"&gt;JetBrains names the debt AI agents leave behind&lt;/a&gt; by Darryl K. Taft&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/the-era-of-ai-as-text-is-over-execution-is-the-new-interface/?utm_source=blog.peterritchie.com"&gt;The era of “AI as text” is over. Execution is the new interface&lt;/a&gt; by Gwen Davis&lt;/p&gt;
&lt;p&gt;&lt;a href="https://futurism.com/future-society/ai-bubble-billionaires-burst?utm_source=blog.peterritchie.com"&gt;Tech Billionaires Are Quietly Rooting for AI Bubble to Collapse&lt;/a&gt; by Joe Wilkins&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

--&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - March 8</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-8</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-8</guid>
			<pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

 --&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/htmxrazor-1-2-0-toast-notifications-pagination-and-the-end-of-css-specificity-fights/?utm_source=blog.peterritchie.com"&gt;htmxRazor 1.2.0: Toast Notifications, Pagination, and the End of CSS Specificity Fights&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;!-- ## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/5-architecture-tests-you-should-add-to-your-dotnet-projects?utm_source=blog.peterritchie.com"&gt;5 Architecture Tests You Should Add to Your .NET Projects&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/parse-dont-guess?utm_source=blog.peterritchie.com"&gt;Parse, Don't Guess&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/vertical-slices-doesnt-mean-share-nothing/?utm_source=blog.peterritchie.com"&gt;Vertical Slices doesn't mean &amp;quot;Share Nothing&amp;quot;&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://irina.codes/async-does-not-mean-scalable/?utm_source=blog.peterritchie.com"&gt;Async Does Not Mean Scalable&lt;/a&gt; by Irina Scurtu&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/03/06/fun-five-year-retrospective-on-marten-adoption/?utm_source=blog.peterritchie.com"&gt;Fun Five Year Retrospective on Marten Adoption&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-dev-essentials-free-practical-tools-for-every-developer/?utm_source=blog.peterritchie.com"&gt;Visual Studio Dev Essentials: Free, Practical Tools for Every Developer&lt;/a&gt; by Jim Harrer&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/extend-your-coding-agent-with-dotnet-skills/?utm_source=blog.peterritchie.com"&gt;Extend your coding agent with .NET Skills&lt;/a&gt; by Tim Heuer&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/release-v10-of-the-official-mcp-csharp-sdk/?utm_source=blog.peterritchie.com"&gt;Release v1.0 of the official MCP C# SDK&lt;/a&gt; by Mike Kistler&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/essential-visual-studio-extensions-4loh?utm_source=blog.peterritchie.com"&gt;Essential Visual Studio Extensions&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://barretblake.dev/posts/development/2026/03/value-of-immutability/?utm_source=blog.peterritchie.com"&gt;The Value of Immutability in .NET&lt;/a&gt; by Barret Blake&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile --&gt;
&lt;h2 id="agilework-life"&gt;Agile/Work Life&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://agilepainrelief.com/blog/product-backlog-refinement-hell-solutions/?utm_source=blog.peterritchie.com"&gt;Product Backlog Refinement Hell: 3 Problems and Solutions&lt;/a&gt; by Mark Levison&lt;/p&gt;
&lt;!-- ## Project Management/Administration

## REST/APIs
 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-appservice-swap/?utm_source=blog.peterritchie.com"&gt;Azure Developer CLI (azd): One command to swap Azure App Service slots&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.poppastring.com/blog/we-are-still-engineers?utm_source=blog.peterritchie.com"&gt;We are still engineers&lt;/a&gt; by Mark Downie&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/visualize-github-actions-runs-with-meziantou-githubactionstracing.htm?utm_source=blog.peterritchie.com"&gt;Visualize GitHub Actions runs with Meziantou.GitHubActionsTracing&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/security/how-to-scan-for-vulnerabilities-with-github-security-labs-open-source-ai-powered-framework/?utm_source=blog.peterritchie.com"&gt;How to scan for vulnerabilities with GitHub Security Lab’s open source AI-powered framework&lt;/a&gt; by Man Yue Mo, Peter Stöckli&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20260309-00/?p=112118?utm_source=blog.peterritchie.com"&gt;Learning to read C++ compiler errors: Ambiguous overloaded operator&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20260306-00/?p=112116?utm_source=blog.peterritchie.com"&gt;When Read­Directory­ChangesW reports that a deletion occurred, how can I learn more about the deleted thing?&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/css-wavy-art/?utm_source=blog.peterritchie.com"&gt;Making art with CSS gradients and corner-shape and skew, oh my&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/03/03/in-defence-of-correctness/?utm_source=blog.peterritchie.com"&gt;In defence of correctness&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.architecture-weekly.com/p/the-end-of-coding-wrong-question?utm_source=blog.peterritchie.com"&gt;The End of Coding? Wrong Question&lt;/a&gt; by Oskar Dudycz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vladikk.com/2026/03/10/ai-ooda/?utm_source=blog.peterritchie.com"&gt;The Missing Link in Vibe Coding: Feedback Loops&lt;/a&gt; by Vlad Khononov&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nick-tune.me/blog/2026-03-04-event-sourced-claude-code-workflows/?utm_source=blog.peterritchie.com"&gt;Event-sourced Claude Code workflows&lt;/a&gt; by Nick Tune&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/signal-ping-skill-still-sets-the?utm_source=blog.peterritchie.com"&gt;Signal ping : Skill still sets the ceiling&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/03/09/which-of-these-languages-are-best-for-ai/?utm_source=blog.peterritchie.com"&gt;Which of these languages are best for AI?&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

--&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - March 1</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-1%20copy</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-march-1%20copy</guid>
			<pubDate>Wed, 04 Mar 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source

## Domain-Driven Design, CQRS
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/fencing-tokens-and-generation-clock-in-net-stop-zombie-leaders-from-writing/?utm_source=rss&amp;amp;utm_medium=rss&amp;amp;utm_campaign=fencing-tokens-and-generation-clock-in-net-stop-zombie-leaders-from-writing?utm_source=blog.peterritchie.com"&gt;Fencing Tokens and Generation Clock in .NET: Stop Zombie Leaders From Writing&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vladikk.com/2026/02/26/coupling-weighed/?utm_source=blog.peterritchie.com"&gt;Coupling Should Be Weighed, Not Counted&lt;/a&gt; by Vlad Khononov&lt;/p&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-february-update/?utm_source=blog.peterritchie.com"&gt;Visual Studio February Update&lt;/a&gt; by Mark Downie&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/recording-metrics-in-process-using-meterlistener/?utm_source=blog.peterritchie.com"&gt;Recording metrics in-process using MeterListener&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/02/24/on-debugging-problems/?utm_source=blog.peterritchie.com"&gt;On Debugging Problems&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.nimblepros.com/blogs/validating-benchmarks/#sq_hshvked81h?utm_source=blog.peterritchie.com"&gt;Validating Benchmarks in .NET&lt;/a&gt; by Philippe Vaillancourt&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.tabsoverspaces.com/233961-is-it-faster-to-index-into-an-array-or-use-switch-statement-for-lookups?utm_source=paulomorgado.net&amp;amp;utm_medium=bluesky?utm_source=blog.peterritchie.com"&gt;Is it faster to index into an array or use switch statement for lookups?&lt;/a&gt; by Jiří Činčura&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

## REST/APIs

 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/updates-to-team-calendar-extension/?utm_source=blog.peterritchie.com"&gt;Updates to Team Calendar extension&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-documentdb-mongodb-compatible/?utm_source=blog.peterritchie.com"&gt;Azure DocumentDB: A Fully Managed MongoDB-Compatible Database&lt;/a&gt; by Khelan Modi&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-sdk-release-february-2026/?utm_source=blog.peterritchie.com"&gt;Azure SDK Release (February 2026)&lt;/a&gt; by Ronnie Geraghty&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-february-2026/?utm_source=blog.peterritchie.com"&gt;Azure Developer CLI (azd) - February 2026: JMESPath Queries &amp;amp; Deployment Slots&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;!-- ## Software Development
 --&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/from-idea-to-pull-request-a-practical-guide-to-building-with-github-copilot-cli/?utm_source=blog.peterritchie.com"&gt;From idea to pull request: A practical guide to building with GitHub Copilot CLI - The GitHub Blog&lt;/a&gt; by Ari LiVigni&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/whats-new-with-github-copilot-coding-agent/?utm_source=blog.peterritchie.com"&gt;What's new with GitHub Copilot coding agent - The GitHub Blog&lt;/a&gt; by Andrea Griffiths&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/vector-data-in-dotnet-building-blocks-for-ai-part-2/?utm_source=blog.peterritchie.com"&gt;Vector Data in .NET - Building Blocks for AI Part 2&lt;/a&gt; by Jeremy Likness&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/generative-ai/multi-agent-workflows-often-fail-heres-how-to-engineer-ones-that-dont/?utm_source=blog.peterritchie.com"&gt;Multi-agent workflows often fail. Here's how to engineer ones that don't.&lt;/a&gt; by Gwen Davis&lt;/p&gt;
&lt;p&gt;&lt;a href="https://garymarcus.substack.com/p/turns-out-generative-ai-was-a-scam?utm_source=blog.peterritchie.com"&gt;Turns out Generative AI was a scam &lt;/a&gt; by Gary Marcus&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nolanlawson.com/2026/02/07/we-mourn-our-craft/?utm_source=blog.peterritchie.com"&gt;We mourn our craft&lt;/a&gt; by Nolan Lawson&lt;/p&gt;
&lt;p&gt;&lt;a href="https://theconversation.com/using-ai-responsibly-means-knowing-when-not-to-use-it-274671?utm_source=blog.peterritchie.com"&gt;Using AI responsibly means knowing when not to use it&lt;/a&gt; by Sam Illingworth&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - February 22</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-22</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-22</guid>
			<pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;h2 id="security"&gt;Security&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/passkeys/?utm_source=blog.peterritchie.com"&gt;How passkeys work&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/open-source/maintainers/securing-the-ai-software-supply-chain-security-results-across-67-open-source-projects/?utm_source=blog.peterritchie.com"&gt;Securing the AI software supply chain: Security results across 67 open source projects&lt;/a&gt; by Gregg Cochran&lt;/p&gt;
&lt;h2 id="domain-driven-design-cqrs"&gt;Domain-Driven Design, CQRS&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/read-replicas-are-not-cqrs-stop-confusing-this/?utm_source=blog.peterritchie.com"&gt;Read Replicas Are NOT CQRS (Stop Confusing This)&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/where-vertical-slices-fit-inside-the-modular-monolith-architecture?utm_source=blog.peterritchie.com"&gt;Where Vertical Slices Fit Inside the Modular Monolith Architecture&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;!--## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/02/19/using-the-azure-service-bus-emulator-for-local-wolverine-development/?utm_source=blog.peterritchie.com"&gt;Using the Azure Service Bus Emulator for Local Wolverine Development&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/validating-powershell-script-syntax-in-github-actions-workflows.htm?utm_source=blog.peterritchie.com"&gt;Validating PowerShell script syntax in GitHub Actions workflows&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/ef-core-hasqueryfilter-ii-39gf?utm_source=blog.peterritchie.com"&gt;EF Core HasQueryFilter II&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/creating-standard-and-observable-instruments/?utm_source=blog.peterritchie.com"&gt;Creating standard and &amp;quot;observable&amp;quot; instruments&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/custom-agents-in-visual-studio-built-in-and-build-your-own-agents/?utm_source=blog.peterritchie.com"&gt;Custom Agents in Visual Studio: Built in and Build-Your-Own agents&lt;/a&gt; by Rhea Patel&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/newsletter/rest-is-dead-again/?utm_source=blog.peterritchie.com"&gt;Is REST Dead... Again?&lt;/a&gt; by Alexander Karan&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-jmespath-query-support/?utm_source=blog.peterritchie.com"&gt;JMESPath support comes to azd JSON output&lt;/a&gt; by Scott Addie&lt;/p&gt;
&lt;!-- ## Software Development
 --&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/shortwave-ai-fatigue-and-the-long?utm_source=blog.peterritchie.com"&gt;Shortwave: AI fatigue and the long middle of adoption&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.xda-developers.com/microsoft-backing-off-its-ai-everywhere-plan-is-too-little-too-late/?utm_source=blog.peterritchie.com"&gt;Microsoft's backing off on its &amp;quot;AI everywhere&amp;quot; plan is too little, too late&lt;/a&gt; by Simon Batt&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.cio.com/article/4129620/agentic-ai-fails-without-an-architecture-of-flow-to-eliminate-the-friction-tax.html?utm_source=blog.peterritchie.com"&gt;Agentic AI fails without an architecture of flow to eliminate the friction tax&lt;/a&gt; by David Smith&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - February 15</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-15</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-15</guid>
			<pubDate>Wed, 18 Feb 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

 --&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/open-source/maintainers/welcome-to-the-eternal-september-of-open-source-heres-what-we-plan-to-do-for-maintainers/?utm_source=blog.peterritchie.com"&gt;Welcome to the Eternal September of open source. Here's what we plan to do for maintainers&lt;/a&gt; by Ashley Wolf&lt;/p&gt;
&lt;!-- ## Software Architecture

## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=KTsyS3rDUgg?utm_source=blog.peterritchie.com"&gt;On .NET Live: Lessons Learned Building Source Generators - YouTube&lt;/a&gt; by Jason Bock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-11-preview-1/?utm_source=blog.peterritchie.com"&gt;.NET 11 Preview 1 is now available!&lt;/a&gt; by .NET Team&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/unlock-language-specific-rich-symbol-context-using-new-find_symbol-tool/?utm_source=blog.peterritchie.com"&gt;Unlock language-specific rich symbol context using new find_symbol tool&lt;/a&gt; by Sinem Akinci&lt;/p&gt;
&lt;p&gt;&lt;a href="https://barretblake.dev/posts/development/2026/02/hangfire/?utm_source=blog.peterritchie.com"&gt;Getting Started with .NET Scheduling in Hangfire&lt;/a&gt; by Barret Black&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/getting-more-information-in-msbuild-binlogs-with-property-tracking.htm?utm_source=blog.peterritchie.com"&gt;Getting more information in MSBuild binlogs with property tracking&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/aspnet-core-warmup-ef-core-58gl?utm_source=blog.peterritchie.com"&gt;ASP.NET Core warmup EF Core&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/02/14/2-weeks-of-claude-code-for-me/?utm_source=blog.peterritchie.com"&gt;2 Weeks of Claude Code for Me ΓÇô The Shade Tree Developer&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/how-to-extract-structured-data-from-images-using-ollama-in-dotnet?utm_source=blog.peterritchie.com"&gt;How to Extract Structured Data From Images Using Ollama in .NET&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

## REST/APIs

 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=dsyyvSxL7iM?utm_source=blog.peterritchie.com"&gt;Subscribe E2/2026 - Microsoft Fabric Real-Time Intelligence - YouTube&lt;/a&gt; by Clemens Vasters&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-app-service-slot/?utm_source=blog.peterritchie.com"&gt;Deploy to Azure App Service deployment slots with azd&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/maximize-azure-cosmos-db-performance-with-azure-advisor-recommendations/?utm_source=blog.peterritchie.com"&gt;Maximize Azure Cosmos DB Performance with Azure Advisor Recommendations&lt;/a&gt; by Iria Osara&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/february-patches-for-azure-devops-server-5/?utm_source=blog.peterritchie.com"&gt;February Patches for Azure DevOps Server&lt;/a&gt; by Gloridel Morales&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blogs.windows.com/windowsdeveloper/2026/02/11/enhanced-developer-tools-on-the-microsoft-store/?utm_source=blog.peterritchie.com"&gt;Enhanced developer tools on the Microsoft Store&lt;/a&gt; by Windows Developer Blog&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.eventsourcingdb.io/blog/2026/02/09/soft-delete-is-a-workaround/?utm_source=blog.peterritchie.com"&gt;Soft Delete Is a Workaround&lt;/a&gt; by Golo Roden&lt;/p&gt;
&lt;!-- ## Windows
 --&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://theshamblog.com/an-ai-agent-published-a-hit-piece-on-me/?utm_source=blog.peterritchie.com"&gt;An AI Agent Published a Hit Piece on Me&lt;/a&gt; by Scott Shambaugh&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ardalis.com/llms-need-mark-as-answer/?utm_source=blog.peterritchie.com"&gt;Llms Need Mark as Answer&lt;/a&gt; by Ardalis (Steve Smith)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/shortwave-human-centered-ai-is-not?utm_source=blog.peterritchie.com"&gt;Shortwave: Human-centered AI is not a new idea&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - February 8</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-8</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-8</guid>
			<pubDate>Mon, 09 Feb 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

 --&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://clemensv.github.io/stopwatch/?utm_source=blog.peterritchie.com"&gt;Stopwatch Overlay - Always-on-top timer for recordings &amp;amp; presentations&lt;/a&gt; by Clemens Vasters&lt;/p&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;!-- ## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-framework-3-5-moves-to-standalone-deployment-in-new-versions-of-windows/?utm_source=blog.peterritchie.com"&gt;.NET Framework 3.5 Moves to Standalone Deployment in new versions of Windows&lt;/a&gt; by Tara Overfield&lt;/p&gt;
&lt;p&gt;&lt;a href="https://developer.microsoft.com/blog/winget-configuration-set-up-your-dev-machine-in-one-command?utm_source=paulomorgado.net&amp;amp;utm_medium=bluesky?utm_source=blog.peterritchie.com"&gt;WinGet Configuration: Set up your dev machine in one command&lt;/a&gt; by Kayla Cinnamon&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/lease-pattern-in-net-a-lock-with-an-expiration-date-that-saves-your-data/?utm_source=blog.peterritchie.com"&gt;Lease Pattern in .NET: A Lock With an Expiration Date That Saves Your Data&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/roadmap-for-ai-in-visual-studio-february/?utm_source=blog.peterritchie.com"&gt;Roadmap for AI in Visual Studio (February)&lt;/a&gt; by Rhea Patel&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/creating-strongly-typed-metics-with-a-source-generator/?utm_source=blog.peterritchie.com"&gt;Exploring the (underwhelming) System.Diagnostics.Metrics source generators&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/02/02/building-a-greenfield-system-with-the-critter-stack/?utm_source=blog.peterritchie.com"&gt;Building a Greenfield System with the Critter Stack&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/integrate-keycloak-with-aspnetcore-using-oauth-2?utm_source=blog.peterritchie.com"&gt;Integrate Keycloak with ASP.NET Core Using OAuth 2.0&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.stevejgordon.co.uk/encrypting-properties-with-system-text-json-and-a-typeinforesolver-modifier-part-2?utm_source=blog.peterritchie.com"&gt;Encrypting Properties with System.Text.Json and a TypeInfoResolver Modifier (Part 2)&lt;/a&gt; by Steve Gordon&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

 --&gt;
&lt;h2 id="project-managementadministration"&gt;Project Management/Administration&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.jsnover.com/blog/2026/02/01/welcome-to-the-room/?utm_source=blog.peterritchie.com"&gt;Welcome to the Room&lt;/a&gt; by Jeffrey Snove&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/shortwave-when-institutions-stop?utm_source=blog.peterritchie.com"&gt;Shortwave: When institutions stop thinking for themselves&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/newsletter/building-sustainable-apis/?utm_source=blog.peterritchie.com"&gt;Sustainable APIs&lt;/a&gt; by Alexander Karan&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-devcontainer-extensions/?utm_source=blog.peterritchie.com"&gt;Auto-install &lt;code&gt;azd&lt;/code&gt; extensions in dev containers&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/how-to-enable-microsoft-entra-id-for-azure-cosmos-db-nosql/?utm_source=blog.peterritchie.com"&gt;How to Enable Microsoft Entra ID for Azure Cosmos DB (NoSQL)&lt;/a&gt; by Sudhanshu Khera&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/azure-boards-integration-with-github-copilot-includes-custom-agent-support/?utm_source=blog.peterritchie.com"&gt;Azure Boards integration with GitHub Copilot includes custom agent support&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://lucisqr.substack.com/p/bjarnes-last-stand-how-the-father?utm_source=blog.peterritchie.com"&gt;Bjarne-s Last Stand: How the Father of C++ Is Fighting a Losing War Against Rust&lt;/a&gt; by Henrique Bucher&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/02/02/code-that-fits-in-a-context-window/?utm_source=blog.peterritchie.com"&gt;Code that fits in a context window&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/essential-rules-of-software-engineering.htm?utm_source=blog.peterritchie.com"&gt;Essential Rules of Software Engineering&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/your-idempotent-code-is-lying-to-you/?utm_source=blog.peterritchie.com"&gt;Your Idempotent Code Is Lying To You&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;h2 id="windows"&gt;Windows&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://tech.slashdot.org/story/26/02/05/0023249/microsoft-adds-sysmon-to-windows?utm_source=blog.peterritchie.com"&gt;Microsoft Adds Sysmon To Windows&lt;/a&gt; by Slashdot&lt;/p&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/gh-copilot-instructions/?utm_source=blog.peterritchie.com"&gt;Using personal instructions in GitHub Copilot Chat&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;p&gt;&lt;a href="https://frontendmasters.com/blog/what-senior-engineers-need-to-know-about-ai-coding-tools/?utm_source=blog.peterritchie.com"&gt;What Senior Engineers Need to Know About AI Coding Tools&lt;/a&gt; by Marc Grabanski&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/github-copilot/how-to-write-a-great-agents-md-lessons-from-over-2500-repositories/?utm_source=blog.peterritchie.com"&gt;How to write a great agents.md: Lessons from over 2,500 repositories&lt;/a&gt; by Matt Nigh&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/generative-ai/continuous-ai-in-practice-what-developers-can-automate-today-with-agentic-ci/?utm_source=blog.peterritchie.com"&gt;Continuous AI in practice: What developers can automate today with agentic CI&lt;/a&gt; by GitHub Staff&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - February 1</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-1</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-february-1</guid>
			<pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

 --&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/madskristensen/Modes?utm_source=blog.peterritchie.com"&gt;GitHub - madskristensen/Modes: A Visual Studio extension&lt;/a&gt; by madskristensen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/enable-debug-logging-in-the-github-cli-gh.htm?utm_source=blog.peterritchie.com"&gt;Enable debug logging in the GitHub CLI (gh)&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/patterns-of-distributed-systems-in-c-and-net-a-new-series-for-people-who-ship-real-systems/?utm_source=blog.peterritchie.com"&gt;Patterns of Distributed Systems in C# and .NET: A New Series for People Who Ship Real Systems&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;!-- ## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.Modes?utm_source=blog.peterritchie.com"&gt;Modes - Visual Studio Marketplace&lt;/a&gt; by Mads Kristensen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.josephguadagno.net/2026/01/30/introducing-morespeakers-com?utm_source=blog.peterritchie.com"&gt;Introducing MoreSpeakers.com&lt;/a&gt; by Joseph Guadagno&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/join-us-at-ndc-london-2026/?utm_source=blog.peterritchie.com"&gt;Join Microsoft at NDC London 2026&lt;/a&gt; by .NET Team&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-january-update-enhanced-editor-experience/?utm_source=blog.peterritchie.com"&gt;Visual Studio January Update&lt;/a&gt; by Simona Liao&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/developer-skills/programming-languages-and-frameworks/7-learnings-from-anders-hejlsberg-the-architect-behind-c-and-typescript/?utm_source=blog.peterritchie.com"&gt;7 learnings from Anders Hejlsberg: The architect behind C# and TypeScript&lt;/a&gt; by Aaron Winston&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/creating-and-consuming-metrics-with-system-diagnostics-metrics-apis/?utm_source=blog.peterritchie.com"&gt;Creating and consuming metrics with System.Diagnostics.Metrics APIs&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mostlylucid.net/blog/doomsummarizer-deep-research?utm_source=blog.peterritchie.com"&gt;DoomSummarizer: DocSummarizer's Younger, Smarter Brother (English)&lt;/a&gt; by Scott Galloway&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/c-14-extension-blocks-1d6k?utm_source=blog.peterritchie.com"&gt;C# 14 extension blocks&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/01/26/wolverine-idioms-for-mediatr-users/?utm_source=blog.peterritchie.com"&gt;Wolverine Idioms for MediatR Users&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/containerize-your-dotnet-applications-without-a-dockerfile?utm_source=blog.peterritchie.com"&gt;Containerize Your .NET Applications Without a Dockerfile&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.stevejgordon.co.uk/the-grand-mystery-of-the-missing-18-bytes?utm_source=blog.peterritchie.com"&gt;The Grand Mystery of the Missing 18 Bytes&lt;/a&gt; by Steve Gordon&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

## REST/APIs

 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-sdk-release-january-2026/?utm_source=blog.peterritchie.com"&gt;Azure SDK Release (January 2026)&lt;/a&gt; by Ronnie Geraghty&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/github-copilot-cli-cosmos-db-agent-kit/?utm_source=blog.peterritchie.com"&gt;Accelerate Your Cosmos DB Infrastructure with GitHub Copilot CLI and Azure Cosmos DB Agent Kit&lt;/a&gt; by Sajeetharan Sinnathurai&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/css-corner-shape/?utm_source=blog.peterritchie.com"&gt;Making interesting borders with CSS corner-shape&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;!-- ## Windows

--&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.anthropic.com/research/disempowerment-patterns?utm_source=blog.peterritchie.com"&gt;Disempowerment patterns in real-world AI usage&lt;/a&gt; by Anthropic&lt;/p&gt;
&lt;p&gt;&lt;a href="https://hbr.org/2026/01/when-ai-amplifies-the-biases-of-its-users?utm_source=blog.peterritchie.com"&gt;When AI Amplifies the Biases of Its Users&lt;/a&gt; by Grace Chang and Heidi Grant&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/shortwave-they-just-dont-work-yet?utm_source=blog.peterritchie.com"&gt;Shortwave: They Just DonΓÇÖt Work (Yet)&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://apievangelist.com/2026/02/02/why-do-i-need-agents-when-i-have-requests-cron-jobs-and-events/?utm_source=blog.peterritchie.com"&gt;Why Do I Need Agents When I Have Requests, CRON Jobs, and Events?&lt;/a&gt; by Kin Lane&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - January 26</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-26</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-26</guid>
			<pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/systems-thinking-meets-simplicity-first-a-decision-framework-for-software-architects/?utm_source=blog.peterritchie.com"&gt;Systems Thinking Meets Simplicity-First: A Decision Framework for Software Architects&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/you-cant-future-proof-software-architecture/?utm_source=blog.peterritchie.com"&gt;You Can't Future-Proof Software Architecture&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;!-- ## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/making-foreach-on-an-ienumerable-allocation-free-using-reflection-and-dynamic-methods/?utm_source=blog.peterritchie.com"&gt;Making foreach on an IEnumerable allocation-free using reflection and dynamic methods&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/enterprise-patterns-for-asp-net-core-minimal-api-data-transfer-object-pattern/?utm_source=blog.peterritchie.com"&gt;Enterprise Patterns for ASP.NET Core Minimal API: Data Transfer Object Pattern&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mostlylucid.net/blog/simple-ocr-ner-extraction?utm_source=blog.peterritchie.com"&gt;Simple OCR and NER Feature Extraction in C# with ONNX&lt;/a&gt; by Scott Galloway&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/c-console-menus-with-actions-67n?utm_source=blog.peterritchie.com"&gt;C# Console menus with Actions&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/01/22/martens-aggregation-projection-subsystem/?utm_source=blog.peterritchie.com"&gt;Marten's Aggregation Projection Subsystem&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

 --&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/01/19/filtering-as-domain-logic/?utm_source=blog.peterritchie.com"&gt;Filtering as domain logic&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;!-- ## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-tv-ep-110-mcp-toolkit-ai-agents/?utm_source=blog.peterritchie.com"&gt;AI Agents MCP Cosmos DB Transforming Development&lt;/a&gt; by Mark Brown&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/azure-boards-additional-field-filters-private-preview/?utm_source=blog.peterritchie.com"&gt;Azure Boards Additional Field Filters in Preview&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20260123-00/?p=112008?utm_source=blog.peterritchie.com"&gt;C++ has scope_exit for running code at scope exit. C# says &amp;quot;We have scope_exit at home.&amp;quot;&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/touch-on-ps/?utm_source=blog.peterritchie.com"&gt;Remaking the Linux &amp;quot;touch&amp;quot; command in PowerShell&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/signal-ping-code-is-easy-ownership?utm_source=blog.peterritchie.com"&gt;Signal ping : Code is easy; ownership is not&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://sadukie.com/2026/01/19/cleveland-tech-is-not-dead.html?utm_source=blog.peterritchie.com"&gt;Cleveland Tech is not Dead!&lt;/a&gt; by sadukie&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/a-practical-demo-of-zero-downtime-migrations-using-password-hashing?utm_source=blog.peterritchie.com"&gt;A Practical Demo of Zero-Downtime Migrations Using Password Hashing&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;!-- ## Windows

--&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/developer-skills/application-development/context-windows-plan-agent-and-tdd-what-i-learned-building-a-countdown-app-with-github-copilot/?utm_source=blog.peterritchie.com"&gt;Context windows, Plan agent, and TDD: What I learned building a countdown app with GitHub Copilot&lt;/a&gt; by Chris Reddington&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Introducing Pri.ProductivityExtensions.Source - A .NET Standard Package to Enable Modern C# Language Features</title>
			<link>http://blog.peterritchie.com/posts/Introducing-Pri.ProductivityExtensions.Source</link>
			<description>&lt;p&gt;&lt;img src="../assets/dotnet-standard-errors.png" class="img-fluid" alt=".NET Standard compile errors"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/Introducing-Pri.ProductivityExtensions.Source</guid>
			<pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/dotnet-standard-errors.png" class="img-fluid" alt=".NET Standard compile errors" /&gt;&lt;/p&gt;
&lt;p&gt;Targeting .NET Standard for a class library means that the library will be compatible with applications designed for past versions of .NET. E.g., an application targeting .NET Framework 4.8 or .NET Core 2.1 will be able to load a class library targeting .NET Standard 2.0 because it can only rely on the same API surface that the application does.&lt;/p&gt;
&lt;p&gt;There are a few reasons developers need to work in .NET Standard. A popular one is writing Roslyn analyzers, another is writing PowerShell modules (Cmdlets) in C#. .NET Standard is a formal specification of .NET APIs available across multiple .NET implementations. It's like a definition of a slice of APIs that are implemented across .NET versions. Designing for a slice of APIs allows you to design and deploy class libraries that will work across .NET implementations. The latest version of .NET Standard (2.1) was released in September 2020.&lt;/p&gt;
&lt;p&gt;Paradoxically, .NET languages depend on base-class libraries for aspects of their implementation. For example, the C# language feature &lt;code&gt;foreach&lt;/code&gt; depends on the types &lt;code&gt;IEnumerable&lt;/code&gt;, &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;, &lt;code&gt;IEnumerator&lt;/code&gt;, and &lt;code&gt;IEnumerator&amp;lt;T&amp;gt;&lt;/code&gt;. Specifications like .NET Standard enable C# language features across .NET implementations by including those dependent types in their specification. But languages evolve and improve over time, as do base class libraries.&lt;/p&gt;
&lt;p&gt;Since .NET Standard was last updated in 2020, some new language features that depend on new types in the base class library have been introduced. Some of these new language features aren't necessarily supported in .NET Standard, even though you can use the latest compiler version when building .NET Standard class libraries. For example, Ranges and Indices are a feature added to C# 8.0, released in September 2019. Ranges and Indices depend upon the &lt;code&gt;Range&lt;/code&gt; and &lt;code&gt;Index&lt;/code&gt; types. But to write a PowerShell library that supports Windows PowerShell and PowerShell 7, you have to target .NET Standard 2.0, whose API surface was specified around August 2017--roughly two years before &lt;code&gt;Range&lt;/code&gt; and &lt;code&gt;Index&lt;/code&gt; existed. This means Ranges and Indices aren't supported out of the box in C# code targeting .NET Standard 2.0. &lt;code&gt;var lastWord = words[^1]&lt;/code&gt; or &lt;code&gt;var firstFourWords = words[0..3]&lt;/code&gt; will cause errors (&lt;code&gt;Predefined type 'System.Index' is not defined or imported&lt;/code&gt;, and &lt;code&gt;Predefined type 'System.Range' is not defined or imported&lt;/code&gt;, respectively).&lt;/p&gt;
&lt;p&gt;Fortunately, the compiler is flexible about where those predefined types are defined. Someone can't simply create a .NET Standard 2.0 library with Range and Index as public types, because they will clash with modern versions of .NET (e.g., in an XUnit test project). But the .NET Standard 2.0 library can create internal versions of those classes that the compiler is happy to resolve to. But having everyone who authors a .NET Standard 2.0 library write their own &lt;code&gt;Range&lt;/code&gt; and &lt;code&gt;Index&lt;/code&gt; classes (as well as any other class that modern C# syntax requires, like &lt;code&gt;CallerArgumentExpressionAttribute&lt;/code&gt;, &lt;code&gt;DoesNotReturnAttribute&lt;/code&gt;, etc.) is &lt;em&gt;problematic&lt;/em&gt;, to say the least.&lt;/p&gt;
&lt;h2 id="content-only-nuget-packages"&gt;Content-only NuGet Packages&lt;/h2&gt;
&lt;p&gt;.NET and NuGet packages support content- or source-only packages. Source-only packages are NuGet packages that, instead of packaging binaries like DLLs, package source code. Source-only packages don't add any assembly dependencies that require deployment.&lt;/p&gt;
&lt;p&gt;That's where Pri.ProductivityExtensions.Source comes in. Pri.ProductivityExtensions.Source is a source-only NuGet package that includes the source code for various types created after .NET Standard 2.x to support C# language features (and some helper extensions like &lt;code&gt;ArgumentException.ThrowIfNull&lt;/code&gt; that depend on those features) that aren't available in .NET Standard.&lt;/p&gt;
&lt;p&gt;&amp;quot;Pri.ProductivityExtensions.Source&amp;quot; is also the ID of the package and can be found on NuGet.org &lt;a href="https://www.nuget.org/packages/Pri.ProductivityExtensions.Source" title="Pri.ProductivityExtensions.Source on NuGet.org"&gt;here&lt;/a&gt;. It can be added to a project via the .NET API: &lt;code&gt;dotnet add package Pri.ProductivityExtensions.Source&lt;/code&gt;, or via Package Manager Console: &lt;code&gt;Install-Package Pri.ProductivityExtensions.Source&lt;/code&gt;. It is open source, and the source code is available on &lt;a href="https://github.com/peteraritchie/Pri.ProductivityExtensions.Source" title="Pri.ProductivityExtensions.Source on GitHub"&gt;GitHub&lt;/a&gt;. For an example using Pri.ProductivityExtensions.Source see &lt;a href="https://github.com/peteraritchie/Pri.Essentials.DotnetPsCmds"&gt;Pri.Essentials.DotnetPsCmds&lt;/a&gt;. And if you install &lt;a href="https://www.powershellgallery.com/packages/Pri.Essentials.DotnetPsCmds/" title="Pri.Essentials.DotnetPsCmds in PowerShell Gallery"&gt;DotnetPsCmds&lt;/a&gt;, you can install Pri.ProductivityExtensions.Source in PowerShell: &lt;code&gt;Add-DotnetPackages Pri.ProductivityExtensions.Source&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;When you reference Pri.ProductivityExtensions.Source, it causes the content (source code) to be considered part of the target project. The source code remains in the &lt;code&gt;.nuget&lt;/code&gt; cache and is not copied alongside the rest of your source code so no new source code needs to be committed to revision control.&lt;/p&gt;
&lt;p&gt;The types included in Pri.ProductivityExtensions.Source are &lt;code&gt;internal&lt;/code&gt;, so they won't clash if Pri.ProductivityExtensions.Source is referenced in a project targeting a modern .NET implementation. Although I don't recommend using Pri.ProductivityExtensions.Source in a .NET Standard class library that is targeting a modern .NET implementation because it will resolve to Pri.ProductivityExtensions.Source instead of the .NET implementation's.&lt;/p&gt;
&lt;p&gt;If you've created a .NET Standard library and have wanted to use the latest version of the compiler but start receiving compiler errors like &lt;code&gt;The type or namespace name 'CallerArgumentExpressionAttribute' does not exist in the namespace 'System.Runtime.CompilerServices' (are you missing an assembly reference?)&lt;/code&gt; or the other aforementioned errors, fear not, you simply need to reference Pri.ProductivityExtensions.Source!&lt;/p&gt;
&lt;p&gt;Pri.ProductivityExtensions.Source enables the following modern C# compiler features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ranges and indices&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[CallerArgumentExpression]&lt;/code&gt; &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-10.0/caller-argument-expression" title="Caller argument expression - C# feature specifications"&gt;🔗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[DoesNotReturn]&lt;/code&gt; &lt;a href="https://github.com/dotnet/roslyn/issues/127" title="Proposal: [DoesNotReturn]"&gt;🔗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[NotNullWhen]&lt;/code&gt; &lt;a href="https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/attributes/nullable-analysis" title="Attributes for null-state static analysis interpreted by the C# compiler"&gt;🔗&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additionally, Pri.ProductivityExtensions.Source includes the following helper methods that otherwise depend on newer language-dependent types:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ArgumentException.ThrowIfNullOrWhiteSpace(string?, string?)&lt;/code&gt; &lt;a href="https://learn.microsoft.com/en-us/dotnet/api/system.argumentexception.throwifnullorwhitespace?view=net-10.0" title="ArgumentException.ThrowIfNullOrWhiteSpace(String, String) Method"&gt;🔗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ArgumentNullException.ThrowIfNull(object?, string?)&lt;/code&gt; &lt;a href="https://learn.microsoft.com/en-us/dotnet/api/system.argumentnullexception.throwifnull?view=net-10.0" title="ArgumentNullException.ThrowIfNull Method"&gt;🔗&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="understanding-c-timeline-since-last.net-standard"&gt;Understanding C# Timeline Since Last .NET Standard&lt;/h2&gt;
&lt;p&gt;The last version of .NET Standard (2.1) was released in 2020. Since 2020, C# versions 10, 11, 12, 13, and 14 have been released. A lot has changed across 5 versions of C#, including the use of numerous APIs to enable various features. There isn't a complete list of base-class APIs that the C# compiler depends on.&lt;/p&gt;
&lt;blockquote class="blockquote"&gt;
&lt;p&gt;&lt;strong&gt;If you find this useful&lt;/strong&gt;&lt;br /&gt;
I'm a freelance software architect. If you find this post useful and think I can provide value to your team, please reach out to see how I can help. See &lt;a href="/about"&gt;About&lt;/a&gt; for information about the services I provide.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- Calendly inline widget begin --&gt;
&lt;div class="calendly-inline-widget" data-url="https://calendly.com/peterritchie/client-meet-greet-zoom" style="min-width:320px;height:700px;"&gt;&lt;/div&gt;
&lt;script type="text/javascript" src="https://assets.calendly.com/assets/external/widget.js" async&gt;&lt;/script&gt;
&lt;!-- Calendly inline widget end --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - January 19</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-19</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-19</guid>
			<pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://lassala.net/2026/01/10/cqrs-and-human-intent/?utm_source=blog.peterritchie.com"&gt;CQRS and Human Intent&lt;/a&gt; by Claudio Lassala&lt;/p&gt;
&lt;!-- ## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/stop-building-spas-for-every-screen-htmx-asp-net-core-razor-pages-workshop-open/?utm_source=blog.peterritchie.com"&gt;Stop Building SPAs for Every Screen: htmx + ASP.NET Core Razor Pages Workshop (Open)&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/generating-sbom-for-nuget-packages.htm?utm_source=blog.peterritchie.com"&gt;Generating SBOM for NuGet packages&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=UdJE7LPy0dc?utm_source=blog.peterritchie.com"&gt;How to Run Azure Service Bus Locally using .NET Aspire - YouTube&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-january-2026-servicing-updates/?utm_source=blog.peterritchie.com"&gt;.NET and .NET Framework January 2026 servicing releases updates&lt;/a&gt; by Rahul Bhandari (MSFT)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/copilot-memories/?utm_source=blog.peterritchie.com"&gt;Copilot Memories&lt;/a&gt; by Jessie Houghton&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/how-this-website-is-built.htm?utm_source=blog.peterritchie.com"&gt;How this website is built&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.safia.rocks/2026/01/14/aspire-functions-references/?utm_source=blog.peterritchie.com"&gt;How does Aspire expose resource connection info to the Azure Functions runtime?&lt;/a&gt; by Safia Abdalla&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/01/13/how-jasperfx-supports-our-customers/?utm_source=blog.peterritchie.com"&gt;How JasperFx Supports our Customers&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/solving-the-distributed-cache-invalidation-problem-with-redis-and-hybridcache?utm_source=blog.peterritchie.com"&gt;Solving the Distributed Cache Invalidation Problem with Redis and HybridCache&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/newsletter/openapi-tools-relaunch/?utm_source=blog.peterritchie.com"&gt;A Shiny New OpenAPI Tools&lt;/a&gt; by Alexander Karan&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/building-your-first-serverless-http-api-on-azure-with-azure-functions-fastapi/?utm_source=blog.peterritchie.com"&gt;Part 1: Building Your First Serverless HTTP API on Azure with Azure Functions &amp;amp; FastAPI&lt;/a&gt; by Richa Gaur&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/whats-new-with-azure-repos/?utm_source=blog.peterritchie.com"&gt;What's New in Azure Repos: Recent Updates&lt;/a&gt; by Dan Hellem&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/01/12/two-regimes-of-git/?utm_source=blog.peterritchie.com"&gt;Two regimes of Git&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;!-- ## Windows

--&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.blog/ai-and-ml/generative-ai/want-better-ai-outputs-try-context-engineering/?utm_source=blog.peterritchie.com"&gt;Want better AI outputs? Try context engineering.&lt;/a&gt; by Christina Warren&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mostlylucid.net/blog/llms-fail-as-sensors?utm_source=blog.peterritchie.com"&gt;Why LLMs Fail as Sensors (and What Brains Get Right)&lt;/a&gt; by Scott Galloway&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/code-wave-build-log/?utm_source=blog.peterritchie.com"&gt;Code Wave Build Log&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/intelligence-without-a-witness?utm_source=blog.peterritchie.com"&gt;Intelligence without a witness&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://apievangelist.com/2026/01/17/agents-itis-all-apis-nothing-has-changed/?utm_source=blog.peterritchie.com"&gt;Agents. It Is All APIs. Nothing Has Changed&lt;/a&gt; by Kin Lane&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - January 12</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-12</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-12</guid>
			<pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source
 --&gt;
&lt;h2 id="software-architecture"&gt;Software Architecture&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/solving-message-ordering-from-first-principles?utm_source=blog.peterritchie.com"&gt;Solving Message Ordering from First Principles&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;!-- ## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://codewithmukesh.com/blog/dotnet-developer-roadmap/?utm_source=blog.peterritchie.com"&gt;The Ultimate .NET Developer Roadmap 2026 - AI, Backend, Blazor &amp;amp; Full-Stack&lt;/a&gt; by Mukesh Murugan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/enterprise-patterns-for-asp-net-core-front-controller-and-mvc-pattern/?utm_source=blog.peterritchie.com"&gt;Enterprise Patterns for ASP.NET Core: Front Controller and MVC Pattern&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.josephguadagno.net/2026/01/10/generate-an-open-graph-profile-image-with-c-sharp?utm_source=blog.peterritchie.com"&gt;Generate an Open Graph Profile Image with C#&lt;/a&gt; by Joseph Guadagno&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/mongodb-efcore-provider-queryable-encryption-vector-search/?utm_source=blog.peterritchie.com"&gt;EF Core MongoDB Queryable Encryption and Vector Search Explained&lt;/a&gt; by Rishit Bhatia&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/updates-to-netescapaades-enumgenerators-new-apis-and-system-memory-support/?utm_source=blog.peterritchie.com"&gt;Recent updates to NetEscapades.EnumGenerators: new APIs and System.Memory support&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/zero-copy-binarydata-creation-from-memorystream-in-dotnet.htm?utm_source=blog.peterritchie.com"&gt;Zero-copy BinaryData creation from MemoryStream in .NET&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.safia.rocks/2026/01/08/publishing-activity-reporter/?utm_source=blog.peterritchie.com"&gt;Reporting for duty: the story of IPipelineActivityReporter&lt;/a&gt; by Safia Abdalla&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/how-to-nuget-local-feeds-2nci?utm_source=blog.peterritchie.com"&gt;How to: NuGet local feeds&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

## REST/APIs

 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/cosmos-db-mirroring-private-endpoints/?utm_source=blog.peterritchie.com"&gt;Public Preview: Cosmos DB Mirroring in Microsoft Fabric with Private Endpoints&lt;/a&gt; by Mark Brown&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://techcrunch.com/2026/01/05/hacktivist-deletes-white-supremacist-websites-live-on-stage-during-hacker-conference/?utm_source=blog.peterritchie.com"&gt;Hacktivist deletes white supremacist websites live onstage during hacker conference&lt;/a&gt; by Lorenzo Franceschi-Bicchierai&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/01/05/coupling-from-a-big-o-perspective/?utm_source=blog.peterritchie.com"&gt;Coupling from a big-O perspective&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mostlylucid.net/blog/mcp-is-a-transport-not-an-architecture?utm_source=blog.peterritchie.com"&gt;MCP Is a Transport, Not an Architecture (English)&lt;/a&gt; by Scott Galloway&lt;/p&gt;
&lt;!-- ## Windows

--&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://levelup.gitconnected.com/how-i-actually-use-claude-code-in-2026-and-why-it-still-needs-a-parent-f029824f4539?utm_source=blog.peterritchie.com"&gt;How I Actually Use Claude Code in 2026, and Why It Still Needs a Parent&lt;/a&gt; by David Lee&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/career-chat-ai-networking/?utm_source=blog.peterritchie.com"&gt;A career chat with students in the age of AI&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Announcing DotnetPsCmds - PowerShell CmdLets for .NET</title>
			<link>http://blog.peterritchie.com/posts/announcing-dotnetpscmds-powershell-cmdlets-for-dotnet</link>
			<description>&lt;p&gt;&lt;img src="../assets/dotnet-powershell-commands.png" class="img-fluid" alt="DotNet Powershell Commands"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/announcing-dotnetpscmds-powershell-cmdlets-for-dotnet</guid>
			<pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/dotnet-powershell-commands.png" class="img-fluid" alt="DotNet Powershell Commands" /&gt;&lt;/p&gt;
&lt;p&gt;Have you ever wondered why there aren't PowerShell Cmdlets similar to dotnet CLI commands?&lt;/p&gt;
&lt;p&gt;I've played around with some PowerShell scripts—including some scripts for scaffolding various .NET projects—and some C#-based CmdLets for various things. But I decided to take that experience to the next level by publishing a PowerShell module that provides dotnet CLI functionality while leveraging PowerShell idioms and features.&lt;/p&gt;
&lt;p&gt;PowerShell has some interesting features that can make working in the command-line and building scripts a little nicer. One of those features is pipelining. Cmd and Bash have pipes, I know; but PowerShell takes it a step further by supporting object-oriented pipelining. A PowerShell CmdLet can have a .NET object as output (not just text) and can be propagated through the PowerShell command pipeline.&lt;/p&gt;
&lt;h2 id="mvp"&gt;MVP&lt;/h2&gt;
&lt;p&gt;The initial (pre) release is very much an MVP--it provides what I consider minimal functionality to support scaffolding .NET solutions and projects.  It essentially wraps dotnet CLI commands adding some convenience and opinions (&amp;quot;opinionation&amp;quot;?) to defaults and some features.&lt;/p&gt;
&lt;p&gt;To get started with the cmdlets, you can import the module from the PowerShell Gallery:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;Install-Module -Name Pri.Essentials.DotnetPsCmds
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As this release builds on the .NET CLI, the .NET CLI still needs to be installed.&lt;/p&gt;
&lt;h3 id="creating-a-solution"&gt;Creating a Solution&lt;/h3&gt;
&lt;p&gt;To create a solution in the current directory, with a solution name matching the name of the current directory (equivalent of &lt;code&gt;dotnet new sln&lt;/code&gt;):&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$s = New-DotnetSolution;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The output of this cmdlet is a object-oriented representation of the new solution.&lt;/p&gt;
&lt;h3 id="creating-a-project"&gt;Creating a Project&lt;/h3&gt;
&lt;p&gt;To create a project (a &lt;code&gt;classlib&lt;/code&gt; project) in a new &lt;code&gt;Domain&lt;/code&gt; directory with a project name of &lt;code&gt;MyProduct.Domain&lt;/code&gt; (equivalent of &lt;code&gt;dotnet new classlib -o Domain -n MyProduct.Domain&lt;/code&gt;).&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$d = New-DotnetProject 'classlib' Domain MyProduct.Domain;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The output of this cmdlet is a object-oriented representation of the new project.&lt;/p&gt;
&lt;h3 id="adding-package-references"&gt;Adding Package References&lt;/h3&gt;
&lt;p&gt;With object instances of projects and solutions, we can now re-use those objects for other commands, like adding package references to a project:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$t = New-DotnetProject 'xunit' MyProduct/Tests MyProduct.Tests;
Add-DotnetPackages -PackageIds NSubstitute -Project $t;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="adding-project-references"&gt;Adding Project References&lt;/h3&gt;
&lt;p&gt;Similar to adding package references, project objects can be re-used when a project needs to reference another project:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$t = New-DotnetProject 'xunit' MyProduct/Tests MyProduct.Tests;
$d = New-DotnetProject 'classlib' Domain MyProduct.Domain;
Add-DotnetProjectReference -Project $d -TargetProject $t;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="leveraging-pipelining"&gt;Leveraging Pipelining&lt;/h3&gt;
&lt;p&gt;DotNet PowerShell Commands support pipelining. For example, the output of &lt;code&gt;New-DotnetSolution&lt;/code&gt; can be piped to &lt;code&gt;New-DotnetProject&lt;/code&gt; to add the newly created project to the newly created solution:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;New-DotnetSolution | New-DotnetProject 'classlib' Domain MyProduct.Domain;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can store the solution object in a variable to enable adding multiple new projects to the solution:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$s = New-DotnetSolution;
$s | New-DotnetProject 'classlib' Domain MyProduct.Domain;
$s | New-DotnetProject 'xunit' Test MyProduct.Tests;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And pipelining works with adding package references:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$t = New-DotnetProject 'xunit' MyProduct/Tests MyProduct.Tests;
$t | Add-DotnetPackages -PackageIds NSubstitute;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As well as project references:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$d = New-DotnetProject 'classlib' Domain MyProduct.Domain;
New-DotnetProject 'xunit' Tests MyProduct.Tests `
    | Add-DotnetProjectReference -Project $d;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Or with project references &lt;em&gt;&lt;strong&gt;and&lt;/strong&gt;&lt;/em&gt; package references:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$d = New-DotnetProject 'classlib' Domain MyProduct.Domain;
$t = New-DotnetProject 'xunit' Tests MyProduct.Tests `
    | Add-DotnetPackages NSubstitute `
    | Add-DotnetProjectReference -Project $d;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="leveraging-objects"&gt;Leveraging Objects&lt;/h3&gt;
&lt;p&gt;You can leverage properties of objects to avoid repeating yourself when creating solutions and projects with namespaces. For example, rather than having the &amp;quot;MyProduct&amp;quot; portion of the namespace/filename repeated, you can use the solution's &lt;code&gt;Name&lt;/code&gt; property (assuming the current directory has the correct name as the &amp;quot;product name&amp;quot;):&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$s = New-DotnetSolution;
$d = $s | New-DotnetProject 'classlib' &amp;quot;Domain&amp;quot; &amp;quot;$($s.Name).Domain&amp;quot;;
$t = $s | New-DotnetProject 'xunit' &amp;quot;Tests&amp;quot; &amp;quot;$($s.Name).Tests&amp;quot; `
    | Add-DotnetPackages NSubstitute `
    | Add-DotnetProjectReference -Project $d;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which, with equivalent to the following with &lt;code&gt;dotnet&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;dotnet new sln
dotnet new classlib -o Domain -n MyProduct.Domain
del Domain/Class1.cs
dotnet sln add Domain --in-root
dotnet new xunit -o Tests -n MyProduct.Tests
del Tests/UnitTest1.cs
dotnet add Tests package NSubstitute
dotnet add Tests reference Domain
dotnet sln add Tests --in-root
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;(For details on deleting Class1.cs and UnitTest1.cs, see below.)&lt;/p&gt;
&lt;h2 id="opinionated"&gt;Opinionated&lt;/h2&gt;
&lt;p&gt;I mentioned DotNet PowerShell Commands is opinionated in certain respects, here's where.&lt;/p&gt;
&lt;h3 id="solution-folders-for-projects"&gt;Solution Folders For Projects&lt;/h3&gt;
&lt;p&gt;I noticed recently that adding projects to a solution (&lt;code&gt;dotnet sln add&lt;/code&gt;) automatically creates solution folders for projects whose name wasn't identical to the parent folder &lt;em&gt;and doesn't add solution folders when the names are identical&lt;/em&gt;. (Using &lt;code&gt;-o&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; &lt;code&gt;-n&lt;/code&gt; with &lt;code&gt;dotnet new &amp;lt;template&amp;gt;&lt;/code&gt; creates a project with a different name from the directory name.) Personally, I find it cumbersome to navigate the file system and especially repos like GitHub when I have project folders that match the project file name and fully-qualified project names (for the sake of default namespaces). e.g. &lt;code&gt;repos/Pri.Essentials.DotnetPsCmds/src/Pri.Essentials.DotnetPsCmds/Pri.Essentials.DotnetPsCmds.csproj&lt;/code&gt; and tend toward shortened directory names for navigability and readability (&lt;code&gt;repos/DotnetPsCmds/src/DotnetPsCmds/Pri.Essentials.DotnetPsCmds.csproj&lt;/code&gt;) because directory listings often just show a less than useful truncated list of folders that appear to have the same name (Maybe this is better solved with support for setting the default namespace when creating a project? But &lt;code&gt;dotnet&lt;/code&gt; doesn't support that. 😉)&lt;/p&gt;
&lt;p&gt;&lt;img src="../assets/unreadable-folder-list.png" class="img-fluid" alt="Unreadable Folder List" /&gt;&lt;/p&gt;
&lt;p&gt;The implementation for this currently manifests in DotNet PowerShell Commands by using &lt;code&gt;--in-root&lt;/code&gt; with &lt;code&gt;dotnet sln add&lt;/code&gt; to avoid the creation of solution folders with new projects.&lt;/p&gt;
&lt;h3 id="class1.cs"&gt;&lt;code&gt;Class1.cs&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;Personally, the first thing I do when creating a class library project via &lt;code&gt;dotnet&lt;/code&gt; or Visual Studio is to delete the &lt;code&gt;Class1.cs&lt;/code&gt; file. DotNet PowerShell Commands automatically deletes this file when it creates a &lt;code&gt;classlib&lt;/code&gt; project. I'm assuming users of DotNet PowerShell Commands are intermediate to advanced and feel the same way.&lt;/p&gt;
&lt;h3 id="unittest1.cs"&gt;&lt;code&gt;UnitTest1.cs&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;DotNet PowerShell Commands does the same thing with &lt;code&gt;UnitTest1.cs&lt;/code&gt; in &lt;code&gt;xunit&lt;/code&gt;/&lt;code&gt;xunit3&lt;/code&gt; projects as it does with &lt;code&gt;Class1.cs&lt;/code&gt; in &lt;code&gt;classlib&lt;/code&gt; projects.&lt;/p&gt;
&lt;h2 id="extra-features-so-far"&gt;Extra Features, So Far&lt;/h2&gt;
&lt;p&gt;Over and above what &lt;code&gt;dotnet&lt;/code&gt; provides, DotNet PowerShell Commands also allows creating a custom solution folder when adding a project to a solution via &lt;code&gt;Add-DotnetProject&lt;/code&gt; (not to be confused with &lt;code&gt;New-DotnetProject&lt;/code&gt;). This is partially to circumvent the opinionated view that hardly anyone would want a solution folder per project by default. But this provides extra value in that if you use the same folder name with the addition multiple projects, all the projects will be grouped in the same solution folder.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-pwsh"&gt;$d = New-DotnetProject 'classlib' Domain MyProduct.Domain;
$s = New-DotnetSolution;
$s | Add-DotnetProject -Project $d -SolutionFolder MyFolder;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="more-details"&gt;More details&lt;/h2&gt;
&lt;p&gt;For more details, please see the &lt;a href="https://github.com/peteraritchie/Pri.Essentials.DotnetPsCmds#dotnet-powershell-cmdlets"&gt;open-source project on GitHub&lt;/a&gt;. In there you'll find a more thorough &lt;a href="https://github.com/peteraritchie/Pri.Essentials.DotnetPsCmds#dotnet-powershell-cmdlets"&gt;README&lt;/a&gt; that goes into a bit more detail on CmdLets and examples. You can also create &lt;a href="https://github.com/peteraritchie/Pri.Essentials.DotnetPsCmds/issues"&gt;issues&lt;/a&gt; or &lt;a href="https://github.com/peteraritchie/Pri.Essentials.DotnetPsCmds/discussions"&gt;discussions&lt;/a&gt; with questions/suggestions in addition to &lt;a href="https://github.com/peteraritchie/Pri.Essentials.DotnetPsCmds/blob/main/CONTRIBUTING.md#contributing-to-this-net-project"&gt;contributing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'd like to pull together a simple roadmap for what I'm thinking for this in the near future. Some things I'm thinking so far are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;supporting &lt;code&gt;slnx&lt;/code&gt; files (by default?)&lt;/li&gt;
&lt;li&gt;Templated solutions: creating all the parts of common solution templates in a single command.&lt;/li&gt;
&lt;li&gt;supporting solution-level features like Directory.Build.props, global.json&lt;/li&gt;
&lt;li&gt;GitHub repo features like workflows, dependabot, etc.&lt;/li&gt;
&lt;li&gt;Support modifying project-level properties via commands (like &lt;code&gt;GenerateDocumentationFile&lt;/code&gt;, &lt;code&gt;PublishRepositoryUrl&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="blockquote"&gt;
&lt;p&gt;&lt;strong&gt;If you find this useful&lt;/strong&gt;&lt;br /&gt;
I'm a freelance software architect. If you find this post useful and think I can provide value to your team, please reach out to see how I can help. See &lt;a href="/about"&gt;About&lt;/a&gt; for information about the services I provide.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!-- Calendly inline widget begin --&gt;
&lt;div class="calendly-inline-widget" data-url="https://calendly.com/peterritchie/client-meet-greet-zoom" style="min-width:320px;height:700px;"&gt;&lt;/div&gt;
&lt;script type="text/javascript" src="https://assets.calendly.com/assets/external/widget.js" async&gt;&lt;/script&gt;
&lt;!-- Calendly inline widget end --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - January 5</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-5</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-january-5</guid>
			<pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security
 --&gt;
&lt;h2 id="open-source"&gt;Open-source&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/permissionlesstech/bitchat#?utm_source=blog.peterritchie.com"&gt;GitHub - permissionlesstech/bitchat: bluetooth mesh chat, IRC vibes&lt;/a&gt; by permissionlesstech&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/aleixrodriala/wa-tunnel?tab=readme-ov-file#wa-tunnel---tcp-tunneling-through-whatsapp?utm_source=blog.peterritchie.com"&gt;GitHub - aleixrodriala/wa-tunnel: Tunneling Internet traffic over Whatsapp&lt;/a&gt; by aleixrodriala&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/open-source/maintainers/this-years-most-influential-open-source-projects/?utm_source=blog.peterritchie.com"&gt;This year's most influential open source projects&lt;/a&gt; by Lee Reilly&lt;/p&gt;
&lt;!-- ## Software Architecture

## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2026/01/04/critter-stack-and-jasperfx-retrospective-for-2025/?utm_source=blog.peterritchie.com"&gt;Critter Stack and JasperFx Retrospective for 2025&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/how-to-build-a-high-performance-cache-without-external-libraries?utm_source=blog.peterritchie.com"&gt;How to Build a High-Performance Cache Without External Libraries&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/asp-net-core-idisplaymetadataprovider-46al?utm_source=blog.peterritchie.com"&gt;ASP .NET Core IDisplayMetadataProvider&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://idunno.org/generating-sboms-for-net-apps-and-nuget-packages-with-microsoft-sbom-targets/?utm_source=blog.peterritchie.com"&gt;Generating SBOMs in NuGet packages with Microsoft.Sbom.Targets&lt;/a&gt; by Barry Dorrans&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/creating-provenance-attestations-for-nuget-packages-in-github-actions/?utm_source=blog.peterritchie.com"&gt;Creating provenance attestations for NuGet packages in GitHub Actions&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/CodingWithCalvin/VS-ProjectRenamifier?tab=readme-ov-file#project-renamifier?utm_source=blog.peterritchie.com"&gt;GitHub - CodingWithCalvin/VS-ProjectRenamifier: A Visual Studio extension that allows you to safely - and COMPLETELY - rename a Project from within Visual Studio!&lt;/a&gt; by CodingWithCalvin&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chris-ayers.com/2025/12/11/aspire-cli-getting-started/?utm_source=blog.peterritchie.com"&gt;Getting Started with the Aspire CLI - A Complete Guide&lt;/a&gt; by Chris Ayers&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/enterprise-patterns-for-asp-net-core-minimal-api-identity-map-pattern/?utm_source=blog.peterritchie.com"&gt;Enterprise Patterns for ASP.NET Core Minimal API: Identity Map Pattern&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/top-dotnet-videos-live-streams-of-2025/?utm_source=blog.peterritchie.com"&gt;Top .NET Videos &amp;amp; Live Streams of 2025&lt;/a&gt; by Jon Galloway&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/vs-live-2026-immersive-learning-for-vs2026/?utm_source=blog.peterritchie.com"&gt;Welcome to 2026, A Growth Year for All of Us&lt;/a&gt; by Jim Harrer&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design

## DevOps

## Software Design

 --&gt;
 &lt;!-- ## Mobile

## Agile/Work Life

## Project Management/Administration

## REST/APIs

 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-vnext-emulator-query-and-observability-enhancements/?utm_source=blog.peterritchie.com"&gt;Azure Cosmos DB vNext Emulator: Query and Observability Enhancements&lt;/a&gt; by Abhishek Gupta&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/work-item-linking-for-advanced-security-alerts-now-available/?utm_source=blog.peterritchie.com"&gt;Work item linking for Advanced Security alerts now available&lt;/a&gt; by Laura Jiang&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/context-is-the-bottleneck-in-software-development/?utm_source=blog.peterritchie.com"&gt;Context Is the Bottleneck in Software Development&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/css-quote-attr/?utm_source=blog.peterritchie.com"&gt;CSS for markdown blockquote attribution&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.safia.rocks/2025/12/22/ansi-codes/?utm_source=blog.peterritchie.com"&gt;There's no escaping it: an exploration of ANSI codes&lt;/a&gt; by Safia Abdalla&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2026/01/05/coupling-from-a-big-o-perspective/?utm_source=blog.peterritchie.com"&gt;Coupling from a big-O perspective&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20260106-00/?p=111968?utm_source=blog.peterritchie.com"&gt;Swapping two blocks of memory that reside inside a larger block, in constant memory, refinement&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/reduce-github-actions-runner-cpu-usage.htm?utm_source=blog.peterritchie.com"&gt;Reduce GitHub Actions runner CPU usage&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mostlylucid.net/blog/zero-pii-customer-intelligence-part1?utm_source=blog.peterritchie.com"&gt;Zero PII Customer Intelligence - Part 1: The Philosophy&lt;/a&gt; by Scott Galloway&lt;/p&gt;
&lt;!-- ## Windows

## AI
--&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - December 22</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-december-22</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-december-22</guid>
			<pubDate>Tue, 23 Dec 2025 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source

## Software Architecture

## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/enterprise-patterns-for-asp-net-core-minimal-api-data-mapper-pattern/?utm_source=blog.peterritchie.com"&gt;Enterprise Patterns for ASP.NET Core Minimal API: Data Mapper Pattern&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/microsoft-testing-platform-azure-retry/?utm_source=blog.peterritchie.com"&gt;Microsoft.Testing.Platform Now Fully Supported in Azure DevOps&lt;/a&gt; by Youssef Fahmy&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-2026-debugging-with-copilot/?utm_source=blog.peterritchie.com"&gt;Visual Studio 2026: Debugging with Copilot&lt;/a&gt; by Harshada Hole&lt;/p&gt;
&lt;p&gt;&lt;a href="https://andrewlock.net/creating-a-dotnet-profiler-using-csharp-with-silhouette/?utm_source=blog.peterritchie.com"&gt;Creating a .NET CLR profiler using C# and NativeAOT with Silhouette&lt;/a&gt; by Andrew Lock&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.mostlylucid.net/blog/analysing-large-csv-files-with-local-llms?utm_source=blog.peterritchie.com"&gt;How to Analyse Large CSV Files with Local LLMs in C# (English)&lt;/a&gt; by Scott Galloway&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.safia.rocks/2025/12/15/aspire-image-push/?utm_source=blog.peterritchie.com"&gt;Fixing Aspire's image problem: a look at container registry support in 13.1&lt;/a&gt; by Safia Abdalla&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/karenpayneoregon/asp-net-core-idisplaymetadataprovider-46al?utm_source=blog.peterritchie.com"&gt;ASP .NET Core IDisplayMetadataProvider&lt;/a&gt; by Karen Payne&lt;/p&gt;
&lt;p&gt;&lt;a href="https://jeremydmiller.com/2025/12/17/critter-stack-roadmap-for-2026/?utm_source=blog.peterritchie.com"&gt;Critter Stack Roadmap for 2026&lt;/a&gt; by Jeremy D. Miller&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/server-sent-events-in-aspnetcore-and-dotnet-10?utm_source=blog.peterritchie.com"&gt;Server-Sent Events in ASP.NET Core and .NET 10&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;!-- ## Conferences and Speaking

## Domain Driven Design
 --&gt;
&lt;h2 id="devops"&gt;DevOps&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/the-new-test-run-hub-is-going-generally-available/?utm_source=blog.peterritchie.com"&gt;The New Test Run Hub is Going Generally Available!&lt;/a&gt; by Panagiotis Liaros&lt;/p&gt;
&lt;h2 id="software-design"&gt;Software Design&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.howtogeek.com/why-clean-code-might-be-holding-you-back/?utm_source=blog.peterritchie.com"&gt;Is clean code holding you back? The dangers of overthinking your code structure&lt;/a&gt; by Zunaid Ali&lt;/p&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/why-microservices-debates-miss-the-point/?utm_source=blog.peterritchie.com"&gt;Why &amp;quot;Microservices&amp;quot; Debates Miss the Point&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;!-- ## Mobile

## Agile/Work Life

## Project Management/Administration

 --&gt;
&lt;h2 id="restapis"&gt;REST/APIs&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://apisyouwonthate.com/newsletter/design-first-ai-never/?utm_source=blog.peterritchie.com"&gt;Design First, AI Never&lt;/a&gt; by Alexander Karan&lt;/p&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://techcommunity.microsoft.com/blog/messagingonazureblog/announcing-general-availability-of-geo-replication-for-azure-service-bus-premium/4413164?utm_source=blog.peterritchie.com"&gt;Announcing General Availability of Geo-Replication for Azure Service Bus Premium&lt;/a&gt; by Eldert Grootenboer&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-december-2025/?utm_source=blog.peterritchie.com"&gt;Azure Developer CLI (azd) Dec 2025&lt;/a&gt; by Kristen Womack&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/janusgraph-azure-cassandra-graph-databases/?utm_source=blog.peterritchie.com"&gt;Unlock the power of distributed graph databases with JanusGraph and Azure Apache Cassandra&lt;/a&gt; by Srikanth Sridhar&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://cassidoo.co/post/dot-github/?utm_source=blog.peterritchie.com"&gt;Configure your repositories with .github&lt;/a&gt; by Cassidy Williams&lt;/p&gt;
&lt;!-- ## Windows
--&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.zdnet.com/article/anthropic-claude-skills-update/?utm_source=blog.peterritchie.com"&gt;Claude's Skills just got easier to manage and share&lt;/a&gt; by Sabrina Ortiz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.theregister.com/2025/12/17/ai_code_bugs/?utm_source=blog.peterritchie.com"&gt;AI-authored code needs more attention, contains worse bugs&lt;/a&gt; by Thomas Claburn&lt;/p&gt;
&lt;p&gt;&lt;a href="https://dev.to/yooi/beyond-coding-your-accountability-buddy-with-claude-code-skill-4omh?utm_source=blog.peterritchie.com"&gt;Beyond Coding: Your Accountability Buddy with Claude Code Skill&lt;/a&gt; by Ooi Yee Fei&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.404media.co/hack-reveals-the-a16z-backed-phone-farm-flooding-tiktok-with-ai-influencers/?utm_source=blog.peterritchie.com"&gt;Hack Reveals the a16z-Backed Phone Farm Flooding TikTok With AI Influencers&lt;/a&gt; by Emanuel Maiberg&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.blog/news-insights/policy-news-and-insights/the-future-of-ai-powered-software-optimization-and-how-it-can-help-your-team/?utm_source=blog.peterritchie.com"&gt;The future of AI-powered software optimization (and how it can help your team)&lt;/a&gt; by Paull Young&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
		<item>
			<title>Things That Caught My Attention Last Week - December 16</title>
			<link>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-december-15</link>
			<description>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i"&gt;&lt;/p&gt;</description>
			<guid>http://blog.peterritchie.com/posts/things-that-caught-my-attention-last-week-december-15</guid>
			<pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate>
			<content:encoded>&lt;p&gt;&lt;img src="../assets/caught-i.png" class="img-fluid" alt="caught-my-i" /&gt;&lt;/p&gt;
&lt;!-- ## Security

## Open-source

## Software Architecture

## Presenting
 --&gt;
&lt;h2 id="net"&gt;.NET&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.woodruff.dev/enterprise-patterns-for-asp-net-core-minimal-api-service-layer-pattern-making-http-a-client-not-the-boss/?utm_source=blog.peterritchie.com"&gt;Enterprise Patterns for ASP.NET Core Minimal API: Service Layer Pattern - Making HTTP a Client, Not the Boss&lt;/a&gt; by Chris Woodruff&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/how-to-build-ios-widgets-with-dotnet-maui/?utm_source=blog.peterritchie.com"&gt;How to Build iOS Widgets with .NET MAUI&lt;/a&gt; by Toine de Boer&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/visualstudio/behind-the-scenes-of-the-visual-studio-feedback-system/?utm_source=blog.peterritchie.com"&gt;Behind the scenes of the Visual Studio feedback system&lt;/a&gt; by Mads Kristensen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.meziantou.net/resolving-overload-ambiguity-with-collection-expressions.htm?utm_source=blog.peterritchie.com"&gt;Resolving Overload Ambiguity with Collection Expressions&lt;/a&gt; by Gérald Barré&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.safia.rocks/2025/12/08/aspire-docker-compose/?utm_source=blog.peterritchie.com"&gt;How Aspire composes itself: an overview of Aspire's Docker Compose integration&lt;/a&gt; by Safia Abdalla&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.milanjovanovic.tech/blog/the-new-slnx-solution-format-migration-guide?utm_source=blog.peterritchie.com"&gt;The New .slnx Solution Format (migration guide)&lt;/a&gt; by Milan Jovanović&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.pkgstore.io/publish?utm_source=blog.peterritchie.com"&gt;Publish - pkgstore&lt;/a&gt; by&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chris-ayers.com/2025/12/11/aspire-cli-getting-started/?utm_source=blog.peterritchie.com"&gt;Getting Started with the Aspire CLI - A Complete Guide&lt;/a&gt; by Chris Ayers&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/devlooped/nugetizer/?tab=readme-ov-file#-nugetizer?utm_source=blog.peterritchie.com"&gt;GitHub - devlooped/nugetizer: A simple to understand packing model for authoring NuGet packages&lt;/a&gt; by devlooped&lt;/p&gt;
&lt;h2 id="conferences-and-speaking"&gt;Conferences and Speaking&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://dylanbeattie.net/2025/12/08/so-you-want-to-speak-at-software-conferences.html?utm_source=blog.peterritchie.com"&gt;So You Want To Speak At Software Conferences?&lt;/a&gt; by Sylan Beattie&lt;/p&gt;
&lt;p&gt;&lt;a href="https://ndctoronto.com/?utm_source=blog.peterritchie.com"&gt;NDC Toronto 2026 | Conference for Software Developers&lt;/a&gt; by NDC&lt;/p&gt;
&lt;h2 id="domain-driven-design"&gt;Domain Driven Design&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://codeopinion.com/aggregates-in-ddd-model-rules-not-relationships/?utm_source=blog.peterritchie.com"&gt;Aggregates in DDD: Model Rules, Not Relationships&lt;/a&gt; by Derek Comartin&lt;/p&gt;
&lt;!-- ## DevOps

## Software Design

## Mobile

## Agile/Work Life

## Project Management/Administration

## REST/APIs

 --&gt;
&lt;h2 id="azure"&gt;Azure&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-blue-green-aca-deployment/?utm_source=blog.peterritchie.com"&gt;Blue-green deployment in Azure Container Apps using Azure Developer CLI&lt;/a&gt; by PuiChee (PC) Chan&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/cosmosdb/azure-cosmos-db-becoming-a-search-native-database/?utm_source=blog.peterritchie.com"&gt;Azure Cosmos DB : Becoming a Search-Native Database&lt;/a&gt; by Hari Sudan S&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/devops/announcing-azure-devops-server-general-availability/?utm_source=blog.peterritchie.com"&gt;Announcing Azure DevOps Server General Availability&lt;/a&gt; by Gloridel Morales&lt;/p&gt;
&lt;h2 id="software-development"&gt;Software Development&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://blog.ploeh.dk/2025/12/08/pattern-guards-for-a-protocol/?utm_source=blog.peterritchie.com"&gt;Pattern guards for a protocol&lt;/a&gt; by Mark Seemann&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/oldnewthing/20251215-00/?p=111869?utm_source=blog.peterritchie.com"&gt;The Windows clipboard automatic text conversion algorithm is path-dependent&lt;/a&gt; by Raymond Chen&lt;/p&gt;
&lt;!-- ## Windows
--&gt;
&lt;h2 id="ai"&gt;AI&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://mamund.substack.com/p/shortwave-beyond-hallucinations-the?utm_source=blog.peterritchie.com"&gt;Shortwave: Beyond Hallucinations: The Illusion of Understanding&lt;/a&gt; by Mike Amundsen&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.guru3d.com/story/windows-11-script-emerges-claiming-to-strip-all-ai-features-from-the-os/?utm_source=blog.peterritchie.com"&gt;Windows 11 Script Emerges Claiming to Strip All AI Features From the OS&lt;/a&gt; by Hilbert Hagedoorn&lt;/p&gt;
&lt;p&gt;&lt;a href="https://simonwillison.net/2025/Dec/12/openai-skills/?utm_source=blog.peterritchie.com"&gt;OpenAI are quietly adopting skills, now available in ChatGPT and Codex CLI&lt;/a&gt; by Simon Willison&lt;/p&gt;
&lt;p&gt;&lt;a href="https://techcommunity.microsoft.com/discussions/windows11/microsoft-finally-admits-almost-all-major-windows-11-core-features-are-broken/4475930?utm_source=blog.peterritchie.com"&gt;Microsoft finally admits almost all major Windows 11 core features are broken&lt;/a&gt; by Theo Dalton&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.zdnet.com/article/why-ai-agents-failed-to-take-over-in-2025-story-as-old-as-time-deloitte/?utm_source=blog.peterritchie.com"&gt;Why AI agents failed to take over in 2025 - it's 'a story as old as time,' says Deloitte&lt;/a&gt; by Sabrina Ortiz&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.infoworld.com/article/4098925/is-vibe-coding-the-new-gateway-to-technical-debt.html?utm_source=blog.peterritchie.com"&gt;Is vibe coding the new gateway to technical debt?&lt;/a&gt; by Matthew Tyson&lt;/p&gt;
&lt;!-- ## Social Media

## Online Tools

## Databases

## Cloud

## Computing

## Podcasts

## Other Link Collections

 --&gt;
</content:encoded>
		</item>
	</channel>
</rss>