Rewriting pixels to add new features to closed-source software
cs.washington.edu
cs.washington.edu
UI researchers can't easily add new features designed to make software easy to use to existing software. This is a particular problem with closed source software. "Prefab" is a tool that looks at the pixels on the display and infers what the underlying UI widgets are. Once this is done, additional features can be retrospectively added. This functionality is platform independent, and is demonstrated to run on YouTube videos (Flash), Mac, and PC.
Examples of functionality that can be added:
"Bubble cursor" - highlighting of the nearest UI element to the cursor as if the hit area of the cursor dynamically increased to the nearest element.
Dynamic mouse acceleration change when cursor on a UI element
Animation to indicate state changes in UI elements such as tabs, sliders and checkboxes
Generation of a preview of a multi-parameter space in graphics tools such as GIMP or Photoshop. This works by automatically changing several sliders to affect parameters in a graphics transform and recording the preview image. The results are then dynamically displayed allowing users to view the effects of parameter changes in parallel using a grid of output images.
What's hard is finding out how this impacts current applications which is the whole point of this demo.
I've always felt that mouse "acceleration" undermined that relationship, but at least it was in a way that mapped to the motion of the mouse.
Changing that to include all possible targets en-route to your destination seems almost malicious: I know where I want to move the pointer but other GUI elements in between will try to thwart me!
http://mwomwo.nfshost.com/bubblecursor/bubbles.html
I agree with you that stickiness doesn't sound like a great feature. Clicking the wrong thing also seems like a risk, but that might be better solved by making buttons not do things that you can't undo.
Bubble cursors seems to me like it could definitely be a win.
But your demo confirms for me all my suspicion about bubble cursor. Hang out at the midpoint between three bubbles of all different sizes and it just seems incredibly unintuitive to me which one is highlighted. Yes it makes small things easier to click on (sometimes much easier than gigantic things), but as I said above, I don't think that's a good thing because of all the buttons that have functions that can't be undone. You mentioned making buttons that do not do things that you can't undo, but how would that work in a save dialogue box, or when you've just typed up an angry email you never intended to hit send with?
This story:
http://news.ycombinator.com/item?id=1235081
talks a bit about the points you've made. Basically you put a passive delay in that's long enough for people to cancel. It's not going to work for everything though - sometimes you really do want to start a process immediately.
The biggest benefit comes when you've got a large bit of empty space on one side of an object. That space then becomes clickable. In a world with big monitors it's harder to get easy UI wins by putting important widgets on the side of the screen. You could get a similar effect with these bubble cursors.
Make the bubble max out at 1/2 (or some other fraction) of the distance to the second closest object. That way you have the same enhanced-selection, but you also avoid any contention points, and require that the cursor is still conceivably "close" to the target.
1. The whole idea of teaching a user to accept another programme pretending to be the one they're running, and intercepting all inputs for that I find dangerous.
2. The bubble cursor would be annoying and frustrating, far more often that it would be useful. Have another look at that video, and see just how far the mouse is, often, from the target it's selecting. Especially when it's sometimes over the text of another question. What about cases where you don't want to click anything, you just want to bring that window to the front, or remove focus from the flash video so you can press space to scroll (not pause)?
3. The slowing of the cursor over controls looks the most useful, but would make navigation of your application interface like playing one of those games where your character keeps getting stuck in puddles of honey carelessly left lying about, and slowing dramatically. It'd turn moving your cursor into a game of dodge the gravity wells. Now picture your Mum accidentally moving her mouse into the centre of those six rows of toolbars she has in IE. She'll never be able to get it out again
3. You could simply turn off sticky controls when the mouse is moving quickly. Target acquisition generally has 2 phases, I high speed movement followed by a deceleration phase near the target. Just enable the sticky controls once the mouse speed drops below the appropriate threshold value.
Just my 2c.
This is actually extremely flexible and could be used not just to decorate a user interface, but to provide a programmatic /scripted/ interface into an application that doesn't traditionally provide an API.
The future is bright for post processing programs that modify one programs output in some way. Note greasemonkey that modifies html/dom within a browser, this research which modifies drawn pixels, sikuli which does programmatic image recognition and the new javascript audio research within mozilla which allows one to create and record audio within the browser (http://vocamus.net/dave/?p=974). How will music labels react when it becomes easy to record audio output to mp3 from html5 video within the browser via a javascript library?
But it's only multi-platform in the sense that it can recognize the underlying widgets. I am also concerned on the added complexity of bolting a layer of behaviour on top of software that's unaware of it and was not designed to take it into account.
I also wonder if is it a coincidence that it's research focused on adding a layer of complexity to closed-source software is from Washington.