You aren’t alone
You aren’t alone
1. That is an amazing design and amazing engineering. I legitimately am astounded by the creativity and thought that went into that.
2. The writing style where the author feels the need to apologize for anything even remotely technical (like: Once again, just bear with us for a bit) comes across as either childish or condescending. What purpose does that serve? Anyone clicking a link about an old arcade game with no computer or screen obviously wants to know how it works. Why write like that?
Bear with us means, ‘I’m about to do a bunch of description… shore up your mental banks and prepare to reread the next bit a few times.
Man
Is this newsworthy, are we reporting on things that almost happened?
We need to take that section/link down.
We did do a KickStarter for the JamBlaster, made ~200 and shipped them.
https://www.kickstarter.com/projects/1091884999/jamblaster-t...
But we are not in a position to be focusing on custom hardware.
... a dedicated device is half the puzzle. That, and a low-latency network connection to your peers. You have those two and you can get a reliable experience.
The important number is round-trip latency, and we found that around 25ms is good enough (we're all quite used to playing with people of varying time-keeping ability anyway). I think there's scope to improve on that using a library like Roc (https://github.com/roc-project/roc) where you can target a specific latency. I've been meaning to play around with it, but to be honest I'd rather be playing music :)
We see that too: 25ms one-way latency is the max to stay in sync, and that includes both internet + audio device encode/decode, which gets eaten up quite fast!
We are looking at providing an optional premium networking service to offer a faster connection as an alternative to the open internet. Nothing too expensive, like $10/month is the goal. Hope that gets you and your friends under that magic threshold when it's available, if you try it out.
Oh JSON.
For those unfamiliar with the reason here, it’s that JSON parsers cannot be relied upon to treat numbers properly. Is 4723476276172647362476274672164762476438 a valid JSON number? Yes, of course it is. What will a JSON parser due with it? Silently truncate it to a 64-bit or 63-bit integer, or a float, probably or if you’re very lucky emit an error (a good JSON decoder written in a sane language like Common Lisp would of course just return the number, but few of us are so lucky).
So the only way to reliably get large integers into and out of JSON is to encode them as something else. Base64-encoded big-endian bytes is not a terrible choice. Silently doing the wrong thing is the root of many security errors, so it not wrong to treat every number in the protocol this way. Of course, then one loses the readability of JSON.
JSON is better than XML, but it really isn’t great. Canonical S-expressions would have been far preferable, but for whatever reason the world didn’t go that way.