FYI: Automatically apply EF core migrations in Aspire

Apply EF Core migrations in Aspire

If you are using Aspire and EF core to manage the schema of your database, this documentation is a great starting place to make the two work together.

The core concept is that you add a worker service that is dedicated to running migrations, creating the initial database, and seeding data to the database. Essentially any operation that should be performed before the actual web app starts up. I implemented this in the blog this evening with the help of Claude Code while I watched Twin Peaks.

One prerequisite was that I had to move my DbContext and Entity classes to a shared library so that the web app and worker services could both access them. I had actually tried to do this when I first created the blog but ran into issues and decided to simplify the design. I first told Claude to separate out the database entities, migrations, and contexts to a separate project. I was surprised how long this actually took. But in the end, something like 20+ files were touched, but all tests passed and the changes looked good.

Next, I started a new chat with Claude (/new command), and gave it the same link provided in this post.

Follow the instructions at the following url to automatically apply migrations when running locally: https://aspire.dev/integrations/databases/efcore/migrations/
It then proceeded to one-shot the changes and everything just worked. Here are the full changes: https://github.com/david-jarman/link-blog/pull/7
# / 2025 / 12 / 17

FYI: dotnet-outdated

GitHub: Dotnet Outdated

I hate having to update package dependencies in projects. Fortunately there is a handy dotnet tool that will report and update packages that are out of date. I used this to update all the packages in the link-blog source code this evening and was pleasantly surprised it just worked. Only issue I found was that because I create a msbuild property to store the OpenTelemetry version (there are three OTel packages with the same version), the tool updated the PackageVersions directly instead of just updating the property. Not a big deal, and I would have been shocked if it was able to handle a corner case like that.

Now I need to see if I can get this to run as a daily CI task.
# / 2025 / 12 / 16

Music theory - Interval trainer

Interval Trainer

Over the past few months, I have been getting back into playing guitar after a fairly long hiatus. I even started taking guitar lessons. My practice has involved playing a lot of bluegrass fiddle tunes and learning carter-style arrangements of old country and bluegrass songs.

Playing bluegrass with others involves playing solos, or "taking breaks". This just means improvising over the melody of the song. As I've been inching closer toward working on my own improvisational skills, I've realized that I don't have as much intuition about what each interval in the chromatic scale truly sounds like. I want to get to the point where I can listen to a song and recognize when the 4th chord is played vs the 5th or in a break when someone adds in a flat 5. 

To help myself train my ear to recognize each interval, I vibe coded a tool using Claude code. The page has two main parts: play each interval at your own pace and a quiz that will play intervals at random and you have to choose the correct one. I also added some descriptions to the intervals to help myself think about what those intervals feel like. There is also a toggle to show the "blue notes". 

This is one part of my journey to being able to both improvise better but also transcribe music faster.
# / 2025 / 12 / 13

.NET 10 release

.NET 10 Overview

Just upgraded the blog to .NET 10 and wanted to quickly jot down my notes before calling it a night.

First, I was prompted to do this because I saw Heroku had a blog post about supporting .NET 10: https://www.heroku.com/blog/support-for-dotnet-10-lts-what-developers-need-know/. I'm glad they were proactive about supporting it on day 1, but I also don't love that I have to trust that my hosting provider will add the support.

The bulk of the work for upgrading was figuring out where I have references to .NET 9 and replacing them, and then upgrading my Nuget packages. I also upgraded to Aspire 13 (not sure why they went from 9->13 version).

I only ran into one deprecated API (KnownNetworks in my forwarding middleware), but that was an easy fix (just use the new KnownIPNetworks property instead).

Seems like everything is still working. Hoping to dive more into the details of .NET 10 the next couple of weeks and give the blog some more love and updates. Maybe even add a search feature and proper paging for posts.
# / 2025 / 11 / 11

Dealing with developers block

Developers block

This post contains stories I can very much relate with. I use a lot of the mentioned strategies like prototyping as a learning mechanism, but still haven’t totally cracked the code on how to get unstuck other than time and random inspiration.

I think getting randomized is a huge source of demotivation for me and that’s not something you can always control. Best thing to do is block off your calendar and mute messages and emails from popping up, and checking those on an hourly basis. But also getting a random task to go learn about something might mean I lose all motivation for the current task and will slow down its completion by 10x or more. 
# / 2025 / 08 / 23

.NET Aspire 9.3

Release Notes

I've updated this blog to Aspire 9.3. This particular release didn't have anything that I wanted to use right away, but this being such a simple blog website, it doesn't really need many of the fancy deployment features, especially since I deploy to Heroku and not Azure.

If I find any features I can use in the coming days, I'll create another post to highlight those.
# / 2025 / 05 / 20

Edit - a Windows-native CLI text editor

GitHub - Edit

It's 2025, and I'm excited about a new CLI text editor. When I need a text editor in a shell, I always reach for vim, but I don't love it. It's there when I need it and serves its purpose, but I've never gotten over the weird key binding knowledge required just to exit and save a file.

What I like about Edit is that it's built as a TUI (Terminal User Interface) which means you can use your mouse (point and click), you can use ctrl+a to select all text, you can use ctrl+c and ctrl+v for copy paste, and it's just way more intuitive to use.

Getting it to run

The tool was just released, so as expected, there are some quirks. First and foremost, Windows Defenders think the pre-built binary the released is a virus! In order to actually play with it, I had to build it from source using the rust tool chain.

Here's what I had to do:

Install the C++ toolchain using Visual Studio Installer.
Restart my shell, to update paths.
Install the rust toolchain
git clone https://github.com/microsoft/edit.git
rustup install nightly
rustup default nightly-x86_64-pc-windows-msvc (to set the nightly toolchain as the default)
rustup component add rust-src --toolchain nightly-x86_64-pc-windows-msvc (no idea why I had to do this, but rustup said I had to)
cargo build --config .cargo/release.toml --release (compile and linking step)
cp .\target\release\edit.exe D:\tools\ (D:\tools is where I store my adhoc tools that I build or maintain)

A few of these steps were documented on the Edit README.md file, but several were missing.
# / 2025 / 05 / 19