cpsc304 project