2014 fall semester Univeristy of Alberta CMPUT 291 class project.