Neuer Job: InfoQ Editor

Phu, ist schon eine ganz schön lange Zeit her seit ich das letzt Mal gebloggt habe. Allerdings habe ich auch eine gute Ausrede: Ich bin momentan im WK und habe die Hälfte bereits überstanden. Es soll nun aber nicht vom WK handeln, schliesslich bin ich im Urlaub.
Eigentlich will ich von meinem neuen Job erzählen! Die einen oder anderen habens vielleicht schon bemerkt, bei InfoQ ist in den letzten Wochen ab und zu ein News Item aufgetaucht, bei welchem “Posted by Mirko Stocker” steht. Das ist eigentlich gar nicht korrekt, denn geposted wurde bis jetzt freundlicherweise immer von Werner, da ich nicht von Anfang an Zugriff aufs InfoQ-CMS hatte. Aber geschrieben hab ichs schon selbst. :) Trotzdem nochmals ein grosses Dankeschön an Werner, der mich für die ganze Sache motiviert hat!

Muss ich viele Worte über InfoQ verlieren? Ich hoffe nicht! Um einfach mal von der About InfoQ Seite zu zitieren:

InfoQ.com (Information Queue) is an independent online community focused on change and innovation in enterprise software development, targeted primarily at the technical architect, technical team lead (senior developer), and project manager. InfoQ serves the Java, .NET, Ruby, SOA, and Agile communities with daily news written by domain experts, articles, video interviews, video conference presentations, and mini-books.

Und ich glaube, 274489 Unique Visitors im Monat März sprechen für sich.

Bis jetzt habe ich über folgende Themen geschrieben:

Bis jetzt macht mir das Schreiben sehr viel Spass. Auch die kleinen Interviews mit Entwickler sind meist sehr interessant. Also, die Interviews mit Entwicklern waren bis jetzt immer spannend, nur einmal hatte ich Pech und bin an einen Marketing-Menschen gelangt, welcher mir eine mehrere Seiten lange Antwort geliefert hat, leider ohne wirklichen Inhalt, dafür mit vielen Buzzwords. Hauptsache war wohl, dass ich auch gesehen habe, dass das Mail von seinem Blackberry aus gesendet wurde… janu, was solls.

Ach ja, ich habe “neuer Job” geschrieben. Das bedeutet nicht, dass ich meine bisherige Anstellung aufgegeben habe, bei InfoQ bin ich einfach als freier Mitarbeiter angestellt.

2 comments »

Videos der RubyConf 07

In den letzten paar Wochen (wenn nicht sogar Monaten) habe ich diverse Aufzeichnungen der RubyConf 07 heruntergeladen und natürlich auch angesehen. Die meisten davon waren sehr interessant. Jetzt habe ich lange überlegt, ob ich überhaupt was darüber schreiben soll, da ich mir meistens nur ein paar Stichworte notiert und irgendwie auch keine Lust mehr habe, das ganze zu überarbeiten. Aber veröffentlichen kann ich es ja trotzdem, vielleicht nützt es jemandem was:

What makes code beautiful (Marcel Molina, Jr):
Schöne Dinge sind ansprechender, “Gut” ist Schönheit in Aktion. Wichtig für Schönheit sind: Proportion, Integrität, Klarheit, die 3 müssen in Balance sein.

Advanced Ruby Class Design (Jim Weirich):
A Real Programmer can write Java code in any language! -> Ruby bietet noch viel mehr, einige Beispiele in der Präsentation. Rake, Builder als Beispiele.

Treetop (Nathan Sobo):
Parsing expression grammar für Ruby. Sehr elegant, Methoden lassen sich direkt in Ruby auf den einzelnen Knoten definieren. Live-Demo eines Parsers für arithmetische Ausdrücke.

Matz:
Nicht so interessant, er benützt Emacs und sein Englisch ist nicht so toll.

JRuby (Thomas Enebo, Charles Nutter):
Ganz interessant. Erfreut waren die beiden auch, dass so viele Ruby-IDEs JRuby verwenden um an den AST zu kommen, da JRuby so genau Knoten-Positionen habe. Leider wurden wir nicht erwähnt..

Ropes (Eric Ivancich):
Grundsätzlich interessant, eine Alternative zu Ruby’s Strings, aber mühsam zum zuhören, da Slides und Video nicht synchron (Paper).

Rubinius (Evan Phoenix):
Cooler Vortragsstil, sehr unterhaltsam, nicht sehr viele technisch interessante Inhalte. Was ich mitgenommen habe: Rubinius ist Ruby für Ruby-Programmierer!

Maximizing Productivity (Eric Hodel)
Ein paar gute Ideen, aber nichts neues: Test First, Autotest, alles automatisieren!

Conversations vs. Laws (Francis Hwang):
Vergleiche von Typsystemen mit der Biologie, all things fall apart => nichts ist wirklich beständig.

Essential Incompleteness in Program Modeling (Luke Kanies):
Ziemlich abstrakter Vortrag mit viel Mathe, der Vortragende errinnerte mich an einen gewissen Dozenten der HSR. Modelle können entweder konsistent oder komplett sein (nach Gödel). Wir entscheiden, wie nah das Modell der Realität kommen soll, bzw. wann es nicht mehr konsistent ist.

Rubigen (Dr. Nic Williams):
Geniale Folien mit A-Team Videos und Comics. Gute Ideen, ich werde sicher mal Newgem ausprobieren um möglichst einfach die ganze Gem/Rubyforge-Infrastruktur zu erstellen.

RSpec (David Chelimsky, Dave Astels):
Wenn man diesen Vortrag gehört hat und noch nicht von RSpec überzeugt ist, dem ist nicht mehr zu helfen… :)

JRuby in the Wild (Kyle Maxwell):
Habe ich nach ein paar Minuten wieder aufgehört, zu langweilig. Vielleicht interessant, wenn man JRuby noch nicht kennt.

Cleanliness Is Next to Domain Specificity (Ben Scofield):
DSLs (zumindest interne) sind eigentlich meistens Dialekte und nicht Sprachen, zumindest wenn man mit echten Sprachen vergleicht. Im zweiten Teil ein DSL-Refactoring, in dem er grausigen Ruby-Code nimmt und schöner macht.

No comment »

JRuby Deployment mit Java Web Start

Aufgrund der Erfahrungen, die ich beim Dynamic Languages Shootout mit JRuby und Web Start gemacht hatte, habe ich für InfoQ einen Artikel darüber geschrieben.

Ich erkläre anhand einer kleinen (und witzigen) Applikation, dem Ruby ObjectSpace Browser, die Grundlagen der JRuby/Swing Interaktion und natürlich auch das Packaging und Deployment des ganzen als Jar mit Hilfe von Web Start. Aber bevor ich jetzt den ganzen Artikel hier zusammenfasse, so lang ist er nämlich gar nicht, lest ihn besser gleich selbst.

Vielen Dank auch noch an Werner, der mich überhaupt darauf gebracht hat für InfoQ zu schreiben!

No comment »

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.

No comment »

Herzlichen Dank JavaSPEKTRUM!

Wie bereits gebloggt, habe ich den zweiten Platz des Dynamic Languages Shootouts gewonnen, und heute ist der Preis angekommen:

dls_danke_oberkorper.png

Ich möchte mich vielmals bei der Jury und der Organisation dafür bedanken!

4 comments »

Gelesen: Design Patterns in Ruby

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!

design_patterns_in_ruby.png

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!

6 comments »

Dynamic Languages Shootout

Als Stefan Keller mir das erste Mal das Inserat des Dynamic Languages Shootout im Java-Spektrum gezeigt hatte, fühlte ich mich eigentlich nicht besonders davon angesprochen. Zum einen mag ich den Begriff “Dynamic Languages” nicht besonders (darüber vielleicht ein anderes Mal..) und ein Shootout, naja, war mir irgendwie alles zu reisserisch. Die Aufgabenstellung habe ich dann doch durchgelesen, und dachte mir, das ist ja eigentlich ganz einfach: Es geht grob darum, ein Programm zu erstellen, welches 5 Runden Scrabble spielt. Das Wörterbuch ist vorgegeben, pro Zug bekommt man 7 neue Buchstaben. Und schon hatte ich angefangen, mir zu überlegen, wie ich es umsetzen würde, und so nahm alles seinen Lauf…

Mein erster Ansatz bestand darin, mit dem vorhandenen Buchstaben alle möglichen Kombinationen zu bilden und diese dann im Wörterbuch nachzuschlagen. Das Problem, mit 7 Buchstaben gibt es 13699 Möglichkeiten, bei 9 Buchstaben sind es schon 986409, und mit 10 sinds 9864100 (eine elegante Formel hab ich leider nicht parat.. ). Mit etwas Pech sind es in der 5. Runde sogar 5 * 7 – (4 * 2) = 27 Buchstaben.

Ok, nächster Versuch: Performanter ist es, jedes Wort im Wörterbuch durchzugehen und zu prüfen, ob man es mit den vorhandenen Buchstaben bilden kann. Das gibt zwar auch noch einen Haufen zu tun, aber immerhin ist die Zunahme linear. Als nächstes werden die Wörter nach ihrer Wertigkeit sortiert und danach einfach versucht, auf dem Spielfeld korrekt zu platzieren.

Nachdem ich nun schon zwei Abende investiert hatte, wollte ich eigentlich auch am Wettbewerb teilnehmen, allerdings fehlte mir noch eine gute Idee für die Kür. Das Inserat hat Stefan im Java-Spektrum entdeckt, was mich denn auch auf die Idee brachte: Das ganze mit JRuby zu machen und ein Swing-GUI zu implementieren, natürlich alles in Ruby. Um das ganze noch etwas cooler zu machen, habe ich alles in ein Jar verpackt und das Ganze lässt sich per Java Webstart starten. Wie gesagt, ohne eine Zeile Java-Code.

Aussehen tut es folgendermassen:

scrabble_screenshot.png

und ausprobieren kann man es von hier aus. Eine der Anforderungen war auch, dass das ganze Dokumentiert wird, also habe ich auch mal etwas rdoc geschrieben.

Ach ja, es hat dann doch für den 2. Platz gereicht. Und gegen Smalltalk zu verlieren macht mir überhaupt nichts aus. :)

13 comments »

Everyday Scripting mit Ruby oder: Werden die PragProg-Bücher immer dicker?

Als ich heute meine beiden neusten Bücher der Pragmatic Programmers ausgepackt habe, viel mir auf, dass beide ziemlich viele Seiten haben. Auch mein aktuelles Buch ist nicht allzu dünn. Könnte es sein, dass ihre Bücher immer dicker werden? Fände ich schade, denn ich lese eigentlich lieber kleine, kompakte Bücher.

Wie finde ich das jetzt am schnellsten heraus? Auf der Webseite gibt es eine schöne Liste aller Bücher, die sich ausserdem nach Release Date sortieren lässt. Perfekt! Also rasch eine Konsole mit irb gestartet, und das Dokument geöffnet:

require 'open-uri'; require 'hpricot'
doc = Hpricot(\
  open("http://pragprog.com/categories/all?sort=pubdate"))

Die Links zu den Detailseiten aller Bücher (”a”s in einem div mit class=”thumbnail” Attribut) fand ich mit Hilfe folgender Query:

books = \
  (doc/"div[@class=thumbnail]/a").collect \
    {|link| link.attributes["href"] }

Es hilft natürlich extrem, wenn die Webseite vernünftig aufgebaut ist und vieles in divs mit css-Klassen unterteilt. Die Anzahl Seiten aller Bücher findet man mit:

pages = books.collect {|book|
  doc = Hpricot(open(book))
  (doc/"div[@class=stats]").collect {|stat|
    stat.inner_html.strip.split(' ').first unless stat.inner_html =~ /friday/
  }}.flatten.compact.reverse

Mich interessieren nur die echten Bücher, deshalb habe ich die PDFs der Friday-Serie ausgelassen.

Nun haben wir also ein Array mit den Seitenzahlen aller Bücher. Sehr viel nützt das noch nicht, wir sollten das ganze vielleicht mit Gnuplot visualisieren:

Gnuplot.open do |gp|
  Gnuplot::Plot.new( gp ) do |plot|

    plot.ylabel "Seiten"

    y = pages.collect{|y| y.to_i }
    x = (1..y.length).to_a

    plot.data << Gnuplot::DataSet.new([x,y]) do |ds|
      ds.with = "lines"
    end
  end
end

Und das schönste daran? Es hat nur eine halbe Stunde gedauert (inkl. Gnuplot kompilieren ;) ), genau so lange wie ich währenddessen meine Blutwurst gekocht habe :-)

Ach ja, das Resultat:

pragprog_seiten.png

Man könnte das wohl noch schöner machen, aber es reicht mir eigentlich, denn man sieht, dass die Seitenzahlen eher zunehmen...

3 comments »

Ruby ist cool (und Java leider nicht ganz so)

Ruby ist cool, das ist wohl jedem klar, oder? :) Falls nicht, schaut euch mal den Beitrag von Daniel Berger an. Sieht doch wirklich chic aus, wenn man die korrekten, mathematischen Symbole benutzen kann.

“Hm, mit Java müsste das doch auch gehen, immerhin wissen wir, dass auch Umlaute erlaubt sind”. Also, Eclipse gestartet und ausprobiert:

java_sigma.png

Den Screenshot von der Greenbar muss man sich halt vorstellen.. ;)

Mit Lambda kann man unter Java eh nichts rechtes Anfangen, und das Wurzelzeichen wurde leider auch nicht als gültiger Identifier akzeptiert. Also leider nur ein Teilerfolg.

Ach ja, wie tippt man denn überhaupt beliebige Unicode-Zeichen? Mit der Kombination Ctrl+Alt+Shift+u und dann die Hex-Nummer das Codes, also beispielsweise 3A3 für Σ. Ich weiss aber nicht, ob das unter Windows so auch funktioniert, die Kombination ist, soviel ich weiss, GTK-spezifisch.

5 comments »

CodeGear’s 3rdRail

CodeGear (von Borland) bietet neuerdings eine eigene, kostenpflichtige, Rails-IDE namens 3rd Rail auf Basis des DLTK-Ruby Projektes an. In den Produkt-Features werden grossartige Refactoring-Möglichkeiten angekündigt, deshalb habe ich mir mal die 30-Tage Demo-Version heruntergeladen.

Improve and simplify application design with 3rdRail’s refactoring tools to reorganize application code without changing results.

Von Haus aus bietet DLTK-Ruby bereits ein paar Refactorings, und zwar das Verschieben von Code (static method, field und instance method, ich habs aber bisher nie erfolgreich anwenden können) und das Umbenennen von gewissen Elementen. Unter 3rd Rail sieht das Menu nun so aus:

3rdrail_refactoringmenu.png

Ja das ist alles.. und wies aussieht, kann man damit genau Actions umbenennen, mehr habe ich nicht hinbekommen. Ich glaube, die hätten wohl auch besser unsere Plug-ins genommen, bzw. würden uns etwas sponsoren für die Rails-spezifischen Refactorings.

Zudem wundere ich mich über folgendes Zitat auf der Produkteseite:

… 3rdRail gives me [blabla] and refactoring that make me insanely productive

Oder auch DHH’s Aussage:

This opens up a whole new world for things like advanced refactorings …

Verstehe ich nicht ganz, was genau soll jetzt 3rd Rail im Gegensatz zum normalen RDT oder DLTK krasses bieten?

No comment »