Eric Raymond : Der Luxus der Unwissenheit : Eine Open-Source-Horrorgeschichte.

Übersetzung von Andreas ‘Alrik Fassbauer’ Krämer. Anmerkungen in eckigen Klammern [ ].
[ Anmerkung : Zum besseren Verständnis wurden Systembefehle meistens übersetzt; dabei ist zu beachten, daß der Übersetzer das besprochene System nicht aus eigener Anschauung kennt. Zudem wurde die deutsche Höflichkeitsform des Siezens durch ein Duzen ersetzt.]

Ich bin gerade durch mit der Erfahrung, CUPS, das Common Unix Printing System, zu konfigurieren. Es zeigte sich, daß dies eine Lektion wie aus dem Lehrbuch war, zeigend, warum nicht technisch versierte Leute von Unix schreiend davonlaufen. Das alles ist umso mehr frustrierend, da da die Entwickler von CUPS offensichtlich hart daran gearbeitet haben, ein zugängliches System herzustellen - aber die besten Intentionen und Anstrengungen führten zu einem System, das, ungeachtet seiner oberflächlichen pseudo - Freundlichkeit so unentdeckbar ist, als ob es in antikem Sanskrit geschrieben worden wäre.

GUI-Werkzeuge und vulominöse Handbücher sind nicht genug. Sie müssen sich Gedanken darüber machen, was der tatsächlicher Benutzer erfährt, wenn er oder sie sich hinsetzt, und tatsächliche Arbeit macht, und Sie müssen darüber vom Standpunkt des Benutzers nachdenken. The CUPS-Leute, trotz ihrer guten Intentionen, haben darin vollkommen versagt. Ich werde dieses Versagen im Detail anatomisieren [sezieren, zergliedern], weil sich darin Lektionen befinden, die andere Open-Source Projekte sehr wohl auch beachten sollten. Der Punkt dieses Essays ist daher nicht, lediglich die CUPS-Leute zu zusammenzustauchen - sondern auch auch all jene Open-Source-Entwickler zusammenzuscheißen, die gleichermaßen gedankenlose Dinge tun, in ihrem größenwahnsinnigen Gedanken, daß ein toll aussehendes UI [UI = „User Interface“ = „Benutzer-Schnittstelle“ ] auch ein gut entworfenes UI ist. Schaue zu und lerne ...

Das Konfigurationsproblem ist simpel. Ich habe eine Desktop-Maschine namens „snark“. Es ist über das Haus-Ethernet verbunden mit der Maschine namens „minx“ meiner Frau Cathy. Minx hat einen LaserJet 6MB am Parallelport angeschlossen. Beide Maschinen fahren Fedora Core 1 und Cathy kann lokal von minx drucken. Ich kann mit ssh von snark aus auf minx zugreifen, also ist das Netzwerk in Ordnung.

Das sollte einfach sein, nicht ? *Hohles Gelächter* Berühmte letzte Worte ...

Zuerst tue ich das, was jeder nicht-technische Benutzer tun würde. Ich gehe auf mein Desktop-Menü und klicke an : System-Einstellungen -> Drucken , dann gebe ich das root - Paßwort in das nun aufpoppende Feld ein. Es zeigt sich ein „Drucker Konfiguration“-Fenster. Ich klicke „neu“. Herauskommt ein Zauberer [ Engl. Wizard -> gemeint ist ein Dialog, der helfenderweise Arbeit abnehmen soll; gemeint ist der im nun folgende „Configuration Wizard“ oder auch „Konfigurations-Zauberer“] , der in großen, freundlichen Buchstaben sagt : „Hinzufügen einer neuen Druckwarteschlange“ [original : „printing queue“]. So weit, so gut. Ich klicke auf „Vorwärts“.

Nun, diejenigen von euch, die intim mit CUPS sind, wissen natürlich längst, daß ich bereits einen grundlegenden Fehler gemacht habe. Ich hätte besser nicht versuchen sollen, eine neue Druckwarteschlange auf snark einzurichten, und sie dann mit dem Server von minx zu verbinden. Stattdessen, falls ich Prinjobs an minx weitergeben wollte, sollte ich mir den Configuration Wizard anschauen, sehen, daß minx Druckwarteschlange bereits dort eingetragen ist, und sie zu snarks Standard machen. Aber nichts im Configuration Wizard weist darauf hin ! Und minx’s Druckwarteschlange wird nicht angezeigt, aus einem Grund, den wir erst später in dieser traurigen Geschichte entdecken werden.

Neues Formular im Fenster, sagend „Name der Warteschlange“ in gleichermaßen großen Buchstaben. Es offeriert einen Standard von „printer“. Ich ändere ihn zu „laserjet“ , weil ich vielleicht eines Tages den antiken Punktmatrixdrucker daran aufhängen möchte, den ich immer noch habe. Ich trage die optionale Kurzbeschreibung „the laser printer“ ein. So weit ist alles gut. Tante Tillie könnte das genausogut machen. Vorwärts ...

Neues Formular. „Typ der Warteschlange“ , sagt es. Da ist ein Drop-Down - Menü. Der Standard ist „lokal verbunden“, was Sinn macht. Als ich auf das Menü klicke, werden mir folgende Alternativen angezeigt :

Networked CUPS (IPP)
Networked Unix (LPD)
Networked Windows (SMB)
Networked Novell (NCP)
Networked JetDirect

Hier ist unsere erste Andeutung von Ärger. Wenn ich Tante Tillie, [die] archetypische nicht-technische Nutzerin wäre, würde ich an diesem Punkt denken : Was um aller Welt bedeutet das ? Und, genauso wichtig, warum muß ich diese Frage beantworten ? Ich habe , nach allem was ich weiß, keine Windows-Maschine in meinem Netzwerk. Oder irgendwelche Netware-Schachteln. Und ich habe sicherlich keine „Networked JetDirect“ bei mir, was auch immer das sein mag.

Wenn die Programmierer auch nur halb so pfiffig wären, was UI - Dinge angeht (wie, zum Beispiel Windows Programmierer) , würden sie die lokale Netzwerk-Nachbarschaft testen, und die unmöglichen Einträge weglassen. Wenn sie wirklich pfiffig wären (wie zum Beispiel Mac Programmierer), würden sie die unmöglichen Werte zwar lassen, sie aber ausgrauen, und damit zeigend, daß, wenn deine Maschine ein bißchen anders konfiguriert wäre, du in der Lage wärst, auf einer Windows Maschine zu drucken, angenommen, du wärst so unglückselig eine zu besitzen.

Aber nein. Statt dessen bekommt Tante Tillie so langsam die Idee, daß diese Software von Geeks geschrieben wurde, die keine Ahnung hatten.

Aber warte ! Hallelujah ! Da ist ein Hilfe-Knopf ! I klicke ihn. Heraus kommt eine nette, illustrierte Seite der Online-Dokumentation. Aber anstelle die Frage zu beantworten, die ich in Gedanken habe, die da lautet „wie wähle ich den richtigen Typ Druckwarteschlange aus ?“ , ist es eine Seite darüber, wie ich einen lokal angeschlossenen Drucker hinzufüge. Das bedeutet, es ist assoziiert (verbunden) mit dem zur Zeit als Standard gewähltem Typ, nicht mit der Tätigkeit, eine Warteschlange auszuwählen. Die Hilfe ist ... nicht hilfreich.

Tante Tillie wird an diesem Punkt aufgeben, nur um in einer weiteren Sitzung von den armseligen UI - Auswahlmöglichkeiten von gutmeinenden Idioten gefoltert zu werden, oder um das ganze Linux-Ding [diese ganze Linux-Sache] fallen zu lassen, und zur alten Windows-Schachtel zurückzukehren. Sie zeigte eine Menge blaugefärbter Fehlermeldungen an [original : „it blue-screened a lot“, eigentlich unübersetzbar; der „Blue Screen“ = „blauer Bildschirm“ ist eine ziemlich häßliche Windows-Fehlermeldung] , aber sie erlaubte ihr zumindest den Luxus der Unwissenheit - sie mußte nicht wissen - oder sich darum kümmern - was ein JetDirect oder ein CUPS sei mochte.

Ich bin nicht unwissend, aber ich habe mein eigenes Äquivalent zu Tante Tillies Problem. Ich weiß, Ich will eine der beiden Top Zwei Methoden, aber ich weiß nicht, welche von beiden. Und ich will nichts von dem Unterschied wissen oder mich damit befassen müssen; ich habe besseres für meinem Gehirn zu tun als mich mit dem Wirrwarr von Sysadmin [Sysadmin = System Administrator] - Details befassen zu müssen. Falls das Werkzeug feststellen kann, daß beide Methoden im lokalen Netz möglich sind (und das sollte nicht allzu schwierig sein, denn beide sind wohlbekannte Ports) , dann sollte es „(empfohlen)“ neben einem [der Einträge] setzen, sodaß ich klicken und weitermachen kann.

Aber neeeiiin. Stattdessen muß ich auf den Hilfebildschirm starren und dabei denken „wo könnte ich etwas Orientierungshilfe dazu finden, und warum dauert das bloß so lange ?“ Während ich meinen furchtbaren Hacker-Jitsu anwende, versuche ich, „Zurück“ [original : „Prev“ = „Previous“, das „Vorherige“; Menüs schreiben meist „zurück“ und nicht „Vorheriges“] zu klicken. Ich bekomme eine Seite über die Druckerkonfiguration, welche die verschiedenen Warteschlangentypen beschreibt, aber immer noch keine Orientierung darüber, wie ich zwischen CUPS und LPS wähle.

Offensichtlich fiel es den Entwicklern von CUPS niemals ein, daß dies ein Problem sein könnte, weder für Tante Tillie noch für den mehr technisch Versierten. Es gibt keinen großen, freundlichen Knopf neben dem „Wählen Sie einen Warteschlangentyp“ der sagt „Wie man einen Warteschlangentyp auswählt“. Dieses Fehlen ist ein ernster Konstruktionsfehler im UI Design, der den oberflächlichen Schick des Konfigurations-Zauberers in eine Stichelei, einen Hohn verwandelt.

Ein weiteres Mal meinen gefürchteten Hacker-Jitsu anwendend, schätze ich ab, und wähle „CUPS (IPP)“ aus. Nun kommt ein Formular, daß das UI von einem Hohn in etwas Schlimmeres verwandelt. Es präsentiert zwei Textfelder. Eines ist „Server“ benannt und leer. Das andere ist „Pfad“ benannt und enthält die Zeichenkette „/drucker/warteschlange1“ [original : „/printers/queue1“].

Falls Tante Tillie immernoch weitergemacht hätte, würde sie genau jetzt eine etwas undamenhafte Sprache benutzen. Und mit gutem Grund, denn dies ist eine Bruchlandung, ein vollständiges Desaster. Um zu verstehen warum, mußt du für einen Moment aufhören, wie ein Hacker zu denken. Stopfe dein Hirn, falls du kannst, voll mit den Inhalten eines Benutzers ohne Ahnung. Jemand, der nicht nur nicht weiß, was eine Zeichenkette wie „/drucker/warteschlange1“ bedeuten könnte, sondern der es auch nicht wissen will, und nicht der Meinung ist, daß das etwas ist, was er oder sie lernen sollte.

Von Tante Tillies Standpunkt aus ist es sinnig, daß das Gastgeber-Feld leer ist [gemeint ist das Feld mit der Benennung „server“]; schließlich hat sie ja keinen ausgewählt. Aber die Tatsache, daß das „Pfad“-Feld ausgefüllt ist, ist schlimmer als sinnlos, es ist tatsächlich sogar schädlich - weil sie nicht weiß, was es bedeutet, und weil sie nicht weiß, wie sie feststellen könnte, ob dieser Standardeintrag zulässig wäre, wenn sie den Server-Namen ausgefüllt hätte. Sie ist an einem toten Ende angelangt.

Was sie an diesem Punkt sehen sollte ist eines von zwei Dingen : Entweder eine Liste von CUPS Warteschlangen, die im lokalen Netzwerk verfügbar sind, oder eine große, fette Botschaft, die da sagt : „Ich kann keine lokal verfügbaren Warteschlangen sehen; es könnte sein, daß Sie einen Druckserver aufsetzen müssen“. Die Eingabeaufforderung [original : „prompt“] für server/pfad , die hier präsentiert wird, ist eine Steinmauer; nicht nur gibt sie Tante Tillie keinen Anhaltspunkt, wie sie weitermachen könnte, sondern es ist genauso undurchsichtig für einen erfahrenen Hacker wie mich.

Das Meta-Problem hier ist, daß der Konfigurations-Zauberer alle diese bewährten und erprobten Rituale abhandelt (GUI [Graphical User Interface = graphische Benutzer-Schnittstelle] mit standardisierten Klicky-Buttons, Hilfe, die in einem Browser aufpoppt etc. etc.) , aber nicht die zentralen Attribute hat, die diese erfüllen sollten : Entdeckbarkeit. Das heißt, jene Qualität, zu der jeder Punkt im Interface [Benutzerschnittstelle] , der Eingabeaufforderungen und Aktionen beinhaltet, verbunden ist, von welchen man lernen kann, was als nächstes zu tun ist.
Hat dein Projekt diese Qualität ?

In der Tat ist das „Warteschlangen-Typ“-Formular ein nicht-entdeckbares Interface - es führt dich hinunter in eine blinde Allee des Versuchens, eine lokale Warteschlange einzurichten, die auf einen entfernten Server hinweist, von dem du weißt, daß er drucken kann - wie die Maschine meiner Frau Cathy - um dann zu fluchen, weil deine Testdrucke versagen. Das ist exakt, was mir als nächstes passierte.

Ich tippte „minx.thyrsus.com“ in das Server-Feld, in der Annahme, daß „/drucker/warteschlange1“ eine sichere Standardeinstellung sei, die andere CUPS - Instanzen honorieren würden. Ich ging durch die Hersteller- und Modell-Anzeigen und bestätigte die Warteschlangen-Einrichtung. Der Zauberer zeigte ein Fenster an, das mir den Druck einer Testseite anbot; ich sagte ihm ja ... und nichts passierte. Tatsächlich passierte noch schlimmeres als Nichts; das Fenster der Einstellung zeigte eine Botschaft an, die da sagte „Der Netzwerk-Gastgeber „minx.thyrsus.com“ ist beschäftigt, werde in 30 Sekunden nochmal versuchen“ [original : „Network host „minx.thyrsus.com“ is busy, will retry in 0 seconds“] , und dann hing er sich (durch alle Erscheinungsformen hindurch [original : „(to all appearances)“ ) auf.

Wir sind nun tief im auswegslosen Sumpf , hergestellt von gedankenlosem, schwachem UI - Design - voll mit Glitzer und GUI, umhüllt von vollkommener Bedeutungslosigkeit [original : „signifying nothing“ ; ich habe mir erlaubt, die Übersetzung etwas zu Übertreiben]. Das ist der exakte Punkt, an dem ich entschied, darüber eine Beschwerde zu schreiben, und begann, mir Notizen zu machen.

Die „Warteschlangen Typ“ - Anzeige gab mir keinen Hinweis auf die Existenz, oder Nichtexistenz, oder den Status der gemeinsamen Nutzbarkeit irgendeiner Warteschlange in meinem Netzwerk. Ich habe zwei weitere Maschinen im Haus, beide laufen mit komplettem Fedora Core und sind beide mit dem Ethernet verbunden, und die wirklich richtige Sache wäre jetzt eine Botschaft gewesen, die gesagt hätte : „Ich sehe CUPS Dämonen [original : „demons“ , das sind unter Linux und ähnlichen Betriebssystemen eine Form von Diensten oder Hintergrundprozessen] , die auf minx, golux und grelber laufen, aber es sind keine Warteschlangen zugänglich.“ mit einem Zeiger zur CUPS Dokumentation.

Wieder einmal war die Hilfe, die ich bekam, nicht wirklich hilfreich. Die Seite, die mit „Vernetzter CUPS (IPP) Drucker“ verbunden ist, sagt : „Jeder vernetzte IPP Drucker, der über die CUPS-Suche [original : „found via CUPS browsing“, wobei „browsing“ eigentlich „blättern“ , „durchblättern“ oder „abgrasen“ heißt] gefunden worden ist , erscheint im Hauptfenster unter der Kategorie gefundene Warteschlangen [original : „Browsed queues“]. Oh, wirklich ? In was für einem „Hauptfenster“ wäre das dann ? Und es gibt mir keinerlei Hinweis darauf, was zu tun ist, falls ich überhaupt keine gefundene Warteschlangen - Kategorie sehe, was besonders verrückt ist, da dies der ja Normalfall ist, der Standard nach einer neuen Installation !

Nichts davon ist Raketen-Wissenschaft. Das Problem ist nicht, daß die technischen Dinge schwierig zu bewerkstelligen sind; von CUPS wird ja bereits angenommen, daß es das Entdecken von gemeinsam nutzbaren Warteschlangen als Eigenschaft hat. Das Problem ist, daß die Einstellung der Designer von CUPS falsch war. Sie gingen niemals aus ihren Annahmen heraus. Sie machten sich nie die Mühe, einmal zu vergessen was sie wußten und sich einmal an das System zu setzen wie ein dummen Benutzer, der es noch niemals zuvor gesehen hat - und sie beobachteten niemals einen dummen Benutzer in Aktion !

CUPS ist nicht alleine. Diese Art von Schwäche ist endemisch im Open-Source-Land. Und das ist es, was Microsoft im Geschäft hält - weil bei der Göttin, sie mögen einen Mist an unsicherer, überteuerter, kitschiger Software schreiben, aber auf diesem einen Gebiet ist ihr halb-dummköpfiges, semi-kompetentes Bestes ist einen Grad an Größe besser als das, was wir normalerweise zu schaffen vermögen.

Aber für den Moment genug von den verordneten Beschwerden. Ich werde euch erzählen, welche Anstrengungen ich unternahm, um mich mit Hilfe von Nachforschungen aus diesem Loch zu befreien, weil es dabei noch einige weitere Lektionen zu lernen gibt. Zuerst schaute ich mich nach Dokumentation um. Ich machte dies in Unix-hackerischer Weise, wobei ich die Ausgabe von allem, was in /usr/share/doc fand und das irgendwie mit CUPS verbunden war, nach „lokalisieren von Druckern“ absuchte. Ich fand /usr/share/doc/cups-1.1.19/printers/index.html und feuerte einen Browser darauf ab. Es leitete mich nach http://localhost:631/ um, was okay war, obwohl die Umleitung etwas zu schnell durchgeführt wurde.

Und ich fand mich inmitten einer Webseite, nicht offensichtlich hilfreich für die Fehlersuche meines Problems war. Ich klickte auf den Button „Administration“ in der Hoffnung, daß das Werkzeug dahinter etwas mehr entdeckungsfreudig sein würde, als als die Konfiguration. Ich bekam eine Paßwort-Eingabeaufforderung.

Hallo ? Woher soll ich wissen, was das nun schon wieder bedeuten soll ? Alles was es mir sagt, ist, daß es einen CUPS Login“ will. Ist dies das Gleiche wie ein System-Root-Login, oder gibt es da irgendeine besonders tolle [original : „special funky“] CUPS Identität von der angenommen wird, daß ich von ihr auf telepatischer Weise irgendwie weiß ? Die Eingabeauffordeung dieser Paßwort-Popups ist konfigurierbar; es könnte mir einen Hinweis und einen Zeiger zur Dokumentation gegeben haben. Das tat es nicht.

Wieder einmal, das Thema ist die Abwesenheit von Entdeckungsfähigkeit. Diese Paßwort-Eingabeaufforderung war weniger ein Wegweiser zum weiteren Verständnis des Systems, stattdessen war es eine weitere Steinmauer.

Wenn alles andere Fehlschlägt, gibt es immer noch Google. Ich suchte nach „CUPS printing HOWTO“ und fand einen Link zu „The Linux Printing HOWTO“ - und als ich danach greifen wollte [original : „when I chased it“] , erwies es sich als ein 404 [Anmerkung : Fehlermeldung 404 von Webseiten bedeutet immer, daß eine bestimmte Webseite nicht da ist - aus welchen Gründen auch immer. Hier bedeutet es schlichtweg, daß es „sich in Luft auflöste“]. Nun, das ist möglicherweise nicht der Fehler der CUPS Designer; ich werfe es hier nur deshalb ein, um zu zeigen, daß ich bereits verschaukelt, dem Blues nahe und tätowiert fühlte. Die glänzende Undurchsichtbarkeit von CUPS hatte mich, wie es schien, besiegt mit etwas, was eine triviale 30-Minuten-Aufgabe schien.

Wie auch immer, ich hielt durch. Mein nächster Schritt war, mich über ssh mit minx zu verbinden, und dort zu sehen, ob ich den Namen der [dort] aktiven CUPS Warteschlange entdecken könnte. Vielleicht, so dachte ich, könnte ich das herausfinden, und mich anschließend wieder mit dem Konfigurations-Zauberer auf snark in Verbindung setzen, den Namen dort eintragen, und alles würde laufen. Aber Ach ! es hatte nicht sollen sein. Die zwei Kommandos, die möglicherweise relevant waren, waren lpinfo(8) und lpadmin, und du kannst von keinem von beiden eine Liste an Namen von Warteschlangen bekommen. Die Ausgabe von „lpinfo -v“ sah so aus, als sollte es nützlich sein, aber ich hatte keine Idee, wie ich diese URL - Namen auf Warteschlangennamen abbilden konnte.

Wir sind jetzt in der Echtzeit [original : „real time“ - „wirkliche Zeit“]. Ich schreibe diese Beschwerde während ich einen Pfad aus diesem Irrgarten herauszufinden suche. Ich lese das CUPS Systemadministrator Handbuch und es behauptet : „CUPS unterstützt die automatische Klient [original : „client“] Konfiguration von Druckern im gleichen Subnetz [Untergeordnetes Netz]. Um Drucker im gleichen Subnetz zu konfigurieren, tue nichts. Jeder Klient sollte automatisch innerhalb von 30 Sekunden die verfügbaren Drucker sehen. Die Drucker- und Klassen-Listen werden automatisch aktualisiert, wenn Drucker oder Server hinzugefügt oder entfernt werden.“ Nun, das ist sehr nett, aber diese luftige Überzeugung ihrer Ausstellung läßt mich [trotzdem] ohne einen Hinweis zurück, was zu tun ist, wenn die Autokonfiguration nicht arbeitet !

Ich lese das Handbuch, und ich finde eine Referenz zu „BrowseAdress“ und /etc/cups/cupsd.conf , welche mir langsam entblättert, wie die Autokonfiguration eigentlich arbeiten sollte. Es scheint, daß CUPS - Instanzen periodisch Pakete senden [Anmerkung : Mit „Pakete“ sind „Informationspäckchen“ gemeint, die über das Netzwerk gesendet werden] , die ihren Status und weitere Drucker bekannt geben, und daß diese zu einer Adresse senden, um von weiteren CUPS - Instanzen aufgenommen zu werden. Intelligentes Design ! Aber .. . verhackstücke mich mit einer Kettensäge, diese Sendemöglichkeit ist standardmäßig ausgeschaltet - und das Handbuch sagt dir nichts davon !

So, laßt uns das Ganze mal überblicken. Um die nette, benutzerfreundliche Autokonfiguration zum Laufen zu bringen, muß man zuerst eine /etc - Datei bearbeiten. Auf einer anderen Maschine als der, die du gerade ans Laufen bringen willst.Du mußt dir die Kommentare in der Konfigurationsdatei [Anmerkung : Gemeint ist die /etc - Date] ansehen, um zu wissen, was du zuerst tun mußt.

Was für ein wahrhaftig reizender, klassischer Schitzer ! Daß sie die Autokonfigurationsunterstützung ausgestellt haben, ist vom Standpunkt eines Sicherheits-Experten [original : „from a security-engineering point of view“] verständlich. Aber es zu versagen, dies im Administratoren-Handbuch zu erwähnen, und es zu versagen, den Benutzer während des Dialogs mit dem Konfigurations-Zauberers zu warnen, daß arbeitende Drucker möglicherweise nicht sichtbar sind, es sei denn, dein Administrator hat bereits das dazugehörige Ritual an den Gastgebermaschinen [original : „host machines“] der Drucker vollzogen ... das ist gedankenloser Schwachsinn.

Dies Art von Mist ist genau der Grund, warum Linux bisher so viel Probleme damit hatte, nicht-technische Benutzer anzuziehen - und es wird nur weniger entschuldbar, nicht mehr, wenn es von von einer solchen Bootsladung an GUI Zuckerwatten-Candy umgeben ist, das nur noch mehr zur Komplexität beiträgt, anstatt tatsächlich mehr Freundlichkeit zum Benutzer zu bringen.

Ich arbeite eine korrekte Sendeadresse [original : „broadcast adress“] für mein Netzwerk in [die Datei] /etc/cups/cupsd.conf auf minx hinein. Ich bin nicht überrascht, als ich erfahre, daß die cupds(8) man page [Anmerkung : „man pages“ sind spezielle Texte, die als Handbuch oder dessen Erweiterung/Ergänzung dienen] mir nicht sagt, ob der Standard kill -HUP cupsd dazu bringt, die Datei [gemeint ist /etc/cups/cupsd.conf ] neu einzulesen, oder nicht, weil ich bereits an diesem Punkt erwarte, daß die Dokumentation nicht hilfreich sein wird. Ich führe stattdessen/etc/init.d/cups restart aus.

Ich schreibe den letzten Absatz, und gehe zurück zum Konfigurations-Zauberer. Ein bißchen herumprobieren darin zeigt mir ein Objekt „Aktion - Gemeinsame Nutzung“ [original : „ an Action -> Sharing item“]. Als ich denn OK Button klicke, erscheint „Gefundene Warteschlangen“ [original : „Browsed queues“] im Zauberer-Fenster. Excelsior ! Es scheint, daß nun snark eine von minx gesendete Konfiigurations-Information empfängt. Und, ganz sicher, als ich „suche Warteschlangen“ [original : „browse queues“] anklicke, zeigt sich ein LaserJet 6 als Gerät. Seltsamerweise ist es als „lp0“ bezeichnet, ohne jeden Hinweis, daß es nicht auf der lokalen Maschine ist.

Ich feuere das Web Interface ab. [Anmerkung : Im Original heißt es : „I fire up the Web Interface.“ . „Abfeuern“ bedeutet in diesem Kontext soviel wie „starten“, und mit „Web Interface“ ist eine Benutzerschnittstelle oder etwas ähnliches gemeint, das im (Internet-)Browser dieser Maschine wie eine Webseite angezeigt wird.] Sicher, es findet den LaserJet 6 auf minx. Aber nicht alles ist Friede, Freude, Eierkuchen [original : „Not everything is goodness.“] Wenn ich versuche, eine Testseite zu drucken, sagt mir ein Popup „Die Verbindung wurde zurückgewiesen als versucht wurde, minx.thyrsus.com:631 zu kontaktieren“.

Ich bin wieder einmal nicht überrascht, als ich lerne, daß sowohl das Benutzerhandbuch als auch das Administratorenhandbuch nichts darüber zu sagen haben, wie man Probleme mit CUPS löst. Das lpr(1) - Interface ist massiv unhilfreich; wenn ich Jobs von snark aus losschicke, scheinen sie in einem schwarzen Loch zu verschwinden.

Zufällig bemerke ich die „Lauschanweisung“ [original: „Listen directive“] in der /etc/cups/cupsd.conf - Datei. „Aha !“ sage ich zu mir selbst, „vielleicht ist das ja wie sendmail, wo du ihm explizit sagen mußt, daß er den IP-Adrressen des Server lauschen soll.“ Ich füge hinzu : "Listen 192.168.1.21" , wobei das letztere minx’s IP.-Adresse ist, starte cupds neu .. und seht her [original: „lo and behold“], mein Test-Job purzelt aus dem Drucker heraus.

Die Sache, die wir beachten sollten, ist, an welcher Stelle wir Tante Tillie zurückgelassen haben. Regel 1 des Schreibens von Software für nicht technisch orientierte Benutzer ist folgende : Wenn sie die Dokumentation lesen müssen, um es benutzen zu können, dann hast du es falsch konstruiert. Das Interface des Programmes sollte alles an Dokumentation sein, die der Benutzer braucht. Du hast den Nicht-Techie vor dem Punkt in dieser Problemlösungssequenz verloren, wo ein Hacker wie ich gerade erst anfing.

In diesem Falle war die Dokumentation passiv aber erheblich irreführend in einem Gebiet, und schädlicherweise still in anderen. Ich mußte letzten Endes meine m4d skillz [“meine m4d Talente“] anwenden, die ich beim Wrestling mit sendmail erlernt hatte, um ein Problem zu lösen, zu dem die CUPS - Dokumentation noch nicht einmal einen Hinweis bot.

Wie ich bereits sagte : Der Punkt dieses Essays ist nicht, besonders auf die CUPS-Leute draufloszuhauen. Sie sind nicht schlechter als tausende anderer Projekte da draußen, und das ist der Punkt. Wir sprechen von Weltherrschaft [Anmerkung: gemeint ist Linux] , aber wir werden es weder haben noch verdienen, bis wir nicht gelernt haben, besser zu sein als dies. Eine Menge besser.

Es geht auch nicht darum, daß es schwieriger sein würde, es besser zu machen. Keines der Änderungen im Verhalten von CUPS oder seiner Dokumentation wären technische Herausforderungen; das Problem ist, daß diese einfachen Dinge nie den Entwicklern in den Sinn kamen, jenen, die jedes Mal eine sehr großen Menge an bereits gelernten Wissens in Spiel bringen, wenn sie [auch nur] ihre Benutzerschnittstellen anschauen. [Anmerkung : Was implizit bedeutet, daß sie bereits wissen, was sich da abspielt, im Gegensatz zu Tante Tillie.]

Daher habe ich hier ein paar Fragen, die du dir stellen solltest, wenn du GUI Applikationen [=Programme] für Linux oder BSD oder was auch immer schreibst :

1. Wie sieht die Software für einen nicht-technischen Benutzer aus, der es noch niemals zuvor gesehen hat ?
2. Gibt es irgendeine Anzeige in meinem GUI, die ein totes Ende darstellt, ohne weitere Führung ins System hinein ?
3. Die Auflage / Anforderung, daß Benutzer die Dokumentation lesen sollen ist ein Zeichen des Versagens des GUI Designs. Hat mein GUI Design versagt ?
4. Für technische Aufgaben, die die Dokumentation voraussetzen, versagen sie es, kritische Standardeinstellungen zu erwähnen ?
5. Heißt mein Projekt das Feedback von nicht-Experten willkommen und reagiere ich darauf ?
6. Und, am wichtigsten ... erlaube ich meinen Benutzern den Luxus der Unwissenheit ?

Quelle (mit weiteren Kommentaren und einem zweiten Teil, der zum Großteil aus Zuschriften besteht) :
http://www.catb.org/~esr/writings/cups-horror.html


When you find a big kettle of crazy, it's best not to stir it.
--Dilbert cartoon

"Interplay.some zombiefied unlife thing going on there" - skavenhorde at RPGWatch