The voice of a wizard hacking away

My pals at Sandy Pug Games have opened up preorders for WIZARDPUNK, a zine of various wizard stories and whatnot. It’s full of brilliant work, and I highly recommend checking it out! I have a little epistolary slice-of-life piece in it, which I’m honestly pretty proud of. In addition to this, I was asked if something rather curious was possible, if there was any way some audio-producing computer code could be squished down to a reasonable size such that someone could theoretically type it in. The final result of this exercise is in the zine as well, and it was the kind of code-golf-esque challenge that was so interesting to me that I essentially knocked it all out mentally while soaking in the tub.

The interesting bits are the constraints. The core explicit constraint is that it needs to be able to be typed in, but this brings with it implicit constraints to bring it from ‘theoretically typable’ to ‘someone might actually try this’. Length is an obvious one, and I think to not detract from the rest of the zine, a single spread was kind of ideal anyway. Actually being able to print and type it is another; we can’t just release raw binary data. Finally, while I initially wondered if there was a plausible way to have folks generate a .COM file or the like, ideally the code is something cross-platform and also recognizable to folks who are not nerd-ass single-board computer hobbyists like me.

What occurred to me was that we could embed a base64 BLOB of an MP3 file into an HTML5 audio element. Base64 means we’re using human-typable binary. HTML means literally everyone with a computer in 2020 can run it. Additionally, HTML is ubiquitous enough that a lot of people – even wizards who have never actually dealt with web design – will recognize it and know what to do with it with little to no direction. The remaining problem, and one that left my more skeptical than confident from the computer-free sanctity of my bath, was payload length.

Fortunately the audio clip I was going to be working with was essentially a vocal sample. I ended up converting it down to an 8kbps monaural MP3 file, which is… absurd. But, space-wise, everything was tight here. I initially tested with a 0.8 second sample of my voice, and was hopeful I might receive something comparable in length. The first sample I was sent was closer to two seconds, which sounds perfectly serviceable at first blush. But within our constraints, dealing with the scale we’re working with… doubling the size of the payload is significant to the point that it ultimately destroys the likelihood of the experiment remaining plausible1. Liam pared the clip down to one second, and we were back in business. It sounded crunchy and muddy, but 8kbps remained a sticking point. Going to 16kbps would double the payload which, again… is a big deal. It simply reduces the human-typable aspect far too much.

Even with these constraints in place, the payload is 2,572 characters for a hopeful wizard to theoretically type in. To make matters worse, even though they’re technically human-readable, they’re still seemingly random strings like M7wXBlcFATAE2V5eM. Formatting-wise, I tried to break them up into relatively short lines, but it’s still… a lot. This means that there’s a lot of room for error here. My understanding of MP3 is pretty limited. I assumed it doesn’t contain a checksum since it’s a streamable format, but I wasn’t entirely positive; if I was wrong, a single erroneous character might make a browser reject it. I also didn’t know how good (or bad) the error correction might be. This whole endeavour piqued my curiosity enough that I’ll likely try to read the spec some day, but for now… I just started replacing and deleting characters and mashing reload in my browser. Luckily, and somewhat surprisingly, it was actually very fault-tolerant! A sloppy wizard can make a considerable number of errors with little to no audible effect.

In the end, this was a fascinating experiment for me. None of it was particularly complicated, but figuring out these constraints and piecing together a viable solution? That’s the sort of wizard shit I can get behind. Anyway, go check out the wizard zine!


  1. The whole thing (payload and HTML wrapper) fills a two-page half-letter spread. It’s a lot, but it still feels manageable; you can see the entire thing in one go. Doubling this to four pages just feels far too daunting. ↩︎

Artwork of the Channel F (external)

Just a fun little link post. Title link goes to a lengthy and well-illustrated post by Kate Willaert highlighting the design of Fairchild Channel F game cartridges, manuals, and boxes. I’ve been spending a lot of time lately discussing the specific aesthetics of various consoles, and why they gravitated toward those aesthetics. The Channel F is one of those systems that I know all about the history of, but have somehow never actually experienced in person. So, I never really had it in my mind to mull over its aesthetic, but it is a trip. Of course, much like the later VCS, this was a time when video game graphics were… y’know, dots. So box and cartridge art tended to just go buck-wild.

Anyway, the Channel F had a colorful and cohesive aesthetic to its game art, and Willaert does a bang-up job of walking us through it. Apparently this is the third in a series she’s doing, with the Magnavox Odyssey and those games you’d type in from magazines and such being the first and second entries, respectively. Good stuff.


Two slim keyboards

I’m writing this on a keyboard I ordered from Drop quite some time ago, the Morgrie RKB6801. My daily driver up until now has been an also-recently-acquired Keychron K3. Both of these keyboards use slim switches; prior to this, I was using another Keychron keyboard with full-size Keychron optical switches. I do much of my writing/whatever from bed, and the way I configure myself doesn’t really work out well with a traditional mechanical keyboard; the overall height is just too chunky. Fortunately, a lot of progress is being made in the mechanical keyboard space; simply getting a Bluetooth model was an exercise in frustration but a few years ago.

I should say that I am a clicky-clacky typist. My favorite switches ever are the IBM Model M buckling springs, but in a modern setting I gravitate toward Matias’s take on the Alps switch. Few keyboards/keycaps are designed around Alps, so the next best switches for me are Cherry Greens. This is the sort of baseline that I’m working with for this post-that-approximates-a-review. As I mentioned, I had been using a Keychron K6, with Keychron’s optical simulacra of Cherry Blue switches. Blue is already a step down from Green for me, but I was making do with it. Optical switches are conceptually quite interesting to me; the core mechanical elements that provide the tactile satisfaction can be left in place while changing the electronic element to something solid state. Had I not wanted to dabble in this, I could’ve bought the hot-swappable version of the K6 and swapped in some Cherry Greens. I’m glad I didn’t, because as I mentioned, the keyboard is just too chunky for the intended use-case. You mention this sort of thing around mechanical keyboard groups, and you get chastised, because of course it’s chunky! The big fat switches make the magic! Which… both things can be true. It can be an unfortunate reality while still being… the reality.

The optical switches themselves were… okay? Most of the keyboard was fine, though not quite comparable to Cherry Blues, but the wider-than-letter keys? They squeaked like a poorly-oiled mouse. It was quite annoying. Yet the concept still compelled me enough that I opted for the optical switches on the K3 as well. These switches are definitely better in that they are not squeaky! And overall, they feel less mushy as well. Putting aside the size advantage, these actually feel better to type on than the full-sized Keychron optical switches. The other keyboard that I received, the Morgrie, uses traditional mechanical switches, albeit in a slim form-factor by Kailh. While this post is the first long(ish) thing that I’ve typed on the Morgrie, I have put time into testing it, using it for day-to-day typing, speed tests. And I have thoughts about both keyboards…

Size, and form factor

Initially, I was put off by the size of the Morgrie. It is approximately the same depth as the K3, but noticeably wider. Despite this, it has a full row fewer of keys; the K3 has an actual function row. I use function keys fairly infrequently; I think my most common usage is F2 to edit tags in Acrobat1. I’ll touch on this more in the layout section, but it’s worth noting that there are just many more keys on the smaller keyboard. The reason the Morgrie is so much larger is that it has a fairly prominent bezel surrounding the keys. I feel like this might annoy me on a desk, but it’s kind of nice having a place to rest the ol’ thumbs when typing in bed. The thick aluminum (I believe) bezel also makes the Morgrie heavy compared to the K3. It is solid. It feels well-built; the K3, while perfectly fine, feels flimsy in comparison. Overall, I don’t mind the size of the Morgrie as much as I expected, but the K3 gets the credit for its ability to cram far more into a noticeably smaller footprint.

Layout

These are both compact keyboards without number pads. They both have cursor keys and a right-hand column for page navigation keys. My laptop has a similar configuration. One thing that I’ve learned is that this stack of four keys on the right-hand side is a common decision for navigation keys – but unlike traditional layouts, nobody has decided on a standard for this. The three keyboards have these four keys from top-to-bottom:

I don’t have much of an opinion between my laptop and the K3 except that I wish they were consistent. I guess the K3 makes more sense to me, but they’re both fine. The Morgrie, on the other hand, is nonsense. Delete is at the bottom, as far from Backspace as possible. This is ludicrous. Less egregious, but annoying to me is Pg Up and Pg Dn being on the function layer instead of Home and End. I’d also prefer Insert be on the primary layer instead of PrtSc, but at least it has Insert – this key cannot be input from the K3 (this keyboard only comes backlit, and wastes a perfectly good key on this). Considering WSL2 seemingly has no direct interaction with the Windows clipboard, and I have to rely heavily on ShiftInsert… this was miserable.

Despite the Morgrie displaying symbols for brightness, transport, volume, &c. on the function layer seems to send the codes for Function keys. I could go either way with this, as I really only miss having Mute as quick access, and as previously mentioned, I only really use F2. A second function layer would have been nice here; my old K6 (which also lacks a function row) worked this way. Esc and `/~ share a key, with the latter on the function layer. Despite my heavy vim usage, I don’t touch Esc much. Since I remap Caps Lock to Ctrl on every machine I own, Ctrl[ is less of a stretch despite being a chord. With this in mind, I’d prefer `/~ on the primary layer, but I understand the decision. The extra row of the K3 pays off here.

The only other notable difference is the location of the Fn key; next to Space on the Morgrie and one to the right (between Alt and Ctrl on the K3. I use these modifiers infrequently, and don’t really have a preference, though again… standardization would be nice. Overall, it’s hard to say which layout I prefer; they each have a unique critical failure: the lack of Insert on the K3 and the absurd positioning of Delete on the Morgrie. Utterly bizarre decisions.

Switches and keycaps

TL;DR: The Morgrie wins on both fronts. The keycaps are PBT and feel great; K3 has ABS keycaps with extremely visible sprues. I got the Morgrie in white with orange lettering, and it’s rather pretty. Depending on which backlight you get, the K3 keys are either light or dark grey, with clear lettering for the backlight. They’re unoffensive, but the white Morgrie is just… kind of fun. I don’t know my way around keycap profiles very well, but the K3 uses slightly curved chiclet-style keys, while the Morgrie is more traditional. I don’t have a super strong opinion on this; I find that I orient myself more easily but get lost quickly on chiclets, and therefore type more quickly overall on more traditional caps.

I mentioned that the slim Keychron optical switches are nicer than the full-sized Keychron optical switches. This is certainly true, but the Morgrie’s Kailh Choc switches are much nicer than both. The Kailh Whites supposedly have a lower actuation force than the Keychron Oranges2, but it feels higher. All in all, I find the Kailhs to be a much nicer typing experience. If I sell off some stuff, I might try the traditional mechanical Gateron version of the K3. At the very least, if I found myself preferring the size/form-factor of the K3, I could replace them with Kailh switches now that I know I’m a fan.

The K3 switches have one very cool thing going for them – they accept regular Cherry keycaps. Obviously full-sized ones will be a bit chunky on the board, but still at a lower profile than the same caps on full-sized switches. More importantly, it’s just… an obvious standard. It’s wild to me that both Cherry and Kailh opted to come up with new, incompatible keycap mounts for their low profile switches. This was always a problem with Alps as well; so many people use Cherry that caps for anything else are hard to come by. The K3 switches are also hot-swappable, and optical switches of course don’t rely on a mechanism that will wear. I doubt this is really a sticking point. Finally, one of the keys on my K3 was improperly assembled from the factory, the spring was all out of place; I easily disassembled this and repaired it myself, but… shame I had to.

Miscellanea

I mentioned the K3 only comes backlit. There are two versions: RGB- and white-LED backlit keys. I opted for white; RGB LEDs just… don’t look very good, in my experience. Being a touch-typist, I tend to disable backlighting anyway, and would prefer a version with a useful key and no backlight in lieu of a key I accidentally press constantly, forcing me to cycle through a bunch of ridiculous effects. Lastly, while there is an option to turn the backlight off entirely, there is no option to turn it on entirely; the closest thing is an effect where every key is on, but any given key briefly shuts off when you depress it. This is silly. Oh, there’s also no brightness setting. My laptop, by comparison, has no ridiculous effects and two brightness settings. This is useful!

Both keyboards have Bluetooth, both support three devices. The K3 uses a function layer for this, whereas the Morgrie has three dedicated buttons. I have no preference on this. I haven’t had any issues with Bluetooth on either board yet, though I also haven’t really stress-tested it. Unlike my Bluetooth IEMs that I pair to my phone, I don’t really have a need to test how far I can stray from my device. Both keyboards charge via USB-C, and can in fact be used wired via USB-C. The K3 has a switch to go between wired and wireless, the Morgrie does not. I’m sure there’s an advantage to one of those approaches, but I’m not going to try to suss it out.

The Morgrie has a nice tactile pushbutton for power on the back, while the K3 has a tiny slide switch. Both are fine, but the Morgrie is nicer in my opinion. The K3 will go into a sleep mode quickly; the Morgrie does not seem to, with the company claiming to have one of the longest standby times. I’d rather the keyboard just go to sleep. The K3’s bezel-less, chiclet design makes for easy cleaning; despite this, it came with a thin plastic cover. Neither of these things is true of the Morgrie.

Ultimately, I really think I prefer the Morgrie, and I’m tempted to buy another in the lovely powder blue color. It’s just very nice to type on. The solid build, the Kailh switches, the comfortable keys… I get on with it well. I sure do think that Delete placement is regrettable, though.


  1. Historically, I was keen on F5 to refresh content in a browser. I’ve been trying to retrain my muscle memory to CtrlR as it feels like less finger-work despite being a chord. Keeping in mind, of course, that I universally map Caps Lock to Ctrl. ↩︎
  2. The clicky slim Keychron optical switches come in two barely-different actuation forces, with orange being the heavier of the two. Despite being the heavy one, orange is nearly comparable to a Cherry Blue. ↩︎

Digirule 2U

I keep meaning to post about SISEA, but like… I don’t have anything to say that others haven’t said better. Much like SESTA/FOSTA, this bill is a direct attack on sex workers under a thin anti-trafficking guise. Listen to what sex workers are saying about this. Contact the folks who are supposed to listen to us. Let’s do what we can to stop this garbage.

I’ve written about single board computers before, and have bought and briefly played with a modern board from Wichit Sirichote. I’d meant to write about my experience with this board, but I haven’t actually gotten too far into the weeds with it yet. I need to either find a wall-wart that will power it, or else hook up my bench supply to mess with it, and… my attention span hasn’t always proven up to the task. I will say that it does what it’s supposed to do, at a reasonable price; a fun little hobby board.

Recently, however, I received something very interesting. Funded on Kickstarter, and not yet present in its current version on the creator’s website, the Digirule 2U is a single-board computer in a ruler-sized form factor. It has two 8-bit binary display LED arrays, pushbutton inputs that somewhat mimic classic machines like the MITS Altair, and is powered by a single CR2032. It’s not based on any classic microprocessor, but its opcode mnemonics are instantly recognizable to anyone familiar with entering machine code into an old machine. It has 54 instructions, all of these are beautifully silkscreened onto the back of the machine, alongside the handful of relevant reserved system memory addresses.

This all means that without having to connect to a power supply, without having to read any outside reference material, the Digirule 2U is an entirely self-contained 8-bit hobby computer sized like a chunky bookmark. I was able to quickly write a program to show adding (in binary, of course) from 0-255. There are no conditionals in this little demo, so when the location overflows, it just starts at zero again.

0: 00000010
1: 10000000 #set speed to 128
2: 00000011 #initialize stack pointer
3: 00000101
4: 00000000
5: 11111111 #load value 0 into the data display register
6: 00011110
7: 11111111 #increment the data display register
8: 00101000
9: 00000110 #goto 6

An incredibly simple ‘hello world’ sort of demonstration, but again… the only reference material I used was the list of opcodes silkscreened on the rear of the computer.

This is the third iteration, after the (largely identical to one another, I believe) Digirule 2 and 2A. I haven’t used the earlier Digirules, but the 2U seems like a big step up. It adds serial communication including ASCII terminal access and file transfer. This is something I’ll check out in the future, but it’s not really the point of the device to me. The 2U also adds over 20 instructions including niceties like multiplication and division; the earlier instruction set was certainly sufficient, but the 2U’s fills out some helpful areas.

I love this little thing. It’s a small, clever throwback to hobbyist and developer’s single-board computers of the early 8-bit era. The packaging is brilliant, removing all of the friction from just powering it on and tinkering with some machine code. It’s the same sort of fun that I get from casually messing with an old HP calculator or code-golfing in dc. Hopefully I’ll come up with some little challenges for myself and post an update or two in the future.


Medium/Message: Music and Medium

A new series! I have at least two posts planned for this series, and hopefully I’ll come up with more in the future. The idea is to highlight art that is inseparable from the medium used to record and/or distribute it. As far as this post is concerned, I want to discuss creative uses of the media that a consumer would purchase. Particularly, music or musical experiences that couldn’t exist outside of the medium they were made for. Certainly various technologies and media have had convenience features like CD zero-indices being used for skippable track intros or records being sided out of order for automatic record changers. But some creative folks have really exploited features of specific media for far more interesting purposes. I personally find this extremely compelling; I hesitate to say it elevates an art form when the reality is a bit more complicated. It’s the creation of something new, merging form and medium into a uniquely intertwined experience. And while the end result may be a bit gimmicky, it is also often something with some level of transience or interactivity.

Mike Oldfield – Tubular Bells (Commodore 64 Software)

I’m starting with this one because it’s a bit of a stretch. Honestly, I thought I had three perfect fits for this post picked out, but could only dig the following two out of my brain. Maybe this was the third all along, stretch or not. At any rate, in 1973, an eighteen-year-old Mike Oldfield released an album that, among other things, launched Virgin Records. Tubular Bells took the world by storm, and Oldfield… took note of that, following the album with multiple live recordings and sequels. But one of the weirdest things to come out of this was 1986’s Commodore 64 rendition of the album. ROM sites are constantly moving around, but you can pretty much get the whole picture from this recording on YouTube.

This gets interesting to me as it intersects with 8-bit computing. The C64 was about as much of a staple as one could imagine a computer to be in American homes at the time. Among other things, it had the SID chip, a groundbreaking sound chip that (without digging too deep) combined analog and digital stages for a sound that remains unique to this day. This lead to some absolute bangers for video game sound design, but it also seemingly gave Mike Oldfield and the team at Computer Rentals Limited the confidence to create an interactive, fully synthesized and computer-controlled rendition of Tubular Bells.

So, despite this being a bit of a stretch, this is where I think we have a novel usage of medium, likely the first of its kind. Home music visualizers already existed, like the failed Atari Video Music device, and commercial music videos had already leaned on computer animation. And while the C64 version of Tubular Bells feels like something out of the demoscene – it isn’t1; it was a commercially available, Oldfield-approved product. To my knowledge, this was the first time all of these things came together – a commercial release of software for a popular device with an interesting and capable sound chip that offered up a rendition of an album with interactive visualization elements. While you can’t do much, you can change tracks, alter the colors, switch between disparate dots and lines, and alter symmetry. This wasn’t possible with even the fanciest of video formats, LaserDisc; it was only possible to combine known visuals with known audio and incorporate interactivity using software. The idea didn’t really take off, but the C64 version of Tubular Bells represents a unique meshing of viable product on a medium and tech optimism.

GESCOM – Mini Disc (MiniDisc)

Unlike the obviously Compact Disc-based CD-R(W), MiniDisc was designed from the ground up to be a consumer-rewritable format. Rewritable discs were available from the outset, and they differed significantly from rewritable CD-RWs. Many of these differences don’t matter for the purposes of this post, but one that does is that recording was done much more akin to how we think of rewritable computer media. That is to say, recording doesn’t need to be done in a tidy, serial manner; bits and boops of a track can be all over the physical disc. This means that buffering was built in to the spec, a requirement of every player. And this means that every player also offered, for the first time, a guarantee of gapless random access.

Mini Disc by GESCOM (a side project of Autechre that released… this one album) exploited this very fact. The idea was that every track could… sort of kind of lead into every other track. You’d pop in the MD, set it to random, and hear a different experience every time. This would be possible with a CD if gaps were accepted, but… for a project like this, they simply aren’t. And weren’t. And so, Mini Disc was a release that could only exist on its namesake. Nowadays, file-based music playback is utterly commonplace, and gapless isn’t so hard to find. Mini Disc is, thus, available for download these days, but at the time… this was a feature that was basically unique to MD.

Various Artists – RRR-100, RRR-500, and RRR-1000 by RRRecords (Vinyl record)

The typical way that a vinyl record works is that audio information is stored in a single long groove that runs in a continuous spiral from the outer edge of the disc toward the center. The fact that the stylus just ‘rides’ ambivalently in the groove can be exploited, however. It already is in some of the basic convenience mechanisms that make records usable, like the locked groove at the end that keeps the stylus from careening into the label and/or spindle, and the widely-spaced areas that make the breaks between tracks visible. But other, more creative things can be exploited here as well, like multiple spiral grooves running in parallel with each other, or in the case of RRR-100, RRR-500, and RRR-1000, a ton of locked grooves containing short looping samples in lieu of a traditional spiral.

RRRecords released three of these: RRR-100 has 100 loops on a 7″ and RRR-500 and RRR-1000 have 500 and 1000 loops respectively on 12″s. These weren’t studio beats meant for DJs to use or anything along those lines, but weird little noise and industrial type tracks, each made by a different artist2. Some of these artists were quite prominent; among (hundreds) others, Merzbow, Aube, and Terry Riley made appearances. Due to the sheer density of tracks on the record, knowing what you’re listening to is nearly impossible, despite having a tracklisting. Any given needle drop is, to an extent, random because of this. This instant access to quasi-randomness3 and the ability to have hundreds of short loops was basically unique to the vinyl record format at the time. Sure, locked loops could exist on earlier formats that use similar groove-riding like wax cylinders, but it would’ve been far sillier than this already silly trio of records. While, much like Mini Disc, the concept could be replicated digitally… I don’t believe these ever saw a release outside of vinyl.


  1. This disparity has come up before and while I get it, I have to say that calling this ‘a demo, but not scene’ is the funniest fucking thing I’ve heard in a while. ↩︎
  2. Well, RRR-1000 was slightly less ambitious, with 20 artists contributing 50 grooves each. ↩︎
  3. As opposed to, say, randomly fast-forwarding a tape. ↩︎