RSSAmplifier

Blog

Bug Repellent

The blog of @captainsafia

blog.safia.rocksRSS feed ↗123 posts

Latest posts

How does Aspire expose resource connection info to the Azure Functions runtime?

A deep dive into IResourceWithAzureFunctionsConfig and how it enables Aspire to inject the right connection string references that Azure Functions expects.

Reporting for duty: the story of IPipelineActivityReporter

The story of how Aspire's activity reporting API evolved from sequential progress reporting to a concurrency-aware system that powers the deployment pipeline.

Running out of 2025: a retro post

A look back at the year: blogging comebacks, principal engineer life, AI-assisted side projects, and gearing up to say goodbye to my 20s.

There's no escaping it: an exploration of ANSI codes

A brief history of ANSI escape codes, how they work under the hood, and why this decades-old standard still makes your terminal colorful today.

Fixing Aspire's image problem: a look at container registry support in 13.1

Exploring the improvements to custom image registry support in Aspire 13.1, and why explicit modeling beats implicit behavior.

How does Aspire launch the Azure Functions runtime when you call aspire run?

A behind-the-scenes look at how Aspire launches the Azure Functions runtime locally, leveraging a clever .NET SDK feature to make it all work seamlessly.

Anatomy of an API: an existential crisis with AsExisting()

A blog post dissecting Aspire's RunAsExisting, PublishAsExisting, and AsExisting APIs, why the naming haunts me, and what I would've done differently if I could turn back time.

Anatomy of an API: three ways to stream with ServerSentEvents()

A blog post exploring why minimal API's TypedResults.ServerSentEvents() has three different overloads, what each one does, and how to avoid mixing them up when you're streaming data to clients.

Anatomy of an API: the small but mighty MapOpenApi()

A deep dive into the design decisions behind ASP.NET Core's MapOpenApi() method exploring why it's modeled as an endpoint, how route templating enables YAML support, and the thoughtful details that make this tiny API so powerful.

Adventures in over-engineering: using AI to watch my $200 walking pad

How I used computer vision and GPT-4o to extract fitness stats from my walking pad's LED display, because wearing an Apple Watch on your ankle is for quitters.

And just like that .NET 10 ships tomorrow

A look at key ASP.NET Core features shipping in .NET 10, including: model validation for Minimal APIs, OpenAPI 3.1 support with unified JSON Schema, improved integration testing with top-level programs, and new browser testing capabilities with WebApplicationFactory.

Pipe dreams to pipeline realities: an Aspire Pipelines story

The behind-the-scenes chronicles of building Aspire's pipelines feature: from basic callbacks and progress reporting to a full-on concurrent pipeline concept.

How I used AI to redesign Aspire's deploy CLI command

How I used Claude and Copilot to design the Aspire deploy CLI, moving from sequential steps to a concurrent-ready design that works in both interactive and CI/CD environments.

Cache me if you can: a look at deployment state in Aspire

Exploring the new deployment state caching feature in .NET Aspire that eliminates repetitive prompting during deployments and lays the foundation for more sophisticated deployment workflows and CI/CD integration.

The docs write themselves: from XML doc comments to OpenAPI specs

A deep dive into implementing XML documentation comment integration for ASP.NET Core's OpenAPI generator, exploring the technical challenges of bridging compile-time XML docs with runtime OpenAPI generation using source generators for AoT-friendly API documentation.

Design flashpoint: `aspire publish` vs `aspire deploy`

Exploring the design decisions behind aspire publish and aspire deploy commands, and how they balance between ejecting from the Aspire ecosystem versus providing fine-grained deployment control.

Verifying the source of (generator) truth

A deep dive into testing infrastructure I built for incremental .NET source generators, covering compile-time validation, runtime behavior verification, and incremental compilation testing.

The anti-prompt shell prompt

Embrace tradition, reject modernity, let go of that noisy crap in your shell.

Design flashpoint: Execution modes in Aspire apps

Why Aspire has run-mode and publish-mode but no deploy-mode, and what this reveals about API design trade-offs in distributed applications.

Building custom deployment pipelines with Aspire

A blog post about how to use Aspire to deploy a static site to Azure Storage with Azure Front Door as a CDN and some exploration of Aspire's evolving deployment abstractions.

Git worktrees for fun and profit

A deep dive into OpenAPI support in ASP.NET Core

A deep dive into endpoint filters in ASP.NET Core 7

Parameter optionality in Minimal APIs

Under the hood with debugging in Blazor WebAssembly

Rolling in render trees

Combing through ComponentBase

Under the hood with routing in Blazor

Advent of Code Day 3

Eh, ship it!

Oh gosh, I’m blogging again

Writing to win friends and influence people

A purposeful hiatus

Looking into curl: part 2

Looking at the curl stack trace: part 1

Looking at how `curl` works through stack traces

What happens when you run `sudo !!`?

Looking at the stack trace for `ls`

What do `cp` and `mv` do under the hood?

I finally figured out how Unix redirection works under the hood

Reveling in redirects: exploring Unix input/output redirection

What happens when you run `cp` on the command line?

Peeking into `pwd`

Unraveling `rm`: what happens when you run it?

Digging further into the curl code base

Figuring out how `curl` stores configurations

Curling up with the `curl` code base

Breathing room.

Sliding into security with scrypt

Answering “How do I write?”