Testing your incremental generator pipeline outputs are cacheable: Creating a...
This is the tenth post in the series: Creating a source generator. Part 1 - Creating an incremental generator Part 2 - Testing an incremental generator with snapshot testing Part 3 - Integration...
View ArticleUnderstanding C# 8 default interface methods
In this post I provide an introduction to default interface methods, how they work at a high level, and their typical uses. Finally, I discuss some of the sharp edges on the feature: things to watch...
View ArticleUsing default interface methods for performance gains in IHeaderDictionary
In this post I show an example of how the C# 8 feature, default interface methods, can be used to improve performance. I describe a pull request to ASP.NET Core that shows how default interface...
View Article8 ways to set the URLs for an ASP.NET Core app
By default, without additional configuration in .NET 8, ASP.NET Core apps listen on the URL http://localhost:5000. In this post I show 8 different ways to change this URL. This is an update to a post...
View ArticleUsing named pipes with ASP.NET Core and HttpClient
In this post I describe Windows named pipes, what they are, the scenarios where they're useful, how to use them with ASP.NET Core, and how to call a named pipe ASP.NET Core app using HttpClient. What...
View ArticleUsing Unix domain sockets with ASP.NET Core and HttpClient
In this post I describe Unix domain sockets, what they are, the scenarios where they're useful, how to use them with ASP.NET Core, and how to call a UDS ASP.NET Core app using HttpClient. For those...
View ArticleUsing Unix domain sockets with ASP.NET Core and HttpClient
In this post I describe Unix domain sockets, what they are, the scenarios where they're useful, how to use them with ASP.NET Core, and how to call a UDS ASP.NET Core app using HttpClient. For those...
View ArticleAn introduction to the heap data structure and .NET's priority queue
In this post I provide an introduction to the heap data structure, describe why it's useful, and show how it's used in .NET's PriorityQueue type. What is a heap? You may be familiar with the phrase...
View ArticleBehind the implementation of .NET's PriorityQueue
In my previous post I provided an introduction to the heap data structure and described how one of its main usages is in building a priority queue, such as the .NET type PriorityQueue. In this post, I...
View ArticleImplementing Dijkstra's algorithm for finding the shortest path between two...
In a previous post I provided an introduction to the generic heap data structure and how it's used by the .NET PriorityQueue type. In the subsequent post I discussed the implementation of some...
View ArticleSyncing a git branch between Windows and WSL filesystems
In this post I show how you can work on a git branch with a repository checked out in Windows, and then sync that branch to another git folder in WSL, without having to push to a remote server like...
View ArticleRendering Math in HTML: MathML, MathML Core, and AsciiMath
In this post I discuss some lesser known HTML elements: the MathML (and MathMLCore) specification, and show how these can be used to render math equations in HTML. Finally I discuss the AsciiMath...
View ArticleHacking together an AsciiMath parser for .NET
In my previous post, I gave a brief introduction to MathML, the HTML elements for displaying mathematical equations and notation. At the end of that post I showed AsciiMath, an easy-to-write markup...
View ArticleCreating a .NET AsciiMath parser and using it in a Markdig extension
In this post I describe how and why I ported an AsciiMath to MathML converter to .NET, and how I created a small extension to Markdig that uses the new AsciiMath parser. AsciiMath, MathML and...
View ArticleAn introduction to primary constructors in C#12
In this post I introduce the primary constructors feature that debuted in C#12 along with .NET 8. I describe the various ways to use them and show how they work behind the scenes. The first appearance...
View ArticleThoughts about primary constructors: 3 pros and 5 cons
In my previous post I provided an introduction to primary constructors in C#12. In this post I describe some of the ways I like to use primary constructor and also some of the things I don't like...
View ArticleBlocking primary constructor member capture using a Roslyn Analyzer
In my previous posts I talked about primary constructors, how they work, and some of the things I like and dislike about them. In this post I show a Roslyn analyzer that you can add to your project to...
View ArticleConditionally skipping a trigger job in GitLab based on a previous job
In this post I provide the solution to a very specific situation in GitLab: You have a job that calculates various variables for the current pipeline. You want to use those variables to decide whether...
View ArticleIntroducing collection expressions in C#12: Behind the scenes of collection...
This is the first post in the series: Behind the scenes of collection expressions. Part 1 - Introducing collection expressions in C#12 (this post) This series take an in-depth look at collection...
View ArticleExploring the generated code: List and fallback cases: Behind the scenes of...
This is the second post in the series: Behind the scenes of collection expressions. Part 1 - Introducing collection expressions in C#12 Part 2 - Exploring the generated code: List<T> and...
View Article