2026

Target Field to Wrigley Field
In July, I joined two of my cousins and two of their friends on a 500-mile ride from Target Field in Minneapolis to Wrigley Field in Chicago over the course of a week. Cousin B had just left a job after 16+ years and was doing a 2026 bike tour frenzy, so why not ride to Chicago to see the Twins play the Cubs? On a personal note, my cousins’ mother (my aunt) died of colon cancer 20 years ago, and all five of us had been impacted by cancer in a meaningful way, so we decided to make the trip a fundraiser for cancer research.

2024

Retention and resilience
I like to frame employee retention as tent stakes. When pitching a tent, one hammers tent stakes into the ground to keep the tent from blowing away in a brisk gust of wind. Similarly, in one’s employment, there are specific reasons, articulated or not, why someone sticks with a company. When reorgs, strategy shifts, and market downturns start ripping up some of the tent stakes, as long as someone has enough remaining in the ground, the tent doesn’t blow away.

2014

Poor man's asset management
One of the challenges of web development is figuring out how best to use the browser’s download cache. When you surf the ‘net, if anyone uses that term any more, webpages and images aren’t downloaded every time you access them. The browser saves that extra work, time, and bandwidth by caching resources – images, pages, scripts, and styles – it’s already downloaded. But what happens when you DO want the browser to download a new version? Say you updated an image and want to make sure that the user has the latest content. How do you instruct the browser to download the new version?

2013

Worse is Better in the Play Store
One of my favorite essays is The Rise of Worse is Better by Richard Gabriel, which describes the distinction between what he calls the “MIT approach” and the “New Jersey approach” with respect to software development.  In short, the MIT approach is about solving a problem correctly and completely from the start.  That is, every possible use case and functionality is carefully designed up front and the result is a beautiful, complete piece of software.  The New Jersey approach, which Gabriel describes the philosophy behind UNIX and C, is to build systems iteratively, perhaps at the expense of building the perfect solution.
PhoneHome: Remote logging for Android
Building Hoot showed Christina and I the ugly side of Android fragmentation. Hoot is currently running on over 1600 different device models on five different versions of the Android OS (>= 4.0), and it makes extensive use of the hardware: multiple cameras, the light sensor, and the orientation sensor. Unsurprisingly, given the number of different configurations, we’ve seen some weird behavior: crashes, incorrectly-rotated videos, and even videos recorded in sixplicate!
A month with Dell's Project Sputnik
I ordered the new Project Sputnik laptop from Dell to replace my six-year-old MacBook. It’s basically the most-tricked-out version of the XPS 13, running Ubuntu 12.04 instead of Windows 8. I won’t get into why I dislike Apple’s OS, but I run Linux on my desktop and on any server machine I login to, and I enjoy a consistent experience. The most appealing part about Project Sputnik, as opposed to installing Linux on any ol’ Windows laptop (or a MacBook, for that matter), is that it includes a Dell-managed PPA for the hardware. In theory, this means that Dell is committed to making sure that the laptop’s hardware “just works”.
Contracts and expectations with data APIs
The phrase “application programming interface” (API) is officially quite generic. It encompasses interactions between software components as tight as data structures (e.g. C++’s standard template library) and as loose as structured queries over the Internet (e.g. GitHub, Yelp, Yahoo! Finance). A piece of code that exposes an API offers a contract with its clients: “if you interact with me in this particular way, I will perform these actions or return this data.”

2012

Pulse-width modulation, hysteresis, and transferring large files. Oh my!
I came home from Thanksgiving with a bloated stomach and few enormous files that I planned to back up on my home computer. These files were on the order of ~100s of GB and left me only about 30GB free on my laptop hard drive. And now, fair readers, I will share the harrowing tale of… The File That Wouldn’t Fit Twice. Using a couple of electronics tricks learned in ME210, I ended up with a pretty neat solution to transfer these huge files to my server.
Staying curious
My grandfather is an impressive man for a number of reasons, but one thing that continually amazes me is how curious he is. He’s a voracious learner, reads everything, and figures things out on his own. In general, computers are more difficult for grandparents. They constitute a paradigm shift in how we consume and produce information, and the more people are ingrained in traditional means of doing so (e.g. print, television, radio), the more difficult it is to start using computers.
I scream, you scream, we all scream for unit tests?
I’m going to go out and say it. I love unit tests. Hopefully, by the end of this post, you will, too. I’m not going to cover the pros and cons of various frameworks in each language, the best way to mock out data dependencies, or even the secret to writing impeccable unit tests. There are enough resources, and I hope that you’re inspired to seek them out. In case you aren’t convinced that unit tests aren’t the best thing since sliced bread, I’ve brought my old friends from Office 97, the Screen Beans people, to help me.