{"title":"Mikkel Paulson","subtitle":"Unprofessional programmer. Former professional programmer. Former leader of the Pirate Party of Canada.","link":[{"@attributes":{"rel":"self","type":"application\/atom+xml","href":"https:\/\/mikkel.ca\/atom.xml"}},{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca"}}],"generator":"Zola","updated":"2023-02-04T00:00:00+00:00","id":"https:\/\/mikkel.ca\/atom.xml","entry":[{"title":"A Speech I'll Never Give","published":"2023-02-04T00:00:00+00:00","updated":"2023-02-04T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/a-speech-ill-never-give\/"}},"id":"https:\/\/mikkel.ca\/blog\/a-speech-ill-never-give\/","content":"<blockquote>\n<p><em>There's a speech that has been bouncing around in my head, fully-formed, for\nyears. I suppose it's inspired in part by the late great Tommy Douglas's\n<a href=\"https:\/\/www.dailymotion.com\/video\/x325h9\">Mouseland speech<\/a>. Wherever it came\nfrom, I do know that I'm unlikely to ever have the opportunity to deliver it,\nsince I'm effectively done with politics. So I share it here for posterity.<\/em><\/p>\n<\/blockquote>\n<p>I want to tell you a story about a little girl. Sharp as a tack, but too young\nto know that some things are simply impossible. One day, this little girl has an\nidea. It's a big idea. In fact, it's so big that she realizes right away that\nshe's going to need help. And she knows just where to turn.<\/p>\n<p>So she reserves a room at her local library, and she invites \u2013 Canada. And\nCanada answers. All 39 million of us, young and old, Canadian-born and new\nCanadians, we all file into a small room in a community library in Lloydminster,\nor Jonqui\u00e8re, or Iqaluit.<\/p>\n<p>The girl stands on a chair, and the room falls silent, save for the occasional\ncough or cry of an infant. \"Thank you all for coming,\" she says. \"I have an\nidea, but I need your help. There's a thing I want all of us to build, together,\nfor all of us.\" Or maybe it's a thing for us to do, or a thing for us to become.<\/p>\n<p>And we there assembled look to our left and right, at our neighbours and family\nand friends and friends-to-be, and with one voice we say, \"I'll help.\"<\/p>\n<p>\"I'm an engineer. I'll help you design it.\"<\/p>\n<p>\"I'm a welder. I'll help you build it.\"<\/p>\n<p>\"I'm an artist. I'll help you make it beautiful.\"<\/p>\n<p>\"I'm a farmer. I'll feed those who help you.\"<\/p>\n<p>I want you to take a moment to reflect, to dream of the possible. What was her\nidea? How big can we as a nation, or indeed as a world, afford to dream? But\nreally, the question to ask is: can we afford <em>not<\/em> to dream, or to dream small?<\/p>\n"},{"title":"ADHD: It sucks sometimes, actually","published":"2022-01-03T00:00:00+00:00","updated":"2022-01-03T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/adhd-sucks-sometimes\/"}},"id":"https:\/\/mikkel.ca\/blog\/adhd-sucks-sometimes\/","summary":"<p>If you read my previous blog post, <a href=\"\/blog\/agile-programming-with-adhd\/\">Agile programming with ADHD<\/a>,\nyou could be forgiven for being left with the impression that I am a superhero,\nnot least because I open the blog post with those words.<\/p>\n<p>My intention was to counter the notion (no less present in my own mind) that\nADHD is exclusively a burden, all cloud with no silver lining. However, while I\nhave certainly found ways to use the peculiar characteristics of my brain to my\nown advantage, there are plenty of times when I have to try to muscle my way\nthrough things that my brain really does not want to do.<\/p>\n<p>While my previous post talked about ways I use my own quirks to my advantage, I\nwould also like to give some exposure to mitigation strategies: things that are\nunambiguously harmful, and how I keep their impact as limited as I can.<\/p>"},{"title":"One year of self-employment: a retro","published":"2021-11-09T00:00:00+00:00","updated":"2021-11-09T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/one-year-self-employment-retro\/"}},"id":"https:\/\/mikkel.ca\/blog\/one-year-self-employment-retro\/","summary":"<p>A year ago today, I left my last job to do a <a href=\"\/blog\/my-recurse-center-plans\/\">3-month\nbatch<\/a> at the <a href=\"https:\/\/recurse.com\/\">Recurse\nCenter<\/a>, followed by... something. I never really\narticulated what that something was going to be, which was part of the point. I\nwanted to take some time to discover what really motivated me as a person.<\/p>\n<p>A big part of the \"something\" has turned out to be\n<a href=\"https:\/\/initiative.sh\/\">initiative.sh<\/a>, a project that I\n<a href=\"https:\/\/mikkel.ca\/blog\/introducing-initiative-sh\/\">launched<\/a> recently and\ncontinue to develop full-time.<\/p>\n<p>I expect to be on that journey for the rest of my life, but a year on, I do have\na few thoughts to share. In honour of one tradition I <em>don't<\/em> miss, the sprint\nretro, I'll structure my insights according to the good ol'\nliked\/lacked\/learned\/longed for format.<\/p>"},{"title":"Introducing initiative.sh","published":"2021-10-07T00:00:00+00:00","updated":"2021-10-07T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/introducing-initiative-sh\/"}},"id":"https:\/\/mikkel.ca\/blog\/introducing-initiative-sh\/","summary":"<p>Today I'm proud to announce <a href=\"https:\/\/initiative.sh\/\">initiative.sh<\/a>, a\nstorytelling aid for game masters with a particular eye towards Dungeons &amp;\nDragons. initiative.sh is designed to be used at the table (real or virtual),\nsupporting your creative process as sessions evolve in real time.<\/p>\n<p>This project has been a product of about six months of focused development so\nfar. It's particularly exciting for me because it is the first product launch of\nmy <a href=\"\/blog\/gainfully-unemployed-search-meaning-beyond-money\/\">funemployment<\/a>.\nThis also marks the first time in longer than I can remember that I've\nbootstrapped a project of my very own from greenfield to a real, sustainable\ndevelopment cadence.<\/p>"},{"title":"Agile programming with ADHD","published":"2021-07-09T00:00:00+00:00","updated":"2021-07-09T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/agile-programming-with-adhd\/"}},"id":"https:\/\/mikkel.ca\/blog\/agile-programming-with-adhd\/","summary":"<p>I am a superhero.<\/p>\n<p>Let's get that out of the way right off the bat. I am a superhero who can shoot\nlaser beams out of his eyes. Pretty cool, huh? Only problem is, it only happens\nwhen I sneeze. And it always happens when I sneeze.<\/p>\n<p>This is what ADHD is like. It's taken me a long time to figure out that shooting\nlaser beams out of my eyes has its practical benefits, and it's taken me even\nlonger to find some admittedly unreliable ways to control it: making the laser\nbeams happen when I want them (let's call that \"sneezing powder\"), and making my\nsuperpowers go away on the occasions when I don't want to light whatever I'm\nlooking at on fire (let's call that \"clothespins on the nose\").<\/p>\n<p>Okay, but really. What superpowers <em>do<\/em> I have?<\/p>"},{"title":"Three ways to bulk rename files","published":"2021-06-18T00:00:00+00:00","updated":"2021-06-18T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/three-ways-to-bulk-rename\/"}},"id":"https:\/\/mikkel.ca\/blog\/three-ways-to-bulk-rename\/","summary":"<p>Every now and then, I find myself facing a giant pile of files that need\nrenaming in some way. Now, there's always a tradeoff of number of files vs.\ncomplexity where the balance of time spent makes sense to reach for an automated\ntool, but learning a few tricks off the top of your head can tip the balance in\nfavour of automation and save a lot of time.<\/p>"},{"title":"Using Git to manage my reMarkable configuration","published":"2021-06-14T00:00:00+00:00","updated":"2021-06-14T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/using-git-to-manage-remarkable-configuration\/"}},"id":"https:\/\/mikkel.ca\/blog\/using-git-to-manage-remarkable-configuration\/","summary":"<p>Like what seems like most of the tech world by now, I recently got a <a href=\"https:\/\/remarkable.com\/\">reMarkable\n2 tablet<\/a> and love it.  Major credit where it's due:\nreMarkable doesn't even make you jump through hoops to get root filesystem\naccess. It's enabled right out of the box, and you just have to plug in a USB\ncable and connect using the IP address and password provided in the on-device\nhelp. No danger of <a href=\"https:\/\/en.wikipedia.org\/wiki\/Tivoization\">tivoization<\/a>\nhere.<\/p>\n\n\n\n\n<img alt=\"reMarkable settings screen showing IP address and password\" title=\"reMarkable settings screen showing IP address and password\" src=\"https:\/\/mikkel.ca\/processed_images\/remarkable-config.c947f973f121dabe.jpg\" srcset=\"https:\/\/mikkel.ca\/processed_images\/remarkable-config.eff2c31a0069708f.jpg 565w, https:\/\/mikkel.ca\/processed_images\/remarkable-config.3eb492d9059498b4.jpg 1130w, https:\/\/mikkel.ca\/processed_images\/remarkable-config.f84dd7b96eaae2a5.jpg 2048w\" class=\"\" \/>\n\n<p>However, it does get tripped up slightly by the classic open-source foible of\ndeciding that making an edge case feature <em>theoretically possible<\/em> is good\nenough, and there's no need to make it intuitive. In this case, I speak of\nmodifying your <a href=\"https:\/\/blog.remarkabletabletuser.com\/post\/2018\/01\/15\/customize-your-remarkable-screens\/\">lock\nscreen<\/a>\nand adding <a href=\"https:\/\/www.simplykyra.com\/2021\/02\/24\/how-to-make-template-files-for-your-remarkable\/\">custom\ntemplates<\/a>.\nBoth workarounds involve manually modifying a particular directory on the\ndevice, <code>\/usr\/share\/remarkable<\/code>, which gets overwritten every time you install a\nsoftware update. Fortunately, Git has my back!<\/p>"},{"title":"JWTs done right: Quebec's proof of vaccination","published":"2021-05-20T00:00:00+00:00","updated":"2021-05-20T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/digging-into-quebecs-proof-of-vaccination\/"}},"id":"https:\/\/mikkel.ca\/blog\/digging-into-quebecs-proof-of-vaccination\/","summary":"<p><em>Note: Data in this blog post has been anonymized, for obvious reasons.<\/em><\/p>\n<p>When Quebec announced that it would be sending proof-of-vaccination emails to\neveryone who had been vaccinated with an attached QRcode, I got a bit weak at\nthe knees. I couldn't wait to pick it apart and shake my head at the amount of\nprivate medical information that would doubtless be exposed in the process.<\/p>\n<p>Well, my proof of vaccination finally arrived, and the result is\u2026\nactually pretty okay. Still, there's always some fun to be had in zero-knowledge\nhacks, so I thought I'd blog about my experiences anyway.<\/p>"},{"title":"Designing without scale: program like nobody will use it","published":"2021-05-06T00:00:00+00:00","updated":"2021-05-06T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/designing-without-scale-program-like-nobody-will-use-it\/"}},"id":"https:\/\/mikkel.ca\/blog\/designing-without-scale-program-like-nobody-will-use-it\/","summary":"<p>Since I left my job, I've tried to refocus myself on simple one-person projects\nthat I can ship and (to some extent) forget about. Hopefully a few will see a\nmodest profit, some others are intended to be open-source projects, and quite a\nfew are just for <a href=\"https:\/\/git.sr.ht\/~mikkel\/refcell\">my own amusement<\/a>.<\/p>\n<p>However, the biggest problem I've encountered so far is a stark reckoning with\nwhere my strengths really lie. I've spent ten years working full-time as a\nprogrammer, long enough that impostor syndrome shrank from a constant specter\nlooming over me to only the occasional bout. I'd even gotten pretty comfortable\ncalling myself a \"senior software developer\" with a straight face. The wakeup\ncall for me has been leaving my work and attempting to do a junior's job again.<\/p>"},{"title":"Gainfully unemployed: the search for meaning beyond money","published":"2021-03-08T00:00:00+00:00","updated":"2021-03-08T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/gainfully-unemployed-search-meaning-beyond-money\/"}},"id":"https:\/\/mikkel.ca\/blog\/gainfully-unemployed-search-meaning-beyond-money\/","summary":"<p>Self-employed. Programmer without portfolio. Gainfully unemployed. Funemployed.\nRetired. These are all terms that I've tried on over the 6 months since I left\nmy last job (ever?) at the tender age of 33, but none of them feel right.<\/p>\n<p>Perhaps I can best express my goals in terms of what I don't want. On one end of\nthe spectrum, I don't want to be idle or hedonistic. On the other hand, I don't\nwant to found a startup that will go public or sell to Google for billions. It\nseems like finding a place between those extremes should not be difficult, but\nmy search is ongoing. (And this article, such as it is, has no answers to offer,\nonly more questions.)<\/p>"},{"title":"Git is my buddy: Effective Git as a solo developer","published":"2021-02-23T00:00:00+00:00","updated":"2021-02-23T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/git-is-my-buddy-effective-solo-developer\/"}},"id":"https:\/\/mikkel.ca\/blog\/git-is-my-buddy-effective-solo-developer\/","summary":"<p>At this point, most developers use Git as a tool for collaboration. We have our\nrote-learned commands to pull, commit, and push. And of course, there's <a href=\"https:\/\/xkcd.com\/1597\/\">that\none coworker<\/a> who knows a bit more about Git than\neveryone else, who helps get us back on track whenever our local repos end up in\na strange state.<\/p>\n<p>But what if I told you that Git can be a valuable tool without ever setting up a\nremote repository? I'm not just talking about having a working version of your\ncode base to roll back to if you mess something up, although there's that too.\nUsed correctly, Git can help to structure your work, identifying gaps in your\ntest coverage and minimizing dead code.<\/p>"},{"title":"Recurse Center, week something: Weathervane","published":"2021-01-28T00:00:00+00:00","updated":"2021-01-28T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/recurse-center-week-something-weathervane\/"}},"id":"https:\/\/mikkel.ca\/blog\/recurse-center-week-something-weathervane\/","summary":"<p>Hey, my blog has now matured to the point that I'm apologizing for not blogging\nmore! Progress, of a sort.<\/p>\n<p>I'm sorry for not blogging more.<\/p>\n<p>Anyway, I've recently finished what I'd planned to be the capstone project of my\ntime at Recurse Center. I'm calling it Weathervane: an e-paper display mounted\non a <a href=\"https:\/\/www.raspberrypi.org\/products\/raspberry-pi-zero-w\/\">Raspberry Pi Zero\nW<\/a> to give me\nat-a-glance weather conditions as I'm on my way out the door. No, I haven't\ncalculated if it was <a href=\"https:\/\/xkcd.com\/1205\/\">worth the time<\/a>. No, I don't\nintend to.<\/p>"},{"title":"Recurse Center, week 4: Advent of Code","published":"2020-12-05T00:00:00+00:00","updated":"2020-12-05T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/recurse-center-week-4-advent-of-code\/"}},"id":"https:\/\/mikkel.ca\/blog\/recurse-center-week-4-advent-of-code\/","summary":"<p>My initial plan for this week was to do some more work on\n<a href=\"\/blog\/recurse-center-week-3-making-rust-ownership-work-for-you\/\">RefCell<\/a>, but\nI forgot that Tuesday was December 1, which means that <a href=\"https:\/\/adventofcode.com\/2020\/\">Advent of Code\n2020<\/a> is kicking off! I'd never heard of it\nbefore, but looking through past years piqued my interest, so I decided to use\nit as an excuse to improve my abysmal Python skills.<\/p>"},{"title":"Recurse Center, week 3: Making Rust's ownership work for you","published":"2020-11-27T00:00:00+00:00","updated":"2020-11-27T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/recurse-center-week-3-making-rust-ownership-work-for-you\/"}},"id":"https:\/\/mikkel.ca\/blog\/recurse-center-week-3-making-rust-ownership-work-for-you\/","summary":"<p>This article should more properly be titled \"RefCell\", that being the name of\nthis week's project, but I didn't want to bury the lede. So, having failed to\nbuild anything with a UI last week, I set out to build something with a UI this\nweek: an implementation of the FreeCell card game in Rust using\n<a href=\"https:\/\/github.com\/linebender\/druid\">Druid<\/a>. Naturally, I named it\n<a href=\"https:\/\/doc.rust-lang.org\/std\/cell\/struct.RefCell.html\">RefCell<\/a>. And... I\nfailed.<\/p>"},{"title":"Recurse Center, week 2: iCalendar Proxy","published":"2020-11-20T00:00:00+00:00","updated":"2020-11-20T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/recurse-center-week-2-icalendar-proxy\/"}},"id":"https:\/\/mikkel.ca\/blog\/recurse-center-week-2-icalendar-proxy\/","summary":"<p>This is my first real project week at Recurse Center. For other Recursers, it\nwas generative art and music week, but that didn't really jive with my own goals\n(though it was a lot of fun to be a fly on the wall for the presentations).\nInstead, I built something completely different from what I promised to build\n<a href=\"\/blog\/recurse-center-week-1\">last week<\/a>: a little proxy to allow you to modify\niCalendar feeds \"in flight\". (No relation to the Apple app, BTW.)<\/p>"},{"title":"Recurse Center, week 1","published":"2020-11-14T00:00:00+00:00","updated":"2020-11-14T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/recurse-center-week-1\/"}},"id":"https:\/\/mikkel.ca\/blog\/recurse-center-week-1\/","summary":"<p>Today is the last day of my first week at Recurse Center. To avoid overloading\nthe feeds of anyone who may be listening, I'm aiming for a weekly release\nschedule.<\/p>"},{"title":"My Recurse Center plans","published":"2020-11-02T00:00:00+00:00","updated":"2020-11-02T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/my-recurse-center-plans\/"}},"id":"https:\/\/mikkel.ca\/blog\/my-recurse-center-plans\/","summary":"<p>It's almost time. This week is my last full week at Lightspeed; starting next\nweek, I will be joining the embarking on a new journey of technical- and\nself-discovery at the Recurse Center. Exciting as it is, I also have to face the\nreality that \"learn how to learn stuff\" and \"remember how to build stuff\" aren't\nthe most specific goals.<\/p>"},{"title":"New site","published":"2020-10-30T00:00:00+00:00","updated":"2020-10-30T00:00:00+00:00","author":{"name":"\n            \n              Unknown\n            \n          "},"link":{"@attributes":{"rel":"alternate","type":"text\/html","href":"https:\/\/mikkel.ca\/blog\/new-site\/"}},"id":"https:\/\/mikkel.ca\/blog\/new-site\/","summary":"<p>It's time for mikkel.ca to evolve. That seems insignificant for a simple\npersonal portfolio site, but it's part of a much bigger change in my life.\nI'm moving on to bigger and better things, and I'll be using this site to keep a\nrecord of that journey. Mostly this is for my own benefit, giving me a trail to\nlook back on and remind myself where I've been and what I've learned along the\nway. It's also for friends, as I've abandoned social media and am not eager to\njump back into any of that.<\/p>"}]}