https://github.com/rdpeng/ProgrammingAssignment2