Sunday, August 19, 2012

The GUI

I have made it quite evident to those that listen that I hate GUI development...but that is hardly the full case. In truth, I hate GUIs. UI in general sucks; even in the real world.

Why do you have to press a button to eject a CD? To turn on a fan? Why do you "drag" icons to the "trash can"?

The Way Things Used To Be

One of the best GUIs that I've run across recently is from a very old machine...the Tandy 102 (of which I scored two on Ebay for a reasonable price, being their working status was unknown)

The initial screen you get upon turning it on (which is instant by the way...no slow "loading" or such) Shows the date, day of week, time, copyright (Microsoft by the way) a 4 x 5 grid that shows the names of your files (you could only have twenty, minus the five default installed programs: fifteen files!) and number of free bytes.


Navigation is simple, arrow keys, and you move a black box that inverts the colors: instant visual contrast.

Like most BASIC programs, you interact with them by entering commands; which feels much more native to me than clicking buttons or moving a mouse. It is a nice chat you have with a machine, and if you remove all of the extra words that you would from when you talk with a person, you pretty much end up already knowing all of the commands for a program.

When you enter a program, it is full screen, much like a new file on your desk would be: you pay attention to only that. (something Android and IOS [or *sigh* Palm, you too] seem to have gotten right...only after twenty years of bumbling around)

Things are generally simple and make sense in the world of the Tandy.

The Way Things Are

Fast-forward twenty years and you get this:

Sitting there is a slew of information (and yes, my desktop is cluttered). At the top, I have seven programs telling me that they are running perfectly fine! At the top left of the screen, I have the name of the current program, which is confusing, because it a) hides the menu bar, and b) tells me I'm running "Ubuntu Desktop" when I'm clearly not (oh, wait! you mean the thing that opens other programs is a program running on another program displaying itself through another program that is using programs to talk to my computer?) To the left are a bunch of icons some of which depict what they do...like the terminal and folder, but otherwise depict nothing of the sort: what does a fox hugging a globe have to do with the web? In the bottom left I have a trash can/recycle bin that doesn't actually erase things on my disk when I "delete" them.

I can nest hundreds of folders within folders and one file at the end...or none; and it helps a little, trying to find what I want...but not as much as it could.

The Way I Want

Enough complaining: now on to how I see to fix it.

Hide the file system, except for people that want to use it.

Use a full-text-search solution that runs *once* whenever a file is updated to update it's database; and also index meta-data/file-type/etc. for faceted search.

Each file should have two states: archived/not archived, archived files can be seen are heavily compressed, to save space, and aren't in the FTS database. This will allow you to save projects, and move on.

Search should be able to look up many attributes of files, creation time, author, type, program created by, etc.

Contexts

There should be an easy way to group files in to "projects" and have those show as your main view (or desktop) rather than having Desktop be an arbitrary folder. That way you can switch between contexts easily.


Applications should be able to store information in some kind of key -> value store (like a registry, and for those of you that argue, registries = good, if keys are named properly, and things aren't nested crazily) that is dependent upon the context, that way you could use the same email client for work and home contexts without it needing the back-end of being able to fetch from both and keep them separated.

Contexts, and the documents within, should be able to be encrypted and hidden, but the user should still be able to see the documents from one that isn't encrypted or hidden (unless it is unlocked at the moment) in their normal FTS search.

Entire contexts should be transferable (enterprises should love this, new employee gets emailed a context, and it includes all employee info, etc.)

Contexts should be built around messages, being that is what we do in the real world; talk to one another. You get a message, take an action, and move on. These should be able to be cataloged (instant time-sheets).

Security

Programs should be sand-boxed, if necessary.  Users should be able to decide which system functions an app can use with good granularity, and the app shouldn't be able to figure it out. (i.e. a list of permissions with checkboxes).

Files should be heavily overwritten when deleted, and be removed from the FTS database as well, to ensure nothing remains of them.

There should be no root to run things under, except the user. Everything should be user dependent.

Applications should be suspended when not in use by the user for security, privacy, and resource usage purposes.

All files an application creates should be saved in a directory somewhere, allowing a full cleanup when an application is removed from the device.

No comments:

Post a Comment