Life as a middle-aged Geek

Summer break is but a fading memory, but Tim Bray’s last post made me realize it might be worthwhile to try to capture some of the stuff I did over the past month or so, partly because I’ve had little to no time to write about any of it and partly because it might serve as a useful data point on the war against ageism (I’m in the low 40s, and feel it already):

Docker Stuff

Docker is a big part of the motion towards more flexible infrastructure, so I’ve been spending a good while doing stuff related to it – even though I’m supposed to be doing more data and ML stuff these days, you can’t take the compute and networking angle out of any architect worth their salt, and I like to fiddle with intricate stuff.

A few weeks back I began writing about Azure templating and provisioning and built a generic cluster template, which over summer break turned into a Docker Swarm playground so that I could test the new Swarm 1.12 orchestrator and IPVS-based load balancing.

I intend to write a little more about that in the near future, but in order to have a meaningful example I’ll need to build a suitable test application – so far I’ve only had time to build a simple front-end app to generate load on demand, but in my usual fashion took the time to scratch another itch and built myself a nice and lean Python container base atop Alpine Linux – now I can start moving all my stuff to Python 3.x and asyncio / aiohttp in a consistent fashion.

Digital Signage

Way back when we only had single-core Raspberry Pis, I was insane enough to whip up a digital signage solution based on those and run all the visuals for Codebits on it. In our grand tradition, it was a hack, but it worked well enough.

A year or so later I decided to move the front-ends to Android because it was the only way to get hardware-accelerated WebKit on tiny, cheap boxes, and it worked wonderfully both at Codebits and Maker Faire Lisbon, so we open-sourced the lot and called it “stable”.

Well, guess what, we needed digital signage for Pixels Camp too, so I went back, rebuilt the back-office as a Django app and have been tweaking the Android app to target 4.4 instead of 4.2, as well as rebuilding all the JavaScript visuals from scratch. Last time around I used Hype and a lot of hand-crafted JavaScript, but this year I’m going to try to use CSS3 animations as much as possible to get more out of the hardware (depending on time, this might turn out to be worth a post on its own).

Last time around we even had live video streaming with animated SVG overlays, but this year I’m pressed for time (since I’m essentially squeezing this in before bedtime), so it’s going to be a challenge.

DevOps

I’ve been doing a fair bit of that, and it spilled over into my hobbies. Piku, in particular, is now being used for something like twelve different projects (including this site, the signage server, and various other things), and despite its simplicity, is plenty good enough to fit into a CI/CD pipeline.

I duct-taped it to Jenkins for a lark, but will be turning that into a web hook handler to tie in to the new GitHub features and pushing out an Azure template to deploy the lot as soon as I have time (right now I have a partially finished Ansible playbook I need to clean up).

Miscellaneous

I was bored one night and decided to implement the Raft election protocol using Thespian actors, partially because I wanted to see how it would translate to an actor model (answer: quite well, albeit with quirks) and partially because I miss fiddling with Hazelcast and would like to have a simple Python library that provided distributed, redundant data structures (something like the reliable collections that are part of the Service Fabric C# SDK).

I might have a go at doing it on Pulsar to see if asyncio makes any difference (and also because it’s likely more interesting for other purposes), but got sidetracked by a few tests with 0MQ and the possibility of using Cython or Go instead – at which point I realized I would probably end up reimplementing etcd

And I’m doing this in the evenings, after kids are in bed and holding down a pretty demanding job (that has some bearing on these but never quite fills the gap), because otherwise I wouldn’t feel complete nor happy.

Quite frankly, I wouldn’t be able to do it all at 25.