{"@attributes":{"version":"2.0"},"channel":{"title":"Mikkel Paulson - programming","link":"https:\/\/mikkel.ca","description":"Unprofessional programmer. Former professional programmer. Former leader of the Pirate Party of Canada.","generator":"Zola","language":"en","lastBuildDate":"Tue, 09 Nov 2021 00:00:00 +0000","item":[{"title":"One year of self-employment: a retro","pubDate":"Tue, 09 Nov 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/one-year-self-employment-retro\/","guid":"https:\/\/mikkel.ca\/blog\/one-year-self-employment-retro\/","description":"<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","pubDate":"Thu, 07 Oct 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/introducing-initiative-sh\/","guid":"https:\/\/mikkel.ca\/blog\/introducing-initiative-sh\/","description":"<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","pubDate":"Fri, 09 Jul 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/agile-programming-with-adhd\/","guid":"https:\/\/mikkel.ca\/blog\/agile-programming-with-adhd\/","description":"<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","pubDate":"Fri, 18 Jun 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/three-ways-to-bulk-rename\/","guid":"https:\/\/mikkel.ca\/blog\/three-ways-to-bulk-rename\/","description":"<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","pubDate":"Mon, 14 Jun 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/using-git-to-manage-remarkable-configuration\/","guid":"https:\/\/mikkel.ca\/blog\/using-git-to-manage-remarkable-configuration\/","description":"<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","pubDate":"Thu, 20 May 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/digging-into-quebecs-proof-of-vaccination\/","guid":"https:\/\/mikkel.ca\/blog\/digging-into-quebecs-proof-of-vaccination\/","description":"<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","pubDate":"Thu, 06 May 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/designing-without-scale-program-like-nobody-will-use-it\/","guid":"https:\/\/mikkel.ca\/blog\/designing-without-scale-program-like-nobody-will-use-it\/","description":"<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":"Git is my buddy: Effective Git as a solo developer","pubDate":"Tue, 23 Feb 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/git-is-my-buddy-effective-solo-developer\/","guid":"https:\/\/mikkel.ca\/blog\/git-is-my-buddy-effective-solo-developer\/","description":"<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","pubDate":"Thu, 28 Jan 2021 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/recurse-center-week-something-weathervane\/","guid":"https:\/\/mikkel.ca\/blog\/recurse-center-week-something-weathervane\/","description":"<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","pubDate":"Sat, 05 Dec 2020 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/recurse-center-week-4-advent-of-code\/","guid":"https:\/\/mikkel.ca\/blog\/recurse-center-week-4-advent-of-code\/","description":"<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","pubDate":"Fri, 27 Nov 2020 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/recurse-center-week-3-making-rust-ownership-work-for-you\/","guid":"https:\/\/mikkel.ca\/blog\/recurse-center-week-3-making-rust-ownership-work-for-you\/","description":"<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","pubDate":"Fri, 20 Nov 2020 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/recurse-center-week-2-icalendar-proxy\/","guid":"https:\/\/mikkel.ca\/blog\/recurse-center-week-2-icalendar-proxy\/","description":"<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","pubDate":"Sat, 14 Nov 2020 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/recurse-center-week-1\/","guid":"https:\/\/mikkel.ca\/blog\/recurse-center-week-1\/","description":"<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","pubDate":"Mon, 02 Nov 2020 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/my-recurse-center-plans\/","guid":"https:\/\/mikkel.ca\/blog\/my-recurse-center-plans\/","description":"<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","pubDate":"Fri, 30 Oct 2020 00:00:00 +0000","author":"Unknown","link":"https:\/\/mikkel.ca\/blog\/new-site\/","guid":"https:\/\/mikkel.ca\/blog\/new-site\/","description":"<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>"}]}}