rush – die Ruby-Shell
Interessanter Artikel auf InfoQ über rush, eine objekt-orientierte Shell in welcher man direkt Ruby Code schreibt und Objekte anstelle von Text manipuliert.
Interessanter Artikel auf InfoQ über rush, eine objekt-orientierte Shell in welcher man direkt Ruby Code schreibt und Objekte anstelle von Text manipuliert.
Soeben in der Februar-Ausgabe von Computer gelesen: BLUI, das Blowable User Interface. Ziemlich lustige Idee, den PC mit blasen zu steuern. Die Auflösung ist wohl nicht besonders toll, aber es scheint grundlegend zu funktionieren:
Meine Freundin hat mir aus Ägypten ein Fanta Blackcurrant mitgebracht, sehr sehr lecker:

(iTunes mässige Reflexionen von Hand gemacht!)
Hat jemand eine Idee, wo ich das in der Schweiz kaufen kann? Googeln hat soweit nichts gebracht, auch nicht mit “Fanta Cassis”. Einen Versuch wert wäre Jelmoli, der hat ja auch so wirre Dinge wie Diet Coke Plus, also Cola Light mit Vitaminen und Mineralien…
Lange habe ich auf dieses Buch gewartet, einige Monate musste es auf meinem Wunschzettel warten bis es dann endlich erschienen ist:

Obwohl mein Chef meinte, dass das Buch nichts für mich sei, ich würde daraus nicht viel Neues lernen, habe ich es trotzdem gelesen, schliesslich will ich darüber bloggen und es dem “richtigeren” Zielpublikum (vielleicht) näherbringen. Kent Beck hat 77 Patterns gesammelt und niedergeschrieben, die sich mit dem schreiben von Code befassen. Dabei handelt es von verschiedenen Bereichen, von guter Namensgebung bei Variablen bis zur Evolution von Frameworks.
Wer Kent Beck’s Bücher kennt der weiss, dass diese selten sehr lang sind, auch in diesem Fall bekommt jedes Pattern im Schnitt knapp zwei Seiten Text. Es sind aber auch keine Design-Pattern, weshalb es kaum UML-Diagramme und auch wenig Code zu sehen gibt. Ich bin mir auch nicht sicher, ob man wirklich alles ein Pattern nennen kann und es teilweise nicht einfach “Best Practices” oder sogar Grundlagen der OO-Programmierung sind. Beispiele hierfür sind die Pattern “Method Visibility” und “Overridden Method”. Trotzdem glaube ich, dass das Buch ideal für Neulinge (beispielsweise als Ergänzung zum Modul Programmieren 1 an der HSR) ist, wenn man zwar die Syntax seiner ersten Programmiersprache gelernt hat und auch was implementieren kann, aber sich trotzdem nicht sicher ist, ob das auch “richtig” oder gut ist was man da macht.
Ein weiterer, sehr wichtiger Aspekt (vielleicht sogar der wichtigste) von Pattern ist ja, dass sie Dingen einen Namen geben, so dass sich unter Entwicklern ein gemeinsames Vokabular bildet. Dafür ist das Buch sehr gut zu gebrauchen, allerdings auch nur, wenn die Teammitglieder die Begriffe auch kennen… *wink-mit-dem-zaunpfahl*
Eines meiner Lieblingspattern im Buch ist “Method Object”. Nehmen wir an, wir haben eine ziemlich lange Methode. Was kann man dagegen tun? Ja genau, “Extract Method”! Was aber, wenn man viele lokale Variablen hat und die Parameterlisten der neuen Methoden immer länger werden? Dann erstellt man am besten eine neue Klasse, welche die lokalen Variablen als Instanzvariablen besitzt, verschiebt die lange Methode in die neue Klasse und zerhackt diese dort ordentlich in kleinere Stücke und führt wenn nötig weitere Refactorings durch. Ziemlich schön, oder?
Auch “Rate of Change” finde ich sehr interessant, und bietet wohl einigen Diskussionsstoff. Beck schreibt nämlich:
All the fields in a single object should change at roughly the same rate.
Sobald dies nicht der Fall ist, oder die Lebenszeiten von Instanzvariablen einer Klasse unterschiedlich sind, sollte man das ganze wahrscheinlich in eine Hilfsklasse auslagern. Natürlich gibt es auch hier Ausnahmen, aber Grundsätzlich finde ich das keine schlechte Idee.
Noch ein Zitat, mit dessen Aussage ich aber ausnahmsweise mal nicht einverstanden bin:
Duplication isn’t evil, it just raises the cost of making changes.
Ja, das hat er wirklich geschrieben. Duplizierung soll nicht böse sein? Ha! Mit jedem Ctrl+V wird eine Katze getötet, oder wie das auch immer genau ist.
Also, insgesamt ein, wie erwartet, sehr gelungenes Buch, welches nicht nur für Anfänger ist und ich allen ans Herz lege.
Wie bereits gebloggt, habe ich den zweiten Platz des Dynamic Languages Shootouts gewonnen, und heute ist der Preis angekommen:

Ich möchte mich vielmals bei der Jury und der Organisation dafür bedanken!
Zum Glück bin ich noch nicht im Bett, an Schlafen wäre im Moment nicht zu denken… weshalb? Guggenmusik! Echt, um 1:30! Krass

Juhui, ich habe eine Persai-Einladung bekommen. Was ist Persai? Gute Frage.. vom Namen her soll es (glaube ich) soviel wie Personal AI bedeuten, aber mehr erfährt man sicher im Blog der Entwickler. Soviel ich verstanden habe, ist es eine Art persönliche Suchmaschine, die einem für gewisse Interessen, die man natürlich angeben muss, dazu passende Neuigkeiten mitteilt. Hört sich eigentlich ganz cool an
Dabei soll das System natürlich eine gewisse Intelligenz besitzen und mit der Zeit lernen, was mich wirklich interessiert und was nicht.
Ich hoffe natürlich auch, dass es ein riesen Erfolg wird und ich dann meinen Enkeln mal dieses Foto, das mich und 2/3 der Persai-Gründer (die beiden links) zeigt, zeigen kann. Hehe ,-)

Der Titel des Buches hört sich eigentlich recht spannend an, allerdings war ich skeptisch, schliesslich sind Patterns nicht per se an eine bestimmte Sprache gebunden, andererseits kann man mit Sprachen wie Ruby doch einiges anders machen als beispielsweise in Java. Schlusendlich hat mir mein Bruder die Entscheidung leichter gemacht und es mir einfach zu Weihnachten geschenkt. Danke!

Im Buch werden der Reihe nach rund die Hälfte der GoF-Patterns beschrieben und so umgesetzt, wie das wohl ein von Java kommender Ruby-Neuling tun würde. In weiteren Schritten werden die Implementierungen verbessert und Ruby-typischer gemacht. Beispielsweise kann man für einen Adapter einfach die bestehende Klasse öffnen und einen Alias für den benötigten Namen einfügen. Eine Implementierung des Command-Patterns kann man mit Blöcken sehr einfach gestalten, usw.
Bevor es an die Pattern geht muss man sich zuerst durch eine Ruby-Einführung kämpfen. Wie wenn es nicht bereits genug Ruby-Bücher und Tutorials geben würde! Stellt euch vor, in jedem Java-Buch hätte es noch eine Java-Einführung drin, das ist ja echt nicht nötig. Aber zum Glück kann mans ja einfach überblättern.
Die einzelnen Kapitel über die GoF-Patterns sind dann leider auch nicht besonders spannend, und je weiter ich mich durchquälte desto mehr fragte ich mich, wen das Buch überhaupt erreichen will. Leute die eine Ahnung von Design-Patterns und Ruby haben (dazu würde ich mich zählen) wohl eher nicht, denn auf die eleganteste Ruby-Umsetzung kommt man relativ schnell selbst. Wenn man keine Ahnung von Ruby hat, dann sollte man meiner Meinung nach sowieso erstmal die Sprache lernen, gleich mit Design-Pattern anzufangen halte ich für unnötig. Falls man von Design-Pattern keine Ahnung hat aber von Ruby, dann sollte man unbedingt zu einem richtigen Pattern Buch greiffen, denn die Erläuterungen sind eher knapp. Was bleibt noch für eine Zielgruppe? Ach ja, wenn man von beidem keine Ahnung hat. Dann ist das Buch wohl zu oberflächlich für beide Themen.
Immerhin werden die letzten drei Kapitel wieder etwas interessanter, dort geht es um Ruby-typische Pattern wie “Convention over Configuration”, interne DSLs und Meta-Programmierung. Schade, dass nicht das ganze Buch in diesem Stil war, es wäre eine deutlich interessantere Lektüre gewesen.
Vielen Dank nochmals an Robin, der mir das Buch geschenkt hat!
Entschuldigung an alle, die sich nicht für den Planet-HSR interessieren, aber ich hatte keine Lust einen eigenen Blog nur dafür aufzusetzen.
Wie viele sicher bereits gemerkt haben, funktioniert der RSS-Feed des Planets im Moment nicht, eine Lösung habe ich momentan auch noch nicht. Als Alternative kann ich den Atom-Feed (http://planet-hsr.ch/atom.xml) empfehlen, der funktioniert weiterhin. Sorry!