stuff from doing MIT opencourseware 6.087