main code; TODO: dataloader