Archive
How does Aspire expose resource connection info to the Azure Functions runtime?
This is yet another off-the-cuff blog post about a detail of the Aspire and Azure Functions integration that came up recently. It's interesting to talk about because it covers some...
Reporting for duty: the story of IPipelineActivityReporter
It's a new year and it's time for a new me! And that new me actually finishes the thoughts that she has. Last year, I spent quite a bit of...
Running out of 2025: a retro post
So it's December 31st. The last day of 2025, which means this is the last blog post of the year. I figured I would take the time to write a...
There's no escaping it: an exploration of ANSI codes
ANSI escape codes are kinda crazy, no? I mean, crazy in the sense that they are such a simple and enduring concept. Every time your terminal renders bold red text...
Fixing Aspire's image problem: a look at container registry support in 13.1
The release of Aspire 13.1 is right around the corner (yes, it happens that fast), so I figured I'd dump my thoughts on what I spent a bulk of the...
How does Aspire launch the Azure Functions runtime when you call aspire run?
Recently, someone was curious on an internal channel about how the Azure Functions integration for Aspire worked. Specifically, how the integration went about launching the Functions runtime locally when the...
Anatomy of an API: an existential crisis with AsExisting()
For the most part, this "Anatomy of an API" series has discussed APIs that I'm happy living with. Let's talk about one that I'm not so happy living with. Let's...
Anatomy of an API: three ways to stream with ServerSentEvents()
Last week, I started dissecting some of the APIs that I've worked on over the past year. Today's blog post is a continuation of that, with a focus on the...
Anatomy of an API: the small but mighty MapOpenApi()
I'm really proud of the OpenAPI experience in Minimal APIs, especially in comparison to REST API frameworks in other ecosystems. Because we're able to build on C#'s strong type system...
Adventures in over-engineering: using AI to watch my $200 walking pad
We've entered The Big Dark here in the Pacific Northwest, which means the days are shorter and wetter. Usually, during the summers, I am an active hiker and walker. As...
And just like that .NET 10 ships tomorrow
I had originally planned to write a proper deep-dive series walking through a handful of features I worked on in .NET 10: complete with design notes, trade-offs, and the fun...
Pipe dreams to pipeline realities: an Aspire Pipelines story
OK, sit down folks, because this one is gonna be a long one. This is the all-encompassing blog post about the thing I've been working on for the past few...
How I used AI to redesign Aspire's deploy CLI command
A few weeks ago, I posted on Bluesky soliciting feedback for a new user interface I was proposing for the `aspire deploy` command. That UI has now landed in the...
Cache me if you can: a look at deployment state in Aspire
I recently merged in a PR that adds support for deployment state to the `aspire deploy` command. I wanted to spend some time writing a little bit about the problem,...
The docs write themselves: from XML doc comments to OpenAPI specs
November is right around the corner, which means it's time for another release of .NET. I figured the next couple of weeks are a good time to reminisce on some...
Design flashpoint: `aspire publish` vs `aspire deploy`
From my blog posts and pull requests, you might've gleaned that I've been doing a ton of work building out the experience for deploying Aspire applications to various targets. Today's...
Verifying the source of (generator) truth
Over the past few years, I've had the chance to work on a number of features in .NET that take a dependency on source generators. In that time, I've had...
The anti-prompt shell prompt
I've been embracing minimalism more and more in my workflow lately. As time has gone on, I've tweaked my VS Code config to remove more and more UI elements. It...
Design flashpoint: Execution modes in Aspire apps
In my previous blog post, I touched on the tension between Aspire's run-mode and publish-mode concepts and the notable absence of a deploy-mode. This post dives deeper into that design...
Building custom deployment pipelines with Aspire
I've been spending a lot of time lately working on the deployment story for Aspire. As a part of this, I had to go on a side-quest to figure out...
Git worktrees for fun and profit
I've always been a mental multi-tasker when it comes to juggling the things I'm working on. I like having multiple bugs and features in flight at the same time and...
A deep dive into OpenAPI support in ASP.NET Core
The OpenAPI specification is a standard for describing HTTP APIs. The standard allows developers to define the shape of APIs that can be plugged into client generators, server generators, testing...
A deep dive into endpoint filters in ASP.NET Core 7
One of the features that I worked on as part of the ASP.NET Core 7 release was support for endpoint filters in minimal APIs. I recently shared some of the...
Parameter optionality in Minimal APIs
In .NET 6 RC1, we shipped support for a new feature in Minimal APIs that allows developers to set the optionality of request parameters by using nullable annotations and default...
Under the hood with debugging in Blazor WebAssembly
This blog post is a detour from the typical content I've been writing about Blazor, but it is still one that is compelling to cover. If you're familiar with Blazor,...
Rolling in render trees
This is the second blog post in a mini-series on the internals of rendering and components in Blazor. By internals, I mean that we’ll be doing one of my favorite...
Combing through ComponentBase
This is the first blog post in a mini-series on the internals of rendering and components in Blazor. By internals, I mean that we'll be doing one of my favorite...
Under the hood with routing in Blazor
A while back, I posted a response to a user issue on the ASP.NET Core repo explaining the inner workings of routing in Blazor. The response was pretty good, but...
Advent of Code Day 3
Another day, another Advent of Code challenge! As per usual, you can read the problem statement for today’s challenge here. I’m solving each of these problems using a different programming...
Eh, ship it!
It’s Day 2 of the Advent of Code 2018 Challenge. Once again, I’m blogging through the solution here. Before getting started, you should read the day’s challenge. I started off...
Oh gosh, I’m blogging again
_dusts off shoulders_ So it’s been a while since I’ve done this. That’s right, I’m _blogging_ again. Prepare your food rations and gallons of water because a disaster is coming...
Writing to win friends and influence people
Communication is important. This is a point so obvious and indisputable that I won’t dive into here. Being able to communicate effectively with romantic partners, co-workers, family members, contractors, doctors,...
A purposeful hiatus
It’s the end of the week. To be honest, I’m getting a little tired of reading through `straces`. And also reading through code bases. Maybe it’s just the weariness of...
Looking into curl: part 2
Is it Wednesday already? I guess it is. To be honest, I pretty much write these blog posts on auto-pilot, so the time passes by really quickly. I’m continuing the...
Looking at the curl stack trace: part 1
As mentioned in my last blog post, I’m hoping to do a thorough analysis of the `strace` for curl in the next couple of blog posts. I started looking through...
Looking at how `curl` works through stack traces
It’s the end of the week! Woohoo! I’m very excited for the weekend. It’s the only time I have these days to get lots of coding done on Zarf. The...
What happens when you run `sudo !!`?
One thing I’m sure everyone has done on the command line is to use the `!!` shortcut to run the command run previously with sudo. $ gimme-the-secrets You can't run...
Looking at the stack trace for `ls`
You know what Mondays mean. A new blog post! I’m trying something new this week. Instead of writing my thrice-weekly blog posts on my commute to and from work, I’ll...
What do `cp` and `mv` do under the hood?
Another Friday, another blog post! Can you believe I’ve written around 50 blog posts in the last four months? I certainly can’t! I feel like it gets easier every time,...
I finally figured out how Unix redirection works under the hood
In the last blog post, I decided to look into Unix redirection. Towards the end of it, I ended up being perplexed about an aspect of the stack trace and...
Reveling in redirects: exploring Unix input/output redirection
One of my favorite Linux features is redirection. Redirection gives you the ability to send the output of one command directly to another. For example, here’s how I would copy...
What happens when you run `cp` on the command line?
It’s time for another edition of whatever the heck this is! After the deep dives I took into the Git code base, I no longer have the energy to craft...
Peeking into `pwd`
Oh my gosh. Can I really keep up with this? I’m gonna be honest with you, fair reader, working a full-time job and maintaining this blog is proving to be...
Unraveling `rm`: what happens when you run it?
Another Monday, another blog post! I’ve been diving into the curl codebase over the past couple of blog posts, but something else has spiked my interest today, so I figured...
Digging further into the curl code base
In the last blog post I wrote, I learned how `curl` maintains the configuration details for different operations. In this blog post, I’d like to figure out how `curl` executes...
Figuring out how `curl` stores configurations
In my last blog post, I started diving into the code base for the `curl` command line tool. Sidebar: I don’t know if I’ve been consistent about spelling “command line”...
Curling up with the `curl` code base
Randomly the other day, I was wondering (when is anything I wonder not random?) how browsers work. Correction: I was wondering what happens when you enter a URL into your...
Breathing room.
**One.** It was near the end of my contract when it happened. I had been working with the team for five months. I knew that he had a problem with...
Sliding into security with scrypt
Earlier this week, I was trying to figure out how to export authentication data from Firebase to another database. As it turns out, Firebase provides a command line utility that...
Answering “How do I write?”
Lately, I’ve been getting a few messages and emails from folks who are interested in learning more about how I developed a habit of consistently blogging and also published my...
Doing user interviews while Black
I was initially planning on writing another blog post in the “initial commit” series, but this particular topic has been on my mind for a while so I figured I...
Back in style: Twitter Bootstrap
Another Wednesday, another blog post! I’m now entering the fourth month of consistently blogging three times a week. That’s a little over 36 blog posts in 3 months. Woohoo! I...
A blast from the past: Node.JS
In my last blog post, I traveled to the past and checked out the code associated with the first commit of the Redux code base. It’s a different style of...
Looking at the first commit of Redux
My friend, James Powell, recently texted me to recommend that I do some sort of “code archaeology” style code reads. In essence, I would check out a code base, go...
How does `git add` work under the hood?
Over the past couple of blog posts, I’ve been doing a lot of digging into what happens, from a source code perspective, when someone runs `git commit` at the command...
A complete story of what happens when you run `git commit`
So, in my last blog post, I looked into the data structures used to represent commits in the Git code base. In this blog post, I’d like to look a...
Learning more about how commits are represented in Git
So in my last code-reading blog post, I decided to realign my exploration of the Git codebase and try to figure out how a commit is made. Essentially, I wanted...
36 lessons learned over 3.66 years
So, this week was my last week at college. Pause for gleeful dance. I’ve been spending the week taking final exams, submitting final projects, and thinking about what’s next. First...
Reading code late at night and realizing that it’s not a good idea
So it’s 11:09 PM on a Sunday night. I’ve been spending the past couple of hours working on implementing a routing table in C for one of my networking classes....
What’s inside the `.git/objects` directory?
OK! So I am continuing this Git series. I should probably make a tag or something for it at this point, but you can just see the other posts related...
How does Git know if you have uncommitted changes in the working tree? (Part 1)
In one of my last blog posts, I started digging into how `git-status` works. I ended up going into a little bit of a rabbit hole. As it turns out,...
How does Git store working tree state?
In my last blog post, I started digging into how `git-status` works. I ended up going into a little bit of a rabbit hole. As it turns out, the `git-status`...
Trying to figure out how git-status works: a saga
The Git shennagins continue! The next thing that I’d like to figure out is what happens when I execute `git status`. In particular, I’m curious to know how Git detects...
What’s in a git config?
So over the past couple of days, I’ve been enjoying digging into the Git codebase and Git internals. I share my posts on Twitter and for the most part (thankfully!)...
What’s inside the .git directory?
So, in my last blog post, I got a little bit into figuring out how `git init` works. The central point of the functions associated with `git init` was creating...
Getting into git init
So, ever the easily-distracted squirrel that I am, I’ve gotten curious about yet another thing. Git. I’ve been using Git for about five years now, so I know my way...
Looking into ls
Oh hey there! It looks like I’m on this little streak where I get way into implementations for command line functions. In my last few blog posts, I dove into...
What happens when you run sudo?
So, what the heck happens when you `sudo`? If you’ve been working with computers, and specifically Unix-like systems, you’ve probably used the `sudo` command. It stands for **s** uper **u**...
Some thoughts on “productivity”
Howdy! So I’ve really been enjoying writing these blog posts where I write answers to questions that I often get from folks at conferences, in direct messages, through email, and...
Thoughts on Black Panther
Note: this blog post contains spoilers for the film Black Panther. If you haven’t seen it yet, don’t read this blog post. But also, go see it! Over the weekend,...
We have no idea what we’re doing.
When it comes to the web, we have no idea what we are doing. I mean that in a couple of ways. We have no idea what our customers want...
How do I get started contributing to open source?
I was recently presenting a keynote at a conference where I shared the story of how I made my first contribution to open source and the journey since then. Afterwards,...
A retrospective on my tech job search
So, I recently announced on Twitter (as one does) that I had accepted a job offer at a company called Tock and would be starting my first official job as...
Three easy pieces: data science
Three’s a magic number. Don’t you think? _Good things come in threes._ _Three evil witches._ _Three wishes from a genie._ _Our three-dimensional existence._ One of those interesting coincidences. But the...
Discovering async hooks
So the other day, I was poking around the documentation for Node.JS when I accidentally clicked on something in the navigation bar titled “Async Hooks”. I was intrigued. I scrolled...
Random thoughts on “heroes”
When I first started getting involved with tech, I had a lot of heroes. Most of them were completely unlike me. I looked up to characters like Bill Gates and...
In which I answer questions about conference speaking
So, recently someone sent me a Twitter direct message with some questions about public speaking. I get asked a lot about public speaking via email, direct message, and in person;...
Solving a problem then thinking too hard about how you solved the problem
Another Wednesday, another blog post! Today, I’m gonna be working on a Project Euler problem. Gotta keep those problem-solving skills sharp! Know what I mean? In my last blog post,...
Tips for reading new codebases
So, I’ve been running around reading codebases for a while now, and I thought it would be a good time to compile some of what I had learned about how...
How do Promises work under the hood?
So, I know I said I wanted to take a break from these code reads for a little bit but curiosity got the best of me. I was recently doing...
Problem solving with Safia: the optimizer’s dilemma
I have a confession to make. I’m getting pretty bored of reading the Node codebase. I know, I know. I’ve only been doing it for about three weeks now, but...
How I learned to learn
I taught myself HTML and CSS when I was 11 years old. Two years later, I sat down at the same family computer where I learned HTML and CSS and...
Node module deep-dive: os
So, I’ve been reading through the Node codebase for a while now and I’m starting to get a decent good sense of how the Node main process works, how different...
How does Node load built-in modules?
Addendum: After I published this blog post, I got some feedback from one of Node’s maintainers about some of the things I mentioned. In the post below, the things that...
How does the Node main process start?
OK! So in one of my previous blog posts, I tried to figure out how the Node main process is initialized. I ended up not being successful in that endeavor....
Node module deep-dive: EventEmitter
So, I got pretty in the weeds with some C++ code in my last Node-related blog post and I figured I would get back into my comfort zone with some...
How does process.binding() in Node work?
An alternative title for this post is: Going Down a V8 Wormhole. Wondering why? Read on! So I’ve been doing these Node module deep-dives for a while now. In my...
Node module deep-dive: fs
Time for another Node module deep-dive! I got some great feedback from folks that it would be interesting to dive into the C++ portions of the Node codebase in these...
Node module deep-dive: child_process
Hi there, friends! That’s right! I’m back with another Node module deep-dive. Like I mentioned in my last post, I’m hoping to spend the rest of the month published annotated...
Node module deep-dive: module
Oh, hi there! Long time, no see. I took a little break from this blog post series to enjoy the holidays and to code up a new version of Zarf....
How to (re-)launch a product
Tomorrow, I’ll be launching Zarf v2.0. Zarf is (was?) a subscription content marketplace. Writers could register for accounts on Zarf and sell subscription or one-time access to their content. Zarf...
Things I learned in 2017
So it’s December 29th. I’ve been seeing a lot of people write up “year in review” posts. I figured I would throw my hat in the ring for this, despite...
Vacuuming your app
Earlier this month, I posted a tweet about my methodology for improving an app once its base functionality has been implemented. Before I continue the blog post, it helps to...
What I learned when I tried to hack my smart vibrator
I’ve owned a smart vibrator for a little over a year now. For those of you who might not be familiar, smart vibrators are vibrators that can be controlled by...
Node module deep-dive: Buffer
Howdy there! Time for another installment of my Node module-deep dive series! This week, I’m diving into the Buffer object in Node. I’ll admit that when I opened up the...
My grandmother passed away today.
My grandmother passed away today. This is the first time I’ve had someone close to me pass away and had the mental maturity to understand the somber nature of what...
Node module deep-dive: console
Howdy there! Yep, it’s another Monday. That means it’s time for me to head over to the good ol’ GitHub dot com for another Node module deep-dive. If you’re new...
Node module deep-dive: WriteableStream
Here we go again! I’m doing another Node module deep-dive on the ol’ bloggity blog today. I figured I would dive into the `WriteableStreams` object. `WriteableStreams` expose methods that allow...
How to monetize open source
Open source provides the framework for a lot of innovative work happening in the tech industry. Despite this, open source is not as well funded as some startups that have...
Node module deep-dive: path
Another Monday, another Node module walkthrough! For the second installment of this multi-part series, I decided to take a look into the `path` module in Node. The `path` module gives...
Some ramblings on the future of web content
Since I’ve been working on Zarf over the past few months, I’ve done a lot of research and formed a few opinions on the future of web content. I’m going...
Node module deep-dive: querystring
So, I figured I would start a new series here on the good ol’ blog. For a while, I’ve wanted to do code walkthroughs of standard libraries and popular packages...
Rules of engagement in an open source issue board
An open source project’s issue board is where many interesting discussions and ideas can emerge. If handled improperly, it can be a hostile and inaccessible space. To ensure that a...
Evangelizing for open source
Long-lasting open source projects require a strong community around them. Although communities can emerge organically, project evangelism is a great way to accelerate and sustain community growth. Evangelism (in the...
So you wanna open source a project, eh?
Since I’ve been in the open source ecosystem for a while, I get a lot of questions from individuals and companies about how to join the open source world. Some...
Open source: the other side of the contract
I tweet a lot about the actions that open source maintainers and contributors can take in order to make their open source projects more inclusive, welcoming, and healthy. But maintaining...
The data fiend’s dilemma
I’ve got a confession. My addiction to data might have gone too far. About 6 months ago, I became more focused on health and fitness and began to center my...
Micromaking kindness: an experiment
In July, I started thinking about how people can be incentivized to take small actions to improve their community. I had an elaborate idea for a crowd-sourced game around kindness...
How To Create A Welcoming and Inclusive Open Source Space
Originally published on OpenSource.com. In a 2013 survey, 11% of contributors to free and open source software identified as women. But perhaps the future looks brighter? We can answer this...
Hacking My To-do List
One of my biggest struggles involves channeling my excitement and energy for my different projects into successful execution. It’s difficult to channel the youthful vigor I have towards my startup...
Programmers, Assemble!
I think a lot about how to build effective communities for software developers and software users. It’s personally important to me to connect and empower people and I figured it...
The Good, The Bad, The Unwanted
Recently, I have had to deal with several tough decisions in both my professional and personal life. While working through these decisions, I was given some advice that didn’t sit...
6 non-code contributions you can make to open source
Originally published on OpenSource.com. Contribute to open source! It’ll look great on your resume! It’s gratifying work! You may have heard people make these statements, or ones similar to them,...
Businesswoman Tips
Occassionally, I’ll send out a Businesswoman Tip tweet that relates to a tough decision I had to make that day or a business tip I would like to share. This...
Future Fallacies
What do you want to do when you graduate? Where do you see yourself in ten years? Why are you trying to start a business at such a young age?...
Thanks for the Compliment!
I’m an accomplished and intelligent young woman. There I said it. I have a handful of things that I wish to accomplish while my skin is still smooth and I...
T is for Transitions
For the past year, I’ve been heavily involved with PyLadies Chicago as a co-organizer and ChickTech Chicago as the Lead of Mentorship and Volunteer Initiatives. It’s been exciting to be...
The Definitive Story of How I Got Into Tech
I often get asked how I got into tech. And I often have a different answer every time I am asked. The truth is, technology has been such an integral...
The Zen of Safia
I have a daily ritual that trains my mind, my body, and my soul. And interestingly enough, it refines my so-called “entrepreneurship skills.” It’s a routine that I’ve started recently...
What 2015 Taught Me About Running a Startup
I’m sitting in bed, taking a break from debugging a particularly tough software bug, while listening to Pretty Pimpin’ by Kurt Vile. My mind wanders to dsfa, the small but...
How will the children of the future learn about science?
Originally published on OpenSource.com. From the advent of the printing press to the emergence of the Internet, knowledge has become increasingly abundant and accessible. But as we move into the...
Let’s Hear It For Small Data
Earlier today, I sent out this tweet. > I strongly believe that the future of data science will be in small data and in people who don’t have PhDs in...
beyond the code talk sketch notes
 ## Beyond the Code Talk Sketch Notes