logo
falkoriemenschneider.de
Software: Projektmanagement, Architektur, Methoden.
home
blog
tools
text
links
kontakt

2010
2009
2008
2007
2006

Weblog

UI Builder, 5.8.2011

Textuelle Beschreibung von Web oder Rich Client UI Masken ist auf den ersten Blick eine unnatürliche Idee. Immerhin müsste sich doch wenigstens derjenige Teil unserer Software, bei dem es auf das gute Aussehen ankommt, ideal graphisch erstellen lassen. Graphische UI Builder sind eine Klasse von Werkzeugen, die genau das ermöglichen. Softwarentwickler müssen den UI Code nicht von Hand schreiben, sondern können ihn WYSIWYG bequem zusammenklicken, sie verwenden scheinbar eine graphische DSL. Seit kurzem gibt es unter Eclipse sogar ein brauchbares freies Plugin: WindowBuilder.

Da ich momentan als Architekt den Bau eines Rich Client vorbereite, habe ich mir WindowBuilder genauer angesehen... und war eigentlich zufrieden. Allerdings nervt mich die Mausschubserei und das zeitraubende, teilweise redundante Eintragen von Werten in den Eigenschaftsfeldern der Widgets. Einen Eindruck davon vermittelt folgendes Beispiel:

Eclipse WindowBuilder (ca. 3:30 Minuten):

Ein wenig Recherche nach weniger mauslastigen Alternativen ließ mich auf Swing JavaBuilder, den Groovy Swing Builder und Scala GUI stoßen, alles Ansätze, den Aufbau von Rich Client Masken mittels textueller statt graphischer DSL zu beschreiben, so dass die Schmerzen der teilweise extrem umständlichen Swing API gelindert werden.

Was ich für ein ausgewachsenes Stück Enterprise GUI aber eigentlich von einem Tooling obendrauf bekommen möchte ist:

  • Verwendung von Defaults, so dass alle Masken einheitlich aussehen.
  • Konfiguration des Databinding, d.h. der automatische Abgleich zwischen Inhalten der Widgets und der angebundenen Modellobjekte.
  • Anbindung von Aktionsmethoden, die in von der UI getrennten Controller-Klassen liegen.
  • Vorrichtung für die Darstellung von Validierungsfehlern.
Am Ende des Tages habe ich mich daher für eine eigene externe DSL auf Basis von Xtext entschieden, an die ein handgeschriebener Generator angeschlossen wird. Mit ein wenig zusätzlichem Library Code, dessen Aufruf durch den Generator direkt in der View platziert wird, entsteht ein mächtiges Werkzeug. Die Arbeit mit diesem neuen Werkzeug sieht dann wie folgt aus:

Xtext basierte UI Language (ca. 1:30 Minuten)

Interessanterweise wird bei besseren Layout Managern jenseits der JDK eigenen (z.B. JGoodies Form Layout oder MiGLayout) auch für das Layout Management eine DSL verwendet. Die kurzen Anweisungen lassen sich direkt in die UI Language einbetten und werden -- ggf. unter Anreicherung mit Defaults -- in die generierte View geschrieben.

Das Ergebnis ist eine Sprache, mit der sich in -- gefühlt -- einem Drittel der Zeit eine größere Wirkung erzielen lässt als mit Klicken und Ziehen in einem graphischen UI Builder. Die Entwicklung der Grammatik und des Generators nimmt bei guten Kenntnissen der Rich Client API (SWT, Swing, GWT) ca. 1-2 Wochen in Anspruch. Der Break-Even dürfte dann bei unter 50 Masken liegen, eine Menge die bei Enterprise Systemen leicht erreicht wird.

Bye bye, mühsames "Code Zusammenklicken"...


Das Kabel, das ich nicht wollte, 30.5.2011

Im Januar sind wir innerhalb Bonns umgezogen. Kleines Kind daheim: da ändern sich die Bedürfnisse dann doch. Größere Wohnung, andere Lage, Garten etc. Unser Wohnzimmer ist groß, so ca. 6x4 Meter. Und unser Fernseher macht irgendwie nur an dem Platz Sinn, der am weitesten von der Fernsehsignaldose entfernt ist.

Wir hatten bis dato einen 4:3 LC Fernseher mit analogem Anschluss plus Festplatten/DVD Recorder, beides vielleicht fünf Jahre alt. Und ich hatte keine Ahnung, wie der Stand der Technik aussieht. Also wie das Kabelsignal unseres Providers zum Fernseher kriegen? Ein langes Koaxialkabel? An der Wand und über Türdurchgänge verlegt? Keine charmante Lösung.

Erster Ansatz im Dezember 2010: ein ordentlicher Fachhandel. Was kann ich tun? Gibt's da nicht etwas, um diese Hürde zu überwinden? Antwort: nehmen Sie ein gutes Kabel, 15 Meter sind kein Problem.

Zweiter Ansatz: Google, Google, Google.

Um das Ergebnis für eilige Leser vorweg zu nehmen: das lange Kabel habe ich nicht gekauft. Inzwischen habe ich neben einem neuen Full HD Backlight LED Fernseher zwei preiswerte Mini PCs angeschafft, überbrücke die Strecke mit einem Homeplug AV Adapter, verwende als Software im wesentlichen Ubuntu, TVheadend, OSCam, TwonkyServer und XBMC. Man sieht keine Kabel und hört keine Lüfter rauschen.


Sideboard (Fernseher versteckt)

Flacher Wandkasten für Backend

Sideboard geöffnet

Wandkastendeckel entfernt

Wir können außer mit dem Fernseher auch über jedes Notebook Fernsehen, unsere Fotosammlung betrachten und Musik aus Webradio, Last.FM oder unserer gerippten CD Sammlung hören. Für unser Tivoli Model Two habe ich noch einen UPnP Streaming Client gekauft. In der Küche läuft über ein altes Notebook Fernsehen oder Musik, während ich abends noch was koche. Und meine Frau kann ihren iPod Touch nicht nur mit Musik und Fotos sondern auch mit Fernsehaufnahmen betanken. Und das wichtigste: der Kram hat den WAT (Wife Acceptance Test) bestanden.

Den Fernseher und vorhandenen WLAN-Router nicht eingerechnet, hat der Spaß ca. 1100 Euro und viele Abende gekostet. Neben den jetzt verfügbaren Features hat es mir vor allem eine recht umfassende Bildung bzgl. relevanter Hardware, Software, Standards und schwieriger Knackpunkte gebracht.

In den kommenden Monaten kann ich aus diesem Fundus noch einiges in meinem Blog berichten, was im Überblick so aussieht:

Die Frage, die sich jetzt mancher, der selbst gerade nach Lösungsmöglichkeiten für das eigene Heim sucht, stellen wird, ist: Soll ich mich auf eine Bastelarbeit einlassen, riskiere ich damit zuhause den Frieden und tausche obendrein noch Geld und Freizeit für eine halbgare Frickellösung ein? Wer computertechnisch geschickt ist, mit Linux umgehen kann und auch vor Skriptprogrammierung nicht zurückschreckt, kann sich m.E. darauf einlassen. Die Hardware und Software ist reif und nutzerfreundlich genug, um nach weniger als drei Stunden den Kern auf den Beinen zu haben. Im Netz gibt es haufenweise Anleitungen und Hinweise, um fast jede Aufgabe kurzfristig zu lösen. Tatsächlich war mein Startpunkt ein gerade 12 Euro teurer 8GB USB-Stick, auf den ich ein bootfähiges Ubuntu installiert habe, um mich ohne Risiko erstmal vorzutasten.

Meine Anforderungen an mein "Projekt" entstanden auch erst mit der Zeit:

  • Live TV sehen (inkl. Entschlüsselung mit Smartcard des Providers)
  • Zeitversetztes Fernsehen / Videorecorder
  • CDs und DVDs abspielen
  • Webradio / Last.FM hören
  • Transkodierung von TV Aufnahmen für Archivierung und iPod Touch
  • Videos, Bilder und Musik per UPnP bereitstellen
  • Zentrale iTunes Bibliothek, iTunes Playlisten per UPnP bereitstellen
  • Backup für Notebooks, Backup des Servers
  • So digital wie möglich, keine sichtbaren Kabel, leise
  • Vendor lock-in vermeiden, preiswerte Einzelteile verwenden

Hier noch die Aufstellung der bei mir verwendeten Hardware:

Fernseher
Frontend Mini-PCZotac MAG Mini HD-ND01
Full-HD Fernseher 26"LG 26LE5500
Audioboxen für FernseherCreative GigaWorks T20
FernbedienungHama MCE Remote
Maus/Tastatur kabellosKeysonic ACK-540RF+
HDMI Kabel 1mAmazon Basics
Backend
Backend Mini-PCFoxconn R10-S4, 1 TB HDD
Smargo Card ReaderMaxdigital Cardreader+
Koax VerteilerHama
2 DVB-T/C ReceiverSundtek MediaTV Digital Home
Backend WandverkleidungSelbstbau aus Birke Multiplex Platten
Infrastruktur
Backup HDD 1TBFreecom 1TB 3.5" USB HDD
WLAN Router / DSL ModemAVM Fritzbox 3170
Homeplug AV ConnectorDevolo dLAN 200 AVplus Starter Kit

Mehr zu diesem Thema in den kommenden Monaten...


Scrum - unvollständig, 10.5.2011

Seit einigen Jahren drängt sich in Sachen agiler Softwareentwicklung die Methode "Scrum" (Einführung) -- zumindest in meiner Wahrnehmung -- in den Vordergrund. Auf Veranstaltungen und bei Kunden höre ich dagegen sehr selten die Namen eXtreme Programming, Crystal Clear oder Feature Driven Development. Auf der einen Seite ist es mir egal, welchen Namen das Kind trägt. Alle bringen die grundlegenden, sehr wertvollen Eigenschaften mit, die in umfangreichen Softwareprozessen leichter unter die Räder kommen. Darunter sind z.B.:
  • Es wird echter Fortschritt ("working increments") gemessen.
  • Feedbackzyklen und Lernen sind eingebaut.
  • Priorisierung und Änderung der Anforderungen sind eingebaut.
Der Marketingerfolg von Scrum macht mir auf der anderen Seite jedoch etwas Sorge, denn Scrum ist in puncto Handwerkszeug der Softwareentwicklung gewollt still. Offen bleiben daher zunächst Fragen wie:
  • Wer und wann führt Qualitätssicherung aus?
  • Wie werden querschnittliche Aktivitäten wie Architektur oder Aufbau von Build- und Releaseprozess, die nur mittelbaren "business value" bringen, eingeplant?
  • Gibt es eine fachliche Konzeption für die nicht-trivialen "user stories"?
  • Wie wird Usability Engineering integriert?
  • Wie erhält man die Änderbarkeit der Software, die essentiell für jeden agilen Prozess ist?
Natürlich findet man Unmengen von Material im Netz und in Büchern, wie man dieses oder jenes mit den Grundelementen von Scrum verknüpft. Doch diese Meinungen sind -- wenig überraschend -- weder vollständig noch widerspruchsfrei.
  • Scrum Phases erklärt, dass es nicht nur eine Folge von Sprints gibt, sondern auch ein Vorspiel für Planung und Architektur sowie ein Nachspiel für Integrationstests und Rollout-Vorbereitung gibt.
  • Oder Scrum and Quality Assurance behauptet, dass Feature Tests von der Güte eines klassischen Systemtests Teil jedes Sprints sind, wobei noch keine Stellung zu Regressionstests bezogen wird.
  • Trotz vieler Hinweise schweigt sich Agile Requirements Best Practices aus, wer zu welchem Zeitpunkt tatsächlich die Details zu einer User Story zusammenträgt, damit sie abschätzbar und implementierbar ist.
  • Dagegen schlägt Scrum and Documentation. vor, Anwendungsfallbeschreibungen und Testfälle im gleichen Sprint, in dem die Implementierung stattfindet, zu erstellen, wobei die Testdurchführung erst nach Ende des Sprints erfolgt.
Zunächst steht das Team, das Scrum einführen will, also vor der Aufgabe, Scrum den Rahmenbedingungen entsprechend anzufüttern, denn Scrum nach der reinen Lehre taugt nur etwas für Micky Maus Projekte. Das erinnert mich lustigerweise an die schwergewichtigen Prozesse wie RUP oder V-Modell XT, die auch erst durch Customizing, d.h. Formen und Beschneiden der umfangreichen Prozessbeschreibung, brauchbar werden. Beides erfordert sehr praxiserfahrene Mitarbeiter oder Berater (aha!).

Ich würde trotz meiner Kritik an Scrum eher den einfachen, agilen Prozess als Ausgangspunkt wählen und in diesen Software spezifische Aktivitäten einbetten, als einen Prozess wie RUP zurechtzuschneiden. Denn agile Verfahren sichern, dass man schon nach Wochen die Fähigkeit, laufende Software zu bauen, einschätzen kann, während sich Projekte, die aufwändigen Prozessen folgen, Monate mit sich selbst beschäftigen können, ohne den maßgeblichen Prüfstein "potentially shippable product" zu passieren.