James Green's Avatar

James Green

@jfgreen

He / Him. Trying to convince computers to do useful and interesting things. Making and listening to bleeps, bloops, breaks and bass.

86
Followers
232
Following
48
Posts
17.05.2024
Joined
Posts Following

Latest posts by James Green @jfgreen

Pikchr… maybe?

02.12.2025 14:58 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Blog

For DSP, Signal smith audio has some interesting and well explained posts. signalsmith-audio.co.uk/writing/

29.11.2025 23:00 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Exit Records β€œpizza box”.

Exit Records β€œpizza box”.

Exit Records were not too far off during their Heartdrive/Pleasure district era.

True To The Craft πŸ•πŸ§‘β€πŸ³

17.07.2025 14:25 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Open reel tape deck mid playback.

Open reel tape deck mid playback.

Currently discovering what’s recorded onto various old tapes I have acquired.

This one has a separate track on each channel.

In the right ear: classic rock.

In the left ear: intermittent sounds of giggling teenagers proudly recording each others farts.

With headphones on: quite an experience.

03.07.2025 12:30 πŸ‘ 4 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

All new to me. Liking this as a way to bookmark it for Monday morning so I have a nice stack of music to listen though while I work.

21.06.2025 20:18 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Snippet of JavaScript code that reads:

// Get all items/entries from the feed
const allItems = [...doc. querySelectorAll('item, entry')];
// Filter items from 2025
const items2025
= allItems. filter(item => {
const pubDate
= item querySelector ('pubDate, published')?. textContent;
if (pubDate) {
try {
const date = new Date (pubDate) ;
return date.getFullYear () === 2025;
} catch (e) {
return false;
}
}
}) ;
return false;
items
// If we have 2025 items, pick random from those, otherwise fallback to all
const itemsToChooseFrom = items2025. length β€Ί 0 ? items2025 : allItems;
if (itemsToChooseFrom. length > 0) {
const randomItem = itemsToChooseFrom [Math. floor (Math. random () * itemsToCho
oseFrom. length)] ;
const link = randomItem. querySelector ('link')?. textContent 1l
randomItem. querySelector ('link')? getAttribute ('href') || randomFeed.htmlUrl;
window. open (link, '_blank');
} else {
// Fallback to feed homepage if no items found
window. open (randomFeed.htmlUrl, '_blank');
}
catch (e){
// Error fallback - just go to a random feed homepage
const randomFeed = feeds [Math. floor (Math. random () * feeds. length)] ;
window. open (randomFeed.htmlUrl, '_blank');

Snippet of JavaScript code that reads: // Get all items/entries from the feed const allItems = [...doc. querySelectorAll('item, entry')]; // Filter items from 2025 const items2025 = allItems. filter(item => { const pubDate = item querySelector ('pubDate, published')?. textContent; if (pubDate) { try { const date = new Date (pubDate) ; return date.getFullYear () === 2025; } catch (e) { return false; } } }) ; return false; items // If we have 2025 items, pick random from those, otherwise fallback to all const itemsToChooseFrom = items2025. length β€Ί 0 ? items2025 : allItems; if (itemsToChooseFrom. length > 0) { const randomItem = itemsToChooseFrom [Math. floor (Math. random () * itemsToCho oseFrom. length)] ; const link = randomItem. querySelector ('link')?. textContent 1l randomItem. querySelector ('link')? getAttribute ('href') || randomFeed.htmlUrl; window. open (link, '_blank'); } else { // Fallback to feed homepage if no items found window. open (randomFeed.htmlUrl, '_blank'); } catch (e){ // Error fallback - just go to a random feed homepage const randomFeed = feeds [Math. floor (Math. random () * feeds. length)] ; window. open (randomFeed.htmlUrl, '_blank');

Interesting, although you might want to … erm… update the vibes come 2026?

No deep commentary intended - just finding it very amusing how literally it took what I presume was a request to prioritise posts in the current year.

Strong vibes from `items2025`.

21.06.2025 14:53 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Preview
Why I Left Spotify in 2025 After fourteen years as a loyal Spotify customer, I finally cancelled my subscription. Here's why the platform's algorithmic direction no longer matches my simple, self-curated listening style.

Cancelled Spotify after 14 years and rediscovered my 2005 iPod Classic with Lee "Scratch" Perry tracks streaming never had. Now I'm buying records on Bandcamp with my old subscription money. Music sounds better and I actually own it!

// cc @jfgreen.bsky.social

www.jimgumbley.com/blog/why-i-l...

15.06.2025 12:16 πŸ‘ 5 πŸ” 2 πŸ’¬ 1 πŸ“Œ 0

Woo! Nice one. A small but impactful change. I overheard the weird β€œAI” DJ thing the other day and it felt so… insincere? Plenty of other interesting sources of musical entropy out there, both human and algorithmic.

15.06.2025 19:48 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Author & Punisher "Terrorbird"
Author & Punisher "Terrorbird" YouTube video by Augustine Arredondo

Terrorbird by Author & Punisher. youtu.be/jjlBOPLWZyw

13.06.2025 18:45 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Unbothered. Quantised. Happy. In my lane. Tracking with Renoise.

04.06.2025 17:22 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Screen shot from the site osstatus.com showing information about two MacOS Core Audio error codes kAudioFileStreamError_UnspecifiedError and kAudioFileUnspecifiedError. Mysteriously, neither of these codes have a description, but both of them are encoded by the byte sequence which in ascii spells out 'wht?'

Screen shot from the site osstatus.com showing information about two MacOS Core Audio error codes kAudioFileStreamError_UnspecifiedError and kAudioFileUnspecifiedError. Mysteriously, neither of these codes have a description, but both of them are encoded by the byte sequence which in ascii spells out 'wht?'

Shoutout to the Core Audio devs who decided that AudioToolbox should return the error code 'wht?' when encountering an unspecified error. A perfect blend of whimsy and pragmatism that lives on in MacOS to this day.

01.06.2025 12:08 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Got to love how genetic algorithms can be accidentally hilarious.

I once had a go at evolving a maze navigating bot. Rather than solve the maze, the bot learned to exploit a bug in my physics code and would drive through walls instead.

Looking forward to seeing where this reverb work takes you.

27.05.2025 10:29 πŸ‘ 0 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Screenshot of text that reads: β€œClick Error Generating Link to update your context preferences.”

Screenshot of text that reads: β€œClick Error Generating Link to update your context preferences.”

After unsubscribing to a particular spammy newsletter I continue to get emails, but now with the following footer.

Laughing, crying etc etc

22.05.2025 10:18 πŸ‘ 22 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
lofi Archive radio 🎞️ beats to scan/read microfiche to
lofi Archive radio 🎞️ beats to scan/read microfiche to YouTube video by Internet Archive

Internet Archive lo-fi beats to scan/read Microfiche to:

www.youtube.com/watch?v=aPg2...

21.05.2025 15:16 πŸ‘ 30 πŸ” 12 πŸ’¬ 0 πŸ“Œ 0

Some of us have rekindled an emotional attachment to the 'Music' directory.

(And some of us have a little collection of Python scripts to keep it all tagged and organised just the way we like it.✨)

20.05.2025 08:27 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Ah yes. The formative experience of trying to precariously balance a MacBook somewhere in between a pair of CDJ1000s without accidentally pulling out a USB cable or loosing the whole computer into the utterly grim void down the back of the DJ booth.

09.05.2025 18:35 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
A bank of different kinds of recycling bin, with the text β€œSelecta” superimposed over the top.

A bank of different kinds of recycling bin, with the text β€œSelecta” superimposed over the top.

12.04.2025 10:52 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

ROU Back Once Again With The Big Refactor

01.04.2025 13:26 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Nice! Would love to have a go at building an LSDJ / M8 like tracker for the 3DS.

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

Still thinking about the ramifications of an HTTP request having a soul.

28.03.2025 15:07 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

I have printed copies of some of my very first attempts at programming circa 2007ish. We have a direct insight into my thought process as I commented _every single_ line of code.

On global variables?

β€œThis variable needs to be global because it is very important”.

23.03.2025 10:03 πŸ‘ 6 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

I have printed copies of some of my very first attempts at programming circa 2007ish. We have a direct insight into my thought process as I commented _every single_ line of code.

On global variables?

β€œThis variable needs to be global because it is very important”.

23.03.2025 10:03 πŸ‘ 6 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

Swapping gym sets with my wife whilst simultaneously alternating responsibility for toddler entertainment is the kind of physical-mental discombobulation that chess boxing athletes must experience.

22.03.2025 11:45 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Doot 'em up

15.03.2025 22:10 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I have fond memories of using the select button glitch warp on these side scrolling rooms to drop Link into a the most spectacularly glitched up dungeons.

09.03.2025 19:10 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Relying on half recalled fragments of a compilers class to write a parser for a markdown-like language has been interesting.

The good news: I have finally internalised what β€œcontext sensitive grammar” means.

The less good news: Markup turns out to be really, truly, painfully context sensitive

02.03.2025 16:13 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Post image

Hehe

09.02.2025 17:44 πŸ‘ 4 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0
Black and white photo of a hardcover copy of the book β€œHypermedia Systems”.

Black and white photo of a hardcover copy of the book β€œHypermedia Systems”.

Wife: β€œisn’t there an app we can use for meal planning and groceries?”
Me: *furtively glances at @htmx.org book.*

09.02.2025 16:01 πŸ‘ 11 πŸ” 1 πŸ’¬ 2 πŸ“Œ 0
Cold-blooded software

An entirely reasonable and very relatable take. I had the same frustrations building a TUI in Rust (window size, raw mode, etc).

So I stubbornly rolled my own and was happy to find the whole TUI module was only β‰ˆ200 LOC.

β€œCold blooded” software is underrated.

dubroy.com/blog/cold-bl...

24.01.2025 13:28 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Had no idea surface mount was that satisfying! The way it all just pops into place is delightful.

11.01.2025 15:12 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0