Aza Raskin’s keynote “Don’t make me click” on day three of the ajax experience revealed an interesting pattern, without actually mentioning it – therefore I label it The Return of the Command line.
For a start, lets clarify what a command line is:
A command line interface or CLI is a method of interacting with an operating system or software using a command line interpreter. This command line interpreter may be a text terminal, terminal emulator, or remote shell client such as PuTTY.
The CLI continues to coevolve with graphical user interfaces (GUIs) like those provided by Microsoft Windows, Mac OS and the X Window System. In some applications, such as MATLAB, a CLI is integrated with the GUI, with the benefits of both.
In other words: A plain text input that accepts any text and tries to interpret it. Well known are those provided by your operating system: Some DOS descendant on Windows and various terminals on unix and its derivates. Most common are commands for working with the file system, like searching for files. Using “grep” with a regular expression to search for certain files based on some esoteric content can save you a lot of time.
While these may be well known, I think those most popular, in terms of people being able to work with them, are others.
If you are reading this directly in your browser (and not through some feed reader), you’ve came here in one of two ways: Entering the URL of this site in your browser’s address bar, or following a link from another site. In the latter case, its quite likely that the link was on a Google search result, where you’ve entered some term to search for.
Both the address bar and the Google search box are command line interfaces.
Lets look at a few examples for the address bar (all on Firefox 2):
- If I enter “mail.google.com” in my address bar, my mailing application opens. I don’t even need to log in. Just like you’d expect from a desktop mail client.
- If I enter “leo compulsive” I get english-german translations for the word “compulsive”. I’m not asked whether I’m looking for german or english translations. Instead, the application just looks for both and shows the result, allowing me to scan through it and find what I’m looking for quite fast.
- If I enter “osi” I get search results from google.com. The browser can’t get resolve the term as a URL, so it just forwards to a search engine.
Greatly simplified, the browser does this: For a single term, ask the DNS for the IP address. If found, go there, otherwise fallback to search for it. For more then one term, try to use the first as a command name, eg. “leo”, and pass the rest as parameters.
That is still quite similar to classic command line anatomies:
[doSomething] [how] [toFiles]
doSomething is, in effect, a verb, how an adverb (for example, should the command be executed “verbosely” or “quietly”) and toFiles an object or objects (typically one or more files) on which the command should act.
Now, what about the Google search command line? Basically it provides full text search for websites – finding millions of results for almost everything (A friend once told me about a game he used to play with others at school: Try to find a term that produces the fewest results, but at least one).
A bit less well known, but nonetheless very useful, are options to improve the search, like grouping terms, excluding or promoting them, or doing special searches for books, music, movies. And even a calculator. And a currency converter. You don’t even have to know the currency short terms, just enter something like “379 dollar to euro” and you get the result.
I didn’t even know about the currency converter until now. I used to use Google to find one whenever needed, often landing on ugly pages stuffed to the top with ads. Or with UIs that featured one input field for the amount, and two select elements for the two currencies, like the one at xe.com/ucc, forcing me to push the mouse around a lot.
And that is just what Aza Raskin was telling: Don’t make me click. Command lines are pretty good at helping to achieve that.
Do you have other command line examples on the web worth noting? Have you implemented one recently?