Unprofessional programmer. Former professional programmer. Former leader of the Pirate Party of Canada. Recurse Center alum/never-graduate. I build things because I want them to exist.

Projects

initiative.sh

A creative storytelling aid for D&D game masters at the table.

Blog

There's a speech that has been bouncing around in my head, fully-formed, for years. I suppose it's inspired in part by the late great Tommy Douglas's Mouseland speech. Wherever it came from, I do know that I'm unlikely to ever have the opportunity to deliver it, since I'm effectively done with politics. So I share it here for posterity.

If you read my previous blog post, Agile programming with ADHD, you could be forgiven for being left with the impression that I am a superhero, not least because I open the blog post with those words.

My intention was to counter the notion (no less present in my own mind) that ADHD is exclusively a burden, all cloud with no silver lining. However, while I have certainly found ways to use the peculiar characteristics of my brain to my own advantage, there are plenty of times when I have to try to muscle my way through things that my brain really does not want to do.

While my previous post talked about ways I use my own quirks to my advantage, I would also like to give some exposure to mitigation strategies: things that are unambiguously harmful, and how I keep their impact as limited as I can.

A year ago today, I left my last job to do a 3-month batch at the Recurse Center, followed by... something. I never really articulated what that something was going to be, which was part of the point. I wanted to take some time to discover what really motivated me as a person.

A big part of the "something" has turned out to be initiative.sh, a project that I launched recently and continue to develop full-time.

I expect to be on that journey for the rest of my life, but a year on, I do have a few thoughts to share. In honour of one tradition I don't miss, the sprint retro, I'll structure my insights according to the good ol' liked/lacked/learned/longed for format.

Today I'm proud to announce initiative.sh, a storytelling aid for game masters with a particular eye towards Dungeons & Dragons. initiative.sh is designed to be used at the table (real or virtual), supporting your creative process as sessions evolve in real time.

This project has been a product of about six months of focused development so far. It's particularly exciting for me because it is the first product launch of my funemployment. This also marks the first time in longer than I can remember that I've bootstrapped a project of my very own from greenfield to a real, sustainable development cadence.

I am a superhero.

Let's get that out of the way right off the bat. I am a superhero who can shoot laser beams out of his eyes. Pretty cool, huh? Only problem is, it only happens when I sneeze. And it always happens when I sneeze.

This is what ADHD is like. It's taken me a long time to figure out that shooting laser beams out of my eyes has its practical benefits, and it's taken me even longer to find some admittedly unreliable ways to control it: making the laser beams happen when I want them (let's call that "sneezing powder"), and making my superpowers go away on the occasions when I don't want to light whatever I'm looking at on fire (let's call that "clothespins on the nose").

Okay, but really. What superpowers do I have?

Every now and then, I find myself facing a giant pile of files that need renaming in some way. Now, there's always a tradeoff of number of files vs. complexity where the balance of time spent makes sense to reach for an automated tool, but learning a few tricks off the top of your head can tip the balance in favour of automation and save a lot of time.

Like what seems like most of the tech world by now, I recently got a reMarkable 2 tablet and love it. Major credit where it's due: reMarkable doesn't even make you jump through hoops to get root filesystem access. It's enabled right out of the box, and you just have to plug in a USB cable and connect using the IP address and password provided in the on-device help. No danger of tivoization here.

reMarkable settings screen showing IP address and password

However, it does get tripped up slightly by the classic open-source foible of deciding that making an edge case feature theoretically possible is good enough, and there's no need to make it intuitive. In this case, I speak of modifying your lock screen and adding custom templates. Both workarounds involve manually modifying a particular directory on the device, /usr/share/remarkable, which gets overwritten every time you install a software update. Fortunately, Git has my back!

Note: Data in this blog post has been anonymized, for obvious reasons.

When Quebec announced that it would be sending proof-of-vaccination emails to everyone who had been vaccinated with an attached QRcode, I got a bit weak at the knees. I couldn't wait to pick it apart and shake my head at the amount of private medical information that would doubtless be exposed in the process.

Well, my proof of vaccination finally arrived, and the result is… actually pretty okay. Still, there's always some fun to be had in zero-knowledge hacks, so I thought I'd blog about my experiences anyway.

Since I left my job, I've tried to refocus myself on simple one-person projects that I can ship and (to some extent) forget about. Hopefully a few will see a modest profit, some others are intended to be open-source projects, and quite a few are just for my own amusement.

However, the biggest problem I've encountered so far is a stark reckoning with where my strengths really lie. I've spent ten years working full-time as a programmer, long enough that impostor syndrome shrank from a constant specter looming over me to only the occasional bout. I'd even gotten pretty comfortable calling myself a "senior software developer" with a straight face. The wakeup call for me has been leaving my work and attempting to do a junior's job again.

Self-employed. Programmer without portfolio. Gainfully unemployed. Funemployed. Retired. These are all terms that I've tried on over the 6 months since I left my last job (ever?) at the tender age of 33, but none of them feel right.

Perhaps I can best express my goals in terms of what I don't want. On one end of the spectrum, I don't want to be idle or hedonistic. On the other hand, I don't want to found a startup that will go public or sell to Google for billions. It seems like finding a place between those extremes should not be difficult, but my search is ongoing. (And this article, such as it is, has no answers to offer, only more questions.)

At this point, most developers use Git as a tool for collaboration. We have our rote-learned commands to pull, commit, and push. And of course, there's that one coworker who knows a bit more about Git than everyone else, who helps get us back on track whenever our local repos end up in a strange state.

But what if I told you that Git can be a valuable tool without ever setting up a remote repository? I'm not just talking about having a working version of your code base to roll back to if you mess something up, although there's that too. Used correctly, Git can help to structure your work, identifying gaps in your test coverage and minimizing dead code.

Hey, my blog has now matured to the point that I'm apologizing for not blogging more! Progress, of a sort.

I'm sorry for not blogging more.

Anyway, I've recently finished what I'd planned to be the capstone project of my time at Recurse Center. I'm calling it Weathervane: an e-paper display mounted on a Raspberry Pi Zero W to give me at-a-glance weather conditions as I'm on my way out the door. No, I haven't calculated if it was worth the time. No, I don't intend to.

My initial plan for this week was to do some more work on RefCell, but I forgot that Tuesday was December 1, which means that Advent of Code 2020 is kicking off! I'd never heard of it before, but looking through past years piqued my interest, so I decided to use it as an excuse to improve my abysmal Python skills.

This article should more properly be titled "RefCell", that being the name of this week's project, but I didn't want to bury the lede. So, having failed to build anything with a UI last week, I set out to build something with a UI this week: an implementation of the FreeCell card game in Rust using Druid. Naturally, I named it RefCell. And... I failed.

This is my first real project week at Recurse Center. For other Recursers, it was generative art and music week, but that didn't really jive with my own goals (though it was a lot of fun to be a fly on the wall for the presentations). Instead, I built something completely different from what I promised to build last week: a little proxy to allow you to modify iCalendar feeds "in flight". (No relation to the Apple app, BTW.)

Today is the last day of my first week at Recurse Center. To avoid overloading the feeds of anyone who may be listening, I'm aiming for a weekly release schedule.

It's almost time. This week is my last full week at Lightspeed; starting next week, I will be joining the embarking on a new journey of technical- and self-discovery at the Recurse Center. Exciting as it is, I also have to face the reality that "learn how to learn stuff" and "remember how to build stuff" aren't the most specific goals.

2020-10-30

It's time for mikkel.ca to evolve. That seems insignificant for a simple personal portfolio site, but it's part of a much bigger change in my life. I'm moving on to bigger and better things, and I'll be using this site to keep a record of that journey. Mostly this is for my own benefit, giving me a trail to look back on and remind myself where I've been and what I've learned along the way. It's also for friends, as I've abandoned social media and am not eager to jump back into any of that.

Doodles

Crikey IRC

An IRC library written in Rust. (Work in progress.)

Mysterium Card Reader

A simple application to select Mysterium cards so you don't have to.