re-doing hartl quickly for a refresher