Husband. Father. Software engineer. Ubuntu Linux user.
Notes to myself, shared with the world. A collection of projects, thoughts, and ideas — mostly about computers.
See all my blog posts, sorted by year, in my blog archive.
Dual-booting Ubuntu and Windows with encryption for both has been possible for a long time, but has always been difficult. Until recently, the Ubuntu installer supported encrypting Ubuntu (with LVM) or dual-booting with Windows, but never supported automatic partitioning for encrypted dual-boot – and therefore required manual LVM partition setup to achieve encrypted dual-boot. I wrote a long blog post back in 2020 (How to Dual-Boot Ubuntu and Windows with Encryption) that describes the complicated steps necessary to set up an encrypted LVM partition for encrypted dual-boot. In Ubuntu 24.04+, things are much easier because the installer supports dual-booting and using encryption simultaneously without resorting to manual partitioning!
On any blog, it’s really common to link to related posts near the end of an
article. It keeps readers on your website by linking to another post they might
be interested in, and it can help with SEO. For a long time, Jekyll has provided
site.related_posts as a
convenient way to link to related posts. Unfortunately, the default
implementation just lists the ten most recent posts (which might not actually be
that closely related). Jekyll does offer a better implementation using Latent
Semantic Indexing (LSI) with
classifier-reborn. This plugin
tries to populate related_posts
with posts that are actually related, but it’s
difficult to install and doesn’t always produce the best results.
I’ve been thinking for a while that it would be fun to add some kind of color-changing LED mood lighting to my home office. As I was researching different products, I quickly stumbled across the WLED project. WLED was immediately appealing to me because of my love for open source software. It’s highly praised on various blogs and YouTube videos, and I was confident that the software quality I’d get with WLED (and its ability to integrate with things like apps and Home Assistant) would be better than almost anything I could find off the shelf. I was excited to build something with WLED, but I ran into a small stumbling block – most of the hardware that’s compatible with WLED requires soldering electronics components together.
The US is one of the only countries in the world where everyone wastes a dozen hours every year doing their taxes. (The IRS estimates that it takes an individual 13 hours to prepare their taxes!!!) Like many others, I’ve been using TurboTax to do my taxes for years. I’ve wanted for a long time to try doing my own taxes, by hand, without tax preparation software, but I always felt too intimidated by all the tax forms (and the sheer volume of information) to actually do it, and didn’t know where to start. This year, I finally did it! And it actually wasn’t nearly as difficult as I imagined it to be – it almost felt easy. Once I got started, I got the hang of it very quickly, and I successfully filed my own tax return this year, without using TurboTax! (And in well under 13 hours!)
I’m a big fan of used computers! I often recommend them to friends and relatives, and I’ve bought several myself. I’ve written in the past about the best computer you can buy for $100, my $500 developer laptop, and used Dell Latitudes. But recently, I had a sub-par experience with refurbished computers. Having gone through that, I have some thoughts about the current state of the used computer market and some advice about buying a used computer in 2024.
Strava challenges offer a fun way for athletes to compete against themselves and others! Back in 2020, our legacy challenge leaderboard system was running into bottlenecks and scalability problems on a regular basis, and we often found ourselves putting out fires to keep the system stable. In late 2020 and early 2021, I worked on a project to replace the old leaderboard system with a new one that could handle a much larger number of athletes competing in challenges. This blog post is about that project. I drafted most of this post when the project wrapped up in 2021, but didn’t get it published before I went on paternity leave – and then I forgot about it. I think the project was interesting and worth sharing, so I’m glad I finally remembered my draft (three years later 🫣) and found some time to put in the finishing touches and get it published! Enjoy!
When we bought our house several years ago, our home wifi consisted of a cable modem and wireless router on the floor of our living room (where we happened to have a coax outlet). Over time, I’ve made a few improvements! Last year, I installed my own coax cable so I could move our internet equipment out of the living room. This was a great improvement overall, but led to bad coverage and slow speeds on my deck. To try to fix that, I got an RE-450 wifi range extender. The range extender improved the wifi on the deck, but didn’t work seamlessly with the rest of my network. So I planned some more improvements. I just finished installing some Cat-6 ethernet cable so I could add a wifi access point with a wired backhaul. I want to write this blog about how I did it, what kind of performance I got, and what I learned along the way. Maybe you can try something similar if you have wifi coverage problems in your own home!
It’s really common to add Google Analytics to your site to gain valuable insights about who’s visiting. I think most companies use Google Analytics, and because it’s free and easy many solo developers and smaller sites do too. But recently, I think a lot of people have been questioning the value. For many small or independent blogs and websites, Google Analytics is an overly-complicated product that’s difficult to use and navigate. Moreover, using Google Analytics requires loading their relatively large, bloated javascript on your site. When Google Analytics competitor Plausible was starting out a few years ago, they highlighted a bunch of other reasons you might not want to use Google Analytics. In short, there’s gotta be a better analytics tool for small websites right?
Last week I went to Strange Loop 2023. There were many great sessions, but my favorite was Playable Quotes for Game Boy Games. Joël and Adam presented an idea for playable Game Boy “quotes” that should be (legally) shareable. (It’s worth reading How We Made Playable Quotes for the Game Boy on Joël’s Blog.) Their solution’s both clever and elegant, and uses only a few hundred lines of code (aside from existing emulators). The playable quote truly removes all the unnecessary parts of the ROM, which is important for legal reasons. Their implementation is also practical and future-proof, embedding everything that’s necessary to play the game in a single distributable file. It’s also pretty clever, using steganography to embed data into a screenshot of the game. (This revelation produced an outburst of applause at the live presentation.) While I watched this presentation at Strange Loop, I couldn’t help but think that a playable quote like this would be a great way to experience catching Mew in the original Pokémon Game Boy games.
I’m not the first person to write about a $500 developer laptop. In fact, I was inspired by Max Rozen’s Replacing my MacBook Air M1 with a ThinkPad T480 and Getting your own good enough laptop for under $500. Like Max, I’m not only writing a blog about this – I’m actually using the $500 laptop I’m writing about as my personal daily driver. You don’t need a $2,000 computer to have a great machine for web development! The laptop I chose is a great alternative to the ThinkPad T480. (ThinkPads are great, but they’re not the only way to get an incredibly capable and pragmatic laptop on a budget.) I’ve been a fan of Dell for many years, and my $500 developer laptop is a Latitude 7490. I recently bought one to replace the Latitude e7450 I was using. Let’s see how it stacks up to the T480, and how well it works as a daily driver.
I’m sure everyone’s had a frustrating experience trying to optimize their home wifi network. You put the router in a great spot for the TV, but you have bad wifi on your deck. You move it somewhere to provide better coverage for your deck, but it causes intermittent problems streaming movies to your TV. Figuring out the ideal wifi setup is tricky, and poorly documented. (But I’m hoping to provide some better documentation in this blog post!) I recently optimized my home wifi network to provide better coverage throughout my house, and I discovered some cool techniques along the way that I want to share.
Learning to create 3D models with OpenSCAD has opened a world of possibilities for me. Once I was comfortable with the basics, I wondered what it would look like to push the boundaries of programmatic 3D printing even further. In my day job as a software engineer at Strava, I work with GPS data from running and cycling activities. What if there was a way to bring that data into OpenSCAD to use it in a 3D model?
I just added a new wall decoration to my home office, and I think it turned out great!
I got the idea to 3D print the Strava logo a few weeks ago after seeing Martin Woodward’s Octolamp. I designed and printed my own Strava logo, and it turned out even better than I expected. It’s actually really easy for 3D printers to create shapes like this because it’s just an extruded 2D shape. Vertical walls with no overhangs are a piece of cake to print. And while it looks like it uses a lot of material, it actually doesn’t – the inside is mostly air, with a small percent of infill material for support. And I got lucky with the Strava logo – I printed each part separately, allowing me to print it twice as big as I otherwise would have been able to on my Prusa MINI. I completed a fun project, got a great wall decoration for my home office (fitting since I work for Strava), and the whole thing only cost a couple dollars in filament!
As I mentioned in my last blog post, I’ve been getting into 3D printing recently. The deeper I get into the 3D printing world, the more I become interested in designing my own 3D models. It’s cool to print a model that someone else created, but for me it’s way more fun to print something that I created. It scratches my itch to “build something out of nothing” in a very physical way.
I got my first 3D printer about three months ago, and now that I’ve had it for a little while I wanted to write about my experience with it so far. Learning 3D printing has been a blast, but I faced some surprises and challenges along the way. It felt a bit like I was thrown into the deep end when I got started, but after about three months I finally feel like a have a good handle on the basics, and I’ve finshed several different kinds of projects. If you’re curious about 3D printing or thinking about getting into it yourself, maybe I can provide some inspiration and insight.
Like in many houses, our cable modem was an eye sore on a shelf in our living room for many years. After all, that’s where the coax outlet for a TV always is right? The location wasn’t ideal. People tend to put their internet cable modem near their TV because that’s where the coax outlet happens to be, not because that’s where they actually want their internet modem. I wanted to move our cable modem and wifi router to our basement mechanical room to get them out of the living room. Moving the internet equipment to our basement would give me more room for additional equipment near the router. But our basement didn’t have any coax outlets! I learned to run coax cable myself so I could move all our networking equipment to the basement. I’m glad I did, because I love the new setup and it wasn’t hard to do!
Many Ubuntu users have recently become frustrated by the Pending update of
"firefox" snap
message they sometimes see when using Firefox. The message
usually says something like “Close the app to avoid disruptions (13 days left)”.
This is a big annoyance for users who might not want to close the app or install
an update on that timeline, and would rather do it on their own schedule.
Fortunately, there’s an easy solution to completely avoid this problem on
Ubuntu.
Lunch Money is a great tool for tracking your personal finances. I wrote about it a couple months ago in my comparison of personal finance tools. However, the way most people use it, it will track finances from your net income. That is, it will track your finances for the portion of your paycheck that hits your bank account – because it uses your bank and credit card transaction history to track your finances. And that’s fine for a lot of people, but it won’t give you a complete view of your finances. In particular, if you’re only tracking finances from your net paycheck, you’re probably not tracking your 401(k) contributions, taxes, and other paycheck deductions.
A couple months ago, I discovered that the classifier-reborn gem (a popular Jekyll plugin to group related posts) was essentially incompatible with Ruby 3. I use Jekyll to build some of my own websites (including this one), and I wanted to be able to upgrade to Ruby 3 while continuing to use classifier-reborn. Although I was initially frustrated that classifier-reborn didn’t yet support Ruby 3 out of the box, I realized that I might be able to implement Ruby 3 support myself and contribute back to the project since classifier-reborn is, after all, open source software. The pull requests I submitted turned out to be some of my biggest open-source contributions yet, and I’m proud of the work I did!
For years, Mint was the first thing people would recommend to anyone looking for a budgeting or personal finance tool. More recently, competitors like You Need A Budget (YNAB), Personal Capital, and Lunch Money have grown in popularity. Over the last couple years, I’ve spent some time using all of these apps because I wanted to explore the alternatives to Mint. Let’s explore the similarities and differences to see what might work best for you.
It might seem impossible to find a good computer under $100, but you actually have more options than you probably realize. Between a Raspberry Pi, Chromebook, or used laptop, you can probably find something that you like and that suits your needs! Let’s take a look at some options.
If you use Firefox on Ubuntu, you might have noticed that Firefox seems less
stable in Ubuntu 21.10+ (including Firefox 22.04 LTS!). By default, Ubuntu
21.10+ installs Firefox as a snap rather than as a .deb
package.
Unfortunately, the snap version of Firefox currently suffers from several
problems that can lead to a bad user experience – crashes and slow startup time
are among the top complaints.
Unfortunately, it’s really hard to find good advice about humidifiers on the internet. A quick google search for something like “humidifier advice” seems to find mostly SEO spam – things like “5 Tips When Buying a Humidifier” that contain useless tips and affiliate links to generate ad revenue. On top of that, it’s pretty easy to find complaints about problems with various humidifiers (e.g. in reviews), but hard to find solutions. Humidifiers produce dust, they’re impossible to clean, they grow mold, or they don’t actually improve humidity. Even some of the most frequently recommended humidifiers, like the Honeywell HCM-350, are despised by some consumers.
I live in Colorado, a state known for its dry air at 5,280 ft elevation. And I like to use a humidifier at night to keep my nose and throat from getting dry when I sleep. Over the course of the past two or three years, I’ve done a decent amount of research (including this YouTube video) and I’ve tried a few different humidifiers. I think I finally have a sense of what works, and I’m hoping to make this information easier to find by sharing it here! If you want to use a humidifier but don’t know where to start, or if you’ve been disappointed with problems from a humidifier you’ve tried, maybe I can help you find something that works!
Wordle is one of the latest crazes to hit Twitter. You might have noticed it – it’s the thing everyone’s posting with the yellow and green boxes. Wordle is a game where you have to guess the word of the day. Each time you guess, it’ll tell you if each letter appears at the spot you guessed, somewhere else in the word, or nowhere in the word. You win by guessing the correct word in 6 guesses or less.
Iteration is an important part of my development workflow, and it’s an important part of the way we work at Strava. Over the course of my own career, I’ve learned to really value the process of incremental development. By shipping relatively small changes quickly, we can gather feedback, observe important metrics, and continue the cycle with targeted improvements. Ultimately, this helps us continually deliver athlete value on a rapid timeline.