Mock!
Sonntag, 9. Mai 2010, 19:48 Uhr
Abgelegt unter: Coding,Dies&Das,Web-Funde | Tags: , ,

Da plant man eine Applikation für den Kunden, die Mutter, den Hamster oder einen anderen Stakeholder und will diesem dann einen groben Entwurf zeigen. Wie präsentiert man diesen Entwurf am besten, wenn man trotzdem betonen will, dass das ganze noch in der Planungsphase ist und Änderungswünsche willkommen (sogar erwünscht) sind?

Am besten, wenn man den Entwurf nicht mit echten Fenstern macht, sondern direkt mit der Hand. Fördert ohnehin die Phantasie. Und wenn man das nicht extra mit der Hand machen will, kann man das sogar am Computer machen.



8 goldene Regeln des Dialogdesigns
Mittwoch, 21. Januar 2009, 0:44 Uhr
Abgelegt unter: Anliegen,Coding,My Life | Tags: , , , ,

Schon wieder interessantes vom Lernstoff – diesmal war’s Informatik. Zu meiner Schande muss ich gestehen, dass ich den Urheber dieser acht goldenen Regeln für interaktive Systeme nicht kannte. Diesen Fehler habe ich mittlerweile behoben: die besagten Regeln sind von Ben Shneiderman, einem der ganz Großen, was die Forschung an der Schnittstelle zwischen Menschen und Computern angeht.

Shneiderman stellt Forderungen, die man beachten sollte, wenn man eine Benutzerschnittstelle kreiert, damit der Benutzer wohlfühlt, der sich normalerweise nicht dafür interessiert welche Pointer nun auf welche Arrays zeigen.


Konsistenz

in ähnlichen Situationen sollten ähnliche Ziele immer auf gleichartige Weise erreicht werden. Beispiele dafür sind die Fensterleiste, in der sich kleine Kästen zum schließen und ändern der Fenstergröße finden, aber auch ganz „banale, alltägliche“ Dinge wie Notausgangsschilder und Türgriffe. Wenn du einen siehst, weißt du, wie du ihn benutzt und was er bewirkt.

Diese Konsistenz kann allerdings auch bewusst durchbrochen werden, wenn z.B. besondere Aufmerksamkeit erforderlich ist.

Abkürzungen

Wenn ich eine Datei immer wieder speichere, werde ich nicht im Datei-Menü „Speichern unter…“ auswählen und den alten Dateinamen nach Bestätigung überschreiben. Ich weiß genau, was ich will und das ist auch nichts exotisches, also gibt es einen Shortcut Strg+S oder auch ein Symbol, das mir den langen Weg erspart.

Feedback

Wenn ich eine Datei auf dem Drucker 2 Zimmer weiter ausdrucke, erscheint in meiner Taskleiste ein kleines Drucker-Symbol, damit ich nicht extra rüberlaufen muss um zu sehen, ob der Drucker was macht. Wenn ich auf ein Icon zum starten eines Programmes klicke, sehe ich eine Sanduhr, die mir signalisiert, dass der Computer meine Aufforderung vernommen hat und entsprechend reagiert. Wenn eine Aktion mehr als 2 Sekunden braucht, muss der Benutzer informiert werden, dass dran gearbeitet wird, sonst vermutet er einen Fehler.

abgeschlossene Dialoge

Aktionssequenzen sollten einen Beginn, eine Mitte und ein Ende haben. Ein Benutzer will wissen, „wie weit“ er schon ist. Das gilt für Installationsroutinen, bei einem Web-Shop (bin ich noch eingeloggt? Ist die Bestellung schon abgeschickt?), bei Umfragen oder mittels Fortschrittsbalken bei Kopiervorgängen etc.

Fehlervermeidung

Keiner macht gern Fehler, also sollte man es möglichst schwierig schwierig machen, Fehler zu bewirken. Bevor eine Datei (möglicherweise unbeabsichtigt) überschrieben wird, fragt man lieber nochmal nach. Bevor ein Dokument ungespeichert geschlossen wird, bietet man ein Speichern an. Man erstellt Menüs, statt ausformulierte Befehle zu erwarten und versteckt Optionen, die bei momentanen Einstellungen ohnehin nicht gemeint sind.

UNDO

Was hab ich vorhin gemacht? Wo ist der Zurück-Button? Diese Funktion wird von Seiten der Programmierer sehr oft unterschätzt.

Mein Dozent hat zu dieser Funktion von einem Zeitreise-Effekt erzählt. Angenommen du hast einen großen Text geschrieben und später verworfen. Du löschst diesen Text und schreibst etwas anderes, was dir besser gefällt. Da passt aber eine Passage aus dem alten Text sehr gut rein. Du drückst Undo so lange, bis du die Stelle wieder vor dir hast, kopierst sie. Dann drückst du Redo, bis du wieder bei deinem aktuellen Stand angelangt bist, um dort den Inhalt aus der Zwischenablage einzufügen.

alles unter Kontrolle

Der Benutzer muss ständig das Gefühl haben, die Kontrolle über das Programm zu haben. Gib’s zu: nichts beunruhigt dich so sehr, wie wenn du auf einen nichtssagenden OK-Button klickst und dann gehen zig Fenster auf, die sagen, dass irgendwas gelöscht oder verändert wird, von dem du noch nie was gehört hast und du hast keine Möglichkeit, das auch nur abzubrechen.

  • Benutzer sollten das Gefühl haben, die Kontrolle über das System zu haben
  • Benutzer sollten Aktionen initiieren (Initiator, nicht Reagierer)
  • Verhindere Non-Kausalität
  • Das System sollte vorhersehbar sein

Kurzzeitgedächtnis

Der durchschnittliche Mensch behält ca. 7 (+/- 2) Dinge im Bewusstsein. Computer können sich wesentlich viel mehr merken, also sollen die das gefälligst auch tun. Das System merke sich also komplexe Einstellungen und speichere diese unter einem einprägrsamen Begriff ab, biete in Eingabefeldern die das letzte mal verwendete Angabe, biete UNDO-Funktionen und kombiniere Einstellungen semantisch zusammengefasst, dass man eben einen Blick auf die oben getätigte Option werfen kann.

Menschen lagern automatisch Dinge aus dem Gedächtnis aus, beispielsweise indem sie beim Puzzlen ähnliche Teile auf einen Haufen legen oder beim Kartenspiel das Blatt auf der Hand sortieren.


Danke Ben Shneiderman, dass Du meine Note gerettet hast und danke Software-Entwickler, wenn Ihr versucht, euch an die acht goldenen Regeln des Dialogdesigns zu halten!

Ich bin schon gespannt auf Kommentare: kennt Ihr die Regeln? Setzt ihr sie um? Oder haltet Ihr die eine oder andere sogar für nutzlos oder gar kontraproduktiv?



ternär
Sonntag, 10. August 2008, 9:40 Uhr
Abgelegt unter: Coding | Tags: , , , , ,

Bei dem Java-Projekt eines Studenten, bei dem ich einen Teil erweitern soll ist mir aufgefallen, dass dieser eine gewisse Vorliebe für ternäre Operatoren hat. Zur Veranschaulichung/Erinnerung:

ergebnis = (a>b)?a:b;

weist ergebnis den größeren wert (a oder b) zu. Es ist prinzipiell dasselbe wie

if(a>b) {

ergebnis = a;

} else {

ergebnis = b;

}

Offengesagt ist das eine Art der Fallunterscheidung, die ich in meinen Java-Vorlesungen nie bewusst mitbekommen habe. Nach ein bis zwei Minuten Google sagt mir außerdem Gallileocomputing:

Der ternäre Operator – auch konditionaler Operator genannt – ist ein Relikt von C/C++.

Das klingt offengesagt nicht unbedingt nach einem Schreibstil, den man nachahmen sollte. Und gerade bei Zeilen wie

element(b?"y":"n");

drängt sich einem die Frage auf, ob das jetzt Java, oder vielleicht doch eher Perl ist.

Einzig bei Feldern von rein statischen Klassen kommt mir der ternäre Operator berechtigt vor:

static final boolean LOCAL = true;
public static File BASE_DIR = (LOCAL)?LOCAL_WEBAPP:new File(new File(CATALINA_HOME, "webapps"), "myApp");

und auch da kann man ihn durch echtes Java ersetzen:

public static File getBaseDir(){

if(LOCAL) {

return LOCAL_WEBAPP;

} else {

return new File(new File(CATALINA_HOME, "webapps"), "myApp");

}

}

Und wieso schreibe ich das jetzt so ausführlich? Weil’s mich in den Fingern juckt, bei einer Handvoll kleiner toString() Methoden mir die ganze if-else-Arbeit zu sparen und stattdessen einfach nur ein paar Fragezeichen und Doppelpunkte zu benutzen 😉



Server lahmlegen für Anfänger
Mittwoch, 18. Juni 2008, 15:52 Uhr
Abgelegt unter: Anliegen,Coding,My Life,Web-Funde | Tags: , , ,

Ein netter Beitrag der Webmaster von Ubuntuusers.de. Bestimmt auch für ungeekige zum schmunzeln 😉

Server lahmlegen für Anfänger

written by beewee, on 07.06.2008 16:44.

Auf der Suche nach dem Fehler, wegen dem der Benutzer dee keinen Dateianhang mehr hochladen konnte, stießen wir kürzlich auf dieses schöne Codestück in der Dateianhangserweiterung für PHP:

<?php

do

{

$this->attach_filename = $new_filename . ‚_‘ .
substr
(rand(), 0, 3) . ‚.‘ .
$this->extension;

}

while (physical_filename_already_stored(
$this
->attach_filename));

?>

Wenn dieser Code ausgeführt wird, überprüft er mit einer Datenbankabfrage, ob ein Dateianhang mit diesem Namen schon existiert und hängt bei Bedarf eine Zufallszahl an. Danach wird die Überprüfung nochmal ausgeführt, solange bis ein Dateiname, der noch nicht existiert, gefunden wurde. Das Problem an der Sache ist, dass die generierte Zufallszahl auf 3 Ziffern verkürzt wird. Wenn nämlich 999 mal ein Bild mit dem gleichen Namen hochgeladen wurde, führt das dazu, dass die Schleife niemals beendet wird, wodurch das Script so lange Datenbankabfragen ausführt, bis der PHP-Prozess die maximale Ausführzeit erreicht.

Und weil Statistiken tollTM sind, hier 2 Graphiken, die zeigen, was auf dem Server passiert ist, wenn jemand ein Bild mit dem Namen Bildschirmfoto.png hochgeladen hat:

Die Auslastung unseres Hauptservers:

Die Anzahl von Datenbankabfragen pro Sekunde:

Wie bei so vielem gilt hier natürlich auch: Mit Inyoka wird alles besser 🙂