code and exercises from the PragProg Library