This is my blog. I write articles here. Click into an article to see its images.

'Tenet' project start

12 Jul 2022

projects: writerdeck
builds: tenet
tags: rpi sharp-memory solar thermal-printer

I’ve had an idea kicking around for a while, to make a raspberry-pi-based netbook. Two years ago I was playing around with thermal receipt printers for another project idea and I was also starting to learn stenography. I got the idea to build a netbook for stenography. Some kind of steno netbook. I’ve taken to calling it tenet. I regained interest in the idea when I saw the ShaRPiKeebo on CrowdSupply.Read More...

Canary v1

22 Jun 2022

projects: home-automation
builds: canary
tags: 3dp circuit-python i2c rp2040 stemma

Recently my partner bought an LCD resin 3D printer. That was kind of the last straw for a risk that has been growing in the last few months. I already had a filament 3D printer (so far just for PLA, but who knows!), and several weeks ago I hooked up a kegerator with a carbonation system. Oh, and all of these share the same airspace as my office. The risk we’re concerned about is a buildup of VOCs, carbon dioxide and carbon monoxide.Read More...

Starting in on Dactyl

25 May 2022

projects: keebs
builds: dactyl
tags: 3dp

Since December 2020 I’ve been using an Ergodox EZ as my main keyboard, both for work and games. I have my own QMK firmware flashed on it, and I’m nothing but pleased with it. Seasons change though, and in January 2021 I found myself backing the Glove80 Kickstarter. I’ve been curious about a curved (“manuform”) keyboard, and this one looked really slick. Up to that point I’d put together keyboard kits with PCBs, and hadn’t yet 3d-printed any enclosures or plates.Read More...

Lunchtop & Cyberdeck

23 Sep 2021

projects: keebs
builds: lunchtop

I’ve been collecting parts in earnest for two new projects. The basic idea is a portable, hackable, ruggedized workstation. The first iteration of this idea came to me from my partner, who is a Homestuck fan. That one is Lunchtop, and will be built into a red plastic lunchbox from the 70s. The other idea came from, and built into a Pelican case. These projects interest me partly because I like thinking about the ubiquitous format (“laptop”) being turned on its head and reimagined.Read More...


26 Aug 2021

projects: keebs steno

I’d like to take a moment to rebase where I’m at with steno (and keyboards), and provide a little context. At the time of publishing this, the blog website has just gone live, and all prior articles from my steno journal have been imported and reformatted. First things first: I have not done much practice with steno in 2021. I have done quite a bit of practice building mechanical (qwerty) keyboards though.Read More...

alphanumeric & 3d printing

25 Jul 2021

builds: Lander Module
tags: HT16K33 thermal-printer

Recent efforts have gone into getting the 14-segment alphanumeric display working. I first tried it with d2r2’s translation of the Adafruit library into Golang, but that proved a little frustrating. I then pivoted to’s experiment, and that worked much better. I do have to wrap it in some logic for a few reasons: out of the box, it panics in certain situations related to the decimal I will need a single interface that ends up controlling multiple ht16k33 devices (as in a 6- or 8-digit display) I will likely need to implement scrolling text I may or may not need the interface to control a whole line of nearby displays (as in the case where there are two 6-digit timers, but sometimes they work together to scroll a long string) But I got the test (ht16k33Test) to work!Read More...

RPi4 setup, The Game-Stack

4 Jul 2021

builds: Lander Module
tags: golang

To dev on the RPi 4 I have to first update it: sudo apt update df -h # to check disk has enough free space sudo apt full-upgrade sudo apt clean The game stack (tm) requires some careful thinking. I almost want to thread the quit signal all the way down, from main to the game server, to the modal game, to each mode. Because (a) the modalGame Run() can’t block on the mode’s Run(), and (b) we’ll want to wait while a mode finishes Close() before we Setup() the next mode.Read More...

state machine

3 Jul 2021

builds: Lander Module

A few things are clear today: I should dev on the RPi 4, so I can remote SSH in with VS Code The next software hurdle to cross is the modal architecture. To that end I’ve worked up an interface and implementation that uses a guitar pickup switch as a SP5T instead of its normal operation (three digital outs, five positions: 100, 110, 010, 011, 001) This modal idea is about to get a little hairier.Read More...

transcribed to Go, looks promising

30 Jun 2021

builds: Lander Module

I have successfully transcribed my simple python script to a slightly-less-simple go program. No, I don’t know why I call python files “scripts” and go files “programs”. I’ve been using the library. It seems to do what we need. I didn’t immediately understand the WithFallingEdge option, but edge detection is easy enough to implement, and I bet if I tried again to figure it out I could. It’s time to try the next hurdle, and this time to start in Go.Read More...

first done 3d print, first done code!

29 Jun 2021

builds: Lander Module

First tests are promising! I have completed a 3d-printed bracket mount for the digital joystick. I have also completed a short program that reads a single mom-off-mom toggle and latches an LED every time it goes up or down. I wrote it in Python, but my hopes are high that I can transcribe it to Go next. Some resources I should look into for that effort: I have also ordered the 3rd round of parts from Adafruit and Digikey, and finished intake processing for the 2nd round.Read More...

LED driving, I2C chains, pull-up and -down resistors

27 Jun 2021

builds: Lander Module
tags: gpio i2c

I’ve been getting up to speed on LED driving and button/switch driving, so that I can prototype a Raspberry Pi with code that reads a switch, and turns on and off an LED. A couple of thoughts here: The RPi 0W has 26 available GPIO pins. This feels like a lot, but if I pair one or two LEDs with each toggle switch, I’ll run out quickly. Next I found this AW9523 breakout, which controls 16 I/O over I2C.Read More...

toggle switch guard print #1

18 Jun 2021

builds: Lander Module
tags: 3dp

I printed out the “space shuttle toggle switch guard”. In plating I selected the single guard then did “Add Part” to expand it to a row of 5. Then, in print settings I made sure to go into Expert > Infill and set “Solid infill threshold area” to 16mm^2. This ensures there’s a solid infill for the upright portions of the guard, extending just below the joint with the side plates.Read More...

Project start, core principles

17 Jun 2021

builds: Lander Module
tags: thermal-printer

A couple weeks ago Dr Professor asked me if I want to build a thing for Caravan Rally (happening this October). So far we’ve been talking about a “lander module” experience. Here are some parameters: it should be fun, engaging and diverting it should involve 2-3 people working together it should last about 5 minutes it should entail the operators landing a spacecraft it should be able to answer the question “how well did the operators land the spacecraft?Read More...


25 Nov 2020

projects: steno
tags: qmk plover

I just realized: using alt to mouse-select multiple cursors in VS Code does not trigger the OSL to fall back. Is that a task I do with the dictionary instead? No, dictionary can’t help there. HMM! Perhaps a key on the symbol layer that does a TO(BASE). yup, that works! I’ve also printed out some cheat-sheets, and now I guess nothing is stopping me from developing some muscle memory… I’ve started a tiny bit of coding with steno.Read More...


24 Nov 2020

projects: steno

Made a cheat-sheet for the single-stroke commands dictionary tonight. Did my first cut, paste and undo! The shapes are a little goofy but I think they’ll suffice for my needs. Might even allow me to free up some keys on the firmware layer (no need for arrows, letters, or functions). I did order an Ergodox. The clutter argument was very compelling. It’ll take 4 weeks to get here, so in the meantime I’ll keep practicing on Georgi.Read More...


23 Nov 2020

projects: steno
tags: qmk

A few things I noticed in practice tonight tapping the OSL key doesn’t let me alt-tab with impunity, but holding it does. my custom nav layer doesn’t support select-all, cut, copy, paste, undo, or redo. I wonder again if I should record the number of times I use a feature in a day, and put those at the front and center. oh, also ctrl-backspace (or alt-bsp and cmd-bsp on mac).Read More...


22 Nov 2020

projects: steno
tags: qmk

Last night / this morning I read a lot about how QMK works with layers. Then I worked up keymaps for both the Butterstick and the Georgi! The first milestone is complete: I can successfully alt-tab any number of times! Next milestones: make the nav layer key (and fn layer key) momentary-layers (like OSL, but that didn’t seem to work immediately). OSL(layer) - momentarily activates layer until the next key is pressed.Read More...


20 Nov 2020

projects: steno
tags: plover qmk

I adopted a nav/command dictionary that I found on the internet. I have by now also read the section in Learn Plover! about dictionaries, so I feel well-equipped to start tabbing my way around. The only real trouble is (on a Windows machine) I keep this repo checked-out to a directory in WSL2, which is not (easily) accessible from Windows, where I’ve installed Plover. Whoops. Ok, I realized (again) that this will not solve all my nav use cases.Read More...


19 Nov 2020

projects: steno
tags: plover qmk

Today I updated my qmk_firmware repo [now deleted] to match what Jane has on their side. I tried a PR, but that got really mucky with a changed file and a changed submodule, so I backed out, saved patches of my commits, and completely remade my fork. It turns out the changed file also hit my new fork (wtf?), but the patches applied just fine. Last night I read about dictionaries, and how Learn Plover!Read More...


17 Nov 2020

projects: steno

Maybe I’ll be satisfied looking at the progress.json activity page to see how consistently I’m practicing. It’s no heatcalendar, but it’ll do. In other news, I’ve got a cheat sheet of punctuation and whitespacing (the book didn’t mention, but it’s T*AB for a tab character). Next item todo is to figure out how people manage modifier keys and navigation keys. The real crux is this use case: hold down ctrl (or cmd).Read More...

plover v4.0.0

15 Nov 2020

projects: steno
tags: plover

Upgraded to Plover v4.0.0. When they say “back up your plover.cfg” that file is in C:\Users\<username>\AppData\Local\plover\plover\. Wondering if there’s a way to stay accountable for daily activity without bloating this journal file.


14 Nov 2020

projects: steno
tags: plover

journaling with steno now! ok back to qwerty. that took a few minutes, but I’m having fun learning about the control mechanisms (to insert a space or not, to capitalize or not), as well as punctuation and positioning chords. I’d like to try to find a testimonial about Plover’s “space placement” option (before or after chord output). I feel like that option may (a) have a medium-to-large impact on the workflow for coding vs prose, and (b) be really hard to retrain later.Read More...


13 Nov 2020

projects: steno

Got a little practice in. I realized I’m not yet ready to fully drop the progress-tracking. My reasoning is that I’m doing this from at least 2 different computers still, and Typey Type doesn’t have user accounts, so if I want to track progress there I should copy the file down after every session. Thankfully I was able to quickly build a CLI tool that will help me merge two JSON files into one, summing the values along the way.Read More...


12 Nov 2020

projects: steno

Started the spilliams/steno repository! I hope in the end it’ll contain useful tidbits I picked up along the journey, as well as any custom dictionaries I develop. Some historical background on the journey so far is below. Going forward, I don’t want this journal to be just a list of wpm counts and times (though I’ll certainly include some for milestone tracking). The last few times I dusted off the steno machine I ended up putting a lot of effort into time- and wpm-tracking, so much that it became Not Very Fun Any More.Read More...


20 Feb 2020

projects: steno

[historical] 1 day of practice in February. 13wpm on Georgi.


16 Dec 2019

projects: steno

[historical] 1 day of practice in December. Still hovering around 10 wpm on Georgi (using Typey Type). I started punctuation though!


25 Nov 2019

projects: steno

[historical] 4 days of practice in October. 1 in November.


6 Oct 2019

projects: steno

[historical] That stint in August lasted 5 days. Seeing a pattern… It’s ok though. I’m having fun with this when I have fun. Any practical effects will be a nice bonus, but not worth beating myself up about if I don’t achieve. In August I got up to about 16 wpm on Typey Type with the SOFT/HRUF. Now I’m using the Georgi, around 13 wpm on Typey Type.


25 Aug 2019

projects: steno

[historical] That stint in May lasted 4 days. Back at it now. 10 wpm on Typey Type with the SOFT/HRUF.


12 May 2019

projects: steno

[historical] I took baseline typing speed tests at with my 2015 macbook air and WASD v2 keyboards: 73 and 76 wpm, respectively. I also started learning the SOFT/HRUF machine, with an initial count of 8 wpm on Typey Type.