last sample app in tutorial (comprising most of the book)