all content taken from Alex Fosdick ese1 course on coursera with completed work by myself. MIT license