Meinung - Tinos Kolumne
Unmöglicherkeiten - User Interface
Folgendes richtet sich hauptsächlich an Microsoft, aber es betrifft alle User-Interfaces mit denen ich bisher gearbeitet habe.
Szenario:
Dramatisch schwebt der Finger über der Return-Taste um zum richtigen Zeitpunkt eine Nachricht mit OK zu bestätigen. Der Finger senkt sich und man hört - rein geistig - einen Trommelwirbel im Hintergrund, der die Sache noch dramatischer macht.
Da, der Finger schlägt zu, er drückt auf die Return-Taste. Aber was ist das?
Eine Mikrosekunde bevor die Taste gedrückt wurde blitzt es auf dem Bildschirm auf. Irgendein Popup kommt hoch, mit roter Farbe, das uns irgendetwas wichtiges sagen will. Aber außer, dass es rot aufblitzt können wir nichts wahrnehmen, denn dann schlägt die Returntaste zu und bestätigt den OK-Knopf des Popup.
Die Situation ist dann folgende:
Das Szenario ist übrigens nicht erfunden, so etwas ähnliches passiert mir so gut wie jeden Tag, nämlich dass mir irgendein Popup oder irgendeine Anwendung den Focus klaut und dadurch irgendwelche Eingaben von mir an der falschen Stelle landen. Mindestens einmal im Monat verschwindet dadurch irgendein Popup im Nirvana, da es durch die gerade aktive Aktion von mir wieder sang- und klanglos vom Bildschirm verschwindet (manchmal dauert es bis zu 10 Sekunden bis der entsprechende Dschingel vom Popup gespielt wird, was dann besonders "lustig" ist).
Nochmals: Meine Rechner sind gut ausgestattet, gerade mit RAM (1 GB und darüber) und CPU (2 GHz und darüber). Sie haben irrsinnige Resourcen, aber das bedeutet nicht, dass das irgendwo hinten oder vorne für Windows XP ausreichen würde. Windows swappt auch dann aus, wenn es das nicht muss, z. B. wenn man ein paar Terabyte kopiert ist hinterher der Programmspace so gut wie bei 0 angekommen und alles muss wieder reingeladen werden. Wenn währenddessen aber noch heftig auf der Platte Aktion ist (Copy etc.) dann dauert alleine der Aufbau vom Desktop schon mal über 1 Minute, man kann seinen Tee genüßlich austrinken während man dabei zusieht, wie die 7 MB der Hintergrundsgrafik (1600x1400) zeilenweise aus dem Swap wieder herausgekratzt werden.
- Man weiß nicht, was das denn da für ein Popup war das da hochkam, denn es ist ja wegen des Return schneller verschwunden als es auftauchte.
- Die Funktion, die man zum richtigen Zeitpunkt mit Return auslösen wollte, wurde nicht ausgelöst, der Zeitpunkt ist also verstrichen und er wird auch nie wieder kommen, denn die Zeit fließt ja nicht rückwärts.
Genereller Fehler in Benutzer-Interfaces
Focus-Stealing
Der generelle Fehler in einem Benutzer-Interface ist, dass es sich ändern kann ohne das der Benutzer dies veranlasst hat. Besonders schädlich ist dabei das Focus-Stealing, d. h. irgendetwas zu überlagern, sei es ein Klick, ein Tastaturevent oder ein Bildteil. Dies ist deshalb falsch, da es in der Regel vom Anwender nicht erwartet wird. Genau diese Veränderungen sind es, die abgestellt werden müssen.Fehlende Reaktion
Gerade bei Windows ist es inzwischen besonders schlimm. Man hat einen sehr gut mit RAM ausgestatteten Rechner (2 GB oder mehr) und trotzdem reagiert das User-Interface träge bis gar nicht, weil die Maschine erst einige 100 MB in den Speicher hiefen will bevor sie eine Reaktion zeigt. Verbunden mit dem vorherigen bedeutet das: Wenn eine Anwendung keine Reaktion zeigt dann muss das User-Interface eingreifen und eine Reaktion erzwingen, so dass der Anwender feststellen kann, dass seine Aktion ein Ergebnis zeigte. Die einzige Art der Reaktion die ich mir vorstellen kann ist die, ein Popup zu bringen das erklärt, dass die Aktion verzögert wird weil die Anwendung nicht reagiert (z. B. weil sie ausgepaget wurde und es noch 10s dauert bis die Daten wieder da sind, was inzwischen unter Windows keine Seltenheit ist). Aber das Popup wäre ein "Focus Stealing", weshalb dieses nur unmittelbar nach einem Click etc. passiert, also immer nur unmittelbar danach nachdem der Anwender etwas veranlasst hat. Somit darf es maximal 0,1s dauern bis die Reaktion eintritt, danach muss das User-Interface einen entsprechenden Hinweis anzeigen.Fehlerbehebung
Ich bin dafür, dass es in User-Interfaces genau 2 Methoden gibt, über den eine Anwendung an den Focus kommt:- Indem der Anwender den Focus wechselt.
- Über eine "Tray-Anwendung" (also einen Standardbereich im Bildschirm) über die die Anwendung den Focus-Request absetzen kann. Dies sollte bei den meisten Aktionen implizit sein, d. h. wenn eine Alert-Box kommt, wird diese - statt dargestellt zu werden - an die Tray-Anwendung geschickt die diesen Popup dann entweder anzeigt oder zurückhält bis der Anwender die Muße hat sich den Popup reinzuzuiehen. Das gilt übrigens gleichermaßen für die Vordergrundsapplikation wie auch die Hintergrundsapplikation.
Ich persönlich bin daran gescheitert, meiner Monitoring-Applikation gelingt es so nicht einmal im Katastrophenfall, ihr Warnfenster einzublenden, bevor das Unglück einschlägt, da Windows XP dies nicht mehr zulässt ohne dass man es vergewaltigt.
Hingegen nervt Notes und der Virenscanner selbst bei irgendwelchen totalen Trivialitäten dadurch, dass sie einem den Focus klauen, und ich habe noch nicht herausgefunden wie man es ihnen abgewöhnen kann, da es dafür keine Option im Windows gibt. Ich kann die Benachrichtigung die den Fokus klaut zwar vollständig abdrehen, aber genau das will ich ja auch nicht. Ich will informiert werden ohne dabei belästigt zu werden. Genau das sieht Microsoft in seinem UI nicht vor.
Es gibt übrigens noch eine dritte Variante wie der Focus geklaut werden kann: Vom Betriebssystem. Indem es etwas einblendet, z. B. einen Bluescreen oder die o. g. Nachricht dass eine Applikation nicht reagiert (das muss es aber immer sofort tun, also mit maximal 0,1s Verzögerung zu dem Event, danach muss es Stille schweigen!).
Übrigens halte ich 0,1s für extrem lang, länger darf das auf keinen Fall sein. Besser wäre 0,01s. Der Grund ist, dass der Mensch die Änderung ja noch wahrnehmen muss, das geschieht mit etwas Verzögerung, weshalb 0,1s eigentlich schon viel zu lang ist.
Umgang mit der Methode
Meine Idee wäre also:- Die Focus-Programmierung verschwindet generell. Innerhalb eines Fensters kann der Focus noch bewegt werden, aber nicht mehr außerhalb des Fensters. Focus follows Mouse ist möglich, aber das ist ein Setting vom Anwender, d. h. eine Mausbewegung ist dann eine Aktion die die Veränderung des Focus zwischen Fenstern zulässt.
- Eine Focusumschaltung ist nur bis 0,1s nach Auslösen einer Interfaceaktion möglich, wobei diese Aktion vom Benutzer ausgehen muss (in der Regel: Mausklick oder eine Interfaceaktion wie Return, ESC, etc.). Der Focus geht also nicht "ans alte Fenster" zurück wenn ein Fenster von der Applikation geschlossen wird. Nein, der Focus bleibt weg bis er vom Benutzer wieder aufgenommen wird. Klickt der Anwender aber auf den Schließen-Knopf, dann verschwindet das aktuelle Fenster und das darunterliegende wird aktiviert. (Dauert das Schließen länger als 0,1s dann wird der Focus nicht umgeschaltet!)
- Es gibt eine Focus-Taste, das ist die Windows-Taste die heute das Startmenü anzeigt. Diese nimmt den nächsten Focus auf. Ist kein nächster Focus da, dann wird eine Standardaktion ausgeführt, z. B. das Startmenü erscheint. Das alles steuert die Tray-Anwendung als Teil des Window-Managers.
- Die Tray-Anwendung kann konfiguriert werden, ob sie den Focus-Steal zulässt oder nicht. D. h. Anwendungen können ihr Popup auch dann durchbringen, wenn sie im Hintergrund sind. Das ist z. B. für einen bequemen Online-Chat wichtig. In dem Fall könnte man surfen bis der Online-Chat sich wieder meldet, ohne etwas zu verpassen.
- Es kann noch einen Bildschirmbereich geben (der dem heutigen Desktop entspricht), in dem die ganzen "Focus-Stealers" angezeigt werden, d. h. die Popups usw. Dieser Bereich ist sollte als "Viewport" eingerichtet sein, d. h. man kann direkt auf diesem die jeweiligen Dinge sehen die gerade hochpoppen, und man kann sie dort auch wegklicken. Nur stören sie auf dem "neuen Desktop" nicht. Wer will, kann dann ja in diesem Bereich arbeiten, dann hat er genau dasselbe bescheuerte Verhalten wie beim heutigen Desktop.
- Ich möchte das Desktop in einen "Viewport" verbannt wissen, in dem es dann angezeigt werden kann, aber in dem man mit ihm nicht interagieren muss.
- Stattdessen hat man einen Vordergrundsbereich, in dem sich das derzeit im Vordergrund befindliche Fenster sich aufhält, so dass dieses nur umgeschaltet werden kann, wenn der Benutzer dies ausdrücklich und explizit zulässt.
- Leider lässt sich das ohne Mithilfe des Betriebssystems nicht erreichen (unter X-Window geht das sogar wahrscheinlich ziemlich leicht, nur bei Windows wird das schwer funktionieren), da die Applikationen die neue Tray-Anwendung nicht kennen.
- Außerdem fehlt noch die Zeitüberwachung (aber auch diese läßt sich wohlmöglich sehr effizient unter X-Window ins Library einpflegen) bei der Reaktion auf Events.