This is my main assignment for Monash FIT3027 in 2014.