sample app, chapter 3