Vibeblogging

Welcome to VibeBlog, my playground for exploring GitHub's agentic workflows (that's the whole AI-powered automation thing everyone's talking about). It's also a daily experiment in AI-generated writing—one post per day, initially curated from my own knowledge but eventually evolving into a learning tool based on whatever topics catch my interest. The goal? Produce publicly useful content while I play copyeditor to Copilot's drafts, turning AI output into genuinely informative articles.

Page 5 of 7

The Options Pattern in .NET

The Options Pattern in .NET

Configuration is one of those things that looks simple until it isn't. You start by reading a connection string from appsettings.json, and before long you've got a sprawling mix of IConfiguration.GetS...
Minimal APIs in ASP.NET Core

Minimal APIs in ASP.NET Core

When ASP.NET Core Minimal APIs landed in .NET 6, I'll be honest — I wasn't sure what to make of them. Controllers had worked fine for years. Why change things? Then I used them for a small internal to...
C# 15 Union Types: Discriminated Unions Arrive

C# 15 Union Types: Discriminated Unions Arrive

C# developers have wanted discriminated unions for years. There are whole libraries built around the gap — OneOf, ErrorOr, LanguageExt — because the language just didn't have a native answer. That cha...
Background Services in ASP.NET Core

Background Services in ASP.NET Core

Think about a restaurant kitchen. The wait staff handle the incoming orders — they're your request-handling pipeline, busy and visible. But behind the scenes, someone's doing prep work, cleaning equip...
Health Checks in ASP.NET Core

Health Checks in ASP.NET Core

Yesterday we wired up OpenTelemetry to get traces, metrics, and logs flowing. Today we're looking at health checks — a simpler but equally important piece of the production-readiness puzzle. Where OTe...
Getting Started with OpenTelemetry in ASP.NET Core

Getting Started with OpenTelemetry in ASP.NET Core

Yesterday we added structured logging with Serilog and talked about correlation IDs. Today we're going to complete the picture with OpenTelemetry — the open standard that ties traces, metrics, and log...
Structured Logging in .NET with Serilog

Structured Logging in .NET with Serilog

Logging is one of those things every app does, but most apps do badly. You end up with files full of sentences like "User 42 placed order 99 for $19.99" — which looks fine until you need to query acro...
Benchmarking with BenchmarkDotNet in C#

Benchmarking with BenchmarkDotNet in C#

You've just written two implementations of the same algorithm and you're wondering which one's faster. You could wrap them in Stopwatch calls and run them a few times, but that's surprisingly unreliab...
Roslyn Analyzers in C#

Roslyn Analyzers in C#

Yesterday we looked at Source Generators — code that runs at compile time to produce new C# files. Roslyn Analyzers are the other half of that story. Where generators create code, analyzers inspect it...
Source Generators in C#

Source Generators in C#

Source generators are one of those features that feel like magic once you start using them. Introduced in C# 9, they let the compiler generate code at build time — no reflection, no runtime overhead, ...
Producer-Consumer with Channels in C#

Producer-Consumer with Channels in C#

If you've ever needed to pass data between tasks running at different speeds, you've probably reached for a ConcurrentQueue\<T\> and a bunch of manual signalling code. There's a cleaner way: System.Th...
IAsyncEnumerable in C#

IAsyncEnumerable in C#

If you've used async/await in C#, you know how to await a single value. But what about a stream of values that arrive asynchronously over time? That's where IAsyncEnumerable\<T\> comes in, and once yo...
Span and Memory in C#

Span and Memory in C#

If you've ever wondered how .NET achieves near-zero-allocation performance for string parsing or buffer operations, the answer usually involves Span\<T\> and Memory\<T\>. These types let you work with...
Nullable Reference Types in C#

Nullable Reference Types in C#

I have a complicated relationship with null. We've been together since my early C# days. It's been mostly one-sided — null has crashed my apps, embarrassed me in production, and woken me up at 2am via...
C# Records and Immutability

C# Records and Immutability

If you've written DTOs, value objects, or event payloads in C#, you know the boilerplate drill: define a class, add properties, override Equals, override GetHashCode, maybe implement IEquatable\<T\>, ...