We are the art by Brandon Sanderson

Brandon Sanderson’s Keynote speech

Brandon Sanderson offers his view on why AI art is not art. I highly recommend watching the whole video, it’s very entertaining and he makes a lot of good points from the perspective of those who make art.

I’m more of a consumer than a creator (although I do play guitar which scratches the itch), and my view on art and AI is that what makes art valuable to me is the context in which the art is made. It’s why I can hear the same song played by two different musicians and one version moves you more than another.

My example of this is listening to Townes Van Zandt play covers of songs, and they hit different. Knowing who he was as a person and the struggles he had throughout life really change how you experience a song. The pain is something you can hear in a raspy voice that is the result of years of smoking and hard living.

To echo, but slightly modify, Brandon’s point here, no matter how good AI gets at making art, it won’t have the same impact on me as a consumer because it’s completely void of any context that would give it meaning. 
# / 2026 / 02 / 02

New blog feature: paging

When scrolling to the bottom of the home page, you now should see an "older posts" button which will take you to the next page of posts. This feature has been on my TODO list since day 1 and am happy it's finally implemented. It's much easier now that all posts are cached in memory in the blog, so I can just use LINQ statements to "Skip" and "Take" over the full post collection to emulate paging.
# / 2026 / 01 / 31

Get notifications from Claude Code on Windows with WSL

My ~/.claude/settings.json with full solution

I've been looking for a way to get notified when Claude Code needs my input or is finished. Big shout out to u/Ok-Engineering2612 on Reddit for this post:  WSL Toast Notifications with Hooks in Claude Code : r/ClaudeAI. I had been trying to do the same thing with BurntToast but I forget the way WSL interops with Windows.

The settings from the Reddit thread did need a little tweaking ($PAYLOAD is no longer supported and now Claude Code sends the JSON structure via stdin). Here's my change to the command:

 "command": "input=$(cat) && powershell.exe -NoProfile -Command \"Import-Module BurntToast; New-BurntToastNotification -Text 'Claude Code Notification', '$(echo \"$input\" | jq -r '.message')'\""
Here is the full documentation for hooks: Hooks reference
# / 2026 / 01 / 09

File Pilot - Fast file explorer for Windows

File Pilot

It’s 2026 and you can buy a lightweight, super fast file explorer for windows for $250. I kind of love it.

The price obviously seems really high for a file explorer, but apparently it’s taken the developer 3 years to get to this point. You can also pay $50 but that only gets you a years worth of updates.

This project has got me thinking about an alternate reality where you have to pay for basic features of the OS. What if each program like notepad, paint, or task manager were priced this way? Or worse you had to pay a subscription! I’m actually shocked we didn’t end up in this world. Thankfully nerds write software for the love of the game and give it away. This puts downward pressure on the bugs corps to not nickel and dime software. All that said, I’m happy the file pilot dev values their own work and has priced this tool accordingly. If nothing else, I think it shows the windows team how software should run (fast) with few dependencies.

Screenshot
# / 2026 / 01 / 07

Setting up a dotnet dev environment with WSL and Ubuntu 24.04

I just knew 2026 was going to start off this way... A complicated setup to do something that should be simple.

Ok, so you want to do some .NET dev work with WSL? Better not choose Ubuntu 24.04 as your distro. I guess this version doesn't ship with some important packages that are needed to make some interop work between Windows and Linux. Anyways, let's get to the steps!

Configure Git for authentication with Azure DevOps 
  1. Make sure you have installed Git For Windows on your host machine. Your git installed in Linux will need to use the credential manager in Windows.
  2. Configure the credential helper: git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"
  3. Configure using HTTP: git config --global credential.https://dev.azure.com.useHttpPath true
  4. Clone a repo hosted in Azure DevOps
Install Dotnet
  1. Install dotnet: wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh && chmod +x ./dotnet-install.sh && ./dotnet-install.sh --jsonfile global.json
  2. Edit ~/.bashrc to add dotnet to the PATH
export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools
 Configure dotnet for authentication with Azure DevOps
  1. Install Artifacts CredProvider: wget -qO- https://aka.ms/install-artifacts-credprovider.sh | bash
  2. Set environment variable in ~/.bashrc to force a dialog to popup for authentication so you don't end up using Device Flow (which some tenants, like mine, disallow)
export NUGET_CREDENTIALPROVIDER_FORCE_CANSHOWDIALOG_TO=true
Install packages that allow the browser to be opened from MSAL
This part is crucial. When you run dotnet restore --interactive, MSAL will want to open your system's browser so you can use OAuth to sign in and provide credentials for your Azure DevOps instance. Install these packages, which no longer ship with Ubuntu:
  1. apt update
  2. apt install xdg-utils
  3. apt install wslu
wslu is a discontinued project that consisted of utilities for WSL and xdg-open is a program that will open the system's browser.

Edit: If WSL interop stops working
You may need to add a WSL interop config (source)
sudo vim /usr/lib/binfmt.d/WSLInterop.conf
Add this line:
:WSLInterop:M::MZ::/init:PF
Then, restart systemd-binfmt
sudo systemctl restart systemd-binfmt 
Final step
dotnet restore --interactive
This should open your browser and you can sign in and restore packages! This only took me a full morning to figure out :(
me in 2026

Microsoft Loves Linux - Microsoft Windows Server Blog 
# / 2026 / 01 / 05

GIFs!

I added GIF support today. And now that I have to go back to work tomorrow, I’ll be using this one multiple times a day again

Elmo Fire
# / 2026 / 01 / 04

LLMs - unexpected side effects

Simon Willison on helping people write code again

+1 to what Simon is saying. I’ve been able to do a lot more on side projects now especially as a busy parent. I will kick off a prompt on Claude code (on my phone sometimes with Claude code web) and then go back to playing with my daughter or cooking or dishes. I can prototype ideas I have and look at the results whenever I have time. It’s really made me fall in love with programming again! I just wish I could find a better workflow for it at work. I’m struggling to get out of the “small toy projects” phase and into using it on larger projects. Probably less of a me problem and more of a tech / organization problem. 
# / 2026 / 01 / 04

Splitting MKV files by chapter using ffmpeg

PowerShell Script

Created a small PowerShell scripts to split up MKV files by chapters. I wanted to avoid downloading yet another tool (handbrake or MKVToolNix) and I like the idea that I can use ffmpeg to do everything. For context, I have a DVD of Weird Al's ultimate music video collection that I got in middle school that I want available in Plex. I used MakeMKV to rip the DVD but all the music videos are in a single file, separated by chapters.

Weird Al
# / 2025 / 12 / 30

Yoto Player Image Converter

Yoto Player Custom Playlist Image Generator

Santa brought my daughter a Yoto player so she can choose the music she listens to. The music is linked to cards that you insert to the player. The cards don't hold any actual data are instead just an NFC chip that tells the player what music and artwork to download and play. It's a clever little device and I really like it so far. Another great feature is that you can create custom cards from MP3s and your own pixel artwork.

My daughter is obsessed with Marty Robbins "Gunfighter Ballads and Trail Songs". It's a really great album that we listen to on vinyl all the time. So my first task on Christmas was to load a custom card with the album and make some custom artwork. I won't go into detail on how I did the MP3s, but for the background image, I decided to vibe code a tool to take an image and downscale it to a 16x16 pixel png file. I used Claude Code to create the tool and had to go through quite a few iterations to work the bugs out of the crop selection tool.

Anyways, here is the final result showing good ol' Marty going for his "Big Iron" on the Yoto!
Yoto Player Background
# / 2025 / 12 / 26

Aspire 13.1

Aspire 13.1 Release Notes

Another minor release from the Aspire team. I've updated the blog to use it, which you can see here: https://github.com/david-jarman/link-blog/pull/8

Here's the main highlight for me:

Automatic instance deletion - I'm always running multiple shell instances and often I'll forget I already had aspire running somewhere else. This new feature will let me run aspire again from anywhere and stop the other instance instead of getting an error!

Screenshot
# / 2025 / 12 / 17