todo: optparse