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.
GitHub Codespaces made waves when GitHub introduced the feature several months ago. Codespaces promises a lot. It solves configuration headaches, it creates disposable environments, it can provide better performance than the laptop you’re working on, and it can better enable remote collaboration. I was interested to dip my toes in the water and see what it’s like to work with Codespaces, but that can be a little tricky to do if you don’t have access to a GitHub org that’s paying for Codespaces. Fortunately, as it turns out, there’s a very accessible alternative that’s free and easy to try, and it’s a great way to get a taste of what the Codespaces experience might be like.
Thule makes several popular bike trailers, including the Cadence and Chariot. The trailers come with the Thule ezHitch to attach easily to most quick-release or solid axle wheels, and Thule also sells an adapter to make the ezHitch fit on thru-axle wheels. This covers most common bicycle setups, but it leaves out many e-bikes, which often use 12mm solid rear axles. And that’s really unfortunate because towing a trailer is a great way to use an e-bike! I figured out how to modify a Thule ezHitch to fit on my e-bike with a 12mm solid axle, and I’ll show you how I did it below.
I’ve written before about my own search for The Ultimate Developer Laptop back in 2019. I chose to buy a Dell Precision 5510, but I also mentioned a few other laptop models that work really well with Ubuntu. Laptop series like Dell XPS, Dell Latitude, and Lenovo ThinkPad. Well, I actually own a Dell Latitude E7450, and I’ve recently started using it a lot more often. It’s a small, lightweight laptop made with high-quality parts, and it runs Ubuntu flawlessly. Mine doesn’t have a discrete graphics card either, so I don’t have to bother with graphics drivers in Ubuntu. The overall experience is super-smooth, and it puts a smile on my face to use this computer!
Laptop docks are great! As I wrote about in The Ultimate Developer Laptop and My Home Office Setup, I’ve been using a Dell TB16 thunderbolt dock for about two years now, and I really love it. The dock makes it so much quicker and easier to connect my laptop to all the peripherals on my desk. And that’s important to me because it makes it feel easy to take my work to another part of the house or go work on the deck – I don’t feel tied down to my desk.
Can you use a DisplayLink dock with Ubuntu? And, more importantly, should you? I recently researched this for a dock I wanted to buy for myself, and here’s what I found.
I recently spent some time improving my bash prompt. I already had a lightly customized prompt, but wanted to see if I could find something I liked that provided even more information.
Sometimes, we work on shiny new features that (we hope) athletes will notice and love. Other times, we need to work on back-end improvements that are unlikely to be noticed at all, but are usually just as important as the other things we work on. Some recent work I did for our club leaderboards fell into the latter category — unlikely to be noticed, but really important for the scalability and reliability of strava.com.
When you’re a developer (or perhaps even a normal power-user), you seem to
acquire a bunch of custom config, scripts, and tools over time. Often, these are
little snippets. A one-liner command alias that you paste into ~/.bashrc
. A
custom format for your PS1
prompt. A default setting for Vim.
I’ve already written a review of the Orange Pi Zero. As it turns out, this little board is perfect for running your own Pi-hole! It’s probably even better than a Raspberry Pi! The cheapest Raspberry Pi you can get with a wired ethernet connection is the Raspberry Pi 1 Model B+, which is listed for $28.95 at PiShop.us (as of May 2021). In contrast, you can get an Orange Pi Zero 512MB for $16.99 + ~$4.00 shipping from AliExpress, or a couple dollars more with a case. (You can also find these items on Amazon, but shipping is more expensive there.) In total, you can save about 30% compared to the Raspberry Pi! Of course, the Raspberry Pi model Zero W might be cheaper, but isn’t a good choice for a Pi-hole – it loses some network stability and speed because of its wireless connection. The Orange Pi Zero, on the other hand, has a wired ethernet connection and performs great!
This year, Computer Science Education Week will be December 7-13, 2020. In honor of CS Education Week, I wanted to write this blog post about the first computer game I wrote, and what I learned along the way. I was about thirteen, and this story picks up near where I left off in my previous blog post about my first computer program. When I wrote that blog post in 2017, I was working mostly from memory. Since then, I actually found an old floppy disk with my game on it. And finding that old floppy disk got me thinking about about how much I learned from writing computer games in my childhood, and how much others might be able to learn from writing their own first computer games today.
In late 2019, Strava’s product development team began forming ideas about a new way to compete on Strava. Strava segments have always provided a way to recognize athletic achievement through a form of racing. Now, we wanted to also recognize the grit that goes into training. Those athletes who are out on the trail every day, rain or shine, striving for more. Local Legends is the result of these ideas, recognizing the athlete who’s completed a segment the most times in the last 90 days. I was lucky enough to play an important role in building this feature, and in this blog post, I want to tell the story of how we developed Local Legends and explore some of the technical challenges we faced along the way.
The Social Dilemma came out about a month ago and got a lot of people thinking about the influence the internet and social media have on their daily lives. I’m a programmer, and I’ve worked for an internet advertising company, so none of this was new information to me. But for a lot of the American public, watching The Social Dilemma was an eye-opening experience into the ways that internet companies try to track and manipulate people. Many of my friends used words like “unsettling” and “eerie” to describe how they felt after seeing the film, but most of them also weren’t really sure what to do about it. They weren’t sure how to make positive changes in their own lives.
Setting up a development environment correctly might not seem like a big deal at first, but an incorrectly set-up environment can cause a lot of problems down the road if you’re not careful. In my experience, the internet’s full of solutions – both good and bad – for environment problems, but often does a poor job of explaining why a solution’s good or bad. And installing Ruby can be tricky if you’ve never done it before. So here’s my advice.
The Xiaomi m365 (also known as the Xiaomi Mi) is one of the most highly-rated electric scooters available. If you’ve ever rented a Lyft or a Bird scooter, the design will look very familiar. This electric scooter is fun to ride and great for commuting! But one of the best things about the m365 scooter is that you can modify the firmware to suit your own preferences! It’s easy to do and should only take 20 or 30 minutes. Let’s get started!
Orange Pi is a relatively unknown competitor to Raspberry Pi. I recently learned about Orange Pi while doing some research about a Raspberry Pi project I wanted to start, and I actually ended up buying the Orange Pi Zero. Orange Pi is a Chinese company that is focused on producing small PC boards – similar to Raspberry Pi – as cheaply as possible. And Orange Pi produces a wider variety of boards than Raspberry Pi, so perhaps one of their boards will fit your project better than a Raspberry Pi would.
I use a Pi-hole on my home network and I love it! It works by configuring your local network to use the Pi-hole as the DNS server, and the Pi-hole refuses to resolve domains of sites you want to block. It does a pretty good job of blocking everything from unwanted trackers to ads and malware. Sometimes, though, it’s annoying because it blocks a link that I actually want to visit. Maybe I’m trying to visit a sponsored Google link, an Amazon product link, or a link from an email. In any case, I just don’t want the link to be blocked, and the Pi-hole gets in the way. This can be inconvenient because the usual process to temporarily allow blocked traffic is to open the Pi-hole admin page in a new tab, login, and click the link to disable it in the menu. Too much work! So I came up with a slightly easier way. I use a bookmark in my bookmarks toolbar that will disable the Pi-hole for 30 seconds.
No keyboard, mouse, or monitor required!
In my last blog post, I figured out how to enable SSH access to a Pi Zero W without attaching a mouse, keyboard, or monitor. This us useful because it means you don’t need a micro-HDMI or micro-USB OTG cable to attach a monitor, keyboard, or mouse. But can we take it a step further? I wanted to find out if I could get a GUI desktop environment running without attaching a monitor to the Pi. And I did it!
No keyboard, mouse, or monitor required! In this tutorial, I’ll show you how to ssh to a Raspberry Pi Zero W without ever using a keyboard, mouse, or monitor on the device itself. We’ll prepare the device to connect to your wireless network (even with a password) when it’s turned on for the first time – this process is known as “headless setup”.
I’ve been a runner for most of my life, running track and cross country in both high school and college. Many years ago now, I got my first GPS running watch and I came to love all the data it provides for my runs. Recently, I figured out how to use the “Workouts” feature on my Garmin fēnix watch, and I absolutely love it! I think more people should know about it, so I decided to write this blog.
One of the top stories on Hacker News today was a blog post called macOS 10.15: Slow by Design. I loved reading it – I find it fascinating to see how a problem like that was discovered through some reverse engineering. But it also got me thinking about macOS vs Linux vs Windows and reminded me why I love using Linux. Many people I know think the Linux Desktop is buggy and hard to use. And sometimes it is. But it’s worth remembering that neither macOS nor Windows comes without its own set of problems. There are trade-offs between any operating system (and apparently, the OS slowing down some executables by making network requests is now one of those trade-offs 😂). At the end of the day, I just want my OS to get out of the way and not be broken so I can be productive, and it seems to me that in the last several years, Ubuntu is getting closer to Windows and macOS in terms of stability and ease-of-use. On top of this, Ubuntu has always been lightyears ahead of Windows and macOS in terms of data collection and privacy.
I’ve been meaning to write a blog post about my home office setup for a while now – and with mandatory work from home restrictions for COVID-19 in most places around the world, this seemed like a great time to write it!
When you run the Ubuntu installer, there’s an option to dual-boot Ubuntu with an existing Windows installation. There’s also an option to encrypt your Ubuntu installation, but only if you erase everything and install ubuntu. There’s no automatic way to install Ubuntu alongside Windows 11 with encryption. And while there are plenty of tutorials for dual-booting Ubuntu and Windows, many of them are outdated – often referencing an MBR partition table – and almost none of them seem to address encrypting your Ubuntu partition.
This might turn into a bit of a rant, but humor me. The other day, I was working on a hobby software project when I got hit with one of these:
For the last six months or so, I’ve been using an e-scooter on part of my commute to work. I’ve spent a good amount of time commuting on both the GoTrax GXL and the Xiaomi M365 so I thought it would be fun to write a review and comparison of the two scooters.
Recently, I bought a new computer. My goal was to find the ultimate developer laptop! Well, maybe that’s a bit of an exaggeration… I actually set a fairly reasonable budget for myself. So maybe the ultimate affordable developer laptop™ is more accurate. In any case, I put a lot of thought and research into what my ideal machine would be like, so hopefully my research and experience can help you find the computer of your dreams too!