Category Archives: Programmiersprachen

GUIs deklarativ – never ending story


Flattr this

Motivation

Der Traum eine Programmoberfläche möglichst einfach, mit wenig Text und doch mit exakter Anordnung der GUI Elemente beschreiben zu können ist schon sehr alt. Immer wieder tauchten dazu Konzepte auf – doch diese konnten sich am Markt nie wirklich fortsetzen, nicht zu Letzt auch mangels der Unterstützung großer Firmen. Das letzte mir bekannte Exemplar ist JavaFX Script welches nun auch schon fast als ausgestorben bezeichnet werden kann.

Für alle die sich dennoch eine deklarative Sprache für die GUI Entwicklung wünschen zeigt dieser Artikel Projekte und mögliche Fortsetzungen auf.

Thinlet

Das erste mir bekannte Projekt welches seine GUI deklarativ beschrieb war Thinlet. Ich nenne es mal Thinlet one denn der Autor hat das Projekt inzwischen eingestampft und hat unter gleichem Namen ein völlig neues Framework herausgebracht. Letzteres konnte mich aber nicht weiter begeistern.

Das ursprüngliche Projekt war im Prinzip ein Jar mit einer Klasse. In dieser Klasse war die gesamte Logik. In der eigenen Anwendung waren die Oberflächen dann per xml zu beschreiben. Das Framework unterstützte sogar bereits das Binding von GUI Elementen an Java Klassen. Allerdings war das Eventhandling irgenwie nicht optimal gelöst – ich hatte damit jedenfalls Probleme – ich glaube mit der Richtung aus Java Klasse zum GUI Element oder von GUI Element zu GUI Element. Das kann ich leider nicht mehr genau sagen.

Dokumente zum ursprünglichen Projekt lassen sich kaum noch finden – man muss halt ein bisschen googeln denn die URLs wechseln stetig – aber offensichtlich gibt es noch genug Leute welche die Dokumentation retten. Hier ein Beispiel: http://wolfpaulus.com/thinlet/doc/widget/overview.html

Canoo

Diese Firma muss ich hier einfach aufzählen, weil sie mit ULC (Ultra Light Client) das fertiggestellt hat von dem alle Welt träumt. Allerdings proprietär und teuer 😦 Das war der Grund weshalb ihr Framework für den Open Source Bereich nicht in Frage kommt. Aber die Technologie ist genial – Half Object Plus Protocol (HOPP) Entwurfmuster. Das wäre das Ziel nur eben frei und Oracle hat es mit JavaFX eindeutig vermasselt. Hier ein Beispiel wie leicht alles gehen könnte.

GUI4J

Das GUI4J Projekt funktionierte ähnlich wie Thinlet wurde aber von mehr Leuten entwickelt und länger durchgehalten.

Zu guter Letzt gibt es natürlich tausende Projekte die in Richtung XML deklarierte Oberfläche gehen aber keine welches wirklich später dafür relevant wurde. Hier eine von vielen Listen die im Internet findbar sind: http://www.java2s.com/Product/Java/XML/XML-UI.htm

JavaFX

JavaFX in der ersten Version hatte mit JavaFX Script wirklich Potential den Sprung in Richtung Canoo zu schaffen. Doch Oracle hat es getötet aus welchen Gründen auch immer: http://www.heise.de/developer/meldung/Das-endgueltige-Aus-fuer-JavaFX-Script-1444903.html

JavaFX selbst hat Oracle dennoch zur Schlüsseltechnologie erhoben. Bislang steht diese allerdings irgendwo außerhalb des aktiv von Oracle gepushten ADF. ADF selbst setzt weiterhin auf Swing und eine dirty Click and Drop Oberfläche. Letztere hinterlässt in der Praxis nach einiger Zeit auch gern mal korrupte Arbeitsstände. Dann darf der Entwickler wieder zurück auf LOS ohne einen Erfolg einzustreichen. Wie soll man also die Signale aus dem Hause Oracle deuten? Möglicherweise ist sich Oracle intern selbst uneins und setzt später einfach auf die Technologie die sich durchsetzt. Einige Entwickler greifen daher selbst zur IDE und bauen schon wieder ihre eigenen RIA Frameworks:

Captain Casa Framework

Da ich dieses RIA Dilemma schon einige Zeit betrachte setzte ich immer wieder meine Hoffnung auf das Captain Casa Framework. Captain Casa ist eine Firma welche für den lokalen Mittelstand diverse Softwarelösungen erarbeitet hat. Diese basieren alle auf dem Captain Casa Framework. Diese wiederum setzte bis vor einigen Jahren ausschließlich auf Swing, sprang aber nach Erscheinen von JavaFX sofort auf diesen Zug auf. Aktuell steht wieder ein Community Treffen an und ich hoffe das es mir dieses Jahr endlich wieder möglich ist teilzunehmen und meinem kurzfristigen Urlaubsantrag zugestimmt wird. Falls ja werde ich natürlich wieder über das Treffen berichten.

Anbei ähnliche Artikel zum RIA Dilemma

Advertisements

Eclipse aufsetzen


Flattr this

Motivation

Sie programmieren in Java? Arbeiten auch mit Eclipse? Benutzen SVN? Administrieren Projekte auf Sourceforge? Builden Ihre Projekte mit Maven? Bauen sich eigene DSLs mit EMFText?

Nachdem Sie längere Zeit ihre zuverlässig arbeitende Traumkonfiguration der IDE und Ihrer Plugins erfolgreich benutzen, steht nun ein Versionswechsel an? Da inzwischen die Eclipse Entwicklung um einige Releases vorangeschritten ist lohnt sich kein Update sondern nur eine Neuinstallation der aktuellen Eclipse Version? Dann geht es Ihnen wie mir!

In längeren Intervallen aktualisiere ich mein System vollständig. Da ich es noch nie geschafft habe sofort das gleiche System wie vorher zu installieren beschreibe ich in diesem Artikel wie ich die Konfiguration durchführe. Damit es zukünftig schneller geht ohne eine Komponente zu vergessen bzw. nicht benötigte Komponenten irrtümlicher Weise zu installieren.

Los gehts

  1. Download der aktuellen Eclipse Version (IDE Classic Version) per Torrent und Installation unter
    c:\Program Files\eclipse\<eclipseversion>\
  2. Anpassen der eclipse.ini wie folgt:
    • hinzufügen der Option: -showLocation
    • anpassen der Speicheroptionen auf:
      –launcher.XXMaxPermSize
      256m
      -vmargs
      -XX:MaxPermSize=256m
      -Xms128m
      -Xmx512m
  3. Einrichten der Update Sites:
  4. Alle verfügbaren Update Sites auf enabled setzen (nicht funktionierende entfernen)
  5. Folgende Pakete auswählen und installieren
    • Collaboration/m2e Maven Integration for Eclipse
    • Collaboration/m2e slf4j over logback logging
    • Collaboration/Subversive SVN Team Provider
    • EMFText/EMFText SDK
    • EMFText/EMFText Access
    • EMFText/EMFText Shared ANTLR 3.4.0 Runtime
    • Modeling/Acceleo SDK
    • Modeling/Ecore Tools SDK
    • Subversive SVN Connectors/Subversive SVN Connectors
    • Subversive SVN Connectors/SVNKit 1.3.5 Implementation
  6. Einstellungen unter Windows/Preferences
    • General/Editors/Text Editors
      • Show line numbers
      • Show print margin at 80
    • Install/Update/
      • Automatic Update: true
    • Java/Build Path
      • Source: src/main/java
      • Bin: target/classes
    • Java/Compiler
      • Comilance Level: 1.6
    • Java/Installed JREs
      • C:\Program Files\Java\jdk1.6.0_14
    • Maven/Installations
      • Add: C:\Program Files\apache-maven-3.0.3
    • Maven/User Settings
      • C:\Users\SchubertT006\.m2\settings.xml

Hinweis: Nach der Konfiguration darf das ECLIPSE_HOME nicht mehr umbenannt oder verschoben werden. Bei den Konfigurationen zu Maven und anderen Dingen werden offensichtlich irgendwo vollständige Pfadinformationen hinterlegt. Nach einem Umbenennen sind diese Plugins nicht mehr verfügbar bzw. ihre Einstellungen erscheinen nicht mehr unter Windows/Preferences .

Preferenzen einstellen (Window/Preferences/…)

Weitere Quellen

Architektur prüfen mit CodeCity


Flattr this
Wie an den meisten Wochenenden schmökere ich gerade wieder in den Fachzeitschriften. Am liebsten im JavaMagazin und dort habe ich in der Ausgabe 10/2010 einen interessanten Artikel gefunden.

Worum geht es?

Es geht darum die Kodequalität in Form einer Stadt zu visualisieren. Die Idee ist genial einfach. Packages werden zu Stadtbezirken, Klassen zu Häusern und Methoden zu Etagen. Die Grundfläche eines Hauses wird aus der Anzahl der Attribute einer Klasse abgeleitet. Damit ist klar was passiert. Klassen mit vielen Attributen besitzen große Grundflächen, Klassen mit vielen Methoden sind sehr hoch. Die Stadt wird zunächst einfarbig in blau gehalten. Um so mehr Lines of Codes ein Artefakt (Klasse, Methode) besitzt um so heller wird das blau. Historiendaten sollen auch ausgewertet werden können. Eine entfernte Methode wird als Loch im Gebäude dargestellt. Zusätzlich lassen sich spezielle Problemfelder (God Class, Data Class, Brain Class, Brain Method, Feature Envy und Shotgun Surgery)  benutzerdefinierten Farben zuordnen.

Was bringt es?

Was bringt das Ganze? Bestehende Großprojekte mit schlechter Wartbarkeit einem Codereview zu unterziehen, um jene Stellen zu finden welche wirkliche Probleme darstellen, dauert lange. In der Regel werden mehrere Personen herangesetzt, es sind tausende von Kodezeilen zu sichten. Jede Person hat eine leicht andere Meinung zur gerade betrachteten Kodestelle und in der verfügbaren Zeit kann unmöglich jeder Kodeabschnitt vollständig durchdacht werden. Letztlich geht es darum die wichtigsten Punkte für die Refaktorierung zu finden. Das geht mit CodeCity deutlich schneller. Alle Kodezeilen werden analysiert und in eine grafische Struktur gebracht. Abweichungen von einer regelmäßigen Struktur lassen sich so schnell erkennen und können dann gezielt analysiert werden. Dieses Vorgehen sollte eine deutlich effizientere Analyse bestehender Großprojekte ermöglichen.

Wie geht es?

Jetzt zum praktischen Teil. Natürlich wollte ich es sofort ausprobieren. Dazu benötigen wir inFusion und CodeCity. Diese laden wir uns zunächst aus dem Internet herunter. Beide habe ich unter Windows jeweils in ein eigenes Verzeichnis entpackt und die Startdateien mit einem Shortcut auf den Desktop gelegt. Das Startprogramm von inFusion nennt sich infusion.bat und das von CodeCity einfach codecity.exe.

Zunächst müssen wir inFusion starten um den Kode unseres Projektes analysieren zu lassen. Infusion startet und zeigt folgenden Dialog an.

Startscreen von Infusion

Infusion Start

Oben rechts in der Ecke das 2. Piktogramm von rechts öffnet einen Dialog über den wir unsere Projekt Sourcen auswählen können.

Dialog zum Auswählen der Java Quellen

Ich habe mir die Quellen des Gui4j Projektes ausgecheckt. Kann sein, dass ich aus Versehen lokal ein paar Änderungen vorgenommen habe. Das weiß aber ich nicht. Ist für unseren Test auch nicht weiter wichtig. Im Dialog den Ordner suchen in dem die Java Dateien abgelegt wurden. Im Beispiel ist es src, bei Projekten die per Maven gebaut werden ist er standardmäßig unter src/main/java zu finden. Den Dialog wie erwartet dann über die Load Schaltfläche schließen.

Die Analyse wird sofort durchgeführt

Wir sehen im unteren Teilfenster den src Ordner durch einen blauen Balken ausgewählt. Genau dort rufen wir per Rechtsklick auf die Maus ein Kontext Menü auf und exportieren die Daten über die Option Run Tools …/FAMIX 2.1 MSE Exporter. Ich habe mich für diese Option entschieden, da die 3.0 von der CodeCity Version 1.4 nicht fehlerfrei eingelesen werden konnte.

Das File bitte auf .mse enden lassen.

Export mit FAMIX 2.1 MSE Exporter

Die Analyse wäre damit erledigt. Generell kann man auch jetzt schon diverse Probleme feststellen. Schöner geht das aber evtl. mit der angestrebten Stadt. Diese bauen wir nun indem wir CodeCity starten.

Startscreen von CodeCity

Nach dem Start von CodeCity erscheinen drei Fenster. Wir benötigen das oben dargestellte um unseren MSE Export zu laden. Dazu Betätigen wir die Schaltfläche „an MSE file…“. Gleich darauf erfolgt das Einlesen der MSE Datei und dessen Verarbeitung. Als Ergebnis erscheint ein neuer Listeneintrag. Im Beispiel gui4j benannt (vermutlich einfach der Name der Exportdatei).

Quellen wählen und auf City drücken

Diesen Listeneintrag wählen wir aus und Betätigen dann die Schaltfläche „City„. Nun erscheint das Fenster mit unserer Stadt.

Eine farbenfrohe Stadt nach Auswahl aller Disharmonien

Wenn wir in diesem Fenster das Radioaktivitäts-Symbol betätigen und im sich öffnenden Dialog alle Auswahlboxen selektieren, dann wird unsere Stadt so farbenfroh wie hier dargestellt. Durch das Hinwegbewegen des Mauszeigers über interessante Bereiche, wird in der rechten oberen Ecke der Detailbereich aktualisiert. Hier lässt sich leicht ablesen wieviel Kodezeilen oder wieviel Methoden die Klasse besitzt und ähnliches.

Durch die Stadt bewegen ist auch möglich. Auf folgende Tasten wird im Artikel hingewiesen:

Zeichen Aktion
W, S Zoom
A, D Verschiebung waagerecht
Strg + Pfeil hoch/runter Rotation um die Horizontale
Strg + Pfeil links/rechts Rotation um die Vertikale
Taste + Shift Aktionen in kleineren Schritten ausführen

Zum Abschluss noch die im Artikel erwähnten Quellen:

  1. http://www.bibsonomy.org/bibtex/204bd07ba7388ba1edfc97617ca75d139/funthomas424242
  2. http://www.bibsonomy.org/bibtex/2377e6c82a1417ed9bfe494ce578bffdd/funthomas424242
  3. http://www.bibsonomy.org/bibtex/24d513cc73eb3a2f3e55295e595935c49/funthomas424242
  4. http://www.bibsonomy.org/bibtex/2587bde0b7ffa5d7fd9e9940eba7a4d58/funthomas424242
  5. http://www.bibsonomy.org/bibtex/29952e80cf589274cc96e02e67210a9c5/funthomas424242
  6. http://www.intooitus.com/infusion/download/inFusion.zip
  7. http://www.inf.usi.ch/phd/wettel/codecity-download.html
  8. http://www.inf.usi.ch/phd/wettel/codecity-tutorials.html
  9. http://www.inf.usi.ch/phd/wettel/activities.html

An dieser Stelle vielen Dank an Richard Wettel, der CodeCity erschaffen hat und natürlich auch an alle anderen Contributoren der beiden Programme inFusion und CodeCity.

Dann viel Spass beim Städtebau.