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 2 of 4

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 ...
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: Sys...
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 o...
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 y...
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\...
Pattern Matching in C#

Pattern Matching in C#

If you've ever written a long chain of if/else if blocks just to check what type something is or inspect a few properties, pattern matching is for you. C# has been adding pattern matching features sin...
Building Console Apps in C#

Building Console Apps in C#

Console apps get underestimated. They're not glamorous, but they're often the fastest way to ship a useful tool — a migration script, a data importer, a dev utility that you'll run a hundred times. C#...