Sunday, September 25, 2005

Del.icio.us is kind of neat.

If you haven't used it, Del.icio.us is a website where you can post bookmarks. They're not much for security, what with anyone who wanders by being able to look at your bookmarks, but that's really not a big deal. It is kind of nice to look at other people's bookmarks, especially if you can find someone who has similar interests. Browsing other people's bookmarks reminds me of the Yahoo! of old, when it was mostly a big collection of fun websites to go look at.

Most web browsers seem to organize bookmarks hierarchically. Just like Netscape 1.0. Did Mosaic do this too? I don't remember, but I'll bet it did. Why do they do this? Probably because programmers love filesystems: The Abstraction That Will Not Die. Del.icio.us instead organizes with tags, a topic I've beat upon before. Why are tags better than hierarchy? Well, if you organize everything in your world as locations on a single, straight line they are probably not different. Unfortunately things are more interconnected than that.

Does Amazon.com go under books or shopping? Ok, in books under shopping. King County Library? Under books, but not shopping. So books should be above shopping. But what about Buy.com? It should go in shopping but not books. It turns out that everything works this way. Well, nearly everything. Things that all can be lined up on a straight line can generally be indexed handily with a hierarchy.

Del.icio.us allows you to assign whatever tags you want to to each bookmark. Then it lists all your tags--either alphabetically or by how often they're used--and you can click on one. Click on "shopping" and poof! It's just showing shopping related bookmarks. Still too many? Now it shows tags that are on stuff with "shopping". Click on "books" and there is Amazon.com. But you can also buy books at Barnes and Noble, or some other places, so they're listed too. My only complaint is that with it being web-based, it's unusably slow.

Hmm, maybe a web browser could just download and cache the Del.icio.us bookmark list, and allow a fast way to browse them. That'd be pretty good. And why not keep track of how often different tags get used and make them show up bigger in the list? That way they'd be easier to click on! And when adding a bookmark, maybe it could do some kind of Baysean analysis to determine which tags should apply, and suggest those. Hmm, I smell a little Firefox plugin project here.

Sunday, September 18, 2005

I feel so inept.

The author of Simon of Space is writing a serialized novel, live, in his blog. The best I can manage is to very infrequently put together an incoherent rant.

Ah, well. I bet I could kick his butt in unarmed combat.

Saturday, September 17, 2005

Dang, it's been a long time again.

This is just a quick not to encourage everyone to vote in the primary. I'd also like to encourage everyone to not vote for someone that they don't know anything about. Toward that end, if there are any races on the ballot that you don't know anything about the people, don't just pick one! Look up on the internet and find out what there is to find out about them. This stuff is important!

Or, if that is too much work, just write-in for me, Andrew Berg. I may not serve, and I may not run, but I'd still like to be elected.

Saturday, June 04, 2005

The curse of choices.

The design of X Windows includes the mantra "Mechanism, not policy." This belies the academic roots of the design. I'm using "academic" here to principly mean "isolated from reality." As a result, its interface is wildly confusing and inconsistent. Sometimes within single applications.

The design of WordPerfect seems to be somewhat different. The emphasis was on editing documents. "Word Processing" is the term that is often applied to it. As a result, its interface was simple and direct. It would show words, and offered commands for performing different actions on those words.

One of these interfaces worked really well for its purpose, the other is still in use.

It's sad, really, which one.

What's the real difference between them?

X Windows seems to have been designed with the idea that someone else would come along and figure out what a user might want to use it for, figure out how the user would best interact with it, and build interesting functionality on top of it.

Here is a good description of how truly wonderful X Windows is. Notice the bit where they mention the three buttons that could do just about anything depending on, well, just about anything. Since nobody ever decided how the thing should be used, the poor helpless users were left to crawl through a mess and figure out something on their own.

WordPerfect, in contrast, was designed to make a PC operate much like a dedicated word processor. It would really only do word processing, but that was ok, because that was a lot of what computers were used for at that time.

F7, if I recall correctly, was to print. What if I don't print that often? Well, tough luck. F7 prints. It really does make good sense, though. What else would one do with a document in 1992? Post it as a webpage? Hardly! Print that sucker. Then stick it in a file, or envelope, or something. The WordPerfect Corp. took the time to study the use cases, and design an effective interface--one that made users' common tasks easy and effective.

Actually, for all I know it might have been possible to change key bindings in WordPerfect. I never felt the need, or even the desire.

And that, my friends, is a mark of a well designed user interface. It may be possible to (gratuitously) change it, but nobody ever finds out. The designer has to work harder to come up with sensible choices for everything. But the user is spared that burdon. Isn't that generally why computers got built in the first place? To make tasks easier?

Thursday, May 12, 2005

Been a while again

So in the month since I last posted, I quit driving to work again. While walking the 1.5-ish miles to and from the bus stop, of late I've been thinking about what makes computers hard or easy to use, and the nature of options.

I've mentioned before that I've switched from Linux and Windows to Mac OS X at home. Something that I've heard, and may or may not be true, is that interfaces that have one way to do things are easier for people to learn and use than interfaces which have two ways. My favorite example of this is using a computer and closing an application. In Windows, there are an incredible number of options. How about a list:

On the main menu, File->Exit.
Ctrl+Q. (Only works sometimes.)
Double click the system menu.
Single click the system menu, then pick Close.
Alt+F, Alt+X.
Alt+F, X (Is it unfair to list this one? I don't think so.)
Alt, F, X (I'm adding this one because it still confuses me sometimes.)
Right click on the Titlebar, then pick Close.
Right click on the application in the Taskbar, then pick Close.
Ctrl+Alt+Del, choose Task Manager, select the application, click "End Application".
Alt+Space, C.
Alt, Space, C.
Alt+F4.
Click the "X" button on the Titlebar.

I'd bet that there are some I've forgotten. There are also some that I've left out, like using a "kill" utility, or finding the process in the Task Manager's process list and killing that. Or turning off the computer. Or asking the program to save the file you just spent three hours working on since the last save point.

Anyhow, let's compare this to the list for the Mac:

Main Menu->File->Quit
Cmd+Q
Click the Red button on the window. (Really, this only closes the window, not the application. But sometimes the app quits too.)
Right-click on the Dock, Quit.
Slow-click on the Dock, Quit.

So, what's my point? Well, maybe that the Dock is causing Mac OS to degrade toward Windows' difficult to use status. Nearly half of my identified methods are through the Dock, and are pretty much gratuitous.

I've taught a few people how to use a computer, from the "when you move the mouse (this thing) it moves the cursor on the screen (like this)..." stage. Without exception, having lots of ways to do the same thing adds confusion. Never have I heard anyone say "boy, holding down the Alt key to access the menus is a pain!" Usually more interesting is "How can I get back the file I just wrote over?"

Punchline: Lots of choice makes confusion. Having one way makes it easier to learn. Does it make it easier to use? That might be an open question.

Next time: Customization--Even worse than choices?
Current book: Umberto Eco's Baudilino.
Last DVD: Twin Peaks Season 1, Disk 4

Saturday, April 09, 2005

Hm, Science Fiction

I recently finished reading Stephen Baxter's Exultant. I haven't read science fiction in a long time, and this one was somewhat better than a lot of what I remember reading as a Jr. High student. One thing that set this book apart from others is that unlike a lot of other novels which happen to be set in space or something, this one seems to crib a lot of its backstory from something like Hawking's A Brief History Of Time.

Upon reflection, this seems kind of odd. General Relativity and galactic scale physics involving black holes and millions of years gets used as a dramatic setting for a fine little story. Imagine how much better a story someone could write by basing it on something that nearly every person in an industrialized society interacts with every day.

Introducing: Computer Science Fiction. Maybe we'll start with a travelling robot salesman and all the troubles he gets into.

Yeah. This could be something big.

Sunday, February 13, 2005

Big or little?

I've been wondering about the "best way" to build software. Maybe this applies to building other things, but somehow I doubt it. The area I've been wondering about lately is size. Is it better to build one big thing that does everything, or is it better to build a handful of small things that work together to do a big job?

Traditionally, UNIX systems came with a collection of small utilities with names like sed, awk and grep. These, when strung together using a command shell, like tcsh or bash could perform many kinds of interesting modifications to text files. In comparison, Windows systems came with Explorer and Notepad.

Now, to be fair, Windows does not make anywhere near the same kind of use of little text files to accomplish things that UNIX does. But still, given a little bit of time and paitence someone with Explorer and Notepad could do anything that a UNIX guru could automate. And it would require a lot less learning. Explorer alone does the work of bash, ls, mv, rm, mkdir, rmdir, find and du. And more that I haven't thought of.

So why would we choose to build our program one way over the other? Well, small programs are typically easier to test and debug. If a program is only supposed to do one thing, it is easy to see if it is doing it. On the other hand, there is often a lot of similarity from one program to the next. By writing one big program it is easier to re-use the similar bits.

Microsoft likes the idea of writing small programs, but they call them "components" and they're absurdly complicated. When the idea of components was first discussed, it seemed like there would be hundreds or thousands of them, and any application somebody might want to write was just a matter of hooking up the appropriate ones in the appropriate places. Instead, for most of the software I've ever written, a few components at most are used, and the use of each one requires a rediculously large amount of effort to learn the ins and outs of that particular thing. Nine times out of ten at the end of the project I finish by telling myself not to ever use another component. Inevitably I spend more time working around the faults of the one I used than I would have spent just writing the equivalent functionality myself.

But that just means that the ones I've used were buggy. It does not mean that the idea itself is bad. Does it?

Saturday, February 05, 2005

Is a command line the best way to use a computer?

For many years I have been an advocate of the power of a command line interface over the ease of use of a graphical interface. I think that this is especially true for file management tasks. I'd rather type "rm *" than to have to draw a box around a window full of icons and then drag them to a trashcan. I'd far rather type "rm *~" than to have to search through a window with 100 icons in it looking for the ones whose names end with "~" to drag them individually to the trash. Richard Wareham even thinks that a command line is the best way to introduce new computer users.

But on the other hand, nobody that I know of uses a command line interface for what is probably the most common task there is: Editing text. Over the years I have used many different text editors. A partial list would include WordStar, WordPerfect, Brief, Notepad, Word, Emacs, MS DevStudio, OpenOffice, Delphi's IDE, and recently Vim.

What is it that all of these editors have in common? Well, they all show you what you're working on. They all let you manipulate it, with more or less direct actions. They're visual, with lots of visual feedback. A command line editor like Ed will generally show you a few lines around the line you're working on, and that only if you ask it to. It will accept commands, and show you only the immediate result of the action, not the full context.

Nobody uses a command line to edit text, why do we keep using one to edit our filesystem? I'm not entirely sure.

Tuesday, February 01, 2005

Another Dry Spell

It's been a few weeks since I last posted. What went wrong this time?

Well, I managed to get a case of cellulitis (bacterial infection in the skin) on my shin. The doctors I've talked to about this don't know where it came from, but with a whole lot of intravenous antibiotics, I'm back up and around. I was only in the hospital for 4 days but I've been told to keep off my feet as much as possible because the whole area is prone to swelling up (rather painfully) if I sit normally or stand on it.

Here's an image of the affected area. This image was taken with my Treo, which is really a pretty poor camera, but I think it serves its purpose well enough.

Picture068_17Jan05

(Edited to make the picture actually fit in the formatting.)

Wednesday, January 12, 2005

Affordances

I've been reading Donald A. Norman's book The Design of Everyday Things. It is a fine book. The chapter I'm reading now talks about affordances, which seems to be a concise way of describing the hints that a thing shows us to explain how it is to be used. Being a computer guy, I immediately relate this to computer interfaces: Every mouse-based graphical user interface (GUI) I've used has a button control, which is designed to look somewhat like a momentary contact push switch. Every mouse that I've used has a momentary contact push switch located somewhere inside it. By making the thing on the screen look like it "affords" pushing, people easily figure out that it is operated by pushing the mouse's button. That's the idea, anyway.

For years the conventional wisdom is that a "rich" GUI offers more hints as to its usage than does an "old" command line interface (CLI). But thinking back to when DOS was still an option for most office workers, using Windows (3.0 at the time) was really not the preferred way, except for a few "power user" types who liked Excel. About a year ago Richard Wareham published an article entitled The Command Line - The Best Newbie Interface? in which he describes his experience teaching new users how to use a UNIX shell.

Now, the UNIX shell is not widely considered to be "user friendly." In fact, the "rm" command, for example, is often downright hostile. I've been using computers for twenty five years, and I still occasionally delete files that I wish I hadn't. But Wareham makes the claim that once users were accustomed to the idea, they found the CLI comforting.

I think that this is because with just a little bit of effort, the UNIX CLI gives more affordances than does a GUI. Think about it. In most of the modern GUIs there are a few ways to display the files in a directory. As large icons, or small icons. With the "details" turned on, or off. Sorted by name, date or size. A few other choices. Maybe there are menu items, or toolbar buttons, or right-click context menus, or something else to switch between these.

In a CLI, I get all of those options, and a few more. I can show only .txt files. I can show only the three newest files. I can show the files that contain the word "affordances." Each of these is a single command, one of them is two programs strung together into one line. But where are the affordances? Where is the indication of how to make these things usable?

"Man" pages are the keepers of the affordances. The "ls" command has a ridiculous number of options, more than I could ever manage in a menu. But if I remember to look at the man page for "ls," it kindly tells me how to invoke each of the options, and gives me a couple of sentences of what each one does. To give a GUI that many options would make it unusable. You would end up with so much screen dedicated to controlling the options that there would be no room left for the files. "ls" takes up no room on the screen, until you decide you want to use it, and then it is almost immediately there.

This essay does not really feel complete to me, but now I've lost track of whatever point (if any) I started with. If you have any thoughts on this topic, or interesting links, please post them in the comments area.

* 11:15 13-Jan-2005 Fixed a spelling error. If you didn't notice it before, you didn't miss much. Thanks, Meg.

Tuesday, January 04, 2005

Web Browsers, and other interfaces

One of my collegues, let's call him Eric, pointed out that Mozilla has an option to pre-fetch the links from the page that you are on. This is the basically what I wanted when I wrote about "Agressive look-ahead." I suppose I should go download a recent Mozilla and try it out, but I've been watching the Mozilla project for a couple of years now and I've quit using it because I've determined that it has become so feature-rich (and slow) that it is as hard to customize as is Windows.

Now, Eric is an EMACS user (which I try not to hold against him) and enjoys programming in LISP so it is clear that he is not really a normal person. But he does seem to know more little tricks for adjusting his computing environment to suit his working style than anyone else that I know. Where I used to fiddle with making things easy for me to use, now I just resign myself to accepting the factory defaults for nearly every piece of software that I use.

I understand that it is probably not politically correct to wonder about this, but whose approach is better?

Mozilla has a truly staggering number of options. I (or somebody less lazy than I am) could probably write extensions to do many of the things that I was wanting. One of the things that I want from a browser is even in there. But I probably won't even try it. Why? Because I anticipate that the effort to just figure out how to turn on the optional pre-fetch the pages is more than the feature is worth to me. There comes a point where the cognitive load of managing the features overwhelms the value of the featureness. Excel hit this point for me about 8 years ago. I use the newest version of Excel just about the same way I used it on Windows 3.1 (whatever version that was).

There's a bunch of features in Excel that I know I'd like if I ever bothered figuring them out. Today I permuted a table into a matrix by hand because there it seemed like too much of a pain to figure out an automated way. I'll bet there is one in there somewhere. Isn't that kind of what "Pivot Tables" are for? Or maybe I needed to make a data area out of it, and setup the matrix as a bunch of queries. I just intuitively knew that it would be more trouble to figure out than it was to just do it by hand. All I wanted was to turn the numbers into a little chart, anyhow.

Oh, and I thought of another web browser feature that I've been wanting:
  • Chrono-Forward and Back I leave my computer running 24 hours a day. I'd like to be able to tag some of my bookmarked sites as being of great interest to me. Then, every so often it could go fetch a copy of the page, images and everything. Using some clever logic to only store the differences between pages, the size of the data stored could be acceptable. Then, when I open those bookmarks, on my toolbar I get an extra set of forward and back buttons. Time travel buttons!

Monday, January 03, 2005

Web Browser Usability

Jacob Nielson writes about usability in his "alertbox" forum, usually talking about website usability. In a recent posting he describes some ideas he has for making web browsers more usable by extending HTML to a more complete hypertext. (Go read his description for more details.)

I think that there is plenty of room for improvement just looking at the browser side of the web. If you don't have to change HTML it's a lot easier for people to adopt the changes gradually.


  • Bookmarks that act like bookmarks. When I use a web browser, the bookmarks that it stores work like a page reference written in a notebook. When I read a book or a magazine the bookmarks that I use keep track of where I've read to in the book. I want the "how far have I read" or "where did I leave off" kind of functionality in a web browser. Since the term "bookmark" is already taken, I'll propose calling these "resume points." If I open a "resume point," browse a little bit, and then close the window, the next time I open that point I want to be taken right to where I left off, with the ability to go back through my history and everything.

  • A "Next Link" button. Opera has a nice "Fast Forward" button that I use pretty regularly. Next to the "back" button it is probably the one I use the most. However, there are a lot of cases where it is not quite what I'm really wanting. My most common browsing task is probably to do a Google search and then want to page through the list of resulting links. I want a button that is the equivalent of going back, finding the link that I last clicked on from that page, and then clicking on the next link on that page. This would let me browse through the Google results with single clicks. It would also work well for a lot of shopping sites (like Amazon) which return lists of things.

  • A map of the web. Years ago, before Windows became moderately usable for simple computing tasks, IBM made an operating system for PCs called OS/2. It's been dead for a while, but it had the first graphical web browser that I used, called "Web Explorer". It had a neat history view which showed a graph of the pages traversed with the various links between them. It only showed the links that you'd actually taken, but I'd like something like it which analyzed all the links on the pages and could show various levels of detail. Working in tandem with "Agressive look-ahead" (described below) it could produce an interactive map of a website to help me find what I'm looking for.

  • Stronger history searches. Most web browsers keep track of recently viewed pages, calling it my "history". Most web browsers will allow me to search through history, looking for keywords. Yet the search that they perform is often just searching for keywords in the page title and URL! Microsoft's Internet Explorer seems to try a little harder than the others, but still falls far short of really letting me find whatever I'm looking for on any page I've ever been to. I've got a nice, big hard drive. Why should I ever lose my browsing history?

  • Spam filter integration. Yes, spam is the universal annoyance. And spam filtering does seem to help somewhat. But occasionally I do want to get mail sent to me from a company or something. My web browser knows which domains I've given my email address to, that should be a clue to my spam filter that mail from that domain is ok. Maybe even a little popup would be nice. Ideally, the web browser could look for words from the page and site that I gave my email address to and feed them as non-spam words for use in our now nearly ubiquitous Baysean email filter. Anyhow the punchline here is: The web browser knows that I gave out my email address. That should somehow be enough to get the response back through my spam filter, but often isn't. That is inefficient.

  • Aggressive look-ahead. I'm not really sure how feasable this is in a world of dynamic web pages, but it sure seems like with a fast internet connection and a big hard drive there's no really good reason why I couldn't have my browser download every page linked to from the page I'm looking at. Load times would get a lot shorter, if it was just a simple fetch from the cache. But there could be other benefits, as well. If I hover over a link, the browser could show me the target page, maybe reduced 50% in a popup window. It could feed the links from the other pages into my map of the web. When I do a "History search" it could include pages that were near the ones I actually went to, and maybe return those results in a different color, or separate list. Not having to wait for the content to download is really a small benefit in my way of thinking. Just having more data local to be able to make decisions with is really the big benefit.