completes tutorial 1 of series, has a working main()