Zwei interessante GWT-Erweiterungen: Gilead und GWT-SL

Sind

Gilead (früher Hibernate4GWT), abgeleitet von "Generic Light Entity Adapter" ist ein interessantes Projekt mit folgendem Konzept:

transform persistent entities back to simple Plain Old Java Object, by removing code instrumentation and replacing persistent collections with their regular counterpart.

Kommt zum Beispiel eine JPA-Bean mit Assoziationen mit Eager-fetching rein, kommt ein vollständig geladener Objektgraph raus. Das ist praktisch genau dann, wenn man einen Daten-Service hat, den man von der GWT-Oberfläche zum Holen der Daten nutzt, aber die JPA-Implementierung baut diverse Proxies ein.

Das SF-Projekt "GWT-Widgets" besteht aus zwei Teilen: Der GWT Server Library (GWT-SL) und der GWT Widget Library. Die GWT-SL ist eine GWT-Spring-Integration. Mit dem GWTRPCServiceExporter können etwa die Spring-POJOs als GWT-Services veröffentlicht werden. Die Doku stellt die Arbeitsweise kurz vor.

IntelliJ IDEA 8.1

JetBrains hat eine neue Version ihrer IDE herausgegeben: IntelliJ 8.1. Die Änderungen sind eher unter der Haube (wie Performance Optimierungen) als das groß neue Features implementiert wurden. Dennoch gibt es einiges Neues:

IntelliJ IDEA Server

To make all of your favorite settings (keymap, fonts and colors, inspection profiles, etc.) accessible from any computer where you run IntelliJ IDEA, create a JetBrains Account and log in with it to a dedicated JetBrains server at IntelliJ IDEA startup.

Team Foundation Server integration

Perform all common VCS functions (commit, update, revert, etc.) from IDE. Create and manage TFS workspaces, merge branches, lock and unlock files, view the changes history, and do more.

Git integration

Carry out common VCS operations right from IntelliJ IDEA, plus do Git-specific tasks like cloning of remote repositories, pushing and pulling of local repositories, rebasing (including interactive mode and multiple Git roots), and more.

Perforce jobs support

click to enlargeClick to enlarge

IntelliJ IDEA Perforce integration now lets you list Perforce jobs, view their details and link them to arbitrary changelists. Jobs can be selected and linked directly from the Commit Changes dialog.

Oracle SQL dialect support

click to enlargeClick to enlarge

SQL editor supports Oracle SQL dialect, with completion, validation and highlighting.

Resin integration

Resin application server is supported via the dedicated run configuration, with application deployment and debugging (both local and remote).

Copyright plugin bundled

Generate copyright headers for any type of source code and let IntelliJ IDEA automatically keep them up-to-date. All it takes is creating a template for the copyright text and specifying the scope to which it should be applied.

Auswirkung von neuen Sprachkonstrukturen in Java 7 und Project Coin

Joseph Darcy veröffentlichte schon vor 2 Jahren einen interessanten Blog-Artikel über die Änderungen, die enum mit sich brachte: JSL, Compiler, Bibliotheken, JVM-Spezifikation, usw. Da Sun sich mit dem neuen Modulsystem Jigsaw wohl ganz gut was vorgenommen hat, wird es große Änderungen an der Sprache (wie Closures oder Reified Generics) wohl nicht in Java 7 geben. Dennoch gibt es mit dem aktuellen Project Coin: Small Language Changes for JDK 7 einen neuen Versuch, zumindest einige Features unterzubringen, die mit wenig Aufwand implementiert werden können. Dazu zählen ein switch mit Strings oder die Möglichkeit, multiple Exceptions in einem catch zu fangen.

Folien zum Einsatz von Annotationen in Spring

Habe bei SlideShare interessante Folien zum Einsatz von Annotationen in der Spring-Entwicklung gefunden. Zunächst werden allgemeine Annotationen aus dem Java SE und besonders aus dem Java EE-Umfeld vorgestellt. Dann werden JPA und REST im Kontext von Spring an Beispielen erklärt. Zum Schluss folgt noch etwa Spring MVC und wie dort Annotationen die Konfiguration vereinfachen.

JavaFX 1.1 veröffentlicht

Unter der Homepage http://java.sun.com/javafx/ kann man nun die neue Version JavaFX 1.1 beziehen. Neuerungen sind:

Key Release Components

  • Official support for JavaFX Mobile
  • Language improvements
  • Performance and stability improvements

JavaFX 1.1 SDK

  • JavaFX Mobile Emulator enables developers to begin creating advanced and expressive mobile content.
  • Desktop Runtime update improves performance and stability.
  • Better support is provided for developing mobile or desktop applications from the same code base.

JavaFX 1.1 Platform Features

  • Support for "full screen" applications
  • Improved support for applications that need to access resources across multiple domains
  • Standard navigation method for cross-device content

Documentation

JavaFX 1.1 Language

  • Addition of all Java numeric types (float, double, long, int, short, and byte) to the type system
  • Sequence performance and footprint optimizations
  • Dynamic footprint optimizations in animations

Aptana Studio wird immer größer (Rails, pydev, …)

http://www.aptana.com/ find klein an. Erst war es die PHP-IDE auf der Basis von Eclipse, nun ist auch noch die Python-IDE pydev dazugekommen und eine Entwicklungsumgebung für Ruby/Rails und Mobile Web.

Das Geschäftsmodell bei pydev ist wie folgt: Während der Kern immer noch OpenSource bei http://pydev.sourceforge.net/ bleibt, kommt es kommerzielles Pydev Extensions hinzu. Die Webseite zählt für das Produkt etwa die folgenden Neuerungen auf:

Für die IDE gibt es unter http://showmedo.com/videos/series?name=PyDevEclipseList zwei Screencasts.

Thema der Woche: HTTP Header

Das http://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol überträgt neben dem Content auch über Header wichtige Informationen wie MIME-Typ, Datenlänge oder Caching-Informationen.

GWT 1.6 Milestone 1

Der erste Milestone von GWT 1.6 ist unter http://code.google.com/p/google-web-toolkit/downloads/list?can=1&q=1.6.0 verfügbar. In einem Google Group Beitrag werden die Neuerungen genannt:

*** New Project Structure in GWT 1.6 ***
One of the biggest changes to GWT 1.6 is a new project structure. The old
output format has been replaced by the standard Java web app expanded „war“
format, and the actual directory name does default to „/war“. Note that the
war directory is not only for compiler output; it is also intended to
contain handwritten static resources that you want to be included in your
webapp alongside GWT modules (that is, things you’d want to version
control). Please also note that the „GWTShell“ and „GWTCompiler“ tools will
maintain their legacy behavior, but they have been deprecated in favor of
new „HostedMode“ and „Compiler“ tools which use the new war output. When 1.6
is officially released, we will be encouraging existing projects to update
to the new directory format and to use the new tools to take advantage of
new features and for compatibility with future GWT releases.
The sample projects provided in the GWT distribution provide an example of
correct new project configurations. For more details on the specifics of the
new project format, please see GWT 1.6 WAR design document (
http://code.google.com/p/google-web-toolkit/wiki/WAR_Design_1_6).
A couple of important changes we should highlight here:
– Projects with server-side code (GWT RPC) must configure a „web.xml“ file
at „/war/WEB-INF/web.xml“. This web.xml file must define and publish any
servlets associated with the web application. See the included DynaTable
sample. Additionally, server-side library dependencies must be copied into
„/war/WEB-INF/lib“. For example, any GWT RPC servlets must have a copy of
gwt-servlet.jar in this folder.
– HTML host pages will no longer typically be located in a GWT module’s
public path. Instead, we’ll be recommending that people take advantage of
the natural web app behavior for serving static files by placing host pages
anywhere in the war structure that makes sense. For exmaple, you might want
to load a GWT module from a JSP page located in the root of your web app. To
keep such handwritten static files separate from those produced by the GWT
compiler, the latter will be placed into module-specific subdirectories. Any
page that wishes to include a GWT module can do so via a script tag by
referencing the GWT-produced „<module>.nocache.js script“ within that
module’s subdirectory. As of 1.6, we’ll be recommending that only
module-specific resources used directly by GWT code, such as image files
needed by widgets, should remain on the public path. See the included
Showcase sample for some examples of this distinction.
– When you do need to load resources from a module’s public path, always
construct an absolute URL by prepending GWT.getModuleBaseURL(). For example,
‚GWT.getModuleBaseURL() + „dir/file.ext“‚. This advice has not changed, but
in the past it was easy to be sloppy with this, because the host page and
GWT module typically lived in the same directory, so using a relative URL
would usually do the right thing. Now that GWT modules live in a
subdirectory, you must reference public resources through
GWT.getModuleBaseURL().
*** Hosted Mode Enhancements ***
Although the legacy GWTShell still uses an embedded Tomcat server, the new
HostedMode runs Jetty instead. There is also a new „Restart Server“ button
on the main hosted mode window. Clicking this button restarts the internal
Jetty server, which allows Java code changes to take effect on the server
without having to completely exit and restart hosted mode. This is useful
when making code changes to RPC servlets, or when serializable RPC types are modified and the server and client are out of sync.
*** New EventHandler System ***
Event handlers have been added to replace the old event listeners used by
Widgets, History, and various other classes. The new system has a few
differences from the old system:
– EventHandler methods always take a single parameter: the GwtEvent that the Widget fired. For example, ClickHandler has a single method
onClick(ClickEvent).
– Each GwtEvent contains accessors relevant to the event, such as the key
that was pressed on KeyEvents. Native events provide access to the
underlying native event object.
– Each EventHandler defines only one method, so you do not need to create
empty methods just to satisfy the interface requirements.
For users who create their own Widgets, you no longer need to manage
listeners manually. Every Widget has a HandlerManager that manages all of
its handlers. For native events, such as ClickEvent, just call
addDomHandler() from within your code to register a handler and sink the
associated event on the Widget. When the native event is detected, the
handler will automatically be called. For logical events, such as
SelectionEvent, call addHandler() and fire the event manually using the
fireEvent() method.
You can see examples of EventHandler usage in many of the updated GWT
widgets and samples, or in new projects created with the new webAppCreator tool.
You can now trigger a native event on almost any Element. Create a new
native event using the Document.create*Event() methods, then dispatch it on a specific Element by calling Element.dispatchEvent(). These methods allow you to expand your test coverage in ways that were previously impossible.
*** New Widgets ***
DatePicker
The new DatePicker and DateBox widgets allow your users to select a date
from a calendar. The Showcase sample provides examples of both of these
widgets.
LazyPanel
The new LazyPanel widget allows you to delay the creation of certain
sections of your application until they are first accessed, improving
startup performance. For example, if your application has a seldom used
„Help“ section, you can wrap it in a LazyPanel and create the user interface
only if and when the user tries to access it. To use the LazyPanel, extend
the class and override the abstract createWidget() method. The
createWidget() method will be called the first time you call setVisible() on
the LazyPanel.

1.6.0_12

Neues Update von Java 6. Die Änderungen listet http://java.sun.com/javase/6/webnotes/6u12.html auf. Interessante Änderungen sind der 64-Bit Browser Support for Java Plugin and Java Webstart:

  • This release supports the New Java Plugin and Java Webstart on AMD64 architecture, on Windows platforms. A Java offline installer (JRE and JDK) is provided. Note, if you use 32-bit and 64-bit browsers interchangeably, you will need to install both 32-bit and 64-bit JREs in order to have Java Plug-In for both browsers.

Weiterhin:

  • Limited mixing of heavyweight and lightweight components is supported. Limited mixing means that some components may not be handled perfectly. This includes, but is not limited to, support for non-opaque lightweight components.
  • The Security Warning used with the toplevel windows of an untrusted application has been improved to make it less intrusive and more subtle.
  • Graphics performance improvements for: Anti-aliasing drawing and filing, Non-anti-aliasing transformed rectangles and single wide lines. Java Webstart startup time

Buchkritik: Reversing: Secrets of Reverse Engineering

Eldad Eilam. Wiley. ISBN 0-7645-7481-7. 2005. 619 Seiten

Thema des Buches ist die Wiederherstellung von übersetztem Code in ein menschenlesbares Format und gleichzeitig der Schutz von diesem Reverse Engineering Verfahren. Das Buch pendelt zwischen grundlegenden Begrifflichkeiten, wie der Erklärung der Arbeitsweise eines Compilers und wofür die Win 32 API gut ist. Auf der anderen Seite beschäftigt es sich mit IA 32 Assembler-Code. Die Zielgruppe ist daher schwer auszumachen. Sicherlich ist für beide etwas dabei. Wer eher grundlegende Begrifflichkeiten sucht, wird sie hier auf jeden Fall finden und sicherlich nicht den Appendix mit den Prozessor-Flags lesen. Wer in IA 32 Assembler dagegen fit ist, findet viele Anregungen zum Reverse Engineering, Disassemblieren sowie Decompilieren. Zu allen Punkten werden freie und kommerzielle Tools aufgeführt. Der Autor ist nicht ideologisch in Open-Source oder freie Software verliebt und schließt daher kommerzielle Produkte nicht aus; oftmals sind die kostenpflichtigen Lösungen leistungsfähiger. Die Fallbeispiele (Kap. 6, Deciphering File Formats und Kap. 8, Reversing Malware) sind realistisch und ausführlich beschrieben und geben einen guten Eindruck in die Arbeitsweise. Schlussendlich ist auch für .NET-Programmierer etwas dabei, und die Ideen zum Schutz gegen Decompilierung finden auch in der Java-Welt ihre Anwendung.

Offtopic: Kurzreisebericht für 2 Monate Afrika

Namibia

Ein flächenmäßig großes Land mit unter 2 Millionen Einwohnern sagt schon etwas über die Verteilung aus. Die größte Stadt Namibias und gleichzeitig Hauptstadt ist Windhoek mit etwa 250.000 Einwohnern (im Kern!). Wird es dunkel, ist es leer auf den Straßen und man denkt, eine B-Bombe hätte alle Menschen ausgelöscht. Interessant finde ich in Namibia den Etosha Nationalpark, Swakopmund, Fish River Canyon und die Steinzeichnungen. Wenn man Swakop mit den Dünen gesehen hat und mit dem Quad auch zwischen den Dünen unterwegs ist, kann man sich die Dünen bei Sossusvlei vielleicht sparen; wenn man aber sowieso beim Canyon ist, wird man auf dem Weg nach Swakop dort vorbeikommen. Der Weg ist überwiegend unbefestigt und beschwerlich. Auf der Skeleton-Coast habe ich nur ein Schiffswrack gesehen und die Vorstellung, dass alle paar Meter ein alter rostiger Dampfer liegt, ist falsch. Vor Swakop wird gerade ein Schiff geborgen. Schwimmen ist nur dann möglich, wenn man keine Badewannentemperaturen erwartet, sondern sich auch bei Eiswasser wohlfühlt. Lüderitz ist schön und erinnert an Deutschland in den 50er Jahren, aber auch Swakop besitzt viel deutsches Flair. Walvis Bay muss man nicht gesehen haben, wobei es dort ein nettes Restaurant aus Holzpfählen gibt. Oberhalb von Etoscha ist die Bevölkerungsdichte höher; aus dem Grund findet dort sehr konzentriert Wahlkampf statt, so dass Politiker andere Städte eher vernachlässigen.

Botswana

Von Windhoek aus ist man schnell in Botswana, dort beginnt eine längere Reise. Sie führte mich über das Okavango Delta bis zu Gaborone. Die Hauptstadt des relativ reichen Landes ist aufgeräumt und ordentlich. Drei wichtige Shopping Malls markieren auch schon die Hauptsehenswürdigkeiten. Lonely Planet setzt einen Club und ein Restaurant dort hin, aber beides ist der Bevölkerung absolut unbekannt.

Südafrika/Swaziland/Lesotho/Mozambique

Der Weg von Gaborone nach Südafrika ist kurz. Eine Karte von Südafrika ist hilfreich, denn die DIN A5-Abbildung im Reiseführer ist unzureichend klein. Anders als in Deutschland bekommt man Karten nicht an Tankstellen. Der Kommentar eines Südafrikaners dazu: „Afrika ist eben nicht Europa“.

Die Städte Südafrikas sind von extremen Gegensätzen geprägt. Auf der einen Seite ungepflegte Städte, die mehrheitlich von Schwarzen bewohnt werden und auf der anderen Seite die herausgeputzten Lebensräume der Weißen. In Johannesburg zeigen sich besondere Extreme. Das Zentrum ist von heruntergekommenen Gebäuden geprägt in denen mehrheitlich Schwarze leben, außerhalb liegen chice Gebäude, die durch Zäune von der bösen Außenwelt abgeschirmt sind. Dieses Mal sind es nicht die Armen, die in den äußeren Stadtteilen wohnen, sondern die Reichen. Der Taxifahrer war ein totaler Idiot und wusste keine Adresse. Mit einem Türken, der im gleichen Backpackers untergebracht war, wollten wir zu dem Jazz-Club Kippie’s – laut LP eine absolute Institution – und er fand sie nicht. Nahe an Jo`burg liegt Soweto, was noch einmal eine Nummer ärmer ist.

Pretoria, die Hauptstadt Südafrikas, liegt gleich neben Jo´burg und wirkt völlig anders. Das Gebäude der Universität von Südafrika ist beeindruckend. Nach einer Übernachtung ging es nach Swaziland. Mit dem Minibus, die alle als abgenutzte Fahrzeuge aus China kommen, dann nach Maputo/Mozambique und am nächsten Tag zurück nach Swaziland und direkt wieder nach Südafrika.

Meine gedachte Route von Südafrika nach Lesotho (von Osten nach Westen) war über den Sani Pass, also über den Drakensberg. Die ersten Kilometer ließen sich noch ganz gut fahren, aber dann wurde es eklig. Der Fahrer eines entgegenkommenden 4×4-Autos empfahl mir, diesen Weg in meinem Nissan mit Frontantrieb nicht anzutreten. Also kehrte ich um und fuhr mehr oder weniger um Lesotho herum, um dann im Süden das Land zu betreten. Der Grenzposten überraschte durch seine Einfachheit, und ein Typ mit schlabberigem T-Shirt stempelte den Pass. Von schön geteerten Straßen ging es dann erst einmal ein paar Kilometer über Schotterpiste.

Von Lesotho fuhr ich wieder nach Südafrika, nach Port Elizabeth. Ein (günstiges) Hotel war schwer zu finden. Am nächsten  Tag ging es über die Garden Route nach Cape Town. Der Weg führte durch einige nette Orte wie Mossel Bay, ist aber nicht so zu verstehen, dass man unentwegt an der Küste fährt und eine tolle Aussicht genießt. Meistens ist es langweilig.

Kapstadt mit etwas über 3 Millionen Einwohnern ist lebenslustig und der Tafelberg gibt ihr eine zusätzliche Note. Auf den bekannten Aussichtspunkt kommt man entweder mit der Bahn – dann muss man 1 bis 2 Std. anstehen – oder zu Fuß. Das dauert etwa genauso lange ist aber recht anstrengend. Ich bin nicht ganz nach oben gegangen, da die Wege kurz vor dem Ziel nicht mehr ordentlich markiert sind. Die Aussicht ist aber schon prima. Das Hotel war das Riz, was von der Lage gut an der Waterfront liegt. Von dort kann man nach Robben Island (Nelson Mandelas Gefängnis), aber es ist naiv zu denken, dass man 5 Minuten später im Boot sitzt. Die Anzahl Touristen ist beschränkt und zu meinem Zeitpunkt war die Warteliste eine Woche.

Sambia/Zimbabwe

Als ich aus Windhoek/Namibia in Sambia eintreffe (die Fahrt geht von 18 Uhr abends bis 3 Uhr in der früh), fallen mir drei Dinge auf: Menschen benutzen Fahrräder, es ist deutlich grüner (dass im Januar Regenzeit ist, fällt immer wieder auf) und es lauern überall Moskitos (und dafür hat jede Unterkunft eine Moskitonetz). Der erste Stopp ist Livingstone, der Ort, an dem man die Victoria Falls betrachten kann. Ich entscheide mich aber für den Wasserfall auf der Seite von Zimbabwe, da die Sicht viel beeindruckender ist. Von Sambias Seites aus sieht man nur einen kleinen Teil. Da ich nur ein Single-Entry Visum für Sambia bezahlt habe, musste ich noch einmal 50 USD für ein neues Visum ausgeben. Für Zimbabwe zahlt man 30 USD (kommt aber immer auf die Laune der Beamten an) und 20 USD für den Eintritt. Die Plastiktüte für den Pass hat sich ausgezahlt, denn geht man entlang des Wasserfalls wird man von den gelösten Wasserwolken unglaublich nass. Von Livingstone kommt man in 8 Std. mit dem Bus nach Lusaka, der Hauptstadt. Außer ein paar Malls gibt es hier nichts besonderes zu sehen. In einem Club wimmelte es von Prostituierten und als ich mit dem Taxifahrer darüber sprach, brachte er eine interessante Analogie: „Taxifahrer und Nutten haben eins gemeinsam: Beide verstehen etwas von PR.“ Da hat er wohl recht …

Malawi

Von Lusaka/Sambia wollte ich mit dem Bus nach Lilongwe/Malawi. Direktverbindungen gibt es aber nicht jeden Tag. Also plante ich Etappen. Der erste Bus an den Rand von Sambia hatte 3 Std. Verspätung und kam somit in der Nacht um 4 Uhr an. Das Warten auf die Abfahrt wurde durch fliegende Händler versüßt, die im Minutentakt in den engen Bus kamen und etwas verkaufen wollten: Süßigkeiten, Getränke, Schuhe und Spiegel. Als der Bus losfuhr, kam die Aufforderung, sich doch bitte mit dem Nachbarn zu unterhalten, der könne doch das Leben bereichern. Ein Hotel fand sich leicht für 10 Euro. Bis zur Grenze musste es ein Taxi sein, denn Busse gibt es nicht. Der Taxifahrer jammerte die ganze Zeit, warum Weiße immer so brutal hart mit dem Preis verhandeln. Tja, warum wohl?

Bis zur Grenze ging es schnell. Auf der anderen Seite muss man erst mit einem Taxi in die nächste Stadt fahren und dann einen Minibus nach Lilongwe nehmen. Lilongwe ist eine schmuddelige Stadt, deren Reiz ich in den Tagen nicht erfahren konnte. Im Hotel traf ich mich mit einigen Amerikanern, die hier zusammen mit anderen Nationen das Land und auch die Nachbarländer auf  Einladung der Regierungen bei politischen, sozialen und rechtlichen Fragen beraten. Der Club, in den wir gingen, spielte die ersten Stunden alle Kuschelrock-CDs – die Musikrichtung ist sehr beliebt, genauso wie auch Modern Talking immer noch der Renner ist. Später wurde es dann R&B und ein paar junge Farbige machten sich über unseren Tanzstil lustig.

Von Lilongwe fuhr ich zu der Hauptsehenswürdigkeit des Landes: Dem Malawisee. Das Hotel war direkt am Süßwassersee und auch das Essen des srilankischen Kochs scheint im ganzen Land bekannt. Auf dem Weg nach Tansania machte ich in Mzuzu halt. Nahe der Stadt ist ein Berg, zu dem der frühere Präsident immer zum Lesen ging. Der Ort ist wirklich schön, doch leider sieht man von oben auch eines der größten Probleme des Landes: Die Rohdung des Waldes.

Tansania

Mein eigentliches Ziel in Tansania ist Dar es Salaam. Da der Zug aber nur von Sambia heraus fährt – in Malawi gibt es keine öffentlichen Züge –, fuhr ich morgens nach dem Bus-Gebet mit lauter Gospelmusik von Mzuzu nach Karonga. Vorbei ging es am Kaka-Hotel. (Kaka heißt einfach nur Bruder). In Karonga nahm ich ein Taxi, ging mit 50 USD über die Grenze, lief 1 km bis zu den Minibussen und fuhr weiter nach Mbeya. Nahe Mbeya gibt es eine Bahnstation. Mittlerweile ist die immer wieder von der Pleite bedrohten Bahn soweit, dass Züge nur noch zweimal in der Woche nach Dar es Salaam fahren. Ich hätte 2 Tage warten müssen, und das war es mir nicht wert, da andere Touristen immer wieder von sehr langen Pannen (6 Stunden auf dem Gleis) berichteten. Zum anderen ist durch die Regenzeit die Tierbeobachtung im Nationalpark, den die Bahn mit 40 km/h durchbummelt, wenig attraktiv. Also fuhr ich mit dem Bus. Hätte ich das vorher gewusst, wäre ich von Lilongwe direkt gefahren, denn Mbeya kann man sich wirklich sparen – wobei mir ein deutscher Lehrer die Berge empfohlen hat. Von Mbeya fahren viele Busse am Tag nach Dar es Salaam.

Dar es Salaam, die größte Stadt Tansanias, ist mondäner als die Hauptstädte von Malawi und Sambia. Aufgrund der Meerlage gibt es auch einige kleine Strände. Zu viel Zeit habe ich in der Stadt aber nicht verbracht, da hier Partys selten sind und die Sehenswürdigkeiten sich in Grenzen halten. Am Wichtigsten war das Ticket zur Insel Sansibar. Ein Reiseführer brachte mich auf die Idee, ein Resident-Ticket zu kaufen, was ich dann auch tat – es ist viel günstiger als ein Touristen-Ticket. Es fahren einmal die Schnellfähre in 90 Minuten und eine normale Fähre, die 3 Stunden benötigt. Mit dem Ticket wurde ich nicht kontrolliert, aber es hätte auch anders kommen können. Sansibar überraschte mich mit unglaublichen Gebäuden im Stadtteil Stone Town. Auch Regen überraschte mich am nächsten Tag bei der Spice-Tour (nicht Spice-Girl-Tour!), bei dem es um die lokalen Gewürze ging. Phantastisch.

Kenia

Von Sansibar flog ich dann nach Nairobi. Die Stadt begeisterte mich genauso wie die  Freundlichkeit der Menschen. Ich dachte erst an einen Witz, als der Reiseführer schrieb, die vielen Männer würden Hemden und Anzüge – in der Freizeit! – tragen, doch es ist wahr. Kenianische Männer sind sehr gut gekleidet. Die Frauen sind dezent angezogen und Miniröcke oder bauchfrei ist verpönt. Schockierenderweise war ich gerade vor Ort, als ein schwerer Brand ein Kaufhaus zerstörte. Dabei starben 30 Menschen. Da nur 2 Tage später über 200 Menschen bei einer zweiten Brandkatastrophe starben, waren die Fahnenmasten, etwa in der Festung Fort Jesus in Mombasa, auf Halbmast gesetzt. Die Unfälle markieren die schwersten Brandunfälle in der nahen Geschichte und die Menschen sind frustriert über die Rettungskräfte und Unfähigkeit der Polizei. Im ersten Fall, dem Kaufhausbrand, musste ein Polizeiauto, das eigentlich Demonstranten mit Wasser verscheuchte, das Löschfahrzeug ersetzen. Der zweite Brand ereignete sich, als Menschen mit Dosen, Bechern und Eimern das Benzin eines liegengebliebenden Benzintanklasters  aufsammeln wollten, doch eine Zigarette setze alles in Brand und die Menschen, in Benzin getränkte, verbrannten. Der erste Rettungswagen traf erst eine Stunde später ein.

Sehenswürdigkeiten in Nairobi gibt es nicht so viele, aber hier pulsiert nachts das Leben auf den Strassen, ganz anders als in allen anderen von mir bereisten afrikanischen Ländern. Für den Orphan Wildpark blättert man als Ausländer 12 Euro auf den Tisch, während Einheimische gerade einmal einen Euro zahlen. Da die Weisentiere von klein auf an Menschen gewöhnt sind, konnte ich eine Löwin (durch den Zaun) genauso streicheln wie junge Geparden (Cheetahs). Später im kleinen Giraffe Centre (African Fund for Endangered Wildlife-Kenya) (noch mal 7 €) küssten Giraffen einige Touristen, aber ich ziehe eine weibliche Zunge vor. Der Giraffenzoo ist relativ weit entfernt. Neben dem Zoo kann man ins Museum gehen, jedoch bietet das nicht so viel Neues.

Per Mietwagen bin ich zunächst zu dem nahe liegenden See Naivasha gefahren, mit einem weiteren schließlich von Nairobi nach Mombasa. Das Fahren in Kenia empfinde ich als problemlos und ich lerne schnell die Vorteile des Straßenverkehrs. (Nur vergesse ich oft noch die Tempohügel auf den Straßen …) Vielleicht werde ich im nächsten Leben Matatu-Lenker, also Minibusfahrer, die wie blöd durch die Stadt fahren und sich nur an die allernotwendigsten Verkehrsregeln halten – etwa keine Oma zu überfahren oder den Gebrauch der Hupe. Wäre ich in Deutschland, hätten auch  die Halter der beiden Fahrzeuge, deren Seitenspiegel ich umgeklappt habe, schon längst einen Tanz gemacht. In Kenia wird ein bisschen mit dem Zeigefinger gemahnt, kurz gestöhnt und das war’s dann schon. Die Mataus werben um ihre Kunden etwa mit lauter Disco-Musik. Bei Frauen scheint der Beruf des Sammeltaxifahrers gut anzukommen (das sagten mir die Fahrer…).

Mombasa selbst hat keine nennenswerten Strände. Das Strandleben spielt sich im entfernten Süden und Norden ab. Im Süden sind die besseren Strände, aber das ist mit etwa 20 km auch etwas weiter von der Stadt entfernt und man muss eine Fähre nehmen. Der Norden ist direkt mit der Stadt verbunden und etwa 5 km auswärts, beginnen die großen Hotels den Strand unter sich aufzuteilen. Vom Hotel zum Flughafen wurde es dann noch einmal stressig. Statt 30 Minuten Fahrt kostete mich die Anreise fast 1 Stunde und ich war der letzte, der eincheckte. Die Stadt ist genauso wie Nairobi um 7 Uhr morgens voll, und ich musste schon sehr aggressiv fahren, um zeitig ans Ziel zu kommen. Geschickterweise war dann auch noch eine zentrale Strasse gesperrt, was mir zusätzlichen Nervenkitzel brachte.

FAQ

Wie kann man die Mentalität der Menschen am Besten erleben und etwas über das Land lernen?

a) Mit jedem reden, b) nicht in Hotels, sondern in Hostels übernachten, um mit anderen Reisenden ins Gespräch zu kommen c) die lokalen Zeitungen kaufen. So konnte ich der Zeitung in Malawi entnehmen, dass hartgekochte Eier in der Öffentlichkeit zu essen etwas anstößiges ist. (Eine Erklärung war nicht dabei. Auch der Barkeeper kannte das nicht.)

Fährt man in den Länder rechts oder links?

Überall links, also für uns auf der anderen Straßenseite. Man gewöhnt sich recht schnell dran. Ich fuhr aber oft etwas zu weit links. Lästig war es nur, dass in einem Auto der Blinker rechts und in einem anderen der Blinker links war. Insgesamt bin ich etwa 12.000 km mit dem Auto gefahren und noch keinen Kilometer danach in Deutschland. Mal sehen, wie das klappt …

Kann man in Afrika überall seinen Müll hinschmeißen?

Afrika ist groß! Allerdings findet man oft schlichtweg keine Mülleimer und es bleibt einem kaum etwas anders übrig, als den Müll auf die Strasse zu werfen. Plastikflaschen sind beliebte Sammelobjekte bei Kindern. Wirft man sie aus dem Bus, ist die Flasche nach ein paar Sekunden weggeräumt.

Mit welchen Fluggesellschaften kommt man günstig nach Afrika?

Ich bin mit Air Berlin nach Windoek/Namibia geflogen und mit Condor von Mombasa/Kenia wieder zurück. Das Rückflugticket habe ich 2 Wochen vor der Heimreise gebucht.

Muss man bei der Einreise eine Ausreise-/Weiterreisegenemigung vorzeigen?

Dass musste ich nicht. Es kann aber grundsätzlich passieren, dass ein Beamter nachfragt. Die einzigen, die sich für meine Ausreise interessierten, war Air Berlin. Der Frau hinter dem Schalter habe ich meine Busreise nach Sambia vorgelegt und sie hat mit gesagt, dass das nicht reicht, weil Sambia ja eine Stadt in Namibia ist, ich aber eine Landesausreise benötige. Als ich sie korrigiert habe, dass das ein Land ist, musste sie erst eine Kollegin fragen. Nach 15 Minuten war das auch geklärt.

Wie kann man am besten nach Deutschland telefonieren?

E-plus funktionierte in den meisten Ländern nicht. In Namibia und Südafrika konnte ich zumindest SMS empfangen und telefonieren, aber keine SMS versenden. Davon abgesehen, ist es sehr teuer. Eine Alternative sind lokale SIM-Karten. Die sind sehr günstig (1 bis 2 Euros) und die Preise nach Deutschland OK. Zudem hat es den Vorteil, günstig mit Menschen vor Ort telefonieren zu können. Ich habe beim Zain gekauft, was in vielen afrikanischen Ländern verfügbar ist und was – wenn man es denn braucht – gute Konditionen zu den Nachbar-Zain-Ländern hat. Unglaublich ist das Branding von Zain. Viele Häuser sind in den Zain-Farben gestrichen. Die Marke ist sehr stark und an jeder Ecke kann man Airtime kaufen. Nun muss ich beim Kennenlernen mich nicht mehr nur auf meine Briefmarkensammlung verlassen, sondern kann fragen: "Möchtest du meine SIM-Kartensammlung sehen?"

Gibt es in Afrika etwas Gescheites zu essen?

Es kommt wieder darauf an, wo man ist. In Namibia zum Beispiel ist es sehr trocken und daher ist Gemüse selten (bis auf eine Kürbisart). McDonalds oder Burger King sind nicht zu finden, dafür gibt es Marken aus Südafrika, wie Steers, die Burger verkaufen. Besonders kulinarisch empfand ich die Länder aber nicht. Wer auf geschmacklosen Porridge (Brei) steht, ist aber genau richtig!

Kann man wie in Asien gut (illegale) DVDs kaufen?

Ja. Generell schon. Blu-ray Discs sind sehr verbreitet. Sie kosten dann zwischen 1 und 3 Euro und beinhalten 20 Filme. Es gibt DVDs von Filmen, die gerade im Kino sind. Die DVDs werden aus China importiert.

Sollte man im Moment (Anfang 2009) nach Zimbabwe reisen?

Wohl besser nicht. Beim Grenzübergang traf ich einen Gaswasserscheißemonteur, der nach Sambia reiste, um dort ein paar Lebensmittel zu kaufen, da er sagte, in Zimbabwe sind die Regale leer. Auch Benzin gibt es nicht überall. Wer mit dem Auto fährt, kann also mitunter nicht weiterreisen. Die Viktoria-Fälle MUSS man sich aber in Zimbabwe anschauen. Das ist problemlos. Gleich hinter der Grenze nahe den Wasserfällen stehen ein paar unglaubliche Hotelpaläste – persönlich von Robert M. eingeweiht – die dem Touristen das Elend ersparen. Die Währung ist klar: Dollar. Anfang Februar wurden gleich 6 Nullen gestrichen; mit Trillionen kann man wirklich schlecht rechnen. An jeder Ecke kann man Billionen-Scheine für einen Dollar kaufen. Als Souvenir.

Ist es in Afrika gefährlich?

Kommt drauf an. Gesundheitlich habe ich Lariam zur Malaria-Prophylakse eingenommen. In der Dunkelheit sollte man besser nicht auf die Strasse gehen, wobei Malawi sicher sein soll. Das Zentrum von Johannesburg ist aber ein klares No-Go.

An wen kann ich spenden und dabei sicher sein, dass das Geld auch in Projekte geht, statt in die Administration?

Unterstützt Eva in Kaduha (Rwuanda)! Sie würde gerne einen Klassenraum renovieren (wenn es durch die kaputten Wellblechdächer regnet, kann kein Unterricht stattfinden), ein Kissen für jedes Kind kaufen (bis jetzt teilen sich zwei oder drei Kinder ein Bett; für mehr Betten ist kein Platz), Schulsachen und Spielsachen für die Kinder besorgen, … Mehr unter http://www.eva-in-kaduha.blogspot.com/. Spenden bitte an die Bistumskasse Münster, Konto-Nr. 2000100 BLZ 400 602 65 DKM Münster, Betreff: RTR 001-1.2211.2261 Ruanda, Eva Fischer. Eine Spendenquittung wird gerne ausgestellt.

Thema des Monats: Programmieraufgaben / JavaBLOG Pause

Anders als bei den üblichen kleinen Beispielen für eine bestimmte API und Technologie sollen nun drei Aufgaben zur Auswahl stehen. Jeder kann nach Lust, Zeit und Laune eine/jede Aufgabe lösen.

Aufgabe 1

Brainfuck (http://de.wikipedia.org/wiki/Brainfuck) und Ook! (http://de.wikipedia.org/wiki/Ook!) sind einfache Turing-vollständige Sprachen, für die sich sehr leicht Interpreter in Java schreiben lassen. Für Brainfuck gibt es mittlerweile sogar eine IDE: http://hardtware.de/products/brainfuck.php. Die Aufgabe ist, unter Java 6 einen eleganten Compiler zu bauen, der aus einem Brainfuck– oder Oak!-Programm ein ausführbares Java-Programm in Form einer .class-Datei generiert. Der Aufruf kann so aussehen:

$ java BrainfuckC Application.bf

Successfully generated Application.class

$ java Application

Aufgabe 2

Gegeben ist eine potenziell sehr große ASCII-Datei mit Ganzzahlen im Wertebereich +-1000000, die durch Leerzeichen, Tab oder Return getrennt sind. Über die Datei soll eine Statistik gefahren werden, sodass am Ende die größte und kleinste Zahl sowie die maximale Teilsumme ausgegeben wird. Gesucht ist das schnellste Programm.

$ java Stat numbers.txt

Min: 3, Max: 199933, Maximale Teilsumme 4785

PS: Die maximale zusammenhängende Teilsumme von zum Beispiel

{-18,5,-3,9,4,-12} ist 5 + -3 + 9 + 4 = 15.

Aufgabe 3

Microsoft PowerPoint kann Folien im XML-Format speichern. Dazu verwendet Microsoft Zip-Dateien mit der Endung pptx. Im Zip-Archiv befindet sich ein Order ppt/slides und jede PowerPoint-Folie liegt dort als XML-Datei vor. Schreibe ein Swing-Programm, mit dem man einfache Text-Folien darstellen kann. Der Rückgriff auf beliebige Java-OpenSouce-Bibliotheken ist ausdrücklich gewünscht.

Lösungen können gerne in dem Blog gepostet werden (oder Verweise auf die Lösungen).

Blog-Pause

In den letzten Wochen gab es keine Posts, da ich auf den Philippinen, Brunei und Indonesien (ja, auch Java) war. Nach der Reise habe ich interessante Java-Neuigkeiten in den Blog nachgetragen. Nun wird es voraussichtlich für einige Wochen wieder keine weiteren Einträge geben, da ich nach Afrika fliege und Namibia, Südafrika, Swaziland, Lesotho, Botswana, Zambia, Mozambique, Malawi, Tansania, Kenia, Ruanda besuchen werde. Wollen wir hoffen, dass dies hier nicht der letzte Blog-Eintrag ist 😉

Apache Jackrabbit 1.5

Jackrabbit (http://jackrabbit.apache.org/) ist eine Implementierung der Content Repository API (JSR 170/JSR 283). (Bei dem JCR geht es darum, Datenquellen eines CR unter einer einheitlichen API anzusprechen. Die Anfrage werden mit XPath getellt.) Wichtige Neuerungen zählt http://www.apache.org/dist/jackrabbit/RELEASE-NOTES-1.5.0.txt auf. Zwei Sachen finde ich besonders interessant:

  • The standalone Jackrabbit server component. The runnable jackrabbit-standalone jar makes it very easy to start and run Jackrabbit as a standalone server with WebDAV and RMI access.
  • Simple Google-style query language. The new GQL query syntax makes it very easy to express simple full text queries.

Die aktuelle Version geht also deutliche Schritte in Richtung der neuen Version JSR-283. http://www.magnolia-cms.com/home.html ist ein bekanntes CMS, welche auf den Jack-Hasen setzt.

SpringSource und Groovy/Grails und SpringSource mit Adobe

SpringSource (http://www.springsource.com/) macht große Schritte. Zum einen durch den Aufkauf von G2one (http://www.g2one.com/), die sich der Beratung von Weiterentwicklung von Groovy und Grails verschrieben haben:

SpringSource,
the maker of the Spring framework have just announced they are acquiring G2One, Inc.,
the Groovy/Grails company. You can learn more about this announcement here:

Nun arbeitet SpringSource auch mit Adobe zusammen und Flash näher an Spring zu setzen. Das Spring-Framework integriert dazu BlazeDS (http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/), eine unter LGPL stehende Remoting- und Messaging-Technologie. Mit BlazeDS kann Flex auf Java-Methoden auf der Serverseite zugreifen, so wie es auch JavaScript über DWR (http://directwebremoting.org/) kann. Die Ankündigung zur Zusammenarbeit:

  • http://www.springsource.com/node/1077

XStream mit JSON-Serialisierung

XStream (http://xstream.codehaus.org/) ist neben
XmlBeans einer der bekanntesten XML-Serialisierer. Nun haben die Entwickler die Bibliothek erweitert, dass XStream auch als XML-JSON-Serialisierer (http://xstream.codehaus.org/json-tutorial.html) arbeitet. Die Methodenamen sind mit toXML() und fromXML() zwar nicht so passend, aber der Aufruf dennoch einfach:

Product product = new Product("Banana", "123", 23.00);
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.setMode(XStream.NO_REFERENCES);
xstream.alias("product", Product.class);
System.out.println(xstream.toXML(product));

Der andere Weg:

String json = "{\"product\":{\"name\":\"Banana\",\"id\":\"123\"" +
",\"price\":\"23.0\"}}";
XStream xstream = new XStream(new JettisonMappedXmlDriver());
xstream.alias("product", Product.class);
Product product = (Product)xstream.fromXML(json);
System.out.println(product.getName());

JavaFX 1.0 offiziell veröffentlicht

http://upload.wikimedia.org/wikipedia/en/4/4a/JavaFXCup200x230.pngSun hat Anfang Dezember 2008 JavaFX veröffentlicht. Es ist als Alternative zu MS Silverlight und Flash + Flex für Rich Internet Applications gedacht. Einige Links dazu:

Zentrale Punkte von JavaFX 1.0 sind: (Zitiert von http://blogs.sun.com/javafx/entry/javafx_1_0_is_live)

  • Fast and easy to use 2D graphics
  • PerspectiveTransform for 3D effects
  • KeyFrame animation
  • Video and Audio support using both native and cross-platform codecs
  • Swing Integration
  • XML & JSON web services
  • Pixel-filters and visual effects with GPU hardware acceleration
  • CSS styling (more on that later)
  • Windows XP+ and Mac 10.4+ support with Linux & Solaris in the works (more on that later too)
  • The new JavaFX Script language with binding and animation built in, running 10->20x faster than Javascript
  • Visually rich applets that you can drag to your desktop and save for later
  • Integration with Photoshop and Illustrator
  • Access to the world’s huge library of Java code and APIs
  • A new website with docs, tutorials, and tons of BSD licensed sample code and as a nice bonus:
  • A sneak-peek beta of JavaFX on mobile devices

Der Punkt Support with Linux & Solaris in the works macht sicherlich nicht jeden in der Community glücklich, aber gut…

Sun hat die schöne Seite http://javafx.com/ aufgebaut, um mehr über JavaFX zu lernen. Die NetBeans IDE 6.5 bringt volle Unterstützung für JavaFX (http://www.netbeans.org/features/javafx/index.html) mit. Für Eclipse gibt es bisher keine große Unterstützung.

http://www.netbeans.org/images/v6/5/screenshots/javafx.png

http://www.reportmill.com/jfx/ bringt passend ein Tool auf Markt. Zentrale Elemente sind (Zitiert von der Webseite):

  • Powerful Visual Designer
  • Animation, Illustration and Page Layout
  • Video, Sound and Image Effects
  • Drag & Drop Application Components
  • JDBC and POJO Data Binding
  • HTTP Form Generation and Binding
  • Navbar Generation, Page Transitions
  • Graphs, Charts, Tables and Reports
  • Full Featured Player/Document Reader
  • Extension Plugins with Internet Directory

http://www.reportmill.com/jfx/JFXBScreenShotFull.jpg