I miss coding and building “in the small”. A lot, in fact, and my current role and the thundering herd of meetings that has converged around fiscal year close has consumed a lot of time and motivation to tinker.
Another factor is that the weather has been warming up considerably, which always makes it less likely I’ll sit at (or with) a conventional computer. That and feeling tired all the time (from work, not viruses) has somewhat inflated my personal backlog.
The past two weeks were odd, however, in that I’ve had a couple of longer weekends and one or two evenings when I wasn’t knackered out, which provided me with enough time to tinker with both hardware and software.
Little Quad
I (finally) got my Banana Pi M2 Zero Plus to work reliably enough by installing Armbian on it. I got it a long time ago because I was frustrated with the Raspberry Pi Zero’s piddling single core, but don’t recommend it for a number of reasons:
- It still has only 512MB RAM
- It has sub-par support, in the sense that over the (couple of?) year it sat in my parts drawer it was impossible to get a stable OS image to run on it (hence my taking this long to getting it to a usable state).
- It runs much hotter than the 3A+ that I adopted as my iPad “Linux sidecar”.
On that last note, it almost fits the Flirc aluminium case for the Pi Zero, but the thermal sink is almost completely offset from the CPU – there’s a sliver that makes some contact, and I’m counting on that to keep it somewhat cool.
I’ve set it up to SSH into via Bluetooth PAN and can now use it as a tiny dev box, but to be honest getting it to work was a goal in itself as I found it annoying that it wasn’t useful.
Time will tell if I find an actual use for it, although the reason I reached for it was that I wanted to investigate embedding an AirPlay receiver into an old monitor (which is now on hold because if I decide to do that I will need to rebuild its enclosure).
Phoenix
Even though I’ve been using Moom for many years now with a set of Windows-like key bindings to quickly arrange my desktop in various configurations, every now and then I jump for a day or so into Amethyst for its XMonad-like automatic window tiling, which I like because it can be 100% keyboard-driven.
But they can’t coexist, and every now and then I go looking for options.
Phoenix (which can be installed via brew install --cask phoenix
) is a strange beast, because it has no graphical UI and configured via JavaScript, but it is amazingly tiny (takes up a mere 12MB RAM) and able to do just about anything you can think of with windows.
What drove me to try it was that one of the sample configs provided a pretty amazing way to quickly switch between windows that is even faster than Spotlight or Witch: Press Cmd+Shift+Space
to get key hints overlaid upon each open window, then hit the one key corresponding to that window and both focus and mouse are moved there–on any display.
This is massively more efficient than using the mouse when you have multiple windows scattered across three monitors, so I picked that up and started rebuilding it with a few tweaks.
A couple of weeks after going down that rabbit hole, I now have a set of XMonad-like tiling layouts and key bindings that replicate all the Amethyst behaviour I like: auto-tiling windows and shifting focus solely via the keyboard, plus all the hotkeys that years of using Moom and Windows wired into my fingers.
The resulting JavaScript is quite readable, and I will be posting it up someplace when I’m happy with the re-tiling logic.
Fennel
Yesterday I spent a while following up on an old idea and playing with Fennel and LuaJIT
, which, when combined, are surprisingly fun and massively efficient.
One of the little utilities I built smoked pypy
on an Intel box by nearly an order of magnitude, which was not entirely unexpected but still quite nice.
I’ve always found Lua to be quite an underestimated (if quirky) language, but wrapping it in Fennel and hacking together a couple of simple LISPy tools was great fun, and a great reminder of why I derive so much enjoyment out of programming.
I need to get back to Clojure. I know I keep writing about it, but writing it is likely to be the only sensible thing to do, and maybe (just maybe) it will be enough to compensate for the dreariness of some of the tiresome stuff I’m now doing at work.