Seit dem Release 2.x bin ich jetzt schon ein treuer Fan der Sonnenfinsternis Entwicklungsumgebung. Damals war ich sehr von Eclipse angetan, insbesondere die Flexibilität und Erweiterbarkeit hatten es mir angetan. Das ganze lief schnell, halbwegs stabil, alle Dateien fanden sich im Filesystem und die Oberfläche konnte sich dank SWT auch sehen lassen.
Seitdem ist viel Zeit vergangen und mit jedem Release ist vieles besser geworden. Von einer einfachen Entwicklungsumgebung für Java Programme hat sich Eclipse erst zu einer IDE für der verschiedensten Programmiersprachen und dann sogar zu einer Laufzeitumgebung für komplett unterschiedliche Anwendungen gemacht. Die Plattform ist heute extrem flexibel und es gibt 100te wenn nicht 1000 Plugins.
Trotzdem bin ich als Entwickler mit der Entwicklung von Eclipse in den letzten Jahre nicht wirklich glücklich. Ich brauche Eclipse nur als Entwicklungsumgebung für Java Anwendungen. Es ist schön, dass die Plattform auch vieles andere kann, aber das hilft mir bei meiner täglichen Arbeit überhaupt nichts. War Eclipse vor einigen Jahren als kostenlose Entwicklungsumgebung noch quasi alleine auf dem Markt sieht es heute ganz anders aus, mit Netbeans gibt es eine ernst zu nehmende Alternative und auch viele andere größere und kleinere Entwicklungsumgebungen sind heute kostenlos oder zumindest sehr günstig zu haben. Aber ebensowenig wie der Zimmermann seinen Hammer nur nach dem Preis beurteilen wird (wem das Bild nichts sagt dem empfehle ich mal “Der Pragamatische Programmierer”), sind es ganz andere Dinge die Eclipse für mich zwar immer noch zu einem guten, aber eben nicht zu einem perfekten Arbeitswerkzeug machen:
- Unzureichende Standard Plugins. Als Entwicklungswerkzeug fehlen aus meiner Sicht die Standardplugins für Versionsverwaltung. Eclipse liefert CVS mit aus, aber bitte wo sind im Jahre 2010 GIT bzw. SVN? Wäre es hier nicht sinnvoll den Mainstream an Versionsverwaltung zu unterstützen? Klar kann man alles nachinstallieren, aber schöner wäre es einfach loslegen zu können.
- Jeder Workspace muss neu eingerichtet werden. Bis heute kann ich meine Workspace Einstellungen nicht von einem Workspace zum anderen retten. Ich habe für verschiedene Entwicklungsszenarien unterschiedliche Workspaces, warum gibt es keine (einfache) Möglichkeit meine Einstellungen, meine SVN Server, meine Code Formatierungsoptionen von einem Workspace zum anderen zu mirgrieren? Klar kann ich für sowas nen Skript schreiben, letztendlich sind das alles nur ein paar Dateien und ein wenig XML, aber Spass macht das nicht
- Keine direkte Unterstützung von Maven. Irgendwie scheint in der Eclipse Welt nicht angekommen zu sein, dass es zu Ant in der Zwischenzeit eine Alternative gibt. Klar auch hier kann man wieder nachinstallieren (z.B. m2clipse), aber schön wäre es wenn die Standardbuild Systeme von Haus unterstützt würden.
- Kein automatisches File Update. Immer wieder bekomme ich bei Einsatz von Tools ausserhalb von Eclipse die Meldung “This File is out of sync with the file system”. Warum kann Eclipse das nicht automatisch im Hintergrund, oder spätestens wenn ich die Datei öffnen möchte synchronisieren?
- Probleme bei Plugin Updates. Das Update von Plugins klappt mehr schlecht als recht, oft muss man sie löschen und neu installieren. Auch gibt es keine Benachrichtigungen über Bugfixes.
- Keine zentralen Einstellungen. Die meiste Software entwickle ich im Team, da würde ich es mir wünschen, wenn man einige Einstellungen an zentraler Stelle speichern könnte, so dass zum Beispiel alle Entwickler die selben Code und HTML Format Einstellungen haben, jeder mit den gleichen Checkstyle Settings arbeitet und evtl. sogar jeder die gleichen Fehler sieht bzw. nicht sieht.
Wie gesagt alle diese Punkte beziehen sich lediglich auf Eclipse als IDE für Java Entwicklung, in anderen Bereichen mag es ganz anders aussehen aber das kann ich nicht beurteilen. Vielleicht bin ich ja auch alleine mit diesen Problemen und es gibt hierfür gute Plugins oder Einstellungen die ich nur noch nicht gefunden habe, für Tipps bin ich immer dankbar.
Reguläre Ausdrücke (Regular Expressions) sind aus keiner modernen Programmiersprache mehr wegzudenken. Sie sind sehr mächtig, aber auch sehr komplex so dass eine Menge Bücher und Artikel darüber geschrieben wurden.
Trotzdem gilt wohl auch hier die Devise “probieren geht über studieren”. Für Java Entwickler gibt es bei RegEx Planet ein Online Tool, zum erstellen und auswerten solcher Ausdrücke.
In den letzten Tagen hatte ich Gelegenheit mich mit der neuen Version von Spring Security auseinanderzusetzen. Hintergrund war für mich, dass jetzt endlich der ACL Teil in den Standard gewandert ist. Die Beschränkung des Zugriffes auf einzelne Instanzen einer Klasse ist für mich in jedem zweiten Projekt eigentlich alltäglich. Die Beschränkung des Zugriffs auf einzelne Methoden oder Klassen, war für mich in JEE nie ausreichend, weswegen ich die Sicherheit bisher immer selbst implementieren musste. Spring ACL in Zusammenhang mit Annotation scheint jetzt endlich das zu bringen, was ich mir schon von J2EE erhofft hatte. Allerdings ist die Dokumentation von dem ganzen noch sehr dürftig, man kommt also nicht herum sich den Beispielquellcode runterzuladen oder muss in den Original Sourcen suchen.
In den letzten Tage hatte ich mal Gelegenheit mich in ein Expertensystem einzuarbeiten. Expertensysteme als Teile der künstlichen Intelligenz sind ein Thema, das ich immer wieder in einigen Artikeln gefunden habe, das aber nach wie vor nicht so richtig im “main stream” angekommen ist.
Ein Kunde wollte einen Konfigurator bauen, der es ermöglicht nur sinnvolle Produktvarianten zu bauen (also Beispielsweise nicht ein DVD und eine BlueRay Laufwerk für einen Schacht auszuwählen) aber trotzdem sehr viele Varianten zulässt. Mein erster Versuch arbeitete mit Ein- und Ausschlusslisten, ich musste aber schnell feststellen dass das weder eine brauchbare Performance lieferte, noch hinreichend alle Anforderungen abdecket.
Also informierte ich mich über Expertensystem und bin dabei auf jBPM und JBoss Drools gestoßen, spannender weise kommen die beiden verbreitestesn Systeme im OpenSource Bereich beide von JBoss, Konkurrenz belebt das Geschäft. Alle Systeme arbeiten mit Regeln und Fakten. Die Regeln können dabei in einer bestimmten Regelsprache abgebildet werden (müssen also nicht direkt Programmiert werden), die Fakten können entweder als Ausgangsbasis in das System hinein gegeben werden oder entstehen als Konsequenzen aus Regeln. Mit Hilfe solcher Systeme kann man dann ohne Programmieraufwand und mit relativ wenig Code komplexe Probleme abbilden. Es existieren verschiedene Algorithmen mit unterschiedlichen Vor- und Nachteilen, die in der Einführung recht gut erklärt werden. Das reicht von komplexen Preisregeln bis hin zur Lösung von Sudoko Rätseln.
Noch bin ich in der Evaluierung, aber ein paar Erkenntnisse kristallieren sich schon heraus:
- JBoss Drools scheint ausgereift und für den Produktiven Einsatz geeignet zu sein
- Expertenwissen lässt sich mit Hilfe von Regeln unabhängig von der Programmierung zur Verfügung stellen
- das Erstellen der Regeln erfordert neben einer Einarbeitung in die Syntax eine gerade für nicht Techniker eher ungewöhnliche Denkweise
- auch bei einer Wissenbasis mit einigen hundert Fakten und einige Dutzend Regeln scheint das System performant zu arbeiten
Obwohl Sun mit der Entwicklung von JSF versucht hat die Vielfalt der Webframeworks (Struts, Webwork, Spring MVC um nur ein paar zu nennen) etwas einzudämmen und einen allgemeinverbindlichen Standard zu setzen, scheint die Konsolidierung in diesem Markt auszubleiben. Vor kurzem hatte Google nun das Google Web Toolkit (GWT) in der Version 2.0 herausgebracht, für mich mal ein Grund mir das ganze auf seine Praxistauglichkeit hin anzusehen.
Auf den Ersten Blick muss ich ganz einfach sagen, gab es den “WOW” Effekt:
- Die Installation ist kinderleicht, es wird nur ein JAR benötigt sowie ein Browser Plugin was dieser aber selbständig nachläd. Für Eclipse (nach wie vor meine primary IDE) gibt es auch gleich ein Plugin und ich hatte in 15 Minuten mein “Hello World” am laufen.
- Das Konzept ist wirklich innovativ, man schreib Java Code aber mit Hilfe eines Java -> JavaScript Compiler wird sämtlicher Client Code in JavaScript realisiert. Man muss sich um die konkrete Erzeugung des JavaScript Codes aber überhaupt nicht kümmern, macht alles der Compiler.
- Dadurch dass fast sämtliche Logik Client seitig läuft kommt ein “Rich Client Gefühl” auf, der Benutzer bekommt sofort Reaktionen zu sehen, die Oberfläche fühlt sich wie eine native Anwendung an.
- Es gibt hervorraagende Ergänzungsbibliotheken man kann sehr einfach Widgets erzeugen, fühlt sich fast an wie das Programmieren einer Swing Anwendung.
- Auch Roundtrips zum Server kann man machen, dazu muss man dann RPC Calls implementieren auch dafür liefert Google gleich die Anleitung mit, es ist aber nicht ganz trivial.
Dann habe ich versucht, ein konkretes Projekt zu übertragen, da kam dann allerdings doch die Ernüchterung:
- Das Projekt hat ein “Accordion” Layout bei dem es aber auch möglich sein muss mehrere Bereiche gleichzeitg zu öffnen. Der Standard Container vom GWT unterstützt das nicht. Da das ganze ne “Closed Box” ist erst mal Feierabend.
- Nächster Versuch war das ganze mit der Erweiterung “Smart GWT” zu realisieren. Dort gibt es sehr viele erstklassige Widgets, Problem hier: Ich benötige in den einzelnen Bereichen Radio Buttons. Die aus dem Standard GWT laufen immer auf einem Fehler, die aus dem “Smart GWT” kann man nicht disabeln.
- Ich werde bei Zeiten noch mal “EXT GWT” prüfen
Mein erstes Zwischenfazit steht aber schon fest:
Wenn man Webanwendungen realisieren möchte die sich wie “Rich Clients” anfühlen ist GWT eine gute Wahl. Die Anfangsladezeit ist zwar höher, dafür ist aber danach alles rasend fix. Man muss sich aber darüber im klaren sein, dass man den Komfort mit einer Reduzierung der Flexibilität erkauft. Man muss die Benutzeroberfläche (mehr oder weniger) mit Hilfe der vorhandenen Widgets realisieren. Ähnliche wie bei JSF gibt man die konkrete Kontrolle über die Webseite (das HTML) aus der Hand. Gerade für “normale” Webseiten ist das denke ich nicht akzeptabel, für Web “Anwendungen” aber sehr wohl.
GWT kann also das Portfolio für Webanwendungen durchaus bereichern, als alleinige Technologie reicht es dagegen nicht aus.
Seit 4 Wochen bin ich jetzt Besitzer (und auch Benutzer!) meines Google Mail Accounts. Nachdem ich wegen des Thema Datenschutz lange gezögert hatte, meine persönlichen Mails zu google zu schicken, muss ich sagen ich bin alles in allem sehr zufrieden. Gut für gewisse Dinge habe ich immer noch eine andere Email Adresse, aber im Alltag hat googlemail gegenüber meinem bisherigen Account ganz klare Vorteile:
- das Webinterface ist nicht schön, aber leistungsfähig und performant (!)
- die IMAP Synchronisation klappt wunderbar
- die Zustellzeiten sind sehr gut, Verzögerungen gibts es so gut wie gar nicht
- es gibt ein excellents Handling von Bildern
- es ist kostenlos
- die Filter (sowohl sortierung als auch Spam) Arbeiten zuverlässig im web
Eigentlich schade dass es im deutschsprachigen Raum meines Wissens nach keinen Mail Provider gibt, der eine ähnlich leistungsfähige Lösung hinbekommt, nicht mal etwas kostenpflichtiges.
In den letzten Wochen habe ich mein erstes Projekt mit Spring 3.0 realisiert. Damit bin ich zum ersten Mal auch im Produktiven Einsatz mit dem neuen Annotation getriebenen MVC Controller in Berührung gekommen.
Nach den ersten Wochen muss ich trotz große anfänglicher Skepsis (viel Magic) sagen, dass ganze ist gut. Man bekommt trotz fehlender Klassenhierachien (oder gerade wegen?) sehr gut lesbaren Code. Viele Dinge sind einfacher, es reicht oft das “was” zu sagen, dass “wie” erledigt das Framework.
Der Umstellungsaufwand meines Altprojektes hielt sich dabei sogar in grenzen (1-2 Tage) und es stehen jetzt viele neue Möglichkeiten offen.
Ein großer Nachteil der Verwendung von Ajax zum aktualisieren einer Webseite ist, dass der Benutzer nicht sieht ob der Browser noch Daten lädt. Um das zu umgehen verwendet ich eigentlich immer animierte GIFs damit der Benutzer ein (Pseudo) Visuelles Feedback bekommt.
Heute habe ich diesen schönen Loading Images Generator gefunden, der mit meine Grafiken gleich genauso erstellt wie ich sie benötige, ohne dass ich überhaupt ein Programm benutzen muss.
In Projekten wo mir die Datenbankstrukturen extern vorgegeben werden, bin ich von der Verwendung von Hibernate ziemlich weg gekommen. Statt desssen leistet mir seit einiges Zeit iBatis sehr gute Dienste.
Da man ziemlich straight forward SQL Statements angegeben kann hat man das ganze sehr schnell am laufen, besonders spannend wird es aber, wenn man das Framework benutzt um auch dynamische Statements aufzubauen. Hier kann es einem viele Fallunterscheidung abnehmen und man kann mit einem Statement gleich sehr viele Fälle erschlagen.