NetBeans 7.0 Roadmap und NetBeans 7.0M1/M2

Die Roadmap sieht so aus:

NetBeans Roadmap

Der Development Plan spricht vom 22. Juni, dann soll die finale Version kommen.

Mit NetBeans 7.0M2 ist auch die zweite Version aus dem 7er-Zweig raus.

  • Milestone 1: NewAndNoteworthyMilestone1NB70
  • Milestone 2: NewAndNoteworthyMilestone2NB70
  • Ein paar Impressionen aus den M1 und M2:

    Verbesserte Maven-Unterstützung (super, wo doch jetzt Ivy immer mehr zur Alternative fürs dependency management (nicht builds!!) wird). In den Dialogen, Vervollständigung, Web-Services, …

    cos.jpg

    add-dep.jpg

    generate_code.jpg

     

    worthy-maven-generate.png

     

    worthy-maven-completion.png

    Viele Neuerungen aus dem PHP-Projekt (netbeans php blog)

    Und Ruby

    Aktualisierung auf JS 1.7

    http://blogs.sun.com/tor/resource/wrong-yield.png

    http://blogs.sun.com/tor/resource/yield-ok.png

     

    http://blogs.sun.com/tor/resource/e4x-completion.png

    Komlettes Redesign unter Mac OS

     

    maclaf.png

    Bessere Unterstützung fürs Profiling:

     

    FitnessViaPartnership/profileme.png

    SVG-Komponenten in NB Mobility

    VMD.png

    Von jHat eine interessante Unterstützung, um im Speicherbaum zumzusuchen.

    OQL_code_completion.png

    Bei der C++-IDE: Unterstützung zum Bau vom Qt-Applikationen, Macro-Expansion (Tooltip), Tastaturvervollständigung, Setter/Getter bauen.

    Vervollständigung bei Grails:

    worthy-groovy-editordynamic.png

    Insgesamt viele Änderungen, wobei die meisten Sachen nicht in der Java-IDE selbst passieren, sondern im Tooling  und in anderen Sprachen.

    Video: Java 7, Modularisierung, Jigsaw, was kommt, was geht, 2010

    Mark Reinhold spricht über Java 7

     

    Geplante Änderungen:

    Wird (wohl) nicht in Java 7 kommen wird:

    • Closures
    • Reified Generics
    • First Class Properties
    • Überladene Operatoren
    • BigDecimal Syntax
    • JSR 295: Beans Binding

    Der Hammer: Java 7 wird Anfang  2010 erwartet.

    Wer mal was inspirierendes hören möchte: Unter http://channel9.msdn.com/posts/Charles/C-40-Meet-the-Design-Team/ sprechen C#-Macher Anders Hejlsberg und weitere C#-Experten über die Zukunft von C# und .NET, insbesondere im Kontext dynamischer Sprachen. Hier läuft man meilenweit vor Java; und das Interview ist schon 1 Jahr alt… Unter http://code.msdn.microsoft.com/csharpfuture geht’s es dann mit ein paar Links zur C# 4 und Ideen zu C# 5 weiter.

    Linux Tools Project

    Dass Linux Tools Project fasst verschiedene Projekte wie automake, Valgrind, Systemtrap-Editoren zur Linux-Entwickung zusammen. Von der Eclipse-Webseite:

    The Linux Tools project aims to bring a full-featured C and C++ IDE to Linux developers. We build on the source editing and debugging features of the CDT and integrate popular native development tools such as the GNU Autotools, Valgrind, OProfile, RPM, Systemtap, etc. Current projects include Autotools build integration, a Valgrind heap usage analysis tool, and an OProfile call profiling tool.

    Drei Scrrenshots von New and Noteworthy:

    New OProfile View UI

    Thema der Woche: Pfuschen erwünscht

    In der C-Welt gibt es bisher Wettbewerbe für das verpfuschteste Programm (http://www.ioccc.org/). Unter Java gibt es bisher diesen Obfuscated Contest nicht. Aufgabe: Schreibe nach den offiziellen C-Pfusch-Regeln

    • To write the most Obscure/Obfuscated [C] program under the rules below.
    • To show the importance of programming style, in an ironic way.
    • To stress [C] compilers with unusual code.
    • To illustrate some of the subtleties of the [C] language.
    • To provide a safe forum for poor [C] code. 🙂

    ein Java-Programm. Beispiel:

    class _{static long _
    (long __,long  ___) {
    return __==0 ?___+ 1:
    ___==0?_(__-1,1):_(__
    –1,_(__, ___-1)) ;  }
    static  {int _=2 ,___
    = 2;System.out.print(
    "a("+_+‘,’+___+ ")="+
    _ (_,  ___)) ;System.
    exit(1);}}//(C)tutego

    Ich bin gespannt auf das beste (also schlechteste) Java-Programm…

    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