RSSAmplifier

Blog

Mike Hadlow

Recent content on Mike Hadlow

mikehadlow.comRSS feed ↗21 posts

Latest posts

Running individual Bun tests with Zed tasks

I’m a big fan of the Zed editor. It’s been my daily driver (when I’ve had a choice) for around a year now. It runs like butter on an ancient nine-year-old Dell XPS that’s been my Arch Linux hobby machine for a while. Back when I was a Windows guy coding in Visual Studio, one of my favourite tools was TestDriven.NET, an open source test runner by Jamie Cansdale. A superpower…

Book Review: Vibe Coding by Gene Kim and Steve Yegge

For myself and many others, everything changed around November last year. I’d just started to use Codex and Claude Code when Anthropic’s Opus 4.5 was released. It was immediately apparent that this was a step change, both in the capabilities of the models themselves and the tooling that enabled a deep interaction with the CLI. I’d experimented with IDE plugin chatbots and code…

Vibe-Coding BlueSky Comments

I’ve vibe-coded a new commenting system for this blog using BlueSky as the backend. At the bottom of the page you’ll see a call to action to “Join the conversation on BlueSky” which takes you to a BlueSky post. Any replies to that post will also appear at the bottom of the page, there might even be some there now.

Avoid IaaS Lock-In With a SAML Proxy

TL;DR Adopting an Identity As A Service (IaaS) provider can save huge time and effort when implementing a B2B SaaS product, but it can also result in deep lock-in with the provider. I explain how deploying a SAML Proxy can mitigate this, and provide a case study of migrating hundreds of customers from one IaaS provider to a competitor instantly and with near zero disruption. I also introduce my…

Syncing a Google Docs Spreadsheet to a GitHub Hosted Blog

I read a lot . Every year I get through 15 to 20 books, mostly non-fiction, and particularly history. I keep a spreadsheet with a record of the book title and author, and when I started and ended reading it. When I complete a book, I write a short review, usually not more than a paragraph or so. A few years back I also started a music review blog, hosted with GitHub pages, and built using the…

About

Hello! I am Mike Hadlow. I am a software engineer, based in the UK. I’ve been building software professionally for over 20 years. The majority of my career was with Microsoft development tools and technologies and since 2002 primarily with .NET. But for the last 3 years I’ve been working mostly with Node and TypeScript (and a little bit of Elm). During that time I’ve worked on a…

Emojis As Favicons

I&rsquo;m no designer, and I like to keep things simple and easy to configure. So for the various websites I create I like to have an easy way to create a favicon icon. To do this I use a reusable snippet of SVG that I can customize to have a different color and characters for each site. Here is the SVG for the favicon for this site: < svg viewBox = '0 0 100 100' xmlns =…

Book Review: D3 Start To Finish by Peter Cook

This is my review of D3 Start to Finish by Peter Cook . Peter is a well known author and educator in the world of data visualisation as well as being an in-demand software developer. This is his introductory tutorial to D3 , a Javascript library used primarily for targetting SVG for browser native data visualisations. D3 is a very powerful tool, as a quick browse of the website will demonstrate.…

Writing .NET Application Services for Kubernetes

In a traditional .NET distributed application, application services (not to be confused with the Kubernetes &lsquo;service&rsquo; object) would either be written as IIS hosted web applications or Windows Services. When building .NET (micro)services to be deployed in a Kubernetes cluster pretty much every facet of the service needs to be reconsidered, not only the hosting environment but the way…

Book Review: Team Topologies by Skelton and Pais

This is my book review of Team Topologies by Matthew Skelton and Manuel Pais. Conway&rsquo;s Law , coined by computer scientist Melvin Conway states: Any organization that designs a system (defined broadly) will produce a design whose structure is a copy of the organization&rsquo;s communication structure. This book is a distillation of Skelton and Pais&rsquo;s experiences helping teams execute…

C#: Add event handlers dynamically using reflection

Recently I had a situation where I needed to test a class with dozens of event handlers. Rather than manually write the repetitive code to attach the handlers I decided to cheat and use reflection. Since there wasn&rsquo;t anything immediately available online that I could find, I&rsquo;m sharing an example here to show how to do it.

Book Review: Code That Fits In Your Head by Mark Seeman

This is my review of Mark Seemann&rsquo;s new book, Code That Fits In Your Head - Heuristics for Software Engineering .

How to use Google.Protobuf without code generation in C#

The Google.Protobuf NuGet package is the recommended protobuf serializer for .NET. The documented way of using it is to code gen both C# models and serializers from .proto files using the protoc tool. However, sometimes it&rsquo;s more convenient to do serialization/deserialization on an ad-hoc basis without code generation. The Google.Protobuf NuGet package provides APIs to do this, but they are…

Blocking XREAD From A Redis Stream Using StackExchange.Redis

The StackExchange.Redis NuGet package is the most popular .NET client for Redis . It&rsquo;s stable, high-performance, with a great community and wide usage. One of it&rsquo;s most interesting features is the way it does network multiplexing . This allows multi-threaded applications to use a single TCP/IP connection without blocking. Unfortunately this also means that the library does not support…

Large Numbers of Bindings With RabbitMQ

RabbitMQ (or more specifically the AMQP protocol) provides a degree of flexibility over other message-queue solutions with its exchange-binding-queue model. Some possible solutions to scaling or business issues result in large numbers of bindings being created, perhaps thousands per queue. We tested RabbitMQ to find out what the binding performance limits were and present the results in this post.…

Register a Microsoft.Extensions.Logging.ILoggerProvider with EasyNetQ

EasyNetQ is an opinionated fully featured client API for RabbitMQ . It provides extensive diagnostic logging capabilities via LibLog a logging abstraction that provides support for many common logging libraries. Unfortuntely LigLog doesn&rsquo;t support Microsoft.Extensions.Logging , but this post provides an adaptor, EasyNetQMicrosoftExtensionsLogProvider that will allow EasyNetQ to log to a…

How to create a standalone ConsoleLoggerProvider

If, for whatever reason you want to create a stand alone instance of ConsoleLoggerProvider without having to leverage dependency injection and the full Hosting framework, you&rsquo;ll find that the ConsoleLoggerProvider &rsquo;s constructor requires an instance of an IOptionsMonitor<T> , the only instance of which OptionsMonitor<T> in turn has a complex constructor with many dependencies. This all…

Microsoft.Extensions.DependencyInjection object graph writer

It&rsquo;s very useful sometimes to be able to quickly view the object graph created by a dependency injection (or IoC) container, especially when you&rsquo;re a new starter on an existing project. I was recently attempting to get up to speed on a .NET Core project, but I couldn&rsquo;t find anything that would output an object graph from the Microsoft.Extensions.DependencyInjection…

A Simple Console Periodic Loop in C#

I found myself writing the same code several times for a simple console periodic loop, so I&rsquo;m posting the framework here mainly for my own benefit. This uses C# 7&rsquo;s new async Main entry point and avoids the need to spawn a new thread for the loop. Worth noting though that each iteration after the Task.Delay will run on a threadpool thread.

Contact

Service Address Email mike@suteki.co.uk BlueSky @mikehadlow.com GitHub @mikehadlow

Welcome To My New Blog

I&rsquo;ve been blogging since 2005 and have written hundreds of posts in that time, but my blogging output has declined somewhat over the last few years. That&rsquo;s partly laziness on my part, and partly because Twitter provides a much more convenient platform for the quick take, but it&rsquo;s also because there&rsquo;s too much friction in publishing a post on my long running Google Blogger…