Context Aware UI
Tuesday, January 18th, 2005I’ve talked to a few friends about an idea that I had. I’m not very good at articulating it, so my apologies up front. So far 1 in 3 people sort of understands what I’m trying to suggest. To be honest, it’s a bit utopian, and may or may not be useful, but here goes.
I am a person who likes fluid organization. I like a bit of structure, but not a rigid structure. I find myself constantly bumping into structure all the time, and it’s somewhat aggravating. One thing that I really do despise is having to leave my environment for another just to look up a small piece of information. Here’s an example.
I come in to start the day. I open up a few consoles, and a vim session in each one. The primary session is editing the file that I actually want to work on. The other two are editing files that I’ll need to look at, header files for example, or perhaps a library reference. I constantly refer to the other two files while working on the primary file. This is good, and works well enough for me. Someone comes up and asks me about a bugzilla item. I don’t memorize each bugzilla item, so I have to leave what I’m doing, go open a browser, find the bugzilla item, go edit other source files to see what’s going on, and then answer their question. The problem is that I may have either opened up a few different windows, or taken my existing windows out of the context they are using. Let’s say that I opened a bunch of additional windows on another desktop. Now that I’ve answered their question, I don’t want to keep those windows there. However, if they come ask me again, I sure would like to get them back without having to wait for each window to open, each file to be found, etc.
Wouldn’t it be great if I could save some context along with that bugzilla item, so the next time I opened it up, I could be back to the point I was when I first did all the work?
Now before you start posting about fifteen different things that already do that, I have a question… Can I use my existing editor? Can I tie in emails, aim conversations, or whatever? If so, then yay, I’m late to the party again. If not, then do any of these solutions provide a plugin interface so I can tie in other applications?
What I’m getting at is most interfaces are tied to specific data, but they have a whole bunch of meta-data, or context to go with them. When I’m editing my primary package, I need to be able to see additional information at the same time. Whenever I’m working on that piece of code, it tends to be pretty much the same information.
It’s hard to make a concrete example of what I’m trying to think of, and all the ramifications that would result. Initially I want a bookmark for my current working environment. This would include any windows that are open, their location, their contents, etc.
Things could evolve down a road then where you could literally have an environment editor. What would this be? No idea… But what it is in my abstract little brain is something along the lines of an editor of anything. I can open up web pages, code snippets, email, shell sessions, whatever. And I can just open up different views into this meta-document. The meta-document would be the context. It would be the piece of data that associates an email with a web-page looking at bugzilla. It would be the thing that ties an aim conversation to a source file. The direct interface into this context document would be something that would have to evolve. I don’t really know what the most useful interface would be, all I know is that there is more data there than the computer is tracking now. I want the computer to be responsible for that data rather than wasting my own braincells on it.
If something like this came about, a possible evolution would be having the computer look for patterns, and perhaps suggesting environments for you. It would be nice if when someone aim’s me a question on bug #1234, and the browser automatically opens to the bug, or even better, the aim window just contains an embedded short description of the bug.
Note that there are a couple of projects that I’ve seen that are working on at least that little piece of functionality now. One is called Dashboard . It is an interesting approach, and shows some promise of being useful. However, I don’t like having yet another window open taking up real estate when 90% of the time it’s not relevant. Still, it is a very interesting project, and these guys deserve some kudos for it.
Well if you’ve gotten this far, I hope I haven’t completely lost you. If I have, then I’m sorry. Post your question, and I’ll try to clarify. If you’ve read this and said “Wow, he’s got no clue what he’s talking about!” I don’t deny it, however post your reason why. I guess it’ll be interesting to see how interfaces look in 20 years.
-Synwan