GWT – Google-Web-Toolkit, Einführung und Meinung dazu

Ich möchte hier kurz auf einen Artikel eines Kollegen über GWT hinweisen. Dieser befasst sich sehr oberflächlich mit GWT, gibt aber vielleicht eine Motivation sich, ein wenig näher damit zu befassen.

http://blog.seibert-media.net/2010/12/08/gwt-evolution-der-internet-anwendung/

Ich finde es auch sehr angenehm mit GWT zu arbeiten.

Man kommt kaum noch in Berührung mit den syntaktischen Unzulänglichkeiten von Javaskript und kann auf angenehme Weise mächtige und performante “RIA” Anwendungen entwickeln.

Ein Punkt den ich persönlich jedoch wichtig finde ist, dass sich GWT am besten eignet, wenn man tatsächlich Anwendungen entwickelt. Das heißt, anstatt zu versuchen klassische voll designte und dynamische Webseiten damit zu bauen.
Die mitgebrachten Widgets und Layouts kommen nun einmal aus der AWT/Swing Ecke und gliedern sich auch am natürlichsten in solch eine Art Anwendung ein.
Eine voll designte Anwendung, in der man auf das look and feel von Standardelementen zwecks Individualismus verzichtet, ist zwar möglich, bedeutet hier aber etwas mehr Aufwand als bei klassisch Server-Seitig erzeugten HTML Seiten.

Dass solche eine GWT Anwendung dennoch gut aussehen kann, beweist meiner Meinung nach der PostgreSQL GWT Client aus dem GWT Showcase http://demo.teampostgresql.com/

Sehr schön sieht natürlich auch https://www.twentyfeet.com/app/ aus, auch wenn es hier viele klassische Webseiten Elemente gibt, deren Umsetzung aufwändiger ist als bei Server generierten Seiten.

Advertisements

Eclipse Copy / Cut und Paste einer ganzen Zeile

Jeder vim Nutzer, den es irgendwann doch zu Eclipse verschlagen hat, wird sicherlich die elegante und einfache Art, eine ganze Zeile mittels „yy“ und „p“ zu kopieren, vermissen.

Nach einer kurzen Suche bin ich dann auf eine kleine Erweiterung gestoßen, die dies ermöglicht. copycutcurrentline (google code)

What is it?

1. Press Ctrl-C to copy or Ctrl-X to cut the whole line in an editor if you select nothing. (It works as usual if you select some text.)
2. Put the caret on any line on any position.
3. Press Ctrl-V to paste the line above.

Works on Windows and Linux. Should work on Mac but not tested. Tested on Eclipse 3.4, 3.5 and 3.6 on Java 6.

Unter meinem Eclipse Helios und JEE Developer hat es wunderbar funktioniert. Dank an den Entwickler!

Am Rande: Wer es noch nicht kennt, MoreUnit (sf.net) ist ein Tool zum einfachen Wechsel zwischen Klassen und Unit-Tests. Zudem markiert es Klassen, die über Tests verfügen und gibt die Möglichkeit Test-Methoden-Stubs anzulegen.

Rome und Felix OSGi

Ich war freudig überrascht, als ich Rome (RSS/Atom syndication and publishing tools) gefunden hatte. Es macht einen soliden, gut designten und dokumentierten Eindruck. Dies und die Tatsache, dass ich ansonsten nichts vergleichbares gefunden habe, ist auch der Grund warum ich so viel Aufwand betrieben habe die Bibliothek zum Laufen zu bekommen.

In unserem Projekt verwenden wir Felix OSGi, was nicht selten zu Problemen bei der Integration von externen Bibliotheken geführt hat.

Im Fall von Rome äußterte sich das in folgenden Exceptions:

SEVERE: Servlet.service() for servlet proxy threw exception
java.lang.NoClassDefFoundError: Could not initialize class com.sun.syndication.feed.synd.SyndFeedImpl
[...]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
[...]

bzw.

SEVERE: Servlet.service() for servlet proxy threw exception
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at com.sun.syndication.io.impl.PropertiesLoader.(PropertiesLoader.java:74)
at com.sun.syndication.io.impl.PropertiesLoader.getPropertiesLoader(PropertiesLoader.java:46)
at com.sun.syndication.io.impl.PluginManager.(PluginManager.java:54)
at com.sun.syndication.io.impl.PluginManager.(PluginManager.java:46)
at com.sun.syndication.feed.synd.impl.Converters.(Converters.java:40)
at com.sun.syndication.feed.synd.SyndFeedImpl.(SyndFeedImpl.java:56)
[...]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

Letztere Exception tritt auf, weil ein Property File rome.properties nicht gefunden werden kann und dies nicht weiter abgefangen ist.

Versuch 1: Mit diesem Problem brachte mich google zu einigen Leuten die auch das Problem hatten. Es scheint sogar einen Patch zu geben und eine Rome Version (1.0-osgi) im mvn Repository des Autors. Leider hat dies bei mir nicht zu einer Lösung geführt. Quelle und Rome Bugtracking Ticket dazu.

Versuch 2: Interessanterweise stand auf der Rome Seite auch etwas zum Thema Rome + OSGi, worauf mich google nicht geführt hat. Hier ist von einer rome.pluginmanager.useloadclass Property bei RC2 die Rede. Das Setzen der Property auf true hat allerdings auch nicht den gewünschten Effekt gehabt. Der Code der dadurch ausgeführt werden soll sieht auch nicht so aus als würde er helfen. Wer es dennoch versuchen möchte: Rome Homepage : RomeAndOSGi

Lösung: Was letztendlich funktioniert hat, war den Rat von JS Bournival zu befolgen und die Bibliothek selber zu patchen. Dabei muss nicht der Thread ClassLoader verwendet werden, sondern der selbe, der auch verwendet wurde um die Rome Klassen zu laden. Dieser hat dann auch Zugriff auf die Property Files die Rome in der Exception vermisst hat. (Seltsamerweise macht die 1.0-osgi dies angeblich auch so) OSGi: jumping through classoading hoops

Step by Step + Patch:

Ich habe folgendes gemacht:

Rome 1.0 RC2 checkout:

cvs -d :pserver:username@cvs.dev.java.net:/cvs checkout -r v1_0RC2-CORE rome

(Ihr braucht ein java dev Konto, oder falls ihr eures einmal verlegt haben solltet gibt es eine coole Seite bugmenot welche auch für Burger King Gutscheine sehr hilfreich ist.)

grep -sIR "Thread.currentThread().getContextClassLoader()" .

Eine einfache Suche nach der Verwendung des falschen ClassLoaders zeigt die zu Ändernden Klassen auf. Schön zu sehen dass hier auch mit dem bewährten Copy-Paste-Pattern gearbeitet wurde ;-).

Ihr könnte euch das sparen und einfach den Patch anwenden http://gist.github.com/633790

$ cd rome
$ patch -p0 < rome-v1_0RC2-osgi.patch

Das builden mittels mvn install sowie die Tests sollten durchlaufen und das jar kann manuell in euer maven repository installiert werden.

hth

So Wahr: Whatever Happened To Programming

Programmieren ist nicht mehr das was es einmal war, in Zeiten der Frameworks und großen Bibliotheken fühlt es sich mehr wie ein Konfigurieren an. Wenn man damit umgehen kann, kommt man zwar schneller zu einem Ergebnis aber für viele ist das Ergebnis nicht das wichtigste sondern der Spaß am Programmieren. Der folgende Artikel handelt davon.

http://bit.ly/wordpress_reprog_whatever_happened_to_programming

Sicherlich ist es nicht sinnvoll und auch nicht interessant immer die selben Methoden zu implementieren. So kommt man auch nicht vorwärts. Aber da muss noch etwas zwischen dem Rad-Neu-Erfinden und dem Herum-ärgern mit Frameworks, was zu einer Trial-And-Error Aktion ausarten kann, sein.

Übersicht über Java Collections

Ein Kollege hat heute einen Link zu einer schönen Übersicht über die Standard Java Collections herumgeschickt.

http://www.torsten-horn.de/techdocs/java-collections.htm

QBasic on Linux

Mich hat es heute irgendwie gepackt und ich habe meine alten Jugendsünden wieder einmal herausgekramt. BASIC heißt das Zauberwort.

Früher auf dem 486er, den ich von meinem Onkel hatte (vielen Dank an dieser Stelle noch einmal, wer weiß ob mich der PC und das Programmieren ohne dich jemals so gefessel hätte), habe ich sehr viel mit QBasic herumgespielt, ohne ein Fünkchen Ahnung davon zu haben. Es war sehr spannend was man alles mit ein paar Zeilen Text machen konnte, es machte Spaß bestehende Programme zu analysieren, die Hilfe-Funktion zu durchforsten, wilde, durch alle Farben iterierende Schleifen zu bauen. Dass ich dabei den furchtbarsten Code meines Lebens produziert habe, war damals wohl egal.

Ich bin heute jedoch froh, dass ich diese Relikte noch aufgehoben habe, samt einer Kopie von QBasic.

Mit Hilfe von dosemu bzw. xdosemu kann man das Programm (qb.exe) nämlich noch wunderbar starten und seine alten Machwerke bestauenen. Vielleicht führe ich mein großes Spieleprojekt „Hunt“ einmal zu Ende … im Rentenalter.

Freebasic habe ich auch probiert zu verwenden, es war auf die schnelle aber nicht auf AMD 64 zum laufen zu bringen, 32Bit X Libs gefehlt und den Code habe ich nur als BASIC Code gefunden …

Anbei ein paar Screenshots von qb.exe auf dosemu.
(Für irgendwelche Schmerzen, geistiger oder körperliche Art dir durch den Anblick des Codes entstehen könnten übernehme ich keinerlei Haftung.)

GP2X revival

Ich habe mir endlich mal wieder eine neue SD Karte geholt und die Chance genutzt um meinen guten alten GP2X F100 MK1 auszupacken. Damals hatte ich mir gleich einen aus den ersten Fuhren ergattert und habe mich schon riesig gefreut Emulatoren zu zocken, Videos zu schauen und selber Anwendungen zu schreiben.

Nunja an Anwendungen ist dann nicht sooo viel dabei heraus gekommen, ich habe eine Version von Game of Life für den GP2X geschrieben, sowie eine Version von einem Rubik’s Cube in 3D in der Mache. Dieser ist allerdings noch nicht fertig. Mal sehen ob das überhaupt noch was wird.

Infos über den GP2X gibt es auf der deutschen Portalseite gp2x.de. Wichtige Anlaufpunkte sind hierbei das Forum, Wiki und das Dateiarchiv.

GP2X of Life

GP2X of Life in git
GP2X of Life im GP2X Archiv
Eine Version von Game of Life für den GP2X handheld. Mit der SDL auch unter Linux ausführbar.
GP2X of life screenshot

Man sollte jedoch nicht verheimlichen dass das gerät mittlerweile schon einige Jahre auf dem Buckel hat und es demnächst die Pandora gibt. Mit WLAN und allem Schnickschnack. :-)