Thursday, February 02, 2006

TopDesk & How I'd Change It

Problem: TopDesk makes the best use of available screen realestate to stuff in varied sized thumbnails. If you close a window, this order is recalculated, leaving the user with no idea of where his firefox window just went.

Evidence:
I used topdesk and it gave me a headache. General feelings of grumpyness ensued.

Explanation:
If something isn't where I left it last, it upsets me. For instance, I lose my house keys and spend much time wandering about aimlessly rechecking the same spot that I looked 18 seconds ago, eventually finding them in the "safe spot" I put them last.

By the same token, it's distracting to the point of near unusability to keep losing my firefox windows.

Solutions:
Organise the windows in a circle, similar in essence to a clock face. Try to keep applications in the same "quadrant" across many sessions. See below.

topdesk3


When a thumbnail is hovered over, a dim but visible, larger shot of the window should appear in the center of the circle. If I close a window, then go back to topdesk, Firefox should have started in the upper left and *stayed* in the upper left. Applications should be grouped by window name too.

Other solutions: Dim tinting of the application windows depending on how much I use them - the more often I switch between two applications in TopDesk, the more yellow / red those two get.

4 comments:

Anonymous said...

I think you're being a bit harsh when you say that a user would have no idea where their window went. The whole point of TopDesk having animation is so you can track where the windows are going. If the animations too fast for you to track the windows, slow it down, you'll only add around a second to the total window switching time. If you've got anywhere under 15-20 windows open, you're going to be able to find you app in *seconds*, and if you've got any more windows than that there's no way you're going to be able to remember all of their positions anyway.

The clock-face layout is a smart idea and could certainly be implemented in TopDesk, but the major requirement you've got for it just isn't doable.

Again, as I explained in the last post, there's a fundamental difference between using IE7 or the Firefox equivalents and TopDesk, in that their tabs don't change order, while windows are always changing order (and position and size). Unless you were to put advanced AI or require a hell of a lot of configuration (e.g. you specify that Firefox is always in the top left of the screen*), there's not really any way to keep windows in the same spot.

There's a mass of literature on this subject, and at the moment spatial tiling ala Expose and TopDesk is the "best effort" in the field. We're not averse to tackling hard problems (wait until you see what's in v1.4.1), but at the moment there's no solution out there that we've found. Feel free to prove us wrong though, we're always on the look out for ways to make TopDesk better :).

* sounds easy and doable for one application, but you'd have to do it for *every single application* or the whole thing would fall down.

Dan said...

In psuedocode...

Get all windows.

Load previous coordinates [window.coordHistory].

Roughly sort into circle [get x, y, w, h; establish center of thumbnail, shift thumbnail to be located on a circular line; you can use highschool level math (think unit circles & a^2 + b^2 = c^2!) to work out the best spots to spread everything out...].

Iterate through all windows. Get random sibling. If sibling is closer to average of all previous(x,y), swap x&y. [window.coordHistory.mean()]

Result:
As a window (A) tries to regain a position in the "upper left" more and more, it tends to 'stick'.


As for the grouping:
if window.coordHistory.length == 0, findSibilingBySoundex(), insertIntoCollection, repaint.

It strikes me that your main issue is getting and taking the screenshots - taint memory friendly perhaps. Setting fixed size for the thumbnails would help make it feel slicker.

Surely topview can monitor the windows that are open or at least uniquely identify each one in some fashion...

As for being a bit harsh, nonsense! I *am* the user, and I was clueless!

Anonymous said...

Disregarding the layout and flip pseudo code (I'm suprised you felt that you needed to explain it to me), using the previous position doesn't work in real life.

A suprising amount of windows are closed and opened during a normal session, so after a couple of minutes of adding/removing windows and then sorting on their position, the windows will be all over the place.

I know it seems simple, but we thought the same thing 2 years ago when development on TopDesk started (it's been out 1.5 years). TopDesks development is littered with discarded layout models, and what you see in the application today are what we found to be the best compromise available. I'm in no way trying to dimiss your ideas or arguments, but it really is harder than it seems. If you're still unconvinced, it's pretty easy to code up a prototype layout framework - you don't need to use window images, just coloured rectangles. Something like that can be done up i a weekend, and if you're interested in a unique learning experience I suggest you try it :).

Retrieving window images is a non-issue, there's a standard Windows function call (although you have to live with and workaround it's bugs), as is monitoring open windows (this is what TopDesk does already, and again, it's a standard Windows call). Memory usage is just something you have to learn to live with: you can either compress images and take a speed hit, or use uncompressed images and take a memory hit (TopDesk can be tweaked to do both). Using scaled down images isn't worth it - it kills the experience and makes it much harder to recognise windows. A hefty chunk of memory is $50 nowadays, so asking people to upgrade (and potentially losing customers) is a much better option than spending a couple of years coming up with the best engineering solution (at which point everyone has loads of memory and/or Windows Vista).

Once you've got a flexible rendering and animation engine up and running, the bulk of the work is laying out the windows and tweaking how the application responds to user input. Everything else is just moving a rectangle from one point in 3D space to another point.

I'm enjoying this discussion,and would like to continue it, so please don't infer from anything I say that I'm dimissing your layout idea. It's just that we've "been-there-done-that", and, like most things, it's not as easy as you'd initially think (afterall, if it was, and all boiled down to the pseudo code you presented, why wouldn't we "just-do-it(tm)"? :)

Regarding being a bit harsh, yes, you are a user, but try and think of your issue in laymans terms. The problem boils down to "it takes me a second longer to switch to another window". Extermely annoying for you, yes, and something we'd like to help you with if at all possible, but non-trivial, given that 9 out of 10 times it's still easier to use and faster than Alt-Tab? Well, I'll leave that up to others to decide :).

Offbeatmammal said...

if it was easy, or even desirable I suspect Expose on the Mac would do it...

I like TopDesk and it's solution to the problem - because it works like Expose (not wanting to go down the "that's how Apple do it, so it must be right..." path) which was my first experience of this way of navigating so it's comfortable.

Even with a lot of active windows they're mostly recognisable enough to find what I want when the TopDesk view opens without having to think too much.

I kinda like the clock layout idea (perhaps sorted alphabetically by app) but I suspect as in Mind Mapping attempting to enforce positional meaning would be counter productive when compared to flexability