This blog is highly personal, makes no attempt at being politically correct, will occasionaly offend your sensibility, and certainly does not represent the opinions of the people I work with or for.
Library Photocopier 1, Pascal 0

No amount of intelligence and/or previous experience will ever prepare you for the nightmare that photocopiers user interfaces are nowadays. It's scary that the people who design them have the right to vote, drive, and reproduce. I think they should go kill themselves.

It's so simple to make a user friendly interface, really.... Even me can do it:

  • machine: "What do you want to do [print] [copy] [etc.] ?". Pascal clicks on [copy]
  • machine: "You are about to copy with the following default parameters: [paper size: A3 (autodetected)], [contrast: 50%], [side management: 1 copy per page] [etc.], click [enter] to perform, or click on a parameter to change its value". Pascal clicks on [paper size]
  • machine: "Choose the paper size [A4] [A3:selected], when done click [main menu]". Pascal clicks on [A4] and then [main menu], then [enter].

With a logic like this one, you can gracefully handle any number of primary functions and the setting of their individual/specific functions parameters. Additionally when used consistently the user knows instantly not only how to perform something that is doable, but also whether a parameter is configurable or not.

Instead, I didn't found out (and much worse: will never know whether it's even possible) how to override the auto-detect paper size of my library photocopiers today. And the sad thing is that those things must have cost a lot of money...

[ update 1 ]

Few minutes after writing the above, I came across the following, which again is saying what I have been preaching for ever: The best interface is no interface.

As an example of interface well done, and almost completely removed, here is the latest alexandra with its now timeless HUD

Area 1: Is the display of the non notification subset of activity-stream. This subset covers one time calendar items and repeating tasks. In this moment it is telling me (among other things) that I should buy kitchen rolls today on my way to home (item automatically generated from the program that monitors my kitchen supplies) and also that today is Laundry Day (repeating item).

In the face of those two items, I can either do them and then notify the system that they are done (the shopping one will be destroyed, an the laundry notification will be automatically moved 10 days in the future -- as I do it every 10 days -- 10 was chosen because it's relatively prime with 7), or I can delay them, they will be moved into the future and kept out of sight until they become visible again. Some programs also post there specific things that I have to do, when relevant. Interacting with activity stream happens as follow (I have just discarded a repeating item which happens every 20 hours)

Area 2: I the notification subset of activity stream. Items are displayed there and removed after 24 hours. I get notifications about almost everything. Events related to alexandra herself, remote notifications from the websites, and notifications from running programs, monitoring that my rent is paid on time, my bank accounts levels etc,

(this particular notification says that according to the current projections, one of my bank accounts, the one I use to pay bills, will have a negative value in April 2013, 9 months in the future, giving me plenty of time to login and transfer the money from another account), anything you could thing of... Note that I do make use of Growl and Notification center, but I am not always looking at my screen, so when I want a notification to remain in sight after its initial flashing display, I use activity stream.

Area 3: Calendar display. Completely distributed, not a single database, but driven by specific files at specific locations.

As you can see, to me, time is completely linear and I hate those programs which try and display them to me per week or whatever. The display of this program goes linearly from earliest recorded event (in this moment yesterday) to oldest (future) recorded event. Simple. No fuss. In particular I don't keep records of what I did in the past so it mainly shows the future.

Area 4: Todolist display. This todo list is quite advanced, actually (result of many years of improving the concept). The display is not all of the dataset but the subset related to the activity I was currently doing. I can edit it in in a very intuitive way, but a bit too subtle to explain right now... It is now a top level folder in Galaxy

Area 5: Temporary display. In this moment (for a couple of weeks or so), I am studying the ip-ranges that hit various places of my websites, essentially crawlers. For each ip, the range is computed using "whois", the location is resolved (I have my own geo-ip service running on alexandra), and a line with various information is displayed.

Area 6: Lucille generic service. Various information computed by the script called lucille-hud on the desktop. In this moment it displays the output of chronos which is a service I built recently to study statistics on what I am actually doing up to the second. In this moment it says that over the past 7 days I spent 34.14% of my time sleeping and 31.90% on my dissertation.

(You don't want to know what "Cosmic microwave background radiation" means. No, you don't.) Other sub displays cover various domains, and the last line is the output of a small funny program I wrote few days ago called Hydra

(a story for another time).

There is also an Area 7: across 2 and 3, that's iCalBuddy's display, mostly empty.

So now, the interesting thing is that every single of those display are driven by console applications, so the terminal is my common interface to all of them. I designed their interfaces to be as simple and expressive as possible and given how instantaneous bringing up a new terminal window is on alexandra, this is what I call integration. Of course, this is HUD display and sometimes, if not often, I have actual windows on the top of them. Never mind, I am always one click away from switching to an empty desktop (Spaces, in OSX 10.7 and 10.8 parlance...). But much more importantly I wrote those programs myself and if I need a feature, it's a matter of minutes spent within the code. Not like those bloated and or which do badly 40% of what I want and none of the other 60%.

Now, my goal is to have that displayed on one of those Google glasses, whenever I put my hands on one of them :-)

Some people realise the same aggregation of functionalities using various graphical programs either desktop apps or online apps. The idea that I would need to use my mouse (and clicking all over the place) to either access the information or interact with it sounds painful to me.

[ update 2 ]

Awesome !! A new feature in Firefox 16 (apparently): Command Line in the Firefox 16 Developer Toolbar. If only we could get this as standard in every GUI application ! Every single of the apps I built over the past years, either GUI Cocoa apps or web apps, has got one. Either embedded in the UI, or from a xterm. This weblog, for instance, is purely driven from a console app.

Making one doesn't require any additional work from the part of the developers (since they will be exposing features that are already in the app anyway), and this will make people like me very very happy :-) And the newbies can carry on using their mouse if they want...