This is a one of the last assignments for a Coursera course I'm taking and seems like it could end up being very reusable.