The Curious Engineer

All blogs / Software / engineering practice

Bug Repellent

blog.safia.rocks

The blog of @captainsafia

Software / engineering practiceC# / .NET

Posts
123 from 22 Sep 2015 to 14 Jan 2026
Posting
monthly (12 in the last year)
Kind
personal blog
Feed
https://blog.safia.rocks/atom.xml

2026 2

  1. How does Aspire expose resource connection info to the Azure Functions runtime?
  2. Reporting for duty: the story of IPipelineActivityReporter

2025 19

  1. Running out of 2025: a retro post
  2. There's no escaping it: an exploration of ANSI codes
  3. Fixing Aspire's image problem: a look at container registry support in 13.1
  4. How does Aspire launch the Azure Functions runtime when you call aspire run?
  5. Anatomy of an API: an existential crisis with AsExisting()
  6. Anatomy of an API: three ways to stream with ServerSentEvents()
  7. Anatomy of an API: the small but mighty MapOpenApi()
  8. Adventures in over-engineering: using AI to watch my $200 walking pad
  9. And just like that .NET 10 ships tomorrow
  10. Pipe dreams to pipeline realities: an Aspire Pipelines story
  11. How I used AI to redesign Aspire's deploy CLI command
  12. Cache me if you can: a look at deployment state in Aspire
  13. The docs write themselves: from XML doc comments to OpenAPI specs
  14. Design flashpoint: `aspire publish` vs `aspire deploy`
  15. Verifying the source of (generator) truth
  16. The anti-prompt shell prompt
  17. Design flashpoint: Execution modes in Aspire apps
  18. Building custom deployment pipelines with Aspire
  19. Git worktrees for fun and profit

2024 1

  1. A deep dive into OpenAPI support in ASP.NET Core

2022 1

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

2021 1

  1. Parameter optionality in Minimal APIs

2020 4

  1. Under the hood with debugging in Blazor WebAssembly
  2. Rolling in render trees
  3. Combing through ComponentBase
  4. Under the hood with routing in Blazor

2018 63

  1. Advent of Code Day 3
  2. Eh, ship it!
  3. Oh gosh, I’m blogging again
  4. Writing to win friends and influence people
  5. A purposeful hiatus
  6. Looking into curl: part 2
  7. Looking at the curl stack trace: part 1
  8. Looking at how `curl` works through stack traces
  9. What happens when you run `sudo !!`?
  10. Looking at the stack trace for `ls`
  11. What do `cp` and `mv` do under the hood?
  12. I finally figured out how Unix redirection works under the hood
  13. Reveling in redirects: exploring Unix input/output redirection
  14. What happens when you run `cp` on the command line?
  15. Peeking into `pwd`
  16. Unraveling `rm`: what happens when you run it?
  17. Digging further into the curl code base
  18. Figuring out how `curl` stores configurations
  19. Curling up with the `curl` code base
  20. Breathing room.
  21. Sliding into security with scrypt
  22. Answering “How do I write?”
  23. Doing user interviews while Black
  24. Back in style: Twitter Bootstrap
  25. A blast from the past: Node.JS
  26. Looking at the first commit of Redux
  27. How does `git add` work under the hood?
  28. A complete story of what happens when you run `git commit`
  29. Learning more about how commits are represented in Git
  30. 36 lessons learned over 3.66 years
  31. Reading code late at night and realizing that it’s not a good idea
  32. What’s inside the `.git/objects` directory?
  33. How does Git know if you have uncommitted changes in the working tree? (Part 1)
  34. How does Git store working tree state?
  35. Trying to figure out how git-status works: a saga
  36. What’s in a git config?
  37. What’s inside the .git directory?
  38. Getting into git init
  39. Looking into ls
  40. What happens when you run sudo?
  41. Some thoughts on “productivity”
  42. Thoughts on Black Panther
  43. We have no idea what we’re doing.
  44. How do I get started contributing to open source?
  45. A retrospective on my tech job search
  46. Three easy pieces: data science
  47. Discovering async hooks
  48. Random thoughts on “heroes”
  49. In which I answer questions about conference speaking
  50. Solving a problem then thinking too hard about how you solved the problem
  51. Tips for reading new codebases
  52. How do Promises work under the hood?
  53. Problem solving with Safia: the optimizer’s dilemma
  54. How I learned to learn
  55. Node module deep-dive: os
  56. How does Node load built-in modules?
  57. How does the Node main process start?
  58. Node module deep-dive: EventEmitter
  59. How does process.binding() in Node work?
  60. Node module deep-dive: fs
  61. Node module deep-dive: child_process
  62. Node module deep-dive: module
  63. How to (re-)launch a product

2017 13

  1. Things I learned in 2017
  2. Vacuuming your app
  3. What I learned when I tried to hack my smart vibrator
  4. Node module deep-dive: Buffer
  5. My grandmother passed away today.
  6. Node module deep-dive: console
  7. Node module deep-dive: WriteableStream
  8. How to monetize open source
  9. Node module deep-dive: path
  10. Some ramblings on the future of web content
  11. Node module deep-dive: querystring
  12. Rules of engagement in an open source issue board
  13. Evangelizing for open source

2016 15

  1. So you wanna open source a project, eh?
  2. Open source: the other side of the contract
  3. The data fiend’s dilemma
  4. Micromaking kindness: an experiment
  5. How To Create A Welcoming and Inclusive Open Source Space
  6. Hacking My To-do List
  7. Programmers, Assemble!
  8. The Good, The Bad, The Unwanted
  9. 6 non-code contributions you can make to open source
  10. Businesswoman Tips
  11. Future Fallacies
  12. Thanks for the Compliment!
  13. T is for Transitions
  14. The Definitive Story of How I Got Into Tech
  15. The Zen of Safia

2015 4

  1. What 2015 Taught Me About Running a Startup
  2. How will the children of the future learn about science?
  3. Let’s Hear It For Small Data
  4. beyond the code talk sketch notes