Friday, September 26, 2014

To Alice Springs: Devil's Marbles, Uluru und Olgas (22. bis 27. August)

Den letzte Tag in Darwin verbrachten wir länger als erwartet mit Souvenirs einkaufen und Flug von Alice Springs nach Cairns buchen; letzteres zog sich wegen Kreditkartenlimite hin und konnte dann doch per Chat auf dem Phone (!) gelöst werden. Wir kamen am Abend nicht mehr weit und blieben in einem Camping nahe von Darwin der zum Glück noch Platz hatte. Beim Zubereiten der Cinque P zeigte sich dann, dass zwei der drei Gasbrenner des Herds nicht funktionieren: Auch Top Qualität im Luxuscamper von Apollo!

7 Meter lang und vollausgestattet zu 1$ pro Tag!

Die nächsten zwei Tage verbrachten wir hauptsächlich auf der Strasse. Die erste Übernachtung verbrachten wir in Mataranka auf dem Campground gleich bei den Hot Springs. Wenn man die Quellen bei Katherine bereits besucht hat muss man diese nicht unbedingt auch noch sehen. Highlight beim Baden waren die Wallabies, die ungestört in nächster Nähe weilten. Highlight beim Essen waren unsere Hausgemachten Spätzli mit Zwiebeln und Gruyer und 'gebackene' Tomaten (Mikrowelle und Google macht's möglich)!



Die Fahrt zur zweiten Übernachtung werden wir nicht so schnell vergessen. Wir fuhren viel zu spät ab (1145 Uhr) und hatten nach der Besichtigung der Telegraphstation in Barrow Creek das Gefühl, dass unser restliches Benzin locker bis Tennant Creek reichen würde. Die Warnlampe ging knapp 80 Kilometer vor unserem Ziel und mit dem letzten Strich der Tankanzeige an. Wir haben uns verschätzt und zwischen hoffen und bangen überlegt, was wir tun sollen, wenn wir wirklich kurz vor Sonnenuntergang stehen blieben; Handyempfang gab's keinen und Autos sahen wir auch selten. Wir schwitzten Blut und hofften darauf, dass es im knapp 30 Kilometer näheren Three Ways eine Tankstelle hat. Wir hatten Glück! Durchatmen war angesagt bevor wir das letzte Stück nach Tennant Creek fuhren.


Cartoon aus dem Jahr 1944 von Bluey and Curley in der Küche der Station



Kurz nach Tennant Creek auf der Strecke nach Alice Springs liegen die Devil's Marbles. Riesige, durch Witterung und Erosion geformte Granitbrocken, die wie Murmeln über sonst eher flaches Land verstreut und aufgetürmt liegen. Der Hauptgrund weshalb wir die Strecke Darwin Alice Springs per Camper zurücklegten. Es hat sich gelohnt!





Am späteren Nachmittag des gleichen Tages erreichten wir Alice Springs bei verhältnismässig frischen 22 Grad Celsius und verbrachten die Nacht bei unter 10 Grad auf dem bisher schönsten Campingplatz. Auf dem Menü stand Cevapcici.



An den letzten beiden Tage unserer Relocation standen natürlich der Uluru und die Olgas auf dem Programm. Viel dazu sagen muss man nicht, ausser dass es doch nicht nur irgendein Felsbrocken (oder Polenta Berg :D) ist. Der erste Anblick und die Stimmung beim Sonnenuntergang sind schon sehr speziell. Nach der Nacht im Camping bei Yulara stressten wir dann die 450 Kilometer wieder zurück nach Alice Springs. Unser Camper musste pünktlich auf 1330 Uhr zurück (der letzte Abwasch machten wir an einer Tankstelle), ein Paket auf die Post (erste Ladung Geschenke und Dinge, die wir nicht mehr brauchten) und wir letztlich auf den Flughafen um den letzten Flieger an diesem Tag zu erwischen. Nächster Halt: Cairns!



Uluru bei Tageslicht

Olgas

Uluru bei kurz vor Sonnenuntergang

... und noch während dem Sonnenuntergang


Mt Conner



PS: Während den langen Strecken die wir zurücklegten kam mir irgendwo auf der Strasse die Melodie aus einem alten Donald Duck in den Sinn, keine Ahnung aus welchem Grund. Auf jeden Fall verfolg uns Trick or Treat seither auf jeder längeren Fahrt :).

Friday, September 19, 2014

GWT Image Cropper

In a previous project where the client was GWT based (in combination with GWTP and Errai) we needed an image cropping component. One of the standard widgets you need in nearly every second project and which is not provided by GWT as a pre-baked UI component. The ones I found on open source repositories I didn't like too much for the lack of documentation, huge parts of spaghetti code, lots of functionalities we didn't need or the combination of all those reasons. Wrapping an existing JS component was not an option, we didn't want to depend on another library. So I decided to implement a GWT only based cropper which might come handy for someone else too.

The inspiration on how it should behave was coming from Jira, the issue tracker we just migrated to back then. I had a look at the responsible DOM elements and how the adapt upon user interaction and tried to implement the cropping behaviour the same way. The idea is to create an outer div showing the image as background and three child divs: one for the glass (area to crop), one for the selection (area to clip) and one for adding the four resize handles to the corner of the selection.

The ImageCropper class takes care of registering the needed handlers, loading the source image and adding the selection component. A LoadHandler is used to size the div showing the background image correctly. To make this work on IE the image needs to be visible otherwise we get 0 for the height and width.


The abstract ResizeHandle contains the base logic for styling the handles and capturing mouse events. The calculation of how the selection should be adapted (getScaledYDelta() and getScaledXDelta()) is delegated to the concrete implementations of the handlers which are instantiated in the SelectionChooser class.


Besides creating the handlers the SelectionChooser class is also responsible of creating the glass and the clipping area as well as adapting the sizes and positions of them on user input.


I didn't test the implementation on all different browsers and versions since the application was used only on Chrome and Firefox (lucky us...). It should though work on IE10 as well when I remember correctly.

On the back end side of things we used Thumbnailator to do the actual cropping. With its fluent API the process of manipulating images becomes straightforward compared to using Java's 2D API along with other techniques.