Introducing OpenCLI

About three years ago, I was invited to meetings with the System.CommandLine team at Microsoft. They were in the process of finalizing System.CommandLine and wanted input from people in the community, and I was included due to my work on Spectre.Console and Spectre.Console.Cli.

Building an iterator in Swift

As part of learning Swift, I decided to port my project Spectre.Console (written in C#) to Swift.

Intellisense for your GitHub Actions workflows

Although I'm a big fan of GitHub, I'm not a big fan of YAML. When it comes to orchestrating my builds, I usually prefer some kind of build script, but bootstrapping that build script is a necessary evil so we're stuck with YAML for that part.

Thank you Octopus Deploy!

When I started working on Cake in 2014, I did it to scratch an itch I had. FAKE existed (which has been a tremendous initial inspiration), but I didn't know F# enough (at all) to be confident enough to bet our build process on it.

Enumerating monitors in Rust using Win32 API

I had to enumerate all monitors yesterday using the EnumDisplayMonitors Win32 function, and I thought I would write a couple of lines about what I did since I couldn't find any useful information about how to do this.

Targeting ARM64 for Windows in Rust

I wanted to run a thing I'm building with Rust on my Surface Pro X which is an ARM64 device the other day. My initial thought when I got the idea, was "I hope it's not complicated to do".

How to create .NET Core release artifacts with GitHub Actions

In this blog post, we'll create a GitHub Action that triggers each time a release is published, builds a binary on three different build agents (Windows, macOS, and Ubuntu), and attaches the compressed artifacts to the release.

How to write a stateful Roslyn analyzer

I wrote a stateful Roslyn analyzer a couple of days ago to analyze the codebase at work for irregularities, and I thought I would share my findings on how I did it.

Testing stuff with Windows Sandbox

Last week I decided that I wanted to try the new version of Windows Subsystem for Linux (conveniently named WSL 2). WSL 2 requires that the computer enrolls in Windows slow ring, and since the computer I was on didn't receive any insider builds at all, I went ahead and enabled the slow ring. The update started, and I went to bed.