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!