Copy of this LensKit example, will likely remove once author moves to GitHub