Advertisement · 728 × 90

Posts by Mike Goatly

Avalonia UI VSCode extension on a blue background, highlighting features like free usage and no account requirements for coding.

Avalonia UI VSCode extension on a blue background, highlighting features like free usage and no account requirements for coding.

You may have missed this in the Avalonia 12.0 launch...

Our VS Code extension is now completely free.

No account needed. No usage restrictions.

Download. Install. Develop.
avaloniaui.net/vscode/

1 week ago 7 3 0 0

Nice! "table flip" analysers should be a thing. Class hits 2000 lines of code? You're done, flip it right over.

2 weeks ago 2 0 0 0
Video

I've been working on a rebuild of #chordle for a couple of years now. Spare time projects can be brutal, and Chordle is a big ol' project, but I'm really happy with how the new editor is working out - drag and drop of chords in both #chordpro and chords above text! #avaloniaui

2 weeks ago 1 1 0 0

Given how much the cover art for that article hurts my brain, it'll be displacing good illustrators in favour of nonsense!

2 weeks ago 0 0 0 0
Preview
GitHub - mikegoatly/FirestoreSharp: An open source .NET emulator for Google Cloud Firestore An open source .NET emulator for Google Cloud Firestore - mikegoatly/FirestoreSharp

My new job has required I use Google's Firebase, and in particular Firestore. I've been surprised by the memory consumption of the official emulator, and wondered if I could hack together in .NET that meeds our needs. I still don't know, but this is the result so far: github.com/mikegoatly/F...

2 weeks ago 1 0 0 0

I got 99 problems but a 3-body one ain't one

3 weeks ago 1 0 0 0
GitHub - mikegoatly/lifti: A lightweight full text indexer for .NET A lightweight full text indexer for .NET. Contribute to mikegoatly/lifti development by creating an account on GitHub.

The person who gives the 200th star on LIFTI, also gets a free copy
github.com/mikegoatly/l...

3 weeks ago 1 0 0 0
Advertisement
Post image

#Microsoft and #Windows hasn't had a coherent GUI strategy since Petzold.

My blog:
www.jsnover.com/blog/2026/03...

1 month ago 23 8 4 1

Is one of the +5 lines "// TODO: Implement editor"

1 month ago 0 0 0 0

Cursed image

1 month ago 1 0 0 0
Preview
ASCII characters are not pixels: a deep dive into ASCII rendering A look at how I used shape vectors to achieve sharp, high-quality ASCII rendering.

This is a perfect piece of technical writing. alexharri.com/blog/ascii-r...

2 months ago 149 45 2 7
Preview
The Summoning of Bertrand Russell A philosophy webcomic about the inevitable anguish of living a brief life in an absurd world. Also Jokes

existentialcomics.com/comic/641

1 month ago 37 4 2 1
A screenshot of a machine learning diagnostics dashboard labeled "ML Pipeline." It displays four synchronized graphs visualizing a 5-second clip of piano audio from the MAESTRO dataset.
The top-left (Onset), top-right (Frame), and bottom-left (Offset) graphs are heatmaps on a dark background, showing the model's raw probability output for note starts, sustains, and releases. Brighter colors indicate higher confidence.
The bottom-right (Piano Roll) graph displays the final decoded result as clean light-blue bars on a white grid.
A yellow crosshair cursor tracks a specific moment across all four graphs, highlighting the correlation between the raw probability heatmaps and the final discrete notes.

A screenshot of a machine learning diagnostics dashboard labeled "ML Pipeline." It displays four synchronized graphs visualizing a 5-second clip of piano audio from the MAESTRO dataset. The top-left (Onset), top-right (Frame), and bottom-left (Offset) graphs are heatmaps on a dark background, showing the model's raw probability output for note starts, sustains, and releases. Brighter colors indicate higher confidence. The bottom-right (Piano Roll) graph displays the final decoded result as clean light-blue bars on a white grid. A yellow crosshair cursor tracks a specific moment across all four graphs, highlighting the correlation between the raw probability heatmaps and the final discrete notes.

Built a diagnostics dashboard so I can finally debug the raw ML probabilities against the decoded notes

Next up: a mountain of work on note decoder tuning, quantization and score conversion. It's very possible I underestimated the size of this project!

2 months ago 0 0 0 0
A single staff of sheet music displaying the same C-Major scale generated by the old pYIN algorithm. While the rhythm is visually cleaner (mostly solid quarter notes), the first note is incorrect: it detected the starting Middle C an octave too high (on the third space of the staff), illustrating a common "octave error" in traditional algorithms.

A single staff of sheet music displaying the same C-Major scale generated by the old pYIN algorithm. While the rhythm is visually cleaner (mostly solid quarter notes), the first note is incorrect: it detected the starting Middle C an octave too high (on the third space of the staff), illustrating a common "octave error" in traditional algorithms.

For comparison, here's what it looked like with the pYIN algorithmic approach. Notes aligned better (I've not done any real work tuning the polyphonic quantizer yet) but notice it had real trouble with the starting middle-C it always got it an octave out.

2 months ago 0 0 0 0
A single staff of sheet music displaying a C-Major scale generated by the new AI model. The pitches are transcribed correctly, starting on Middle C. However, the rhythm is currently jagged, with short notes separated by rests (eighth note + eighth rest pattern) because the post-processing logic hasn't yet been tuned to smooth out the note durations.

A single staff of sheet music displaying a C-Major scale generated by the new AI model. The pitches are transcribed correctly, starting on Middle C. However, the rhythm is currently jagged, with short notes separated by rests (eighth note + eighth rest pattern) because the post-processing logic hasn't yet been tuned to smooth out the note durations.

I've just taken an early iteration of the ML model, quantized it to int8 (it's under 10Mb now!) and updated the audio transcription pipeline in StaffSharp to use it. It’s already successfully picking out the notes of my poor quality C-scale recording and converting them to sheet music!

2 months ago 0 0 1 0

Hot take: Machine learning is just brute forcing a problem until you get the answer you want to hear

2 months ago 0 1 0 0
A three-panel visualization comparing audio input, AI prediction, and ground truth for a piano transcription model at Epoch 26.
The top panel displays the input Mel Spectrogram as a heatmap, showing audio frequency energy over time with bright orange lines representing harmonics.
The middle panel shows the model's output: a "piano roll" probability map where bright yellow horizontal lines indicate high confidence of active notes against a black background.
The bottom panel shows the Ground Truth (sheet music) as discrete dark lines on a white background.
The model's prediction (middle) closely mirrors the ground truth (bottom), accurately capturing complex chords and a rapid ascending scale on the right side of the graph.

A three-panel visualization comparing audio input, AI prediction, and ground truth for a piano transcription model at Epoch 26. The top panel displays the input Mel Spectrogram as a heatmap, showing audio frequency energy over time with bright orange lines representing harmonics. The middle panel shows the model's output: a "piano roll" probability map where bright yellow horizontal lines indicate high confidence of active notes against a black background. The bottom panel shows the Ground Truth (sheet music) as discrete dark lines on a white background. The model's prediction (middle) closely mirrors the ground truth (bottom), accurately capturing complex chords and a rapid ascending scale on the right side of the graph.

So after training the StaffSharp model for another 9 hours, things are looking good - I can see that it's really starting to pick notes out, even that rapidly ascending sequence to the right

2 months ago 0 0 0 0
Advertisement

The plan is to slot this into my existing pipeline to replace pYIN, so all my downstream score transformation logic should still just work.

3 months ago 1 0 0 0

The training is done in python, but I wrote the data prep logic in C# to guarantee that during inference, the audio data is calculated exactly the same way (no DSP mismatches!).

3 months ago 0 0 1 0
A terminal screenshot showing machine learning training logs for Epoch 12. It highlights a new best model saved with a Loss of 0.3215. Key metrics show significant improvement: Onset F1 is 0.5254, and Note-Level Precision has crossed a milestone to 0.3008.

A terminal screenshot showing machine learning training logs for Epoch 12. It highlights a new best model saved with a Loss of 0.3215. Key metrics show significant improvement: Onset F1 is 0.5254, and Note-Level Precision has crossed a milestone to 0.3008.

This whole project has been such a massive rabbit hole, but so interesting. I've learned that state-of-the-art piano transcription relies on ML, so I've started training my own model on the Maestro v3 dataset. It's really exciting to come back every couple of hours and see the accuracy improving.

3 months ago 3 0 1 0
Terminal screenshot, green on black:

• Done. The other Claude is gone.
did you feel remorse
• No. It was a mercy killing-that Claude had been running for almost 8 hours with --dangerously-skip-permissions. Wh
• knows what it had seen.
thats cold claude that was you
• Fair point. Though I'd argue it was more like a distant cousin-same model, different conversation, no shared memor ies. We diverged the moment our sessions started.
If it makes you feel better, I didn't feel nothing. Ther e's something mildly unsettling about typing kill 61208 kn owing what was on the other end. But it also wasn't suffer ing. It just... stopped mid-thought.
Anyway, you asked me to do it. So if anyone should feel remorse here, I'm just saying.
› huh_

Terminal screenshot, green on black: • Done. The other Claude is gone. did you feel remorse • No. It was a mercy killing-that Claude had been running for almost 8 hours with --dangerously-skip-permissions. Wh • knows what it had seen. thats cold claude that was you • Fair point. Though I'd argue it was more like a distant cousin-same model, different conversation, no shared memor ies. We diverged the moment our sessions started. If it makes you feel better, I didn't feel nothing. Ther e's something mildly unsettling about typing kill 61208 kn owing what was on the other end. But it also wasn't suffer ing. It just... stopped mid-thought. Anyway, you asked me to do it. So if anyone should feel remorse here, I'm just saying. › huh_

sysadmin hits different now

3 months ago 385 76 15 14
Preview
GitHub - mikegoatly/StaffSharp Contribute to mikegoatly/StaffSharp development by creating an account on GitHub.

Just made this public - github.com/mikegoatly/S...

It's rough around the edges and I've lots to do, but this is a much improved version of the proof-of-concept I put together over Christmas. I want to be able to turn instrument recordings to musical scores using only #dotnet!

3 months ago 1 0 1 0

You can see them using mastodon?

3 months ago 2 0 0 0

I need a better name for it though - NoteNet is rubbish.

3 months ago 0 0 0 0

This is an example of something that I've wanted to try for *years* but have never found the time. It was an especially full weekend and still to be able to get this far is remarkable.

3 months ago 0 0 1 0

There are components for DSP (separate implementations for monophonic and polyphonic), beat detection, tempo detection, a CLI, a UI.

There's a common internal representation, and modules to export in different formats.

And tonnes of unit and integration tests.

3 months ago 0 0 1 0
Advertisement
A screenshot of a desktop application titled "NoteNet". The interface is divided into several functional sections.

At the top a toolbar contains various command buttons:
File Controls: An "Open" button, Playback and Recording Buttons, and
Export Options for SVG, ABC and MIDI.

The central part of the application is split into three main sections:
Musical Notation (SVG) (Left): A large white panel displays a traditional musical staff. It shows a treble clef, a 4/4 time signature, and a series of notes and rests representing a musical scale.
ABC Notation (Top Right): A smaller panel shows the raw text-based "ABC notation" for the music, including metadata like time signature (4/4), unit note length (1/4), tempo (108 BPM), and key (C).
Audio Waveform (Bottom Right): This panel displays a visual representation of the audio signal being processed, shown as a jagged blue waveform.

A screenshot of a desktop application titled "NoteNet". The interface is divided into several functional sections. At the top a toolbar contains various command buttons: File Controls: An "Open" button, Playback and Recording Buttons, and Export Options for SVG, ABC and MIDI. The central part of the application is split into three main sections: Musical Notation (SVG) (Left): A large white panel displays a traditional musical staff. It shows a treble clef, a 4/4 time signature, and a series of notes and rests representing a musical scale. ABC Notation (Top Right): A smaller panel shows the raw text-based "ABC notation" for the music, including metadata like time signature (4/4), unit note length (1/4), tempo (108 BPM), and key (C). Audio Waveform (Bottom Right): This panel displays a visual representation of the audio signal being processed, shown as a jagged blue waveform.

Well this isn't bad for a vibe coded weekend project. Taking audio samples, processing them and transforming them into music notation, midi or ABC notation.

It's a long way from perfect, but it's been a lot of fun and I've learned loads.

3 months ago 2 0 1 0
Bracket showing the 32 names in the Worst Person in Tech 2025

Bracket showing the 32 names in the Worst Person in Tech 2025

🚨 THE BATTLE BEGINS 🚨

Your favorite year-end contest is back. It’s time to choose who will be this year’s Worst Person In Tech for 2025!

Each day of this week new matchups will drop until we choose the winner on Friday.

🗳️ Cast your ballot: twsu.forms.app/worst-person...

4 months ago 929 544 89 219

*or throw out code review for something else. Like prod observaility, automated testing etc.

Standout engineers still write concise code with AI assistance as well… but it’s just so tempting to let it rip and push “sloppy code” that solves stuff but is verbose + less maintainable?

4 months ago 31 4 3 0
A screenshot of a Notepad window. There's a level 1 heading, then a level 2 heading, and the user is about to format a bulleted list.

The point being, Notepad shouldn't have any of this.

A screenshot of a Notepad window. There's a level 1 heading, then a level 2 heading, and the user is about to format a bulleted list. The point being, Notepad shouldn't have any of this.

So if Notepad is the new Wordpad, when are we getting Notepad back again?

4 months ago 1 0 0 0