CprE 288 end of semester project