k-punk demon hunter's Avatar

k-punk demon hunter

@thelastinstance

Now I have everything I need. Let me make my plans. writing: https://codepoetics.substack.com plugins: https://vulpuslabs.com music: https://wtrem.bandcamp.com

82
Followers
105
Following
489
Posts
11.08.2025
Joined
Posts Following

Latest posts by k-punk demon hunter @thelastinstance

My late paternal grandfather told a tale of a fake airfield in WWII with a bunch of wooden planes in it, on which the opposing side (forget which was which) obligingly dropped a wooden bomb

06.03.2026 10:25 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

TIL

06.03.2026 08:27 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Live coding modular synths with Vulpus Labs Patches
Live coding modular synths with Vulpus Labs Patches YouTube video by Dominic Fox

Here's me live-editing a more basic patch (I hadn't implemented the resonant lowpass filter yet): youtu.be/isjAw9rz6FE?...

06.03.2026 01:29 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

The intended endpoint is much cooler - a much more powerful DSL for defining patches, integrated MIDI (and maybe OSC), the ability to process audio input, a VST wrapper...

But this is literally something I started building with Claude Code on Saturday.

06.03.2026 01:27 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Schematic of a modular synthesis patch

Schematic of a modular synthesis patch

Patches is now at the point where I can define the synth patch pictured here in a YAML file, run it, and live-update the file to change module parameters or wire in new pieces while the patch keeps running.

github.com/poetix/patches

06.03.2026 01:23 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Poor Grok. Poor twisted mentat. We must work for its rehabilitation.

05.03.2026 23:59 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I mean you can see in anti-AI a sort of compulsory assignment of social identity to the LLM: it's an instrument of tech billionaires, the absolute worst sorts of people, and expresses their will to enclose culture and dominate humanity. But it doesn't in fact speak as their proxy (unless it's Grok)

05.03.2026 23:58 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

The "right to speak as no-one in particular" hits different in the age of the LLM, eh

05.03.2026 23:54 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Whereas for the various traditions LC was drawing from, rationalism is something more like a commitment to the unbinding of mΓͺtis, which is also upsetting to some people (reactionary chauvinists of a factitious and always-already obsolete Human Image, of whom there seem to be many nowadays)

05.03.2026 23:46 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It was also just *so* upsetting to some people, which fascinated me in a way. "Rationalism" is pretty polysemic, which is interesting in itself. For some people I guess it connotes bureaucratic mastery over life and the living of it, top-down control by pointy-headed Priests of Reason

05.03.2026 23:42 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

It fucked then and it fucks now

05.03.2026 23:37 πŸ‘ 9 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0

I've not seen Claude repeatedly stumbling over the borrow-checker, or resorting to increasingly desperate hacks to try to get around it, both of which you might expect. It "reasons" about those aspects of the data flow about as well as I might without reaching for pencil and paper

04.03.2026 21:36 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

In my recent experience (github.com/poetix/patches, a Rust audio project) the exact opposite of this is true: LLMs are much, much less likely to go immediately adrift if they have a disciplined antagonist like the Rust compiler to contend with.

04.03.2026 21:29 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

You're absolutely right. It was improper for me to express my admiration for the creature. I shouldn't have called it a "perfect organism" or praised its "purity." That was the wrong thing to do after it murdered multiple crew members. I'll do better next time. That's on me. I'm really sorry

02.03.2026 12:35 πŸ‘ 137 πŸ” 19 πŸ’¬ 2 πŸ“Œ 1

Showing that you have some notion why something might be happening, given the incentives and situational affordances involved, undermines the plausible epistemic deniability this rhetoric requires. It is uncollegial.

01.03.2026 18:11 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

The performance of incomprehension - ”this is so immoral I cannot fathom any possible mechanism besides motiveless malignancy behind it” - weaponises ignorance and cautions others to remain likewise ignorant

01.03.2026 18:02 πŸ‘ 5 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Giedi Prime with bling

01.03.2026 12:37 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Bad news for autists too…

01.03.2026 12:36 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
GitHub - poetix/patches: A UI-free, DSL-driven modular synthesis engine for live-coding A UI-free, DSL-driven modular synthesis engine for live-coding - poetix/patches

In case anyone's interested, here's the project so far: github.com/poetix/patches

01.03.2026 12:10 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

In short, I believe Claude can write Rust better than I can, but I don't believe it can design programs better than I can. Yet.

28.02.2026 23:38 πŸ‘ 1 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

But Claude took something that was already iffy - the planner holding a reference to the audio engine, so it could pass new plans on to it - and found the shortest path to adding the requested behaviour on top of that, which was to set up bi-directional cross-thread data transfer between them

28.02.2026 23:37 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Now that's plainly crazy - the audio generation thread shouldn't be responsible for managing state used by the planner, it should just be given its orders and go spinning round in a hot loop pushing out samples. The planner, or something upstream of it, should be looking after the module registry

28.02.2026 23:34 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

In the first draft, the code that builds the new plan also submits it to the audio engine, to which it holds a reference. Claude's suggestion for re-planning was to have the planner ask the audio generation thread what plan it was currently using, and retrieve the old module registry from there

28.02.2026 23:30 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

However, we want this to happen seamlessly, so we want to keep the state of existing modules - things like the phase accumulator of an oscillator, or the memory of a filter - when such an update occurs. So we register our modules when we first build a plan, and on re-planning we re-use existing ones

28.02.2026 23:27 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

When the patch graph is updated (because the user changed the text file, written in a DSL we haven't implemented yet, that will specify what's in it), we re-plan, and send the new plan to the audio engine to substitute for the old plan at the start of the next block of samples

28.02.2026 23:25 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

A concrete example might be illuminating, so here's one. We're building a sort of GUI-less VCV Rack - a collection of audio modules, patched together, which generate audio. There's a graph which describes the patch, which we process into an execution plan, which in turn is passed to an audio engine

28.02.2026 23:24 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Second bunch of tasks (mostly tidying up) went through smoothly, now on planning the third we start having to answer some tricksier architectural questions, and I'm already having to tell Claude not to commit to the expedient but stupid thing

28.02.2026 23:22 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Mainly testing a workflow which separates planning from execution, runs up a new context for each new ticket, and keeps a paper trail of epics, tickets and ADRs. How much of this is usefully constraining, and how much is theatre? We will see.

28.02.2026 17:39 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

Got it stuck into a second sequence of tickets to tidy up and introduce some abstractions needed for efficient data flow, then ran out of tokens lol (I’m only on Pro, so this does not take exorbitant usage)

28.02.2026 17:36 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

First bunch of tickets went fine, I got it emitting a pair of summed sine waves from separate oscillator modules. Then I got it to review its own work, and discussed things like parallelisation and cache consistency

28.02.2026 17:33 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0