rss feed articles all_comments

indeedgeek.de

Florian Eitel

Gedanken über User Interfaces - 2

Ich hasse GUI's

Ich habe den ersten Teil mit einem Versprechen beendet: Mein Rezept für brauchbare Anwendungen. Ich bin irgendwann zu dem Schluss gekommen, dass es ein einfaches Rezept gibt, was allerdings nicht zwangsläufig Heilung verspricht: Minimalismus! MPD kann Musik abspielen – mehr nicht. Durch die einfache Schnittstelle wäre es ein einfaches zusätzliche Funktionen anzuknüpfen.

Ich bringe an der Stelle mal ein Programm welches meines Erachtens genau das tut was es soll: wmii.

wmii ist ein minimaler Windowmanager. Er kann nicht viel: Er lauscht auf gewisse Tastaturkombinationen, ordnet Fenster an, hat eine Statusleiste, kann Fenster mit Tags versehen und hat verschiedene Views.

Als Schnittstelle zu dem Windowmanager wird das Dateisystem verwendet. Möchte man nun zum Beispiel in der Statusleiste etwas anzeigen dann gibt es einen Ordner lbar (left-bar – links ausgerichtet, äquivalent mit rechts) in dem man einfach eine Datei erstellt und da etwas reinschreibt. Dies erscheint dann in einer Box auf der linken Seite der Leiste. Die Boxen sind nach Dateinamen sortiert. Möchte man nun die aktuelle Uhrzeit anzeigen dann macht man sich ein Programm welches einfach jede Sekunde die aktuelle Uhrzeit in eine Datei im ordner lbar schreibt. Und schon erscheint in der Statusleiste die Uhrzeit die sich jede Sekunde updated.

Dies macht es unglaublich flexibel etwas darzustellen. Möchte man anzeigen ob man eine neue Email erhalten hat, schreibt man einfach ein Programm, was das regelmäßig prüft und das Ergebnis in die Datei schreibt. Der Windowmanager zeigt dann einfach nur den Inhalt der Datei an.

Klickt man nun auf diese Box dann registriert der Windowmanager das und schreibt in eine “events”-Datei rein, dass die Box mit der jeweiligen Maustaste gedrückt wurde. Ich kann nun ein Programm schreiben welches die Datei überwacht und kann, sobald jemand mit der linken Maustaste auf die Email Box drückt, den Mail-Client öffnen.

Möchte man ein Programm öffnen, überwacht man einfach wieder “events” auf eine bestimmte Tastenkombination und zeigt dann einfach ein Menü an. Oder man startet gleich ein Programm.

Der Windowmanager treibt es noch weiter. Zum Beispiel kann ich Fenster mit einem Label versehen. So hat mein Firefox Fenster das Label web. In meiner Statusleiste kann ich alle Labels anzeigen lassen. Sobald ich auf ein Label klicke sage ich dem Windowmanager er soll alle Fenster mit dem Label anzeigen. So habe ich mehrere Desktops realisiert wie man es aus anderen Windowmanagern kennt. Nur da ein Fenster auch mehrere Labels haben kann, schlagt das die anderen Manager um längen.

Und das alles mit einer Hand voll Dateien und ein paar simplen Skripten (ganz stimmt das nicht, eigentlich ist es nur ein großes Ruby-Script).

So kann ich mir mein gesamten Windowmanager nach meinen Bedürfnissen zusammen programmieren. Ich kann das aktuelle Lied vom MPD auslesen und darstellen, ich habe einen Daemon programmiert, der alle Notifications von D-Bus ausliest und diese anzeigt, ich kann mein VPN darüber aktivieren… Das geht so weit, dass ich auch die Anordnung der Fenster durch einfaches Bearbeiten der Layout-Dateien verändern kann.

Der Windowmanager ist extrem minimalistisch und obwohl er kaum Features hat ist es einer der mächtigsten die ich getestet habe. Das alles macht ein super Interface welches auf ein paar simple Dateien beruht.

Eventuell erinnert das den ein oder anderen an die UNIX Philosophie everything’s a file . Das stimmt so halb. Unix/Linux ist da aber relativ inkonsequent und schreibt eben nicht alles in eine Datei. Ein Betriebssystem namens Plan9 treibt es hier (angeblich, ich habe es nie zum laufen bekommen) noch viel weiter und steckt wirklich alles (Dateien, Bildschirme, Benutzer, Computer im Netzwerk) in eine Datei. Leider hat es sich dieses einfache und mächtige Interface nicht ganz durchgesetzt.

Dateien haben sicher einige Beschränkungen wie zum Beispiel das ständige Polling (ja, lässt sich umgehen aber das bringt auch wieder Ärger). Das ist auch der Grund warum wmii bzw. plan9 ein spezielles Dateisystem dafür verwenden. Vielleicht wäre es aber auch angebracht über andere Kommunikationswege nachzudenken. (was wmii auch getan hat und zusätzlich einen anderen Weg anbietet). Ich persönlich finde D-Bus sehr interessant wobei das noch zu kompliziert und aufgebläht wirkt.

Ich könnte Megabyte-Weise über wmii schwärmen, aber am besten schaut ihr es euch selbst an. Ich würde viel lieber noch ein anders Konzept erwähnen was nur indirekt mit wmii etwas zu tun hat: Konfiguration

Eigentlich benötigt jedes Programm Konfiguration. Oftmals wird dies über tonnenweise Auswahldialoge und Schaltflächen realisiert. Ich finde eine ordentliche Konfigurationsdatei viel angenehmer da man hier die Möglichkeit Kommentaren einzufügen und man das ganze übersichtlicher aufbauen kann. Konzepte wie GConf mögen auch ihren Reiz haben, allerdings möchte ich auf etwas ganz anders kommen: Programme als Konfiguration. Manche Programme bieten es an Schleifen oder Bedingungen in Konfigurationsdateien zu verwenden. Oder gehen sogar soweit, dass man eine volle Programmiersprache verwenden kann. Dies ist nicht nur für den Entwickler einfach (der braucht nur die Konfigurationsdatei zu inkludieren) sondern bietet dem Nutzer eine unglaubliche Mächtigkeit. Auf der anderen Seite wenn man wie zum Beispiel wmii eine ansprechende Schnittstelle bereit stellt benötigt man erst gar keine Konfiguration mehr.

Nun haben wir einen kompletten Rundumschlag hinter uns. Eigentlich hat das, wie im ersten Teil schon erwähnt, nichts mit GUI’s an sich zu tun. Für mich fallen aber diese gerade negativ in den genannten Punkten auf. CLI-Programm sind per Design schmal und bieten zumindest über STDIN und STDOUT eine Art Interface. Zudem ist die Interaktion zwischen den Programmen einfach nur Programmierung. Ich weiß GUI Programme können nicht so mächtig sein, allerdings haben sie andere Vorteile (und wenn es nur Bilder anzeigen ist). Gerade im Linux Umfeld habe ich das Gefühl ein Trend zu spüren zwischen Protokoll und View zu unterscheiden. Hoffen wir, dass sich dies endgültig durchsetzt.

Comments:

(howto comment?)