User aus dem Paralleluniversum

Männer kommen nicht vom Mars und Frauen nicht von der Venus. Aber aus welchem abgelegenen Teil der Galaxis kommen Computer-Programm-Benutzer? Vielleicht kommen die gar nicht aus diesem Universum, sondern aus einem, dessen Realität sich mir nicht offenbart. Wie ich zu so wirren Gedanken komme? Ich arbeite auch in einer Kopfstelle für den Datenaustausch. Dort lese ich gelegentlich das, was ausgetauscht wird. Fachlich geht mich das nichts an und interessiert mich auch nicht, aber wenn ein Fehler auftritt, dann scheint nur ein Programmierer in der Lage zu sein, eine passende Diagnose zu stellen. So auch am x. Februar d.J.

Irgendwann im Laufe meines Arbeitslebens war ich mächtig genervt von all den unterschiedlichen Datenformaten. Ständig musste ich in dicken Büchern oder langen Textdateien forschen, was die Bedeutung dieses oder jenes Bits im Format XYZ war. Mein lieber Babbage! Geht das nicht einfacher?! Dann hat mir jemand von xml erzählt, und mir war klar, dass es eine tolle Sache ist – die Antwort auf meine Frage. Eine Antwort grundsätzlicher Art. Das mag ich. Zugegeben, Binärformate sind effizienter hinsichtlich Speicherplatz. Aber ich bin Programmierer, also faul und xml kommt dem entgegen. Ich liebe xml.

Zurück zum x. Februar. Ich musste ein Austausch-Dokument studieren, um einem Fehler auf die Schliche zu kommen. Im folgenden zeige ich Ausschnitte daraus. Der Fehler ist nicht enthalten, denn um den geht es hier nicht. Ich habe etliche Werte und XML-Tags des Datenschutzes wegen unkenntlich gemacht, aber die zugrunde liegenden Mechanismen sind immer noch erkennbar.

Namen haben lohnt sich nicht, mein Dearling:

Hä?!? Der Vorname ist “Familie”? Das ist Quatsch. Ich weiss, was der User mir sagen will, aber technisch ist das igitt.

Verdammt, ich dachte, der Vorname sei “Familie”. Und der Postbote lacht sich scheckig, wenn er einen so adressierten Brief in die Finger bekommt. Ernsthaft: Es gibt eine zugehörende  Eingabemaske. Diese Maske und der Übertragungsprozess sind fehlerfrei. Wenn man in der Maske “Maria” als Vorname einträgt, dann erscheint das auch genau so in der XML-Datei. Hier hat jemand absichtlich einen Nicht-Vornamen eingegeben.

Weitere Versuche, der Sache nachzugehen, führen mich zum Sachbearbeiter – der muss es doch wissen!

Anruf bei Frau Abcde, Frage nach dem Stand der Dinge. Sie ist nicht zuständig. Sie steht da nur drin, weil sie am wenigsten Email bekommt. Wie bitte?!? Der Sachbearbeiter ist gar nicht der Sachbearbeiter, sondern der Papierkorb?!

Usereingaben ist zu misstrauen. Wir haben Validierungsmechanismen – kodifiziertes Mißtrauen. Die Validierung hat aber Grenzen, beispielsweise kann man kaum Regeln dafür angeben, was ein gültiger Vorname ist. Ich habe von einem Norddeutschen gehört, der “Uke” heisst und bei vielen offiziellen Stellen als “Uwe” verzeichnet ist, weil “Uke” kein gültiger Vorname sei – das führt dann zu Verwechslungen mit seinem Sohn, denn der heißt … Uwe. Für eine gültige Email-Adresse und Telefonnummer kann man wenigstens eine Form finden. Ob diese Form mit plausiblem Inhalt gefüllt ist, kann maschinell nicht ohne weiteres entschieden werden. Ich kann versuchen, die eingegebene Telefonnummer anzurufen, um sie zu validieren – wenn es klingelt, dann auflegen und wenn es nicht klingelt … Dito für die Email-Adresse. Aber will man das?
Kommt ‘drauf an, wer “man” ist. Ein perfektionistischer Datensammler will. Viele andere nicht . Ich finde es beruhigend ab und an die Möglichkeit zu haben, Mumpitz einzugeben. Und ich kann es auch anders herum sehen: Als das obige Datenschema entworfen wurde – von Fachleuten und Technikern – blieben einige Sachverhalte unbeachtet.  Aus welchem Teil der Galaxie kamen die Fachleute und Techniker? Von dort, wo man meint, alles zu wissen und messen zu können? Von dort, wo User keine Rolle spielen? Oder von dort, wo man auch mal fünf gerade sein lassen kann? Es wurden Fakten geschaffen, auf beiden Seiten des Eingabeformulars. In diesem Sinne immer wieder einen Besuch wert ist http://thedailywtf.com/

 

Veröffentlicht unter Allgemein | Kommentare deaktiviert für User aus dem Paralleluniversum

neuer PC

Mein “alter” PC hat mehr als 6 Jahre auf dem Buckel. Zeit für ‘was neues, ‘was schnelleres, größeres. Leise und sparsam soll es sein, für die Sekretärin in mir und schnell mit allem Zipp und Zapp für Matthias den CodeCrunsher. Der Kompromiss ist ein Bauvorschlag aus der c’t 19/2013: Intel Core i5, 16 GB RAM, SSD, HDD, das ganze auf einem Intel-Board mit Haswell-Chipsatz. Das ist zwar etwas teurer als ein Discounter-PC, aber damit habe ich wieder 6 Jahre Ruhe.

Ich schwöre seit Jahren auf Debian, es hat all die Jahre prima funktioniert. Mit dem neuen Board kommt Wheezy 7.3 leider gar nicht klar. Die Netzwerkkarte wird nicht erkannt – das macht die Installation umständlich: egal, installieren muss ich ja nur einmal und ein bisschen Systemadministrator-Hirn-Jogging hält fit. Mein Killer-Argument gegen Wheezy ist der beiliegende X-Server, der es erstens nicht schafft, sich sauber zu beenden und so verhindert, dass der PC ordentlich runtergefahren wird, zweitens ein User-Wechsel nicht vollziehen kann und drittens keinen Blick auf die Konsolen erlaubt – weisser Mann starren auf schwarzen Bildschirm :-( Jetzt gehöre ich zur Gruppe derer, die zu deppert sind, Debian zu konfigurieren – Backports, eigene Kompilate, non-free-Pakete und einen Tag lang im Web recherchieren hat nicht geholfen.

Die Installation von Ubuntu 12.04 war ein milder Frühlingswind. Runterladen, CD brennen, ein bisschen ausprobieren, installieren – das alles war in 90 Minuten erledigt. Danke.

Nun stehe ich vor der Aufgabe, mich an die neue Oberfläche zu gewöhnen. Auf den ersten Blick gefällt Unity mir gut: Geht sparsam mit Bildschirmplatz um und läßt sich gut mit der Tastatur bedienen. Mit wenigen Tastendrücken habe ich zwei Fenster nebeneinander auf dem Monitor – sehr nützlich beim programmieren.

Die bittere Pille: Schon gnome2 konnte ich nicht mit all’ meinen Lieblings-Shortcuts nutzen, bei Unity ist es noch schlimmer. Das hat so weit geführt, dass ich es schnell und mit den Unity-eigenen Bordmitteln geschafft habe, Unity unbrauchbar zu konfigurieren. Zum Glück gibt es den Befehl “unity –reset” – ich bin begeistert.

Beruhigend: Es gibt halt doch einige unveränderliche Wahrheiten. Und vielleicht finden wir irgendwo den Reset-Befehl für den großen Computer, den Douglas Adams beschreibt ;-)

Veröffentlicht unter Allgemein | Verschlagwortet mit , , , , | Kommentare deaktiviert für neuer PC

Schablone statt “switch”

Neulich kam ich zu einem Stück Code, das die Erzeugung einer SEPA-Datei steuert. Der Autor wollte es sich einfach machen – gute Idee – und hat die Erzeugung von “SEPA Credit Transfer” und “SEPA Direct Debit CORE/COR1″ zusammengelegt – schlechte Idee.

Es ist eine schlechte Idee, weil unterschiedliche Aufgaben in unterschiedlichen Klassen erledigt werden sollten. Die oben referenzierte Klasse sieht auf den ersten Blick vernünftig und aufgeräumt aus. Nur getGeneratedXml fällt aus dem Rahmen. Der Autor benutzt die Variable $mode um die beiden Fälle auseinander zu halten, siehe Kommentar in Zeile 103.

Es ist eine schlechte Idee, weil man riskiert, das eine Verfahren zu beschädigen, wenn man an dem anderen Verfahren arbeitet – sei es aus fachlichen Gründen, sei es aus Versehen. Und es ist eine schlechte Idee, weil ein langer Code-Abschnitt unübersichtlich ist und deswegen komplizierter zu warten als ein kurzer.

Wie kommt jemand auf eine solche Idee? Nun, das zu erzeugende XML ist für beide Fälle in vielerlei Hinsicht gleich. Es gibt nur kleine Unterschiede hier und da … ad hoc kommt der Gedanke: also treffe ich eine entsprechende Fallunterscheidung.

Ich denke, dass folgender Aufbau schlauer ist: Erstens gibt es eine abstrakte Klasse SepaXmlCreator, die alle Gemeinsamkeiten enthält und Platzhalter für die Unterschiede hat. Zweitens gibt es eine Klasse SepaXmlCreatorCT, die von SepaXmlCreator erbt und die Platzhalter in der Weise ausfüllt, wie es für den Credit-Transfer spezifisch ist. Drittens gibt es eine Klasse SepaXmlCreatorDDC, die von SepaXmlCreator erbt und die Platzhalter in der Weise ausfüllt, wie es für die Lastschrift spezifisch ist. Man nennt das Muster “Schablone”.

Das Allgemeine und das Besondere, Essenz und Akzidenz. Unterscheiden können. Typisch philosophisch. Frohes Neues Jahr!

Veröffentlicht unter Allgemein | Verschlagwortet mit , | Kommentare deaktiviert für Schablone statt “switch”

Loeliger, Jon: Versionskontrolle mit Git

Loeliger, Jon: Versionkontrolle mit Git. Köln 2010. 338 Seiten, 39,90 Euro.

Immer wenn ein neues Versionskontroll-System im Bazaar zu haben ist brechen quasi-religiöse Debatten los: Heisst es nun “Version” oder “Revision”, welches System geht effizienter mit Speicherplatz um, welches ist schneller, technisch eleganter, welches Mumta verdischt am weilsten? Der Preis für die Benutzung des neuen System ist, dass man von den Erschaffern und Evangelisten eine Predigt über sich ergehen lassen muss. Inhalt ist, wie das neue System grundsätzlich intern arbeitet, welches Verständnis von Versionskontrolle die Erbauer haben und warum das alles viel besser ist als alles vorhergehende – das kommt alle Jahre wieder, seit Jahren, immer wieder aufs neue. Mach’ ‘ne Websuche nach “why subversion is better than cvs” und anderen mit entsprechend sinnvollen Änderungen und Du siehst, was ich meine.

Loeliger macht hier leider keine Ausnahme. Kapitel 1 behandelt die “Geburt” von git – wieder so eine Metapher und dazu eine, bei der ich Gebärneid von Programmierern assoziiere – kann sein, dass Joseph Weizenbaum[1] diese Idee zuerst hatte. Es folgen Kapitel zu Installation und Konfiguration – vernünftiger Aufbau, allerdings werden vor der Konfiguration schon “erste Schritte” getan, und das ist ungeschickt, denn es nötigt Loeliger, “seltsame Fehlermeldungen” zu erklären. Die Kapitel 4 und 5 enthalten die Grundsatzpredigt.

Die Kapitel 6 bis 12 enthalten Ausführungen zur alltäglichen Arbeit: Commits, Branching, Diff und Merge, verändern von Commits, zuletzt die Zusammenarbeit im Team mittels “entfernten Repositories” und die “Repository-Verwaltung”. Die Kapitel 13 bis 16 bedienen Spezialthemen: Patches, Hooks, die Kombination von Projekten und die mögliche Zusammenarbeit von git mit svn.

Sein Buch beschreibt alles ganz haarklein und technisch. Es ist gut, so eine Referenz zu haben, es sind etliche interessante und hilfreiche Details beschrieben. Aber in der alltäglichen Arbeit mit git ist es nur bedingt hilfreich, weil das Finden der relevanten Stelle mühsam ist. Seine Beispiele sind nicht immer durchgängig – das fällt aber erst dann auf, wenn man versucht, den vorgestellten Befehl auf das vermeintlich aktuelle Szenario anzuwenden, und das Ergebnis ein ganz anderes ist.

Beim Thema “Patches” beschreibt Loelinger ausführlich, wie man einen Patch mit Hilfe des Befehls git am anwendet, aber es fehlt eine Beschreibung des Befehls patch. Ok, dies ist ein Buch über git, aber an dieser Stelle ist es zu eingeschränkt, denn git am steht auf Systemen ohne git nicht zur Verfügung, patch aber meistens schon.

Das Buch zeigt Möglichkeiten, aber keine brauchbaren Handlungsanleitungen, keine Best Practices. Als Anfänger im Bereich Versionsverwaltung wünscht man sich vermutlich ein Buch, das unterschiedliche Verfahren darstellt, wie man allein und im Team mit Versionsverwaltung arbeiten kann, wann welches RCS sinnvoll ist, und Rezepte für die normalerweise nötigen Erledigungen. Ein Buch, das anhand der naheliegenden Fragen erklärt und keins, das Features durchhechelt.

Wenn im Alltag die git-Hilfe und Google schnell zum Ziel führen – warum dieses Buch kaufen? Der Tiefe wegen und wegen der Bücherliebhaberei. Online ist ein anderes Git-Buch verfügbar, ebenfalls mit Predigt in Kapitel 1, der Rest ist brauchbar. Ein Online-Buch zur Versionskontrolle mit Subversion erklärt die grundlegenden Konzepte besser.

[1] Habe keine Quelle für diese Behauptung gefunden und “Die Macht der Computer die Ohnmacht der Vernunft” unauffindbar verlegt, bin aber bei der Suche über einen interessanten Artikel gestolpert.

Veröffentlicht unter Allgemein, Bibliographie | Verschlagwortet mit , , | Kommentare deaktiviert für Loeliger, Jon: Versionskontrolle mit Git

Inventur

Zum Jahresende ruft der Chef nach Zusammenfassungen. Meine Aufgabe ist es, Tabellen zusammenzuführen, die als Textdateien vorliegen. Alle Dateien haben einen Namen, anhand dessen sie kategorisiert werden können, und sie liegen alle in einem Verzeichnis.

Die Dateinamen folgen gewissen Mustern. Für dieses Beispiel reicht es aus, zwei unterschiedliche Kategorien zu betachten, weitere lassen sich mit Fleissarbeit hinzufügen.

Das erste Muster ist

bla_[yyyymmdd]_src_[x].txt

Das zweite Muster ist

bla_[yyyymmdd]_src_[x]_xtra.txt

[yyyymmdd] steht für eine 8-stellige Datumsangabe, [x] steht für einen einzelnen beliebigen Buchstaben, die restlichen Zeichen sind buchstäblich zu nehmen.

An jedem Tag werden etliche neue solcher Dateien erzeugt, also sollte das Verfahren möglichst unkompliziert angepasst werden können. Oder noch besser: es funktioniert ganz ohne Anpassungen.

Das gewünschte Ergebnis sind Dateien, die jeweils alle Zeilen von den Dateien enthalten, die dasselbe Datum im Dateinamen enthalten. Die Dateien mit “xtra” im Namen sollen getrennt von den andern zusammengefasst werden.

Diese Aufgabe kann mit einem kleinen Bash-Script erledigt werden, das den Shell-Befehl cat benutzt und in Zusammenhang mit dem find-Befehl aufgerufen wird. Wesentlicher Schlüssel zum Verständnis des Bash-Scripts ist, dass die Dateinamen Mustern folgen und dass diese Muster ähnlich sind: Das Datum wird der erste Teil eines neuen Dateinamens, der letzte Teil ist alles nach dem [x].
#!/bin/bash
# Aufruf ./mkcat.sh $(find -name "bla*")
for i in $*; do
datum=${i:6:8};
suffix=${i:20};
cat $i >> "$datum$suffix";
done;

Die Zahlen 6 und 20 sind erklärungsbedürftig. Sie kommen zustande, weil das find-Kommando dem gefundenen Dateinamen zwei Zeichen voran stellt. Die 8 ist die Länge der neuen Zeichenkette – klar, weil das Datum 8-stellig ist.

Die Grösse des Aufrisses, den jemand macht, um diese Aufgabe zu erledigen, ist umgekehrt proportional zu Wissen. Suche immer nach dem Weg, der die wenigste Schreibarbeit verursacht. Ceterum censeo, dass nur ein fauler Programmierer ein guter Programmierer ist.

Ob es vernünftig ist, die Daten in dieser Form vorzuhalten, lasse ich offen.

Veröffentlicht unter Allgemein | Verschlagwortet mit | Kommentare deaktiviert für Inventur

Copy&Paste – einheitlich!

Geerbter Code ist oft mit Copy-und-Paste-Stellen durchsetzt. Denn kurzfristig kommt man schneller ans Ziel, wenn man für einen Sachverhalt, den man schon “durchgekaut” hat und der wieder abgearbeitet werden muss, bestehenden Code kopiert. Diesen Quelltext so aufzubereiten, dass er unkompliziert wiederverwendet werden kann, dauert ungleich länger – es zahlt sich zwar “nach hinten raus” aus, aber das interessiert den Chef oft nicht.

Je besser man den Quelltext also kennt, desto öfter stößt man auf Abschnitte, die man an anderen Stellen auch schon gesehen hat. Eins der Ziele beim Umschreiben solchen Codes ist, die Wiederholungen zu entfernen, den oft kopierten Abschnitt nur an einer Stelle vorzuhalten – die Arbeit nachzuziehen, die der erste Schreiber schon hätte erledigen sollen.

Es gibt kleine Helferlein, die solche Stellen entdecken. Und wer die nicht nutzen möchte oder kann, der bedient sich des dateiübergreifenden Suchens, einer Standard-Funktion in modernen IDEs. Unabdingbare Voraussetzung für den Erfolg dieser Methode ist, dass derselbe Sachverhalt mit demselben – oder wengistens sehr ähnlichem – Code abgearbeitet wird. Welcher Teufel hat meinen Vorgänger geritten, den selben Sachverhalt in zwei komplett unterschiedlichen Formulierungen abzubilden?!? Wahrscheinlich waren es mehrere. Vorgänger. Oder Teufel. Oder beides.

Was mich beruhigt: Die Fähigkeit zu erkennen, dass zwei unterschiedliche Quelltexte denselben Sachverhalt abbilden, kann nicht mechanisiert werden, sie ist nur dem Menschen eigen und erinnert damit an einen wesentlichen Unterschied zwischen Menschen und Maschinen.

Veröffentlicht unter Allgemein | Kommentare deaktiviert für Copy&Paste – einheitlich!

Nur ein Editor, bitte

Ich arbeite jeden Tag mit einigen Editor-Programmen: Das Email-Programm hat einen, die Entwicklungsumgebung hat einen, SQuirreL hat einen und das Betriebssystem hat einen.
Die Programme verhalten sich jeweils leicht unterschiedlich. Das nervt. Wie einfach das Leben doch wäre, wenn ich meinen Lieblingseditor auch für Email und Programm-Entwicklung und SQuirreL benutzten könnte!

Wie muss ein Programm sein, damit es ohne “eigenen” Editor auskommt, obwohl es dringend einen braucht? Das Programm muss nach aussen tragen, dass es ein Editorbenutzer ist. Und wie findet es ein anderes passendes Programm – einen Editor? Indem erstens der Editor nach aussen trägt, dass er alles bietet, was ein Editorbenutzer braucht. Topf und Deckel. Zweitens braucht es einen Kuppler, damit die beiden zueinander finden. Der Kuppler hört das Klagen des Email-Programms “Bitte, bitte, gib mir einen Editor” und fragt in die Runde, ob denn ein Editor anwesend sei. Sofort melden sich write, notepad, edit und notepad++. notepad++ trumpft auf “Der Anwender hat mich zum Lieblingseditor gemacht!”. “Na”, seufzt der Kuppler, “dann viel Spass” und steckt die beiden unter eine Decke.

Was sind die Kerngedanke dieser Mehrfachnutzung? Einfachheit, Konfigurierbarkeit und Interoperabilität. Anders gesagt: Erledige genau eine Aufgabe, erledige sie gut und verberge deine Komplexität hinter einer stabilen, leicht zu nutzenden Schnittstelle.

Das läßt sich weiterspinnen. Anstatt die Entwicklungsumgebung und den Taschenrechner als Programme geöffnet zu haben, läßt sich der Taschenrechner integrieren. Es gibt nur noch eine Rechtschreibprüfung – man muss nur eine bezahlen – warum kann ich die aus Word nicht in meinem Editor nutzen? Meine Entwicklungsumgebung redet mit der Zeiterfassung, und meine Telefonsoftware redet mit der Zeiterfassung und das Trouble-Ticket-System redet mit der Zeiterfassung, dann muss ich nicht immer ‘rumklicken – die Maschine möge mir die nervtötende Routinearbeit abnehmen. Und ich bin sicher nicht der einizige, dem Ideen dazu kommen, wie unterschiedliche Programme nützlich kombiniert werden können.

Das technisch zu realisieren kann doch nicht so schwer sein! Ist es auch nicht, denn sonst wäre dies hier kein Groschengedanke. Man spricht von SOA, CORBA, COM/DCOM, OLE usw. Es gibt Ansätze, die in die richtige Richtung gehen: Ich kann in meinem Betriessystem einstellen, welches der Standard-Email-Client ist. Ein Klick auf einen Mail-To-link, egal wo, sollte dann diesen Client starten. Das tut es leider nicht aus dem Texteditor heraus. Ausserdem bauen Software-Hersteller oft Brücken zu anderen speziellen Programmen ein, so dass ich beispielsweise die Wahl zwischen drei Editoren treffen kann. Aber das sind genauso oft die Editoren, die ich nicht mag, und weil die Schnittstelle nicht generisch ist, stehe ich traurig da. Ich wünsche mir, dass die Möglichkeiten der Mehrfachnutzung sich in meiner Desktop-Umgebung wiederfinden.

Veröffentlicht unter Allgemein | Verschlagwortet mit | Kommentare deaktiviert für Nur ein Editor, bitte

Infrastruktur

Weniger ist mehr

Vernetzte Computer gehören heute zu jedem Betrieb. Aber nicht jeder Chef hat Zeit, Lust oder Geld, sich tiefgehend mit IT zu beschäftigen. Als Frage formuliert: Wie kann ein kleiner Betrieb seine IT-Kosten minimieren? Ich meine, man sollte hier Software nutzen, die wenig Infrastruktur benötigt.

Unter Infrastruktur möchte ich hier all das verstehen, was zum Betrieb einer Software unbedingt nowendig ist, ausgenommen grundlegende Hardware und irgendein installiertes Betriebssystem. Bespielsweise brauchen gängige Texteditoren keine Infrastruktur in diesem Sinne, denn sie können benutzt werden, ohne auf weitere Installationen angewiesen zu sein. Ein Java-Programm braucht dagegen “ein Stück” Infrastruktur, nämlich die Java-Laufzeitumgebung. Eine Web-Anwendung braucht einen Webserver und oft auch einen Datenbank-Server.

Manchmal muss man für die Infrastruktur bezahlen. Oft genug gibt es aber auch frei verfügbare Komponenten. Die entgeldfreie Verfügbarkeit ist verlockend und läßt leicht vergessen, dass andere Kosten entstehen werden. Das sind wenigstens die Kosten für Datensicherung und Ausfallsicherheit, möglicherweise auch noch die für das Know-How eines Servicetechniker.

Es ist leicht einzusehen, dass Komponenten, die nicht da sind, keine Daten erzeugen, die gesichert werden müssen. Und solche Komponenten gehen auch nicht kaputt – Ausfallrisiko: Null. Und das beste: auch sie sind kostenfrei zu haben ;) Warum also noch auf eine Anwendung setzen, die weitere Komponenten zwingend erfordert? Ein Grund ist, wenn die Infrastruktur zum Geschäftsmodell gehört, wie beispielsweise der Webserver zum Onlinehändler und der LAMP-Stack zu einem Hosting-Anbieter. Ein zweiter Grund fällt mir ein, und der lautet “Weil es keinen passenden Ersatz gibt.” Wenn es wirklich keine andere Software gibt, die den geforderten Job erledigt, dann muss man den zusätzlichen Aufwand in Kauf nehmen. In den meisten Fällen wird man erfolgreich nach einer Alternative suchen.

Kann es kollaborative Software geben, die ohne Infrastruktur auskommt? Welches Modell könnte einer Software zugrunde liegen, die es mehreren Personen ermöglicht, am selben Datenstamm zu arbeiten? Klassisches Architektur-Prinzip in diesem Szenario ist das von Client und Server, in dem viele Clients auf einen Server zugreifen, also eines mit Infrastruktur. Ich denke, es könnte auch ohne funktioneren, Ansatzpunkt Peer-to-Peer-Technik, Jabber … ob sich damit Anwendungen erschaffen lassen, die über Chat und Dateiaustausch hinaus gehen?

Veröffentlicht unter Allgemein | Verschlagwortet mit | Kommentare deaktiviert für Infrastruktur

Tabellen in Lotus Notes

IBM erklärt, wie man eine Tabelle mit komprimierbaren Abschnitten in Lotus Notes erstellen kann.

Wer die Beschreibung liest und die Grafik mit den Pastell-Tönen studiert, merkt, dass nichts zur Bedienung so einer Tabelle geschrieben steht. Es geht so: Klicke auf das Maximieren-Symbol in einer Zeile, dann wird der zugehörende Abschnitt aufgeklappt. Das ist alles. Das ist alles?!? Wie klappe ich so einen Abschnitt wieder zu? Indem ich auf den Maximieren-Knopf eines anderen Abschnitts klicke. Das geht klar, solange die Abschnitte so klein sind wie auf der IBM-Seite. Im echten Leben sind die Abschnitte größer, also ist auch der Abstand der Maximieren-Symbole größer, und das ist nicht bequem zu bedienen. Grundübel: Mangel an Symmetrie, nur “auf”, kein “zu”. Einen Architekten, der eine derartige Tür einbaut, schickt man zum Teufel.

Zum Glück kann man eine Tabelle mit Registern erstellen. Ich finde, das ist ein mächtig cooles Feature von Notes. Es sorgt für Ordnung in der Benutzeroberfläche und es ist bequem zu bedienen.

Veröffentlicht unter Allgemein | Verschlagwortet mit , , | Kommentare deaktiviert für Tabellen in Lotus Notes

SQuirreL – ein sql-Client

Ich nutze seit Jahren SQuirreL als SQL-Client. Nicht besonders hübsch, aber funktioniert im Alltag tadellos. Und weil Funktion bei Software wichtiger ist als Style, arbeite ich gerne damit. Die Spitze des Non-Styles bilden die innig geliebten Unix-Komandos, denn man kann sie nutzen, ohne sie zu sehen. Gleich danach kommt “vim” – optisch _sehr_ sparsam. Und XPoint. Erinnert sich jemand an CrossPoint von Peter Mandrella? … Neulich bin ich in SQuirreL auf ein Feature gestoßen, das den Gebrauchswert dieser Anwendung für mich steigert: Bookmarks. Dahinter verbirgt sich die Möglichkeit, wiederkehrende Abfragen so abzulegen, dass sie mit wenigen Tastendrücken erreichbar sind. Ich bin Tastatur-Nutzer und deshalb liebe ich dieses Feature.

Beispiel

“select * from adresse” im Editor-Fenster markieren, dann Menü “Session – Bookmark – Add”, Name sei “adr*”, bei Beschreibung gebe ich ein “Alle Adressen”. Dann kann ich im Editor-Fenster Strg-j drücken und bekomme die Liste aller Bookmarks präsentiert. Mit jedem Tastendruck reduziert sich die Anzahl der Elemente in der Auswahl. Wenn ich “a” und “d” eingetippt habe, sehe ich nur noch “adr*” und kann auf “Return” hämmern, um den Befehl in den Editor einzufügen und Strg-Return, um den Befehl auszuführen. Sehr bequem!
Für “select * from adresse” wird man kein Bookmark anlegen, aber für das WeihnachtsgeschäftSQL schon.

Asymmetrie

Ich reite nicht gerne auf Dingen herum. Einiges ist eben omnipräsent ;) Das Bookmark-Plugin von SQuirreL weist eine Asymmetrie auf: Man kann Bookmarks nicht auf dem Weg löschen, auf dem man sie erstellt hat. Aber man ist dem nicht ausgeliegert: um ein Bookmark zu bearbeiten gehe ins Menü “File – Global Preferences”, dort gibt es einen Reiter “Bookmark” und darin entsprechende Buttons für das Erstellen, Bearbeiten und Löschen.

Alternative: Das Plugin speichert seine Einstellungen in ~/.squirrel-sql/plugins/sqlbookmark/bookmarks.xml. Darin enthalten sind <Bean>-Tags. Finde das passende Tag und editiere oder lösche es. Oder füge ein Tag hinzu, das neue Bookmark wird nach dem Neustart von SQuirreL zur Verfügung stehen.

Schmankerl: Parameter

Ein Bookmark ist erstmal nur ein kurzer Weg über die Tastatur zum Befehl. Im Alltag kommt es oft vor, dass ein Befehl einen Parameter braucht, um zum Ergebnis zu kommen.Beispiel: In “select * from adresse where id = 42″ ist “42” der Wert des Parameters. Und oft kommt mehr als ein Parameter vor. Beispiel:

select * from adresse where Name = 'Kopp' and Vorname='Matthias'

Die Werte unterscheiden sich natürlich bei jeder Abfrage, und es ist ziemlich nervig, immer wieder durch den SQL-Text zu laufen und die Werte zu verändern. Bookmarks in SQuirreL können Dir diese Lauferei abnehmen. Erstelle das Bookmark in der Form

select * from adresse where Name = '${Name-Eingabe}' and Vorname='${Vorname-Eingabe}'

Dann fragt SQuirreL die beiden Werte ab, wenn Du das Bookmark aufrufst, und setzt die beiden Werte ein, wenn es den Text in den Editor gibt. Wenn derselbe Variablenname mehrfach vorkommt, wird er nur einmal abgefragt und bei jedem Vorkommen passend ersetzt.

Wunderbar. Danke, SQuirreL.

Veröffentlicht unter Allgemein | Verschlagwortet mit , , , | Kommentare deaktiviert für SQuirreL – ein sql-Client