Thursday, December 27, 2007

Javascript wiederentdeckt!

Im Prinzip hatte ich mich ja vor Jahren schon mal kurz mit Javascript beschäftigt, es dann aber auch wieder für Jahre vergessen, weil es keinen rechten Anlass für mich gab es zu verwenden, und ja, natürlich gab es zwischenzeitlich AJAX, und das hätte Anlass genug sein können, sich wieder damit zu beschäftigen, aber nein, auch da nicht, ich weiß gar nicht recht, was mich jetzt eigentlich animiert hat...

Den meisten Spaß beim (Wieder-)Einstieg machte letztlich der Javascript-Papst Douglas Crockford mit Artikeln wie JavaScript: The Wrrrld's Most Misunderstood Programming Language. Ein fast schon legendärer "und überhaupt"- und "wie alles kam"-Artikel. Im Yahoo! User Interface Blog gibt es auch ein paar Videos einiger seiner Vorträge wie z.B. Video: JavaScript oder Video: Advanced JavaScript (und dort kann man jeweils noch die gezeigten Folien als Powerpoint-Dateien herunterladen). Und viel mehr muss man erstmal auch gar nicht wissen.

Das einzige Buch zu Javascript, das Crockford überhaupt nur empfehlen kann, ist übrigens JavaScript. The Definitive Guide von David Flanagan, und der wiederum hat auch letztens The Ruby Programming Language (ziemlich eins der ersten Ruby-Bücher überhaupt, von matz persönlich) überarbeitet und erweitert und aktualisiert für Ruby 1.9. Kann erst vorbestellt werden, kommt Anfang 2008. Und die Illustrationen sind von "why the lucky stiff"!

Saturday, November 24, 2007

Supple Design / "Geschmeidiges" Design

Wunderschöne Sätze in dem Buch von Eric Evans: Domain-Driven Design: Tackling Complexity in the Heart of Software gefunden. In Kapitel 10 geht es um "Supple Design". Und was heißt "supple" überhaupt? Aha, LEO D-E Ergebnisse für "supple": geschmeidig, gefügig, biegsam!

Eine frei übersetzte Kostprobe:

Der eigentliche Zweck von Software? Einem ganz bestimmten Zweck für Benutzer zu dienen. Doch zunächst einmal muss Software Programmierern dienen. Insbesonders, wenn es um Refactoring geht. Im Verlauf der Entwicklung eines Programms wird jedes seiner Teile irgendwann neu geschrieben, die Teile werden neu strukuriert, neu angeordnet, "Domain Objects" werden integriert, umgestaltet, mit vorhandenen verbunden oder wieder auseinandergenommen. Auch noch nach Jahren wird der Code geändert und erweitert. Menschen müssen an diesem Gebilde arbeiten. Frägt sich nur, ob sie das auch wollen?

Wenn etwas kompliziertere Software kein gutes Design hat, wird es nämlich unendlich schwierig sie umzubauen, Elemente neu zu kombinieren, ein "Refactoring" durchzuführen. Wenn ein Entwickler nicht mit gutem Gefühl die Auswirkungen einer Änderung einigermaßen abschätzen kann, wird er eine Funktionalität einfach nochmal programmieren, und so entsteht "Duplication". Sie entsteht auch, wenn ein Design zu große Blöcke enthält, zu monolithisch ist. Zwar kann man Klassen und Methoden mit dem Ziel besserer Wiederverwendbarkeit feiner aufbrechen, aber dann wird es oft schwierig zu verstehen, was all die kleinen Teile machen.

Eine Software ohne klares Design mögen sich Entwickler kaum anschauen, geschweige denn mögen sie Änderungen an dem Schlamassel vornehmen, die womöglich Fehler an anderer Stelle durch kaum durchschaubare Abhängigkeiten verursachen. Abgesehen von sehr, sehr kleinen Systemen verhindert diese Zerbrechlichkeit, dass Software ein bestimmtes Maß an Funktionalität überschreiten kann, sie verhindert Refactoring und schrittweise Verbesserungen.

Ein Projekt, das in seinem Verlauf Fahrt aufnehmen und Schwung entwickeln, und nicht unter seinem eigenen Gewicht zusammenbrechen soll, setzt voraus: Ein Design, mit dem es Freude macht zu arbeiten, ein Design, das zu Änderungen einlädt. Ein geschmeidiges Design.

Ja! Wunderbar! Geschmeidig muss es sein!

Monday, October 15, 2007

DesignStaminaHypothesis

In einem Blogbeitrag von Martin Fowler zu MF Bliki: DesignStaminaHypothesis folgende schöne Graphik gesehen:

die ich so oder ähnlich auch schon hie und da an die ein oder andere Tafel gemalt hatte. Meine Erklärung in etwa:

Wenn man am Anfang huddelt (wie schreibt man huddelt? hudelt?) kann man zwar schneller etwas vorweisen, später rächt sich dies allerdings, die Kurve wird immer flacher, d.h. für jedes bisschen mehr Funktionalität muss man immer mehr Zeit (und Energie) aufwenden: Die blaue Kurve. Im Extremfall erreicht die Kurve früher oder später eine waagrechte Asymptote, d.h. egal wie viel Zeit man investiert, man erreicht keine substantiellen Verbesserungen mehr. Stillstand auf hohem Niveau: Zwei Fehler beseitigt, dafür zwei neue verursacht.

Die andere Vorgehensweise wäre, zunächst Grundlagen zu legen, Architekturfragen zu klären, "ordentlich" vorgehen, usw.., d.h. dass man am Anfang erstmal sehr wenig sieht, später aber immer schneller mehr Ergebnisse produzieren kann: Siehe die rote Kurve.

Irgendwo mittendrin schneiden sich die Kurven, bis zu diesem Zeitpunkt kommt man letztendlich mit der blauen Kurve besser weg, ab da allerdings klar mit der roten.

Wie drückt das Martin Fowler aus?
Design activities certainly do take up time and effort, but they payoff because they make it easier to evolve the software into the future. You can save short-term time by neglecting design, but this accumulates TechnicalDebt which will slow your productivity later. Putting effort into to the design of your software improves the stamina of your project, allowing you to go faster for longer.
Was eigentlich nicht vorkommt ist, dass sich der Prozess linear verhält: So wie man beispielsweise einen Graben gräbt. Halber Tag = 5 Meter, 5 Tage = 50 Meter.

Einem EDV-Profi mag das klar sein, einem EDV-Laien nicht unbedingt. Der würde sich vielleicht folgende Gedanken machen und Fragen stellen:

Blaue Kurve: Sie waren doch letztens schon so weit, und jetzt soll es doch noch so lange dauern? Sie waren doch letztens schon fast fertig?
Rote Kurve: Na, wie läufts? Oh, man sieht quasi noch gar nichts? Oder fast gar nichts? Wie wollen Sie da bis nächste Woche/Monat/Freitag/xxx fertig werden?

Und was Stamina auf Deutsch heißt, könnte man auch mal eruieren...

Wednesday, August 29, 2007

Big Ball of Mud / 7

Na, ein kleines Zitat aus Big Ball of Mud geht noch, oder? Ist auch ganz kurz:
Das rituelle Zurschaustellen von "Cleverness" verbessert oft den Rang in der Programmierer-"Hackordnung" eher als handwerkliche Merkmale wie Einfachheit oder Klarheit. Und so gedeiht das, was glorifiziert wird.
Alles klar?

Meine erste C# Windows Applikation!

Weiß nicht, wie ich da heute draufgekommen bin, vielleicht weil hier so lustig stand:
Lernen Sie, wie Visual Studio Express Editions Ihnen helfen können, Spaß bringende, coole Projekte zu erstellen, die Sie auf Ihrem Windows Desktopclient ausführen können.
Ja, ja, "Ihnen helfen können"! Wie war das: Da wird Ihnen geholfen? Aber das macht einen schon ein wenig heiß: "Spaß bringend", "coole Projekte".... Also, runtergeladen, installiert, gestartet, und dann noch in der Hilfe das gefunden: "How to: Build a C# Application in 60 Seconds", und schon war das Windows Forms Hello World fertig:
private void button1_Click(object sender, EventArgs e)
{
label1.Text = "Hello, World!";
}
Supercool, oder?

Monday, August 20, 2007

Big Ball of Mud / 6

Nachtrag zu Big Ball of Mud / 5: Lt. eines englischen Muttersprachlers ist "the most complicated system that can possibly work" sowas wie "das komplizierteste System, das gerade noch funktioniert", was auch irgendwie Sinn macht.

Und gleich weiter, die nächsten schönen Zitate:
Solche Programme können eine persönliche Festung werden, die zwar selbst der Autor kaum noch verstehen kann, jeder andere aber noch viel, viel weniger. Und sobald simple Reparaturen am Programm Tagesbeschäftigungen werden, verwandelt sich das Programm in einen Sumpf. Es wird für das Management zunehmend schwierig vorherzusagen, wie lange diese Reparaturen eigentlich dauern sollten. Dinge, die simpel zu bewerkstelligen sein sollten, ähneln eher einem nicht enden wollenden Schützengrabengefecht. Alle müssen sich in dieses absurde Tempo fügen. Manche finden sogar Gefallen daran, verstecken sich in ihren gemütlichen Höhlen, und machen ihre "Zwei-Zeilen-pro-Tag"-Reparaturen.

Thursday, August 16, 2007

Big Ball of Mud / 5

Systeme werden rasch komplizierter, allerdings nur bis zu einem gewissen Punkt:

Die Antriebskräfte für die Evolution solcher System sind bisweilen pervers. So wie es einfacher ist geschwätzig zu sein, als präzise, ist es leichter komplexe Systeme zu schaffen als einfache. Dafür begabte Programmierer können Komplexität schneller schaffen als ihre Kollegen, und schneller als sie sie dokumentieren und erklären können. Und so wie eine Armee ihren Logistikzug abhängt, steigert sich die Komplexität bis zu dem Punkt, wo dieselben Programmierer gerade nicht mehr damit klar kommen.

Dies wird manchmal auch als "Peter Prinzip" der Programmierung bezeichnet. Komplexität steigert sich schnell bis zu einem Grad, an dem Programmierer gerade nicht mehr damit zurecht kommen. An diesem Punkt geraten Komplexität und unsere Fähigkeiten in ein ungutes Gleichgewicht. Der Blitzkrieg verwandelt sich in eine Niederlage. Wir schufen das komplizierte System, das gerade noch funktionieren kann.

Mann, da ist noch viel verbesserungswürdig! Wie sagt man auf gut Deutsch: Das komplizierteste System, das "can possibly work". Das womöglich funktionieren könnte?

Tuesday, August 14, 2007

Big Ball of Mud / 4

Und noch etwas aus dem Big Ball of Mud-"Pattern":
Und letztendlich unterscheiden sich Programmierer in ihren Fähigkeiten und ihrem Engagement für Architektur. Leider wurde Programmarchitektur so lange gering geschätzt, dass viele Programmierer den Big Ball of Mud als Normalfall ansehen. Manche Programmierer sind auch besonders begabt sich in diesen Sümpfen zurecht zu finden und andere durch sie zu führen. Irgendwann kann die Symbiose zwischen Programmarchitektur und Fähigkeiten das Wesen einer Organisation selber verändern, und Sumpfführer wertvoller als Programmarchitekten werden. Undurchschaubarer Code kann dann sogar einen echten Wettbewerbsvorteil für die bringen, die sich in dem Kladeradatsch noch zurecht finden. In einem Land ohne Grenzsteine, ohne Markierungen werden solche Führer überlebenswichtig.

Big Ball of Mud / 3

Ich hatte ja hier und hier schon ein paar Übersetzungsversuche von "Big Ball of Mud" probiert. Wie wäre es andererseits mit
  • "Riesenklumpatsch" (steckt Klumpen und Matsch zugleich drin), vielleicht auch verwegen gesteigert als "Gigantischer Riesenklumpatsch"?!
  • Oder vielleicht "Riesenschlamassel" (da hätten wir Schlamm und Masse drin)?
  • Gigantischer Riesenschlamassel?
  • Vielleicht noch Code dazu? Codeklumpatsch?
  • Riesencodeklumpatsch?
  • Finaler Codeschlamassel?
  • Gigantischer Riesencodeschlamassel?
  • Riesenklumpatsch an Code?
  • Riesenklumpatsch matschigen Codes?

Saturday, August 11, 2007

Big Ball of Mud / 2

Was gibts noch Schönes im Artikel Big Ball of Mud? Wie sollte man Big Ball of Mud jetzt übersetzen? "Großer Klumpen Matsch" oder "Riesenklumpen Matsch"?

Wie schaut nun der matschige Code für einen Programmierer an der Front, der sich damit beschäftigen muss, aus? Datenstrukturen sind sehr willkürlich gewählt, oder so gut wie nicht vorhanden. Alles hat mit allem zu tun. Jeder Teil des Programms "spricht" irgendwie mit jedem anderen. Wichtige Zustandsdaten sind ausnahmslos global. Manche könnten dies als eine Art "Blackboard"-Ansatz betrachten, aber es gleicht mehr einem Wühltisch an undifferenzierten und wahllosen Zustandsarten. Wo Zustandsinformationen einigermaßen örtlich abgegrenzt sind, werden sie hemmungslos über byzantinische Hintertüren ausgetauscht, und unterminieren so die eigentliche Struktur des Systems.

Variablen- und Funktionsnamen sind nicht informativ, oder sogar irreführend. Funktionen selber machen ausgiebigen Gebrauch von globalen Variablen, und von langen Listen mäßig definierter Parameter. Die Funktionen selber sind lang und verwickelt, und machen verschiedenste Dinge, die nichts miteinander zu tun haben. Der Programmablauf ist schwer zu verstehen und schwierig nachzuvollziehen. Die Absicht des Programmierers ist so gut wie nicht zu erkennen. Der Code ist schlichtweg unlesbar, und grenzt an Unentzifferbarkeit. Der Code zeigt alle Anzeichen fortwährender Patche verschiedenster Programmierer, von denen keiner so recht die Konsequenzen seiner Änderungen abschätzen konnte. Haben wir eigentlich schon Programmdokumentation erwähnt? Welche Dokumentation?
Großer Matschklumpen? Riesenmatschklumpen?

Friday, August 10, 2007

Big Ball of Mud

Hatte ich vor Jahren schon mal gelesen, dann wieder vergessen, und jetzt zu passender Gelegenheit wieder auf diesen wunderbaren Artikel über das verbreitete "architectural pattern" "Big Ball of Mud" gestoßen. Ich versuche mal, ein paar Sätze ansatzhalber auf Deutsch zu übersetzen:

Ein "Großer Haufen Matsch" ist ein willkürlich strukturierter, ausufernder, schludriger, notdürftig mit Tesa und Maschendraht zusammengehaltener Dschungel von Spaghetti Code. Wir haben ihn alle schon gesehen. Diese Systeme zeigen offensichtliche Merkmale von unkontrolliertem Wildwuchs und ständigem Herumgeflicke. Weit entfernte Teile des Systems teilen sich zügellos Daten, meistens so weitgehend, dass fast alle wichtigen Daten global oder dupliziert sind. Eine übergreifende Struktur des Systems wurde womöglich nie definiert. Falls schon, ist sie bis zur Unkenntlichkeit erodiert. Programmierer mit einem Fitzelchen Gespür für Programmarchitektur gehen diesen Schlammlöchern tunlichst aus dem Weg. Nur die, die sich keinerlei Gedanken über Architektur machen, oder sich vielleicht eingerichtet haben mit der Tag für Tag gleichen Tretmühle des Stopfens immer neuer Löcher in diesen rissigen Dämmen, sind zufrieden damit an solchen Systemen zu arbeiten.

Friday, July 20, 2007

Schönes Deutsch, noch schöneres Englisch

Da hat doch glatt ein "IT-Consultant" seine Website entweder maschinell oder selber dermaßen wörtlich ins Englische übersetzt, aus:
- Der Kunde schätzt Impulse von "außen". Viele Abteilungen kochen für Jahre ihren "eigenen Brei". Dinge / Situationen werden als selbstverständlich hingenommen, obwohl sie nicht so sein müssen. Ein Blick von außen kann da sehr inspirierend sein. Ein Außenstehender sieht Dinge, die intern schon lange keiner mehr sieht oder nie gesehen wurden.
wurde z.B.:
- the customer estimates impulses of "outside". Many departments cook their "own mash" for years. Things/situations are accepted as natural, although they do not have to be like that. A view from the outside can be inspiring much there. An outstanding one sees things, which sees internally already for a long time none more or was never seen.
Noch einer? Ja!
-Wenn ein definiertes Projekt die zeitlichen Möglichkeiten des Angestelltenteams sprengen würde.
-Wenn a defined project the temporal possibilities of the employee team would blow up.
Hoppala, ausgerechnet beim "Wenn" hat die Übersetzung versagt?!
Einer geht noch, oder:
(...)® ist so leicht zu bedienen, dass sich alle Ihre Mitarbeiter in der Lösung wiederfinden.
(...)® it is so easy to serve that all appear your coworkers in the solution.

Friday, July 13, 2007

Scheißhilfe, Scheißtool, Scheiß...

Das ging ja wirklich schnell, gestern nachmittag erst meinen Blogeintrag Die Scheißhilfe von Microsoft Excel geschrieben, und heute morgen war er schon zu finden bei Google (Suche: microsoft excel scheißhilfe), als einziger Treffer!

Sehr schön! Aber wird denn allgemein so wenig geflucht im Internet? Schaumamal:
  • "scheißhilfe" => 6 Treffer (Echt wenig, oder?)
  • "scheißtool" => 100 Treffer (Ok, aber gemessen an der Anzahl von Scheißtools?!)
  • "scheißexcel" => 0 Treffer (Ok, sehe ich ein, Excel ist auch kein Scheißexcel!)
  • "scheißword" => 26 Treffer (Na, immerhin!)
  • "scheiß*" => 3.030.000 Treffer (Ok, ein wenig wird dann doch geflucht! Quasi eine gewisse globale Ärgerniskenngröße?!)

Thursday, July 12, 2007

Die Scheißhilfe von Microsoft Excel

Vor lauter Frust über die Scheißhilfe von Excel, die in der Hauptsache verhindert, dass ich finde, was ich suche, auf der Suche nach Leidensgenossen bei Google nach "microsoft excel scheißhilfe" gesucht, und siehe da:
Your search - microsoft excel scheißhilfe - did not match any documents.
Hääh?! So was Gängiges hat angeblich noch keiner irgendwo irgendwie geschrieben? Das gibt es doch nicht! Dann schreibe ich es jetzt halt und bin gespannt, wann der Eintrag als einziger Treffer bei Google auftaucht (microsoft excel scheißhilfe - Google Search)! Weil die Hilfe von Microsoft Excel nämlich wirklich und wahrhaftig eine Scheißhilfe ist!

Diese sogenannten Hilfen scheinen noch nicht einmal mehr ein Inhaltsverzeichnis zu haben! Wie finde ich nun eine Arbeitsblattfunktion, die einen Teilstring in einem anderen String sucht? Nach Teilstring suchen?
  • Teilstring => Keine Ergebnisse gefundenen (ja, gefundenen steht da!)
  • textfunktionen => Keine Ergebnisse gefundenen (Wie? Was?)
  • liste von funktionen => Informationen zu Listenfunktionen (NEIN!!!! Ich hätte gerne eine Übersicht aller Funktionen!!!)
  • funktionen übersicht => viele Treffer, u.a. Informationen über die globale Textrichtung (?! Was soll denn die Scheiße?!)
  • liste aller arbeitsblattfunktionen => viele Treffer, die nicht entfernt etwas mit einer Liste aller Arbeitsblattfunktionen zu tun haben (ich pack das nicht mehr....)
Dann suche ich eben im Internet, ach und siehe da, ganze dicke und teure Bücher kann man zu dem Thema kaufen: Amazon.de: Microsoft Excel Funktionsverzeichnis. Referenz aller Funktionen in Excel 2000 bis 2003 (Microsoft Fachbibliothek): Bücher: Egbert Jeschke,Eckehard Pfeifer,Helmut Reinke,Sara Unverhau , genau, weil die eingebaute Hilfe so eine Scheißhilfe ist!!!

Tuesday, June 19, 2007

Ruby: "dynamic hash-tree"

Beim Stöbern auf RubyForge: Snippet Library entdeckt: dynamic hash-tree, der
...stores objects in a tree structure, creating nodes automatically when needed.
Wenn man jetzt meint, dass das eine Menge Code wäre..., weit gefehlt! (Wie war das? The best code is no code at all, und das zweitbeste so wenig Code wie möglich?):

class Node < Hash
attr_accessor :value

def method_missing(key)
self[key]==nil ? self[key]=Node.new : self[key]
end
end

tree = Node.new

tree.branch.leaf.value = 'Hello World!'
tree.branch1.leaf.value = 'Hallo Hallo!'

tree # => {:branch=>{:leaf=>{}}, :branch1=>{:leaf=>{}}}
tree.branch.leaf.value # => "Hello World!"
tree.branch1.leaf.value # => "Hallo Hallo!"

Irgendwie magisch! Node erbt von Hash. Wird ein Node (tree = Node.new) mit einer unbekannten Methode aufgerufen (tree.branch), wird diese einfach in dem Node, d.h. dem Hash, es ist so einfach, dass ich es gar nicht gescheit ausdrücken kann....letztendlich entstehen mit dem method_missing - Trick in sich geschachtelte Hashes. Echt erstaunlich!

Tuesday, June 12, 2007

Hilfe und Stützbetriebsmittel

Ich habe keine Ahnung, wo dieses "Hilfe- und Supportcenter" auf meinem IBM Thinkpad T30 herkommt, eins scheint sicher zu sein, es wurde maschinell ins Deutsche übersetzt, und mit einem so schönen Ergebnis, dass ich es hier festhalten möchte.

Die Hauptmenupunkte mit jeweiligem Tooltip:
  • Rückseite
    Gehen Sie zurück zu der vorigen Seite.
  • Vorwärts
    Nachdem Sie zurück umziehen, verschieben Sie vorwärts eine Seite.
  • Home
    Gehen Sie zur Hilfe und unterstützen Sie Home Page.
  • Index
    Stöbern Sie für Hilfe Themen im Index durch.
  • Lieblinge
    Sehen Sie schnell Hilfe Seiten an, die Sie gesichert haben.
  • Geschichte
    Sehen Sie Seiten an, die Sie während dieser Hilfe Sitzung gelesen haben.
  • Optionen
    Wählen Sie von den unterschiedlichen Optionen aus, um ihrer Hilfe und Stützanzupassen mitteerfahrung.
  • Support
    Erhalten Sie Hilfe Online mit Remoteunterstützung oder treten Sie mit einem Stützfachmann in Verbindung.
Ein wirklicher Sinn ergibt sich vermutlich erst nach einer genauso wörtlichen Rückübersetzung ins Englische. Viel Spaß!

Wednesday, June 06, 2007

Reduzieren, beim Kochen und beim Programmieren

Jeff Atwood schrieb letztens einen wunderbaren Blogeintrag, Coding Horror: The Best Code is No Code At All:
"It's painful for most software developers to acknowledge this, because they love code so much, but the best code is no code at all. Every new line of code you willingly bring into the world is code that has to be debugged, code that has to be read and understood, code that has to be supported. Every time you write new code, you should do so reluctantly, under duress, because you completely exhausted all your other options. Code is only our enemy because there are so many of us programmers writing so damn much of it. If you can't get away with no code, the next best thing is to start with brevity."
Gefällt mir: Der beste Code ist überhaupt kein Code. Und wenn's wirklich nicht anders geht, erstmal mit wenig Code anfangen. Und warum dann nicht auch vorhandenen Code verkürzen, reduzieren, warum:
Range("J8").Select
ActiveCell.FormulaR1C1 = "=NOW()"
Range("J8").Select
Selection.Copy
Range("N8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("J8").Select
Application.CutCopyMode = False
Selection.ClearContents
wenn man das aktuelle Datum/Uhrzeit auch so in eine Zelle von Excel schreiben kann:
range("n8")=now()
Reduzieren wäre dann auch kein Selbstzweck, sondern würde echten Mehrwert bringen: Code lesbarer, verständlicher, übersichtlicher, klarer, fehlerfreier machen.

Und was bedeutet jetzt Reduzieren beim Kochen?
"Flüssigkeit, die während des Kochens entstanden ist, wird reduziert, in dem man sie in einem offenen Topf bis auf einen gewünschten Rest verkochen läßt. Dies konzentriert den Geschmack der verbleibenden Brühe oder Soße."
Na also, warum ist Reduzieren beim Programmieren so wichtig? Weil es hinterher einfach besser schmeckt!

Tuesday, May 29, 2007

Kochjargon

Eigentlich wollte ich einen kurzen Blogeintrag darüber schreiben, wie man den Sachverhalt des "Reduzierens" (beim Kochen) sinnbildlich auf das Programmieren übertragen könnte. Dazu vielleicht mehr später, zunächst mal ist mir, neben Reduzieren, eine ganze Reihe so schöner und bemerkenswerter Begriffe aufgefallen wie:
Wunderbar, oder? Da fällt mir erstmal nur noch Loriot ein:
"Man musste die Silben in die richtige Reihenfolge bringen. Es musste heissen
"Brat fettlos mit Salamo-Bratfett-ohne", aber es stand dort... Oh-mo-ne-la-sa-mit-brat-brat-fett-fett"

Thursday, May 17, 2007

Ruby, creating classes dynamically

Eine Klasse "Klass" mit einer Methode "meth" würde man ja normalerweise so definieren und instanzieren:

class Klass
def meth
"soso"
end
end

Klass.new.meth # => "soso"

Angenommen, man hätte den Inhalt der Klasse als String vorliegen, könnte man das Gleiche so machen:

s = <<eos
def meth()
"soso"
end
eos

Klass = Class.new() # neue leere Klasse erzeugen und der Konstante "Klass" zuweisen
Klass.class_eval s # "Evaluate" String (mit der Methodendefinition) im Kontext der Klasse

Klass.new.meth # => "soso"

Angenommen, man hätte auch den Namen, den die Klasse erhalten soll, als String vorliegen, so:

s = <<eos
def meth()
"soso"
end
eos

Kernel.const_set("Klass", Class.new())
Klass.class_eval s

Klass.new.meth # => "soso"

Angenommen, der Name, den die Klasse erhalten soll, wäre auch in dem String mit dem Inhalt der Klasse als Konstante definiert:

s = <<eos
NAME = 'Klass' # <= so soll die Klasse später mal heißen
def meth(); 'soso'; end
eos

c = Class.new
c.class_eval s
Kernel.const_set(c::NAME, c)

Klass.new.meth # => "soso"

Schon erstaunlich, oder?

Tuesday, May 08, 2007

Design Challenges

Ich bin schon mal über das online verfügbare Kapitel 5 aus dem Buch Code Complete 2nd Edition von Steve McConnel gestolpert (siehe Managing Complexity). Heute fiel mir folgende Liste an "Design Challenges" aus dem gleichen Kapitel auf:
  • Design is a wicked problem
    Wicked scheint sowas wie "teuflisch" zu heißen, also: Design ist ein teuflisches Problem. Warum? Man muss das Problem oft erst gelöst haben, um klar zu erkennen, was das Problem eigentlich ist. In der Regel muss man ein Problem zunächst lösen, um es klar definieren zu können, und dann erneut "lösen", indem man eine funktionsfähige Lösung schafft.
  • Design is a sloppy process
    Das Endergebnis mag ordentlich und organisiert sein, der Weg dahin ist es nicht. Der Weg dahin ist voll von Fehlern, Missverständnissen und Irrwegen, was auch völlig ok ist. Design lebt von Fehlern, die dazu beitragen das Design zu verbessern.
  • Design is about Tradeoffs and Priorities
    Abwägen, Kompromisse finden, Prioritäten setzen. Irgendwas bleibt immer auf der Strecke.
  • Design Involves Restrictions
    Anything goes? Nein, eher Möglichkeiten einschränken.
  • Design Is Nondeterministic
    Das Endergebnis ist nicht festgelegt. Man kann auf vielen verschiedenen Wegen ans Ziel kommen.
  • Design Is a Heuristic Process
    Designtechniken, die wiederholbar ein vorhersehbares Ergebnis erzielen? Gibt es nicht. Eher eine Frage von Faustformeln, Versuch und Irrtum. Kein Werkzeug ist für alles geeignet.
  • Design Is Emergent
    Ein Design "entspringt nicht fertig aus irgendjemandes Kopf", sondern entsteht graduell beim Entwickeln der Lösung, durch Design Reviews, Diskussionen, Erfahrungen beim Programmieren selber, usw..
Ja, hochinteressant, oder? Vielleicht sollte man sich das Buch anschaffen...

Friday, April 27, 2007

Plan for Change

"Wir hätten das vorher besser besprechen sollen..." (Aussage nach dem x-ten, nervigen Änderungswunsch zu einer Software).
Nein, vielleicht müssen die Software und die Tools einfach so beschaffen sein, dass man einfach und flexibel auf Änderungswünsche reagieren kann. Siehe das Manifesto for Agile Software Development (insbesondere Punkt drei und vier):
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.

Sunday, April 15, 2007

Verflixt und zugenäht: DAO, ADO, TAO, ...???

Um in Microsoft Access alle Zeilen einer Table durchzugehen, nimmt man ein Recordset, oder? Siehe z.B. Microsoft Access tips: VBA Traps: Working with Recordsets:

The DAO and ADO libraries both have a Recordset object, but with different methods, properties, and options.

DAO is the native Access library (what Access itself uses), whereas ADO is a more generic library (now superseded by the vastly different ADO.NET library.)

Pflichtschuldig (wie dort vorgeschlagen) versuche ich DAO herzunehmen (Dim rs As DAO.Recordset), aber ein DAO.Recordset kennt Access gar nicht?! Ja, wo ist denn der Unterschied zwischen ADO und DAO? In den Google Groups findet man dann Erhellendes wie:
Kan D. wrote:
> somebody tell me the adv/dis-adv to using ado vs. dao

My summary would be, there are some things that DAO can do that ADO
can't (...) and vice versa (...).
Aha! Langsam schält sich heraus, dass DAO zuerst da war, und, sofern man sich nur in Access aufhält (also keine verknüpften Oracle Tabellen oder dergleichen verwendet), von allen einstimmig DAO empfohlen wird. Ja, wo ist jetzt das Problem? Mal hier geschaut, Microsoft Access tips: Solving Problems with Library References:

DAO stands for Data Access Objects. It is the object model written specifically for Access, so it's no surprise that it gives the best power and performance for data stored in Access tables.

ADO stands for ActiveX Data Objects. It is a more generic library, designed to handle data from sources other than Access tables, e.g. SQL Server. If you are working on these enterprise databases, you don't need an explanation of ADO here.

In a misguided attempt to move us away from storing data in Access, Microsoft made ADO the default library in Access 2000 and 2002. Consider deselecting ADO, and choosing DAO 3.6 instead.

Da, da, stands jetzt! Standardmäßig wird ADO referenziert! So ein Kokolores! Naja, nach einer guten Stunde kann ich jetzt schon ein Recordset öffnen! Wobei man dann noch zusätzlich von anderen Fragestellungen abgelenkt wird:

Friday, April 13, 2007

Wurstsalat, Griebenschmalz, Stichpimpuli...

Aber über all dem Wurstsalat wollen wir nicht Toni's Apfel-Delikatess-Griebenschmalz und Stichpimpuli Likör vergessen!

Wurstsalat!

Das absolute Highlight des heutigen Tages (immerhin Freitag, der 13.):

Beim Stöbern auf Flickr: Explore everyone's geotagged photos on a Map hier
auf folgendes interessante Bild gestoßen - Wurstsalat in der degussa-Kantine in Schalchen (Variation 2) des Users wurstsalat01, mit 27 Bildern, 24 davon im Set Wurstsalat (Set), ein Blick ins Profil von Flickr: wurstsalat01 ergibt, dass wurstsalat01 zwar keine Contacts, aber eine Public Group, und zwar World of Wurstsalat (WoW) (Pool) hat, bei der er als einziges Mitglied natürlich der "Top Contributor" mit 25 Bildern ist!

Was soll ich sagen? Ich bin tief beeindruckt, vom klaren Fokus, der klaren Ausrichtung, Mann, ich bin neidisch! Warum ist mir das nicht eingefallen! Wurstsalat!! Man sollte: Buy wurstsalat01 a Pro Account

Wörter gibt es!

Jeweils das Wort und eine Fundstelle aus dem Internet:
  • Okulieren ("für ungeübte ist sicher ein OSV viel viel besser... es erleichtert das Okulieren sehr, da auch das Verbinden ziemlich schwierig ist, zumindest mit einem ...")
  • Kopulieren ("Mitzubringen ist ein Kopuliermesser.")
  • Kondolieren ("Zusätzlich finden Sie Zitate von historischen Persönlichkeiten, die gerne zum Kondolieren genutzt werden.")
  • Ondulieren ("Tanna schrieb zu Ondulieren: Hm.")
  • Undulieren ("Je nach Lebensraum und zum Teil auch nach unterschiedlicher Lebensphase können Anneliden kriechen, schwimmen, sich schlängeln oder auch undulieren ...")
    • Anneliden? ("Reihe yon Experimenten mit verschiedenen Anneliden, Planarien ... Figur 4. stets bei den Anneliden, ein vollstindiger Schlundring zu Stande ...")
      • Schlundring? ("Einbau von 3H-Uridin in den Schlundring. von. Helix pomatia ")
        • Jetzt ist aber genug!
  • Na, einer geht noch: Ukulelen ("Mittlerweile sind Ukulelen in einer Vielzahl verschiedener Ausführungen ...")

Tuesday, April 10, 2007

"Information Software and the Graphical Interface"

Hochinteressanten Artikel gelesen: Magic Ink: Information Software and the Graphical Interface, der sich des Themas mit vielen - und für mich neuen - Gesichtspunkten annimmt. Der Verfasser sieht einen grundlegenden Unterschied zwischen Manipulation Software ("construct and manipulate a model external to herself", z.B. CAD-Software, mit der man ein virtuelles Modell im Computer manipuliert) und Information Software ("construct and manipulate a model that is internal to the mind—a mental representation of information").

Die typische Metapher von "Manipulation Software", Objekte zu manipulieren, bringe wenig für eine gute Information Software oder sei schlichtweg kontraproduktiv:
Much current software fulfilling these needs presents mechanical metaphors and objects to manipulate, but this is deceiving. People using this software do not care about these artificial objects; they care about seeing information and understanding choices—manipulating a model in their heads.
Bei guter "Information Software" gehe es viel mehr um die sinnvolle Darstellung von Informationen und deren Zusammenhängen, letztendlich um "Graphic Design". Und er zeigt dies exemplarisch anhand einiger, ziemlich umwerfender, Beispiele!

Thursday, April 05, 2007

Das gibts ja wohl nicht: Google My Maps!

Wie lange ist das jetzt her, dass ich mir Gedanken machte über eine Webapplikation, ...:
"...mit der ich auf einfache Art und Weise eine Spaziergangroute in eine Google Map hätte eintragen können und mit ein paar Kommentaren hätte versehen können (was weiß ich, sowas wie: "Hier gehts los.", "Man bemerke hier die schöne Aussicht!", "Bei schönem Wetter steht hier ein Italiener mit seinem Eiswagen.") und dann dem Rest der Welt zur Verfügung hätte stellen können..." (Das ist doch alles Kokolores....: Faszinierend!)
Das war am 7. März, vor knapp einem Monat, und was gibts seit heute bei Google Maps? My Maps! Mit ziemlich genau der Funktionalität, die ich mir so ins Blaue hin ausgemalt hatte!
  • Mark your favorite places on your map.
  • Draw lines and shapes to highlight paths and areas.
  • Add your own text, photos, and videos.
  • Publish your map to the web.
  • Share your map with friends and family.
Faszinierend! Ja, wie ist das jetzt? Das hat ja fast schon so etwas Tischleindeckdich-mäßiges! Kaum gedacht, schon vollbracht! Eigenartig...

Was könnte man jetzt dokumentieren? Bergtouren, Spaziergänge, Fahrradtouren, Joggingrouten, Schwimmstrecken, Dampfer-Routen-MitHäfen-MitLinkszuAnundAbfahrtsplänen, mein persönlicher Architekturführer, Kunstspaziergänge, Kneipen in und um..., Anfahrtsskizzen, Abfahrtsskizzen, der kürzeste Weg von Dings nach Bums, Flurdenkmäler in und um...., meine Urlaube, meine Spaziergänge (hatten wir schon!), ja, alles, was man sinnvollerweise räumlich darstellen will, und das ist jede Menge, oder?

Friday, March 30, 2007

Excel, Hilfetexte, Kokolores

Vermutlich ist die englische Originalhilfe von Excel auch nicht einfach zu verstehen, ins Deutsche übersetzt ergibt es auf jeden Fall irgendwas zwischen bodenlos, lächerlich, fehlerhaft, ärgerlich und was weiß ich noch. Hier nur mal ein paar exemplarische Auszüge der Hilfetexte einiger Funktionen:
  • SQL.REQUEST
    Ein Teil des Inhalts dieses Themas gilt möglicherweise nicht für einige Sprachen.
    Gleich mal als erstes auf Einschränkungen hinweisen, aber natürlich nebulös: "möglicherweise", irgendein "Teil des Inhalts", "einige Sprachen".
  • VERGLEICH
    Sucht Werte innerhalb eines Bezugs oder einer Matrix. Verwenden Sie VERGLEICH immer dann statt einer der VERWEIS-Funktionen, wenn Sie die Position eines Elements in einem Bereich und nicht das Element selbst benötigen.
    Der feinsinnige Unterschied zwischen VERGLEICH und VERWEIS zwingt mich seit Jahren mich in der krampfigen Hilfe zu vertiefen! Ist diese Namensgebung auf Englisch genauso dämlich? VERGLEICH => MATCH, VERWEIS => LOOKUP?! Naja.
  • Warum Funktionen ausgerechnet FINDEN und SUCHEN heißen müssen, und der Hilfetext dann so anfangen muss:
    • FINDEN sucht eine Zeichenfolge (Suchtext) innerhalb einer anderen Zeichenfolge (Text)
    • SUCHEN gibt, beginnend mit Erstes_Zeichen, die Nummer des Zeichens zurück, an der das zu suchende Zeichen oder die zu suchende Textzeichenfolge erstmals gefunden wurde.
    • Aha, "Finden sucht" und "Suchen findet", oder wie?
  • BEREICH.VERSCHIEBEN
    Gibt einen Bezug zurück, der gegenüber dem angegebenen Bezug versetzt ist.
    Und etwas weiter unten:
    Durch die Funktion BEREICH.VERSCHIEBEN werden weder Zellen verschoben, noch...

    Warum man eine Funktion, die keine Zellen verschiebt, ausgerechnet Bereich.Verschieben nennt? Auf Englisch heißt sie Offset. Naja.

Sunday, March 25, 2007

Ruby-Beispiele adhoc ausführen

Ruby-Beispiele auf z.B. einer Webseite auszuführen, ist ja keine große Affäre (Code in den Scite Editor kopieren und ausführen), dann aber doch wieder so umständlich, dass ich meistens keine Lust dazu habe. Letztens habe ich mich dann wieder meiner Lieblings-"Mashup"-Werkzeuge erinnert:
  • PowerPro, eine Art Schweizer Messer (das früher Stiletto hieß (ja, ja, ein scharfes Werkzeug!)), das "lets you take control of how you use Windows 95/98/NT/2000/XP. Run commands and configure your system any way you want."
    Also, nur zum Beispiel (ich habe noch nie so viele Optionen auf einem Haufen gesehen) kann man sich selber Menus basteln, die beim Klicken von z.B. CTRL+RechteMaustaste erscheinen, und z.B. Programme ausführen, oder Fenster in den Vordergrund bringen, oder...
    und
  • AutoIt is a freeware Windows automation language. It can be used to script most simple Windows-based tasks.
    Mit simpler Basicsyntax Mausklicks, Tastatureingaben an Windows schicken, Fenster aktivieren, und, und....
Mein "Mini-Mashup" funktioniert jetzt so, dass ich ein Stück Ruby-Code markiere, und dann mit CTRL+RechteMaustaste (das macht PowerPro) folgendes kleine Autoit-Skript starte:
Send("^c")
$file = FileOpen("c:\temp\scratch.rb", 2)
FileWrite($file, clipget())
FileClose($file)
WinActivate("Windows PowerShell")
WinWaitActive("Windows PowerShell")
Send("ruby scratch.rb{ENTER}")

welches den selektierten Ruby-Code in die Zwischenablage kopiert, dann in eine Datei schreibt, das "Windows PowerShell"-Fenster (den Command-Shell-Nachfolger) aktiviert, dort "ruby scratch.rb" eintippt und mit ENTER abschickt.

Friday, March 23, 2007

Fundstück: "Fleck the Web!"

Beim "Kramen" im Internet wieder mal folgende Ideen beim Lesen einer hochinteressanten Seite (Eli Bendersky’s website » Blog Archive » Understanding Ruby blocks, Procs and methods) mit vielen Ruby-Beispielen gehabt:
  • Es wäre schön, die Ruby-Beispiele auf der Seite ohne großen Aufwand adhoc ausführen zu können (dazu evtl. mehr in einem späteren Beitrag).
  • Es wäre schön, irgendwie Notizen an die Beispiele "anheften" zu können.
Meine Idee des "Anheftens" hatten andere natürlich auch schon, dies wird u.a. Web annotation (Wikipedia) genannt, Diigo ist so ein Tool, das noch viel mehr kann (Social Annotation: Seamless Integration of Social Bookmarking, Web Highlighter, Sticky-Note & Clipping), aber auch einen markierten Text mit einer Bemerkung (Sticky-Note) versehen. Der Text wird unterstrichen dargestellt, und beim Überfahren erscheint die Notiz.

Ein anderes Tool ist Fleck.com - Fleck the Web!, das sich mehr auf die gelben Zettel konzentriert, und wahrhaftig, man kann "Notes oder Bullets", die wahrhaftig wie gelbe Zettel aussehen, an beliebige Stellen einer Seite "kleben" und sie entweder so lassen oder zu einem platzsparenden gelben Knubbel "collapsen".

Die eingangs erwähnte Seite habe ich gleich mal mit Kommentaren versehen, und so schaut sie dann aus: Eli Bendersky’s website » Blog Archive » Understanding Ruby blocks, Procs and methods

Nett, im Vergleich mit Diigo (das ich auch benutze, aber eher für's Bookmarking), ist:
Die Notizen können frei (z.B. neben einem Bild) plaziert werden (bei Diigo muss man einen Text markieren).
Die Notizen schauen wie "gelbe Zettel" aus (bei Diigo ist das nicht so prickelnd).
Die Notizen können "aufgeklappt" oder "geschlossen (gelber Knubbel)" gespeichert werden (bei Diigo werden sie beim Überfahren des markierten Textes angezeigt).
Das Plazieren und Ausfüllen der "gelben Zettel" "fühlt sich echt gut an" (Diigo ist ansonsten auch nicht schlecht, aber ein paar Kleinigkeiten scheint Fleck da besser hinzukriegen).

Tuesday, March 20, 2007

Überraschende Verbindungen: Tumblr!

Hier gelesen: Freeware/Open Source for Windows Weekly Summary - O'Reilly Windows DevCenter Blog, dass Tumblr in etwa sowas macht:
Tumblelogs are like blogs with less fuss. You might say, well any blog can be maintained with less fuss using any of the various blogging services. And, I tend to agree. But, Tumblr makes it easy to perform common blogging tasks in a single minded way: Add a photo (from desktop or phone), add a link to an interesting web site, add a video feed from some video website, etc.
Holla, klingt interessant, oder? Einer der "Featured Tumblelogs" ist
Projectionist: A tumblelog, der schreibt, dass er von Christian Neukirchen's Anarchaia: A tumblelog inspiriert sei, und Christian Neukirchen ist doch dieser unendlich begabte und brillante Schüler (13. Klasse?) aus Biberach, der bei der Ruby Konferenz Euruko 2005 in München einen ziemlich beeindruckenden Vortrag über "Dynamic Scope and Context-oriented Programming" (siehe Talks by Christian Neukirchen) hielt.

Und was sagt die Wikipedia (Tumblelog - Wikipedia, the free encyclopedia):
A tumblelog is a variation of a blog, that favors short-form, mixed-media posts over the longer editorial posts frequently associated with blogging. Common post formats found on tumblelogs include links, photos, quotes, dialogues, and video. Unlike blogs, this format is frequently used to share the author's creations, discoveries, or experiences without providing a commentary.
Und jetzt kommts:
The term "tumblelog" was coined by Why the lucky stiff in a blog post on April 12th, 2005, while describing Anarchaia
Ach, Why the lucky stiff ist da auch noch im Spiel? Hochinteressant! Und auf alle Fälle haben Davidville diese Website gemacht, bei der man sich einen kostenlosen Tumblelog einrichten kann. Hmm, will ich einen Tumblelog haben?

Saturday, March 17, 2007

Just how do most software developers work?

Frägt sich auch Albert D. Kallal (der, bei dem Microsoft Access nicht sucks):
Have you ever been stuck on a design for a few days? You will notice that those several days seem very frustrating and very unproductive. However once your mind "SEES" the design that is going to work...then you are able to produce code like a hungry snow blower working on a snow bank in January.
Kann ich absolut nachfühlen. Was soll ich programmieren, wenn ich "keinen Plan" habe? Wie soll ich anfangen, wenn ich nicht ein bestimmtes Bild vor Augen habe? (Wobei ich mich immer frage, wo die Grenze zur berüchtigten "Analysis Paralysis" liegt.)
That idea of "seeing" the design or having a mental picture of the design is required before one can really zone in. Without this mental conceptual view then no real high rate of development will occur. In fact, for some no development will occur until the mind "sees" the picture. My point here is that when you slow down the rate of development, then the mind has more time to get that "view". Once the mind has that view then writing code is like finally starting up the snow blower (or, for you southern people...the lawn mower).
"See the picture"! Nett! Und dafür muss man manchmal langsamer machen. Genau.
Slowing down the rate of development gives the mind more time to "think design".
Ja, ein weiteres Paradox also: Langsamer machen, um schneller zu sein!

Friday, March 16, 2007

Microsoft Access sucks?

Witzig, dass ich nur einen Tag nach meiner letzten Access-Sucks-Tirade, auf folgenden Artikel eines gewissen Albert D. Kallal stoße: Dialogs and prmopts in ms-access , der auf den ersten Blick nicht wirklich glänzend erschien (Seitentitel mit Tippfehler..., Seite mit grauem(!) Hintergrund, die Schrift etwas zu groß...), und dann noch mit folgendem Versprechen begann:
The following prompt form information is likely one of the BEST things you can learn to improve your UI in ms-access.
Aber was soll ich sagen? Der Mann hat völlig recht! Nach all dem unsäglichen Bullshit, den ich schon gelesen hatte, findet er genau die richtigen Worte, bringt den Sachverhalt klar auf den Punkt, und präsentiert ein Codebeispiel, das nicht 3 Seiten lang ist, sondern ca. 10 Zeilen, und genau das macht, was versprochen war.

Ach, und um was es eigentlich ging? Etwas ganz Simples eigentlich, das aber in Access nicht wirklich vorgesehen ist, nämlich von einer Form eine andere Form aufzurufen, und nach Schließen dieser Form einen Rückgabewert zu erhalten. Sowas wie eine selbstgebastelte modale Inputbox. Und genau das schafft sein Beispiel mit einem vertretbaren und verständlichen Workaround, auf den man im Leben nicht gekommen wäre...

Thursday, March 15, 2007

Microsoft Access sucks

Ich will mich ja gar nicht mehr aufregen, ich wollte es nur nochmal gesagt haben, und ganz ohne Aufregung: Microsoft Access sucks!

Ich habe einige Formulare gemacht, ich habe darauf Knöpfe plaziert, welche jeweils über das "Klicken"-Ereignis eine VBA-Prozedur aufrufen. Kein Thema. Was könnte simpler sein. Und plötzlich - alle anderen Buttons gehen noch - verursacht ein völlig genauso gestrickter Button die längliche Fehlermeldung:
Sie haben als Einstellung der Ereigniseigenschaft den Ausdruck Beim Klicken eingegeben. Dieser Ausdruck hat einen Fehler verursacht: Es trat ein Problem auf, während mit dem OLE-Server oder ActiveX-Steuerelement kommunizierte.
Gehts noch länger? Noch umständlicher? Noch gewundener? Aber klar (das war noch nicht alles), da werden noch ein paar hilflose Erklärungsversuche nachgeschoben:
Der Ausdruck gibt möglicherweise.... (den restlichen Schmarrn erspare ich hier)
Beim ...(weiterer Schmarrn)... trat möglicherweise ein Fehler auf.
Man beachte das nette "möglicherweise"! Früher gab es noch anständige Fehlermeldungen wie "unknown error", die auch nicht hilfreich, dafür aber zumindest kurz waren. Kanns noch schlimmer kommen? Klar, da ist noch dieser "Hilfe anzeigen >> " Knopf, und jetzt gehts erst richtig los, da wird munter drauflosgefaselt:
Blablabla.... es kann sich um eines der folgenden Probleme handeln:
Ein Bezug fehlt...
blablabla
Ein Ausdruck ist falsch buchstabiert....
blablabla
Insgesamt werden 8 potentielle Probleme genannt!
Und jetzt? Ach, zumindest kann man die "Hilfe" wieder mit dem Knopf "Hilfe ausblenden <<" ausblenden! Und jetzt? Ich bin so schlau wie zuvor. Die Fehlermeldungen früher waren doch besser, da war man hinterher auch so schlau wie zuvor, musste aber nicht so viel lesen.

Und jetzt? Jetzt habe ich ein neues Formular erzeugt und alle Controls, Textfelder, usw. vom Problemformular in das neue kopiert, und jetzt gehts! Was soll das!!!

Wednesday, March 07, 2007

Faszinierend!

Manchmal stolpert man von einem faszinierenden Thema zum nächsten, z.B. wird man auf ein ASP.NET 2.0 Commerce Starter Kit aufmerksam gemacht (mit PayPal Anbindung!), das "is powered by SubSonic, the Zero Code DAL. Code generators, Rails-esque scaffolds - you can't find an easier way to move data in in and out of your application.", was?, "Rails-esque scaffolds"?, was einen zu CodePlex - actionpack (= SubSonic, das Ding hieß mal ActionPack! Wie heißt das bei Rails? ActionPack! Aha.) und schaut gar nicht mal schlecht aus: "A Data Access Layer (DAL) builder that requires no code on your part, it builds itself at compile-time with a full object layer and strongly-typed collections..." (und es kann noch mehr!), dessen Autor Rob Conery (Blog Rob.Parse(Rob)) doch wahrhaftig auf Hawai lebt und zwar hier: Kauai, Hawaii mannmannmann (aber wie schreibt man eigentlich "Hawai"? Ah ja, Google meint "Meinten Sie: Hawaii?") , der also auf Hawaii lebt, und zwar mit Frau und Kind, und ich mich wieder mal frage, wann machen die das alles eigentlich? Aber egal, eigentlich hätten mich ja Google Maps interessiert und irgendein Mashup, Onlineapplikation, mit der ich auf einfache Art und Weise eine Spaziergangroute in eine Google Map hätte eintragen können und mit ein paar Kommentaren hätte versehen können (was weiß ich, sowas wie: "Hier gehts los.", "Man bemerke hier die schöne Aussicht!", "Bei schönem Wetter steht hier ein Italiener mit seinem Eiswagen.") und dann dem Rest der Welt zur Verfügung hätte stellen können. Und siehe da, sucht man nach "google maps walking" findet man schon Sachen wie Google Map Pedometer: Use This GMaps Pedometer to Draw Your ... , ja, nicht schlecht, aber etwas fitnesslastig, man bekommt Strecke und verbrauchte Kalorien angezeigt, oder wie MapMyRun.com -- Mapping your running routes has never been easier! , auch nicht schlecht, schaut noch schöner aus, aber auch etwas fitnesslastig, aber durchaus auch faszinierend. Aber da war ja auch noch
Ning - Create your own Social Networks! (Ning is the only online service where you can create, customize, and share your own Social Network for free in seconds.) Bitte? Mit Photosharing? Mit Discussion Forum? Mit Member Profile Pages & Blogs? Full Customization? Erstaunlich! Aber zurück zu meinen Spazierrouten, wenn es da nichts Gescheites gibt, müsste man sich vielleicht selber was basteln, mit Javascript und dem Google Maps API, scheint auch gar nicht so schwierig zu sein! Also, noch ein wenig gesucht, und siehe da, ach, wenn man eher nach "google maps bicycle" oder "google maps fahrradtour" sucht, da findet man ja ganz andere Mashups, und es gibt nicht nur die beiden, die ich mit "google maps walking" gefunden hatte. Jede Menge andere!! Auch sowas wie quikmaps.com :: maps for the masses , ach, da kann ich ganz verschiedene Marker auf die Google Map ziehen?! Und einen Linienzug einzeichnen?!! Und die Marker mit Kommentaren versehen?!!! Und mit einem winzigen Stück HTML alles woanders einbinden?!!!! Und das geht sogar hier bei Blogger?!!!!!!!




Ich werde verrückt..... Das gibts doch nicht! Ok, also demnächst hier: Ein schöner Spaziergang mit Kommentaren! Und wenn ich jetzt noch Ning dazu nähme.....????! Eine eigene Social Site? Mit Quick Maps Spaziergängen? Und Mitgliedern, die ihre schönsten Spaziergänge da eintragen und kommentieren und... und.. und... also wie gesagt, manchmal..., und da stolpert man von einem faszinierenden ... zum nächsten..., ach, und Sun Announces Ruby Support for NetBeans?!, also, jetzt ist erstmal genug....

Friday, February 23, 2007

Microsoft Access, eine Klasse für sich

Nachdem ich mich nochmal ganz fürchterlich über Microsoft Access aufregen musste, nun doch zur Frage, was einen an dieser Software so wahnsinnig machen kann. Vielleicht liegt es an dem eigenartigen Spagat, dass es einfach eine stinkenormale relationale Datenbank ist, mit allen Haken und Ösen, mit allen Komplexitäten (referentielle Integrität, m:n Beziehungen, usw.), aber beständig und krampfhaft versucht wird dies vor einem zu verheimlichen. Auf Biegen und Brechen, mühsam und angestrengt, mit Verrenkungen und Kapriolen, mit Assistenten und "gutgemeinten" Dialogen, letztendlich aber doch nur lückenhaft und unvollständig.

Letztendlich steht man Joel Spolsky's so formuliertem Law of Leaky Abstractions gegenüber:
"All non-trivial abstractions, to some degree, are leaky."
So gutgemeint Abstraktionen auch sein mögen, bis zu einem bestimmten Grad sind sie löchrig, d.h. sie schaffen es nicht vollständig, die Komplexität, die sie abstrahieren sollen zu verdecken.

Wobei der Grad der Löchrigkeit eigentlich ganz egal ist, weil jedes noch so kleine Loch einen irgendwann dazu zwingt sich mit den zugrundeliegenden Details zu beschäftigen.

Wobei sich das Verhältnis von "gelungener Abstraktion" zu "Löchrigkeit der Abstraktion" in Access allerhöchstens die Waage hält. Das sind dann auch nicht wirklich Löcher, das sind Scheunentore. Man könnte auch sagen, dass der Abstraktionsversuch letztendlich misslungen ist. Komplett misslungen. So was von misslungen!

Was heißt das? Zunächst mal: Ärgerlich! Ärgerlich!! ÄÄÄÄÄrrrrrggggerrrrliich!!!!!!!!!!!!! Was heißt das noch? Mit unendlich viel Aufstand wurde eine Missgeburt erzeugt! Ein Software-Frankenstein! Eine armselige Kreatur! Ein bemitleidenswertes Geschöpf!

Aber ist das vielleicht Microsoft-typisch? ASP.NET versucht ja auch, sämtliche kleinen Details von HTTP und Browsern und wasweißich wegzuabstrahieren! Und, klappt das etwa?

Was heißt das? Heißt das, dass die vermutlich Mannjahrhunderte versemmelt haben, um eine relationale Datenbank benutzerfreundlich und verständlich erscheinen zu lassen, und es nicht einmal annähernd erreicht haben?

Ja, diese Unentschiedenheit! Wie heißt das auf Englisch? To be everything to everyone. Irgendwie alles für jeden zu sein.

Warum haben die ihr Talent, ihre Begeisterung, ihre Zeit nicht für etwas wirklich Interessantes eingesetzt? Eine Datenbank, die einen SQL-Phobiker wie mich wirklich, nochmal: wirklich, ich meine: wirklich!! von diesem ganzen krampfigen Popanz mit m:n Beziehungen und referentieller Integrität und Fremdschlüsseln und anderen Schlüsseln und Schüsseln und was weiß ich ---- einfach erlöst!

Stattdessen bauen sie Dialogboxen und übersetzen diese in zig Sprachen, die mit Begriffen wie "Beziehungen" daherkommen, "Beziehungen bearbeiten", mit "Referentieller Integrität" und "Aktualisierungsweitergabe an verwandte Felder", Mensch, ich habe genug zu tun mit meinen Beziehungen und meiner Verwandschaft!! Und euer "Verknüpfungstyp..." interessiert mich nicht die Bohne!

Was heißt hier "löchrige Abstraktionen"? Das ist die Titanic, nachdem sie mit dem Eisberg zusammenstieß!

Letztendlich muss man Berge von Abstraktionsschrott, Abstraktionsmüll wegräumen, um ungefähr in eine Region vorzudringen, wo man ein wenig Produktives zustande bringt.

Für mich machen die nicht Schwieriges einfach, nein, ein lustiges Vexierspiel wird angezettelt, vordergründig Schwieriges stellt sich als einfach heraus, Einfaches als schwierig, Simples als unmöglich... Nichts ist, was es ist.

Ein wenig Wahrheit dann doch im "Beziehungen bearbeiten"-Dialog: Beziehungstyp: Undefiniert.

Ach, leckt mich doch....

Alptraum!!! Nightmare!!!!!! Microsoft Access")=§($&"§$ZU)=H

Den mit Abstand allergrößten Bullshit kann man wahrscheinlich mit Microsoft Access erleben. Ein Alptraum. Ein echtes Desaster, eine Katastrophensoftware sondergleichen!! Nicht vergleichbar mit dem Stück Scheiße , nein, Microsoft Access schafft es in noch ganz anderen Dimensionen ärgerlich, fürchterlich, unerträglich, bescheuert, beschissen, krampfig zu sein!!! Dieser ganze krampfige Kuddelmuddel und Firlefanz, diese Eigenschaftenfenster mit Hunderten Optionen, diese dämliche Syntax mit eckigen Klammern, die man aber doch nicht immer braucht, oder Ausrufezeichen, die man aber auch weglassen kann, aber nicht immer, was soll denn sowas??? Für wie masochistisch halten diese Softwareentwickler einen eigentlich!! If Me.Dirty Then Me!btnUndo.Enabled = True... kein Witz, die haben doch einen an der Waffel!!!! Ganz zu schweigen von diesen sogenannten Assistenten, die die eigenen Pläne im entscheidenden Moment durchkreuzen... Inzwischen scheitere ich an einer Kombobox...es ist unendlich frustrierend. Dieses Meer an Optionen, Irrwegen, das ist ähnlich hoffnungslos wie das Suchen einer Stecknadel im Heuhaufen! Wahrscheinlich werden tausendseitige Machwerke über Komboboxen geschrieben, das ist halt nicht so einfach, haahaahaaa! Man fühlt sich wie in so einem Jahrmarktsirrgarten mit Spiegeln, der nur dazu gemacht ist, auf umständlichste Art und Weise und unter ständigem Anhauen diverser Körperteile zur Belustigung der Umstehenden wieder herauszufinden....

Wednesday, February 21, 2007

Project Code Names

Wie bin ich heute auf Project Code Names gekommen?
  • Ach ja, weil Netvibes seine nächste Version Coriander nennt (nach Anise und Cinnamon). Nett, und die Namen von Gewürzen werden denen so schnell nicht ausgehen.
  • Wobei mir sofort die Raubkatzen von Apples Betriebssystemversionen einfielen, die ich immer verwechselt und nie auseinanderhalten konnte: Jaguar, Tiger, Panther, Leopard, .... (Wieviel Raubkatzenarten gibt es eigentlich?)
  • Wobei Microsoft oft Städtenamen bevorzugte: Chicago (Windows 95), Memphis (Windows 98), ..., siehe auch List of Microsoft codenames - Wikipedia, the free encyclopedia.
  • Wobei der Codename der nächsten Version von Lotus Notes auch nach einer Stadt (the next generation of lotus notes hannover), und zwar Hannover, jaja, der deutschen Stadt, die bei einer Spiegelumfrage zur langweiligsten Stadt der Republik..., immerhin auf dem zweiten Platz landete (Hannover - Wikiquote). Wie war das noch? Nomen est omen?
  • Ein weites Feld, manchmal erhalten selbst Programmiersprachen (absichtlich oder nicht) den Namen von Kinderkrankheiten (A Case of the MUMPS - The Daily WTF), was natürlich eine weite Welt eröffnen würde: Codenamen wie MASERN, RÖTELN, SCHARLACH....(was zumindest den Stand so mancher Software exakt beschreiben würde)!
  • Es gibt natürlich auch ziemlich schlimme Software. Dann vielleicht Codenamen wie: PEST, CHOLERA?
  • Katastrophale Software: TSUNAMI, SCHLAMMLAWINE?

Tuesday, February 13, 2007

Lokalzeitung, letzte Seite

Und manchmal liegt die Lokalzeitung einfach so herum, mit der letzten Seite oben, und man schaut eigentlich gar nicht hin, warum auch, was ist schon interessant an dieser letzten Seite mit diesem eigenartigen Sammelsurium von persönlichen Glückwünschen mit Bild ("Da Rupp, der oide Sack, hod jetzt 22 Jahr auf'm Gnack!"), Ankündigungen irgendwelcher Gastwirtschaften ("Montag Salat-Tag"), winzigen "Kontaktanzeigen" ("Sxx-Treff gesucht?"), naja, dann schaut man doch mal hin, weil die Zeitung eben gerade so daliegt, und plötzlich springt es einen förmlich an:
  • "Skisafari in Südtirol"
    Um Gottes willen, was ist eine Skisafari? Heißt das so, weil es so schön alliteriert, S..s...S...? Ist man da mit Schiern unterwegs und knipst Gemsen? Oder schießt auf sie?!
    "Urbino, die schönsten Hügel Italiens"
    Ich habe noch nie in meinem Leben von Urbino in Italien gehört?! Tippfehler? Hoppala, nein, Provinz Pesaro und Urbino (Wikipedia) liegt in den Marken (und da mag es durchaus schöne Hügel geben, oder?)!
  • "Bullenbrustkern", "Tilapiafilet"
    Das eine was für "Fischkenner", das andere "ideal als Tellerfleisch".
  • "Pulsator-Prüftage, Lassen Sie ihre Pulsatoren überprüfen! Geprüft werden Pulsatoren aller Fabrikate!"
    Ich weiß nicht, was ich eher assoziieren soll...., ein Starkbier (...Triumphator und so...)? Einen Herzschrittmacher? Eine neue Generation von Vibratoren? Einen Massagesessel? Was sagt das Internet dazu? Beispielsweise hier: Pulsator Informationen Hersteller, Zulieferer und Händler?
    "Der Luftstrom tritt in einen Pulsator ein, mit welchem eine periodische Anregung mit definierter, einstellbarer Amplitude und Frequenz möglich ist. Der Volumenstrom strömt durch eine Wirbelfadendüse,..."
    Was? Ojeoje! Ist das doch so ein Dings, so ein....., so ein..., ach, was weiß ich! Sxxdings (jetzt isses raus).
  • "Unsere Praxis bleibt vom 19. bis zum 32.2.07 geschlossen"
    Jetzt hat der Februar maximal 29 Tage, heuer sogar nur 28, aber selbst längere Monate kommen höchstens auf 31 Tage. Wie kommen die auf den 32. Februar? Hat da einer gesagt: "Ich weiß nicht, bis wann wir geschlossen haben, auf jeden Fall ab 19. Dezember für 14 Tage..." und dann ein anderer: "19, 20, 21, 22, ..., 31, 32!"
Das wars eigentlich. Und alles auf nur der Hälfte der letzten Seite.

Thursday, February 08, 2007

In Memoriam

In einem Anfall von .... interessierte ich mich für Microsoft Access und Word und Serienbriefe, kam hier vorbei: Bugs: Mailmerge starts new instance of Access (samt schrägem Workaround, wunderbar), und ich weiß jetzt auch nicht, warum mir gerade dies auffiel (caught my attention), dass ganz unten im Menu, nach "..., Reports, Modules, APIs, Strings, Date/Time, ...." der Punkt In Memoriam (!) stand:
In Memoriam
Cheryl Fischer
Microsoft Access MVP
Born August 5, 1944 - Died July 20, 2004

Nicht ganz 60 Jahre wurde sie alt, oder? Und das hat mich dann doch sehr gerührt, auch folgende Anmerkung auf der Seite (und ganz abgesehen davon, dass mir Microsoft Access eigentlich fürchterlich auf den Senkel geht...):
SELECT [Cheryl] INTO [PeacefulRest]
FROM [Earth]
HAVING [Talent]="Exceptional";
(...und ich nicht wirklich weiß, warum man manches in [eckige] Klammern schreiben muss...). Wobei mir Frank Kabel einfällt, ein Excel-MVP, der...(siehe Excelformeln - FORMELN - Übersicht - Tabellennavigation (9) - Letzte benutzte Zelle in einer Zeile oder Spalte (Frank Kabel in memoriam)):
=VERWEIS(2;1/(A1:A65535<>"");ZEILE(A:A))
=VERWEIS(2;1/(A1:A65535<>"");A:A)
Diese geniale Formel erhält den Namen: "Frank Kabel - Lösung".
(Frank verunglückte tödlich im Januar 2005.)
Fotos von u.a. Frank Kabel bei Infos. Eine, die ihn kurz zuvor noch traf ist Monika Weber aus der Schweiz (ebenfalls Excel-MVP), der sogar in Japan ein schwarzer Gürtel als "Cell Master" (This black belt is yours) verliehen wurde: Colo's Excel Junk Room - the road of the cell masters : Monika Weber, und die scheinbar Orchideen mag und hegt und pflegt. Eine "Kauffrau mit Eidgenössischem Fähigkeitsausweis"(!! Was ist denn das? Wie kann man das erwerben?). Da fällt mir nur noch but she's a girl... ein (es gibt eh so wenige girl geeks(?), geek girls(?) in diesem Metier, sie scheint eine davon zu sein, eine selbsterklärte "femina geekoides"). (Abgesehen von Christine mit ihrem "fotografischen Gedächtnis").

Und wann ist das nächste "Girl Geek Dinner"? Ah, da: Upcoming.org: London Girl Geek Dinner 10 Sponsored by Amazon! at Balls Brothers (Wednesday, February 21, 2007)
Wo ist Balls Brothers? Aber da ich weder im Februar in London noch Girl bin....ach....

Monday, February 05, 2007

Was mögen Programmierer jetzt am liebsten?

Scott Rosenberg zitiert in seinem wunderbaren Buch "Dreaming in Code" Larry Constantine, der wohl behauptete, dass Programmierer hauptsächlich programmieren wollen (und nicht etwa den Code von anderen lesen, verstehen und womöglich wiederverwenden wollen):
And programmers, as I quote Larry Constantine in my book, programmers are programmers because they like to code -- given a choice between learning someone else's code and just sitting down and writing their own, they will always do the latter.
Wobei Larry Constantine das angeblich noch um einiges prononcierter ausdrückte:
"Unfortunately, most programmers like to program. Some of them would rather program than eat or bathe. Most of them would much rather cut code than chase documentation or search catalogs or try to figure out some other stupid programmer's idiotic work.... Other things being equal, programmers design and build from scratch rather than recycle."
Interessant ist die Entgegnung von Jonathan Rentzsch, der meint, dass Programmierer nicht wirklich gerne programmieren, sondern gerne Probleme lösen würden (wobei das oft notgedrungen das Schreiben von Code beinhalten würde):
Summing up: programmers don’t like to code, we like to solve problems. Coding is not problem solving, but software problem solving usually involves some coding. Even when we talk about rewriting something, the objective is not to code, it's usually to get a better understanding of the problem for solving in the best possible manner.
Rafe Colburn meint dagegen hier:, dass es einfach solche und solche gäbe (die Codeschreiber aus Passion, und die, die möglichst wenig Code schreiben wollen):

I think the truth lies somewhere in the middle. I have worked with programmers who, asked to write a feature, never even look at a language's class library before hacking something out themselves. They like to code for the sake of coding.
As a programmer, I'd prefer to do as little programming as possible. I try to make use of libraries when they're available and to find the best tools possible in order to help me avoid both coding and debugging. I like working with programmers who work the same way, because maintenance is rarely any fun.

Und wozu rechne ich mich? Also, eigentlich zu den Wenigcodern. Den Minimalcodern. Probleme mit wenig Code lösen! Kurze, prägnante, simple, sprechende, verständliche Programme, die sich geschickt vorhandene Lösungen/Bibliotheken/APIs/wasauchimmer zunutze machen. Erst lange suchen, dann vielleicht coden! Ja, eindeutige Präferenz zunächst nach vorhandenen Lösungen zu suchen, und nur im Ausnahmefall zu "coden". Nur die ganz simplen Lösungen sind die wirklich "schönen" und "befriedigenden".

Aber da hat wohl jeder so seine Präferenzen, oder?

Wednesday, January 31, 2007

Zaubern, zauberhaft....

Heute fühlte ich mich wie ein Zauberer, ein Software-Zauberer, weil ich mit Ruby Urls (aus einer Excelliste) im Internet Explorer aufrief, und dann noch Screencopies der aufgerufenen Adressen als JPG-Dateien abspeicherte (indem ich Tastenkombinationen über Autoit an Hardcopy schickte).Und das mit in etwa, ach weiß ich nicht genau, auf jeden Fall unter 10 Zeilen Code.

Wie ein Pferdepflüsterer fühlte ich mich, wie ein "Softwareflüsterer"....

Strotznormal!

Eine kleine Perle aus der Abteilung "Schönes Deutsch" und der Reihe "Seltene Wörter" scheint ja "strotznormal" zu sein! Ähnlich selten wie Fahnenfreudigkeit (nur mal bei Google suchen, sehr übersichtlich, die Trefferliste!), findet sich einer der wenigen Verweise hier:
(...) erklärte es der gebürtige Essener (Werner Müller, der ehemalige Bundeswirtschaftsminister) noch mal auf Deutsch: »Die RAG soll ein strotznormaler Konzern werden.«
Ist strotznormal so selten, weil es ganz alter, quasi ganz strotznormaler Essener Dialekt ist? Den natürlich nur ein gebürtiger Essener kennt? Oder ist strotznormal so eminent selten, weil sich Werner Müller einfach vertan hat? Letztendlich geht die Handvoll Verweise zu "strotznormal" auf keinen anderen als Werner Müller zurück (gebürtiger Essener hin oder her)!

Ich kannte "strotz" eher im Zusammenhang mit "strotzen"....vor Gesundheit strotzen...strotzen vor Kraft...voller Energie strotzen...was sagt denn der Duden? Aha:
strot|zen [mhd. strotzen, stroen, eigtl. = steif emporragen, von etw. starren, zu ...
Steif emporragen! Was soll denn das? Was heißt hier normal? Ach so, klar, ganz einfach, Müller stellt sich einen Konzern vor, der vor Normalität strotzt! Interessant! Interessante Wortschöpfung...

(Obwohl mich das an irgendwas erinnert...strotznormal...an ähnliche Wörter...ja, das wars....strunzdumm hat so einen ähnlichen Klang/Aufbau/Rhythmus)

Wednesday, January 03, 2007

Ein Lehrstück

Nach einigen persönlichen Erfolgen der letzten Zeit mit sehr simplen Ansätzen (Keep it simple and stupid!) - z.B. HTML mit etwas Javaskript anstatt ASP.NET mit Datenbank, kurzem Excelmakro statt ..., Excelliste statt Accessdatenbank - war ich umso verblüffter, welchen Verlauf das Thema einer persönlichen Zeiterfassung mit Excel unter einigen Kollegen nahm. Es kam mir wie ein Lehrstück vor, dass sich allerdings nicht auf einer Bühne, sondern direkt vor mir in Realität abspielte.

Fast schon versiert durch meine Erfolge und Erkenntnisse der letzten Zeit war die Sache mit der Zeiterfassung glasklar für mich: "Keep it simple and stupid!", "Do the simplest thing that could possibly work!". Also 3 Spalten: Datum, Von und Bis, ok, da war ja noch die Mittagspause, also noch eine Spalte Pause. Und dann einfach Zeile für Zeile untereinander, eine lange Liste für das ganze Jahr, und noch das nächste, vielleicht. Bisschen rechnen: Bis minus Von minus Pause. Zum Auswerten (an das man jetzt auch noch gar nicht denken muss: Vorsicht, no premature optimization!) dann irgendeine Pivottabelle, batschbumm, fertig. Minimaler Aufwand, maximales Ergebnis (ach, was heißt schon maximales Ergebnis, das bisschen Ergebnis halt, das hier gefragt ist....).

Genauso fing Kollege G. zunächst auch an. Dann empfand er allerdings eine lange Liste als nicht sonderlich "schön" und auch nicht wirklich "übersichtlich" und begann schon mal Tabellenblätter für die Monate zu machen. Zwischenzeitlich hatte er dann eh eine "fertige" Lösung im Internet entdeckt, mit allem Pipapo, sehr schön anzusehen, aber natürlich mit einem gewissen Konfigurationsbedarf. Welche Standardpausen sollen wann abgezogen werden, für Arbeitszeiten bis soundsoviel Stunden, zwischen und! Dann ließen sich Feiertage konfigurieren! Mittagspausenregelungen! Irgendwelche Ausnahmen! Vieles war überhaupt nicht klar, was dann den Ehrgeiz des Kollegen W., eines erklärten Excelliebhabers, anstachelte, der zunächst mal mit einem Programm den Blattschutz "crackte", um an die hinterlegten Formeln zu kommen, und um sich so überhaupt einen Reim auf die Funktionsweise des Programms machen zu können. Diverse Diskussionen wurden geführt, wie diese oder jene Einstellung zu verstehen sei, und sinnvollerweise konfiguriert sein sollte.

Nach vielem Hin und Her hatte man mit großem Aufwand die "Fertiglösung" in etwa auf ein (natürlich bunteres) Pendant meiner Simpellösung "herunterkonfiguriert" (mein Empfinden). Man fand dies auch keineswegs befremdlich, sondern zeigte sich höchst befriedigt. Meine Einwände, mein Favorisieren der "Simpellösung" wurde auch nicht wirklich verstanden, und irgendwann kam es mir einfach nur noch exemplarisch vor und hatte immer mehr den Eindruck, dass sich hier im Kleinen genau das zeigte, was ansonsten im großen Maßstab völlig genauso ab- und zuzeiten auch mal schiefläuft.

Und mir ging ein Strauß an gegensätzlichen Begriffen durch den Kopf:
  • Ergebnisorientierung -- vs -- Spieltrieb
  • Keep it simple and stupid -- vs -- Premature Optimization
  • "Was brauche ich mehr?" -- gegen -- "Aber vielleicht brauche ich mal..."
  • Spröde -- gegen -- Sexy
  • Langweilig -- gegen -- Interessant
    (Wie bei Autos: Wenig Knöpfe => wenig interessant, viele Knöpfe => interessanter)
  • ...... -- gegen -- Entdeckerlust
    (Irgendein "verstecktes", wahnsinnig tolles Feature könnte ja drinstecken)
  • "Das ist alles!" -- vs -- "Ist das alles?"
  • Eigener Gestaltungsspielraum -- gegen -- vorgegebener Gestaltungsspielraum
  • Do the simplest thing that could possibly work -- gegen -- "Komplexe Lösung"
    (Scheinbar hat man schnell das Gefühl, dass das Einfachste sowieso nicht ausreichen wird ("zu billig ist") und dass man bald eh mehr braucht)
  • Bottom Up -- vs -- Top Down
    ("von unten" an die Lösung herantasten gegen mühsam "von oben" herunter arbeiten)
  • Unfolding -- vs -- .....
    (Lösung "sich entfalten" lassen gegen Rumwurschteln am Vorgegebenen)
  • Inhalt -- vs -- Form
  • "Ich kann das." -- vs -- "Das kann das."
  • "Selber machen" -- vs -- "Hernehmen"
  • prudence -- vs -- eagerness
  • "Weniger ist mehr." -- vs -- "Mehr ist einfach geil."
  • Ich kann das. -- vs -- Ich hab das.
  • Alles zu seiner Zeit. -- vs -- Alles auf einmal.