A reading from The Martian

“Every human being has a basic instict: to help each other out. If a hiker gets lost in the mountains, people will coordinate a search. If a train crashes, people will line up to give blood. If an earthquake levels a city, people all over the world will send emergency supplies. This is so fundamentally human that it’s found in every culture without exception. Yes, there are assholes who just don’t care, but they’re massively outnumbered by the people who do.”

Shutting down Indego+Status Board

While I was living in Philadelphia, the city launched a bike share program, Indego. I signed up early and used it regularly to get from my apartment in Society Hill to CityCoHo, where I was renting a desk.

Indego key fob

I had played around with Status Board, but hadn’t had much of a use for it until I found the API for the status of the bike share stations. It didn’t happen often, but it was annoying to get to a station and find that there are no bikes to check out, or no docks available to return a bike.

Since I used the same stations regularly, it seemed like a good use case of Status Board: I could create a table showing the available bikes and docks for my favorite stations and check it whenever I was about to head out.

So I created Indego+Status Board.

I built the site using Flask. The index page calls the bike share API to create a map of stations. You can click on stations to add them to your list and then view them in Status Board or in the browser.

The data are collected the same way for both Status Board and the HTML view. The URL contains a list of station IDs as part of the query string. When the Flask route is called, it fetches the station data from the API, loops through the stations to find the ones with the right IDs and then renders a simple HTML table with the requested data.

The Status Board table has very little styling—the app has a table style already—just enough to align the blue and gray bars.

Status Board screenshot

I used it pretty regularly, though, and it was useful for me. There were a couple of times that I could see that the station nearest my apartment was full, so I knew to use an alternate on my way home.

But then I moved out of Philly and Panic announced they were shutting down Status Board, so now seems like a good time to retire this project and save myself a few bucks a month by powering down the droplet1.

The code is on GitHub if you’d like to run your own version. And it turns out that other bike share programs have data APIs, so it could be adapted. For instance:


  1. If you’re looking for a cloud server, I’ve been happy with Digital Ocean. If you use this link to sign up, you’ll get $10 in credit. If you keep your account for a while, I get a referral discount. 

2016 in Review: Books

I’ve been trying to read an average of one book per week for the past couple of years. I didn’t get there in 2016, but I got a little closer than the year before.

Here are the books I read this year, in chronological order1:


  1. Most of these are Amazon Affiliate links. If you complete a purchase after following the link, I receive a small commission, which I’ll probably use to buy more books. 

2016 in Review: Travel

Two countries. Eight states. 10 National Park sites.

I got to do quite a bit of traveling this year, including my first international trip since 2011. Here’s a list of where I went (first-time visits are in bold):