argument parsing and a little validationn