Tutorial: Einfache Simulation mit Akka und Actors

Akka ist ein schönes Toolkit, um hochparallele Anwendungen auf der Grundlage von Actors zu schreiben. Ich möchte hier ein paar Grundprinzipien vorstellen, um schnell in die Materie einsteigen zu können. Man kann Akka sowohl mit Scala als auch mit Java einsetzen, gewohnheitsmäßig habe ich mich für letzteres entschieden.

Den theoretischen Hintergrund liest man am besten hier nach, es gibt aber auch allgemeine und deutschsprachige Erläuterungen bei Wikipedia.

Schauen wir uns ein praktisches Beispiel an: Ich möchte eine kleine Simulation erstellen, in der ein Fuchs und mehrere Hasen unterwegs sind. Der Fuchs ist natürlich hungrig und frisst jeden Hasen, der ihm über den Weg läuft. Die einzige Chance der Hasen ist es, sich schnell genug zu reproduzieren, um nicht auszusterben.

Übersetzt in ein Actor Model bedeutet das: alle "Lebewesen" müssen als einzelne Actors parallel ausgeführt werden, während ein übergeordneter Simulations-Actor steuert und überwacht. Actors übergeben sich dabei unveränderliche (immutable) Nachrichten, greifen aber nicht auf innere Variablen oder Methoden anderer Actors zu.

Full story »

Yapbam-Übersetzung

Ein paar freie Tage habe ich zur Übersetzung von Yapbam ins Deutsche genutzt. Yapbam ist "Yet another personal bank account manager", also ein Kontenverwaltungsprogramm. Man kann Überweisungen und Zahlungseingänge manuell eingeben oder (viel praktischer) CSV-Daten aus anderen Programmen oder aus dem Online-Banking importieren und dann sehr übersichtlich grafisch darstellen.
Wer Java Swing-basierte Anwendungen schreibt, findet im Sourcecode interessante Anregungen, z.B. einen Update- und Plugin-Mechanismus, Diagramme mit JFreechart und einen Währungsrechner mit aktuellen Wechselkursen der Europäischen Zentralbank.

Dekonstruktion und Askese in der Softwareentwicklung

Es gibt verschiedene Formen von Angelruten, aber die bekanntesten bestehen aus einer mehrteiligen Rute, einer Rolle, Laufringen, Schnur, Gewichten, Schwimmer und Haken. Mit dem richtigen Köder wird das Ensemble einsatzbereit und man darf auf einen ordentlichen Fang hoffen.

Die Einzelteile der Angel unterscheiden sich nicht nur in ihren Aufgaben, sondern auch in ihrer Wichtigkeit. Angelrute und Rolle sind praktisch, aber man könnte die Schnur von einem Steg aus auch direkt ins Wasser ins Wasser halten. Dann bräuchte man nur einen Handschuh, um Schnittwunden zu vermeiden. Wer die Schnur selbst hält, kann auch auf den Schwimmer verzichten. Ist der Köder schwer genug, fallen zusätzliche Bleigewichte an der Schnur weg. Bleiben am Ende nur Schnur, Haken und Köder übrig? Was davon könnte man weglassen?
Ganz einfach: alle drei. Einen Bestandteil der Angel habe ich noch nicht erwähnt: den Widerhaken. Klein und unscheinbar versteckt er sich an der Spitze des Hakens. Ohne ihn würde der Fangerfolg in weite Ferne rücken. Behalten wir nur den Widerhaken und ersetzen den ganzen Rest durch einen Stock. Etwas Übung, und wir können uns erfolgreiche Speerfischer nennen.

Full story »

CatchUp 4.0


Der CatchUp Podcast Reciever ist in der Version 4.0 schneller, stabiler und kompakter geworden. Das war nur mit umfangreichen Änderungen möglich:
Als Datenbank-Engine setze ich jetzt Neodatis statt db4o ein. Das hat die Startzeit wesentlich verkürzt.
Den bisherigen Groovy-Java-Mix habe ich durch reines Java mit Standard-Libraries wie Rome und Apache Commons Exec ersetzt. Das hat die Gesamtgröße von 7 auf 4 MB reduziert, selbst mit zusätzlichem Substance Look and Feel.
Als Build-Tool kommt nun Maven zum Einsatz, verbunden mit statischer Codeanalyse in Sonar.

Labyrinthe bauen

Es ist erstaunlich einfach, ein Labyrinth zu bauen, und man findet dazu auch eine Menge Anleitungen. Ich möchte hier die Beschreibung von MazeWorks aufgreifen und in Java umsetzen.

Im Rohzustand besteht das Labyrinth aus einer Anzahl von Zellen, die alle von vier Wänden begrenzt sind. Darin entstehen dann die Gänge, indem man an einer beliebigen Stelle startet und dann die folgenden Schritte so lange wiederholt, bis man in allen Zellen einmal gewesen ist:

  1. Wähle eine beliebige Nachbarzelle, in der Du noch nicht warst.
  2. Wenn Du eine findest, dann entferne die Zwischenwand zu dieser Zelle und begebe Dich dorthin. Wenn Du keine solche Nachbarzelle findest, gehe zurück zur letzten besuchten Zelle.

Klingt ganz einfach, und die Umsetzung ist auch nicht schwer.

Full story »

Framework zum Spielen?

Gleich vorweg: Nein, das Play Framework dient nicht der Spieleprogrammierung. Es geht um ganz normale Webanwendungen, und zwar in Java. Damit bekommt die immer länger werdende Kette von Webframeworks eine weitere Perle angehängt, und nach erster Betrachtung scheint es sich um ein sehr interessantes und sehenswertes Exemplar zu handeln! Jedenfalls, wenn man Wert auf eine flache Lernkurve, gute Toolunterstützung und Effizienz legt. Java sollte man schon beherrschen, aber viel mehr braucht man eigentlich nicht.

Wenn ich ein neues Framework anschaue, frage ich mich zuerst, ob ich damit schneller zum Ergebnis komme als mit Grails. Der nächste wichtige Punkt ist, wie schnell sich Änderungen am Datenmodell und in der Benutzeroberfläche vornehmen lassen (Erweiterung, Refactoring, Deployment). Und nicht zuletzt geht es auch darum, wie klar und übersichtlich man den Quellcode strukturieren kann. Was erzwingt das Framework, was kann man nach eigenen Vorstellungen organisieren?

Full story »

:: Nächste >>