Thursday, December 27, 2007
Javascript wiederentdeckt!
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
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

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
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!
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)Supercool, oder?
{
label1.Text = "Hello, World!";
}
Monday, August 20, 2007
Big Ball of Mud / 6
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 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
- "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
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.Großer Matschklumpen? Riesenmatschklumpen?
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?
Friday, August 10, 2007
Big Ball of Mud
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
- 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.Hoppala, ausgerechnet beim "Wenn" hat die Übersetzung versagt?!
-Wenn a defined project the temporal possibilities of the employee team would blow up.
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ß...
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
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....)
Tuesday, June 19, 2007
Ruby: "dynamic hash-tree"
...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
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.
Wednesday, June 06, 2007
Reduzieren, beim Kochen und beim Programmieren
"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").Selectwenn man das aktuelle Datum/Uhrzeit auch so in eine Zelle von Excel schreiben kann:
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
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
- Blindbacken
- Hohl auslösen
- Klären
- Trockenschleudern
- Trockenschwenken
- Verschütteln
- Plattieren
- Mazerieren
- Abbröseln
- Abschwaden
"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
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
- 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..
Friday, April 27, 2007
Plan for Change
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.
Thursday, April 19, 2007
Telefonverzeichniss?

Ojeoje....
Wednesday, April 18, 2007
Sunday, April 15, 2007
Verflixt und zugenäht: DAO, ADO, TAO, ...???
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: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.)
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:Kan D. wrote:My summary would be, there are some things that DAO can do that ADO
> somebody tell me the adv/dis-adv to using ado vs. dao
can't (...) and vice versa (...).
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: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.
- dao vs tao - Google Search
TAO vs. DAO? How does that go again?? - tao vs dao
- dao vs hibernate
- DAO vs Entity Beans
- ojeoje...
Friday, April 13, 2007
Wurstsalat, Griebenschmalz, Stichpimpuli...
Wurstsalat!
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!
- 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"
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!
"...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.
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
- 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
- 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....
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!"
- 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.
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!
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 AnarchaiaAch, 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?
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?
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 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ährendGehts noch länger? Noch umständlicher? Noch gewundener? Aber klar (das war noch nicht alles), da werden noch ein paar hilflose Erklärungsversuche nachgeschoben:mit dem OLE-Server oder ActiveX-Steuerelement kommunizierte.
Der Ausdruck gibt möglicherweise.... (den restlichen Schmarrn erspare ich hier)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:
Beim ...(weiterer Schmarrn)... trat möglicherweise ein Fehler auf.
Blablabla.... es kann sich um eines der folgenden Probleme handeln: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.
Ein Bezug fehlt...
blablabla
Ein Ausdruck ist falsch buchstabiert....
blablabla
Insgesamt werden 8 potentielle Probleme genannt!
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!
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
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
Wednesday, February 21, 2007
Project Code Names
- 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
- "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!"
Thursday, February 08, 2007
In Memoriam
In MemoriamCheryl 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](...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)):
FROM [Earth]
HAVING [Talent]="Exceptional";
=VERWEIS(2;1/(A1:A65535<>"");ZEILE(A:A))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").
=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.)
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?
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.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".
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.
Aber da hat wohl jeder so seine Präferenzen, oder?
Wednesday, January 31, 2007
Zaubern, zauberhaft....
Wie ein Pferdepflüsterer fühlte ich mich, wie ein "Softwareflüsterer"....
Strotznormal!
(...) 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|zenSteif 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...[mhd. strotzen, stro en, eigtl. = steif emporragen, von etw. starren, zu ...
(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
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.