Romeo - interface consistency


Some thoughts about interface consistency.

Most commands in [Romeo][] accept inputs and provide outputs. Most times, inputs come from files, but from time to time they might come directly from the command line.

One such example is the sub-command for validating the Codice Fiscale, an identification code that is used in Italy for several “official” reasons.

I initially designed the interface for the whole set of commands like this:

  • output is specified with option -o/--output
  • inputs are straight command-line arguments (i.e. those without a switch).

This works fine for most “read many and transform” commands, but it’s sub-optimal for stuff like the Codice Fiscale validation because it’s way easier and intuitive to write this:

romeo cf bcadfe70a01h501j

instead of any of these:

# explicit command-line switch
romeo cf -c bcadfe70a01h501j

# read standard input
echo bcadfe70a01h501j | romeo cf

# shell redirection
romeo cf <( echo bcadfe70a01h501j )

Plus, having a difference in how inputs and outputs are handled always made me uneasy in other scenarios, like ImageMagick or ffmpeg. Should I put -i for inputs or -o for outputs? I always have to look how to do it.

So, I eventually switched to using explicit command-line switches for inputs and outputs, at the expense of providing multiple inputs with multiple occurrences of -i/--input. Which is totally fine, I think.

Cheers and… stay safe!

Comments? Octodon, , GitHub, Reddit, or drop me a line!