add boost program options
add argument parsing
refactoring