Endlich relaxen

Nach drei Jahren bin ich wieder auf Ko Maak. Allein die Anreise mit dem Speedboot hat sich in Hinsicht auf die Anreisegeschwindigkeit unterschieden. Doch was sich hier auf der Insel verändert hat ist unbeschreiblich. Neben der komplett neuen Anlegestelle an unserem damaligen Strand sind in dieser Zeit neue Unterkünfte in Form von Resorts (samt Golfrasen bis zum Meer) entstanden. Selbst der Bungalow in dem ich damals mit Gunnar, Antje und Simon nächtigte ist verschwunden. Dennoch existiert TK Huts und sieht ansatzweise so aus wie vorher, allerdings mit neu gebauten Häuschen und etwas veränderte Strandführung, so dass es heute nicht mehr möglich wäre ein Lagerfeuer zu machen.

Prinzipiell ist es hier aber immer noch sehr entspannt und absolut relaxend. Vor allem diesmal mit ordentlich Sonne. In unserer Unterkunft ‘Monkey Island’ gibt es für 1100 Baht dem Preis entsprechende Hütten in den hinteren Reihen. Gestern abend gab es auf dem Barpodest (Pipe würden die Augen rausfallen) sitzend/liegend nach dem BarBQ bei einigen Dosen kühlen Chang Bier Livemusik vom lokalen Rastamann. Nach erholsamer Nacht unterm Moskitonetz haben wir vier heute Vormittag erst einmal einen kleinen Strandspaziergang unternommen, um anschliessend in dem kleinen Restaurant an der Inselstraße einen kleinen Mittagshappen (Pad Thai) einzunehmen. Auch hier war ich vor drei Jahren mit meinen damaligen Reisebegleitern, da es der einzige geöffnete Laden war, sowohl für Nahrungs- als auch Bieraufnahme. Doch auch dieses Lokal hat sich mittlerweile vergrößert. Gleich werde ich mal mit Taucherbrille und Schnorchel bestückt das Meer erobern.

Auch gut zu wissen, dass die Eltern gerade auf dem nicht weit entfernten (30 min per Boot) Ko Chang residieren.

Menschen treffen

Bedingt durch die Zeitverschiebung und eine etwas längere Nacht am Tag zuvor sind wir erst relativ spät zum Chatuchak aufgebrochen. Die drei Stunden haben aber dennoch gereicht, um einen ordentlichen Vorrat an T-Shirts zu ergattern. Für den Abend haben wir uns mit Nadine verabredet. Nach einer freudigen Umarmung an der Phaya Thai Skytrain Station ging es auch unmittelbar zum Chinesen um die Ecke, um unsere hungrigen Bäuche zu beruhigen. Beim Essen und während der anschliessenden Drinks in einer Bar wurden alle Neuigkeiten ausgetauscht. Natürlich rief während unserer Gespräche auch Deo bei Nadine an, so dass ich auch mit ihm einige Worte wechseln konnte. Hoffentlich klappt es, dass er über Weihnachten nach Deutschland kommen kann. Ich will ihm unbedingt mal Schnee zeigen.

Nachdem wir uns von Nadine verabschiedet hatten ging es per knallendem Taxi zurück in die Khao San, wo wir erneut in der Khao San Road versackten. Dieser bis nach 6 Uhr andauernde Fehler äußerte sich dann am anschliessenden Morgen… oder besser Nachmittag.

Den halben Tag verpennt, haben wir die restlichen drei Stunden Tageslicht genutzt, um auf dem Chao Phraya eine kleine Bootsrundfahrt zu machen. Genau zum Sonnenuntergang kamen wir an der letzten Anlegestelle Central an. Per Skytrain ging es von dort aus weiter zum Lumpini Park, um dort den sich sportlich betätigenden Thais zuzuschauen. Zu Fuss und per BTS ging’s dann weiter zum Siam Square, um im dortigen MBK Alex’ Simkarte aufladen zu lassen. Nach einer kurzen Erfrischungsrunde haben wir uns mit Antony getroffen, den Alex bereits in Deutschland per Internet kennengelernt hatte. Mit ihm fuhren wir dann, so wie schon mit Nadine tags zuvor, zu fünft in einem Taxi nach China Town. Sah bestimmt lustig aus, wie vier Kerle zusammengequetscht und übereinander sitzend auf der Rückbank transportiert werden. Ziel der Fahrt war das langersehnte Seafood-Restaurant an einer Straßenecke mitten in China Town, wo Alex und ich bereits vor sechs Jahren mit Daniela waren. Selbst der schon neun Jahre in Bangkok lebende Antony kannte diesen Laden noch nicht.

Zum abendlichen Abschluss fuhr Antony mit uns dann noch in die Soi Cowboy. Ja, wir wissen, was es dort gibt. Zum Glück waren wir mit Antony dort, der fliessend Thai sprechen kann, so dass wir nicht zu arg beim Biertrinken belästigt wurden. Dennoch war uns dieser Ort nicht sehr angenehm. Heute stehen Golden Mountain und eine Klongfahrt an.

Ankunft in Bangkok

Teil zwei der Anreise. Nachdem wir in München mit etwas Verspätung angekommen sind, ergab sich gleich das nächste Problem. Es war nicht möglich Sitzplätze im Flieger nebeneinander zu bekommen. Auch für den Weiterflug ab Dubai wurden wir vertröstet. Also einchecken und warten. Und dann der nächste Schlag: aus technischen Gründen verzögert sich der Abflug um fast anderthalb Stunden. Scheint aber noch im Bereich des Möglichen, um den Anschlussflug in Dubai locker zu erreichen. Nur Schade, dass Jan dort auf uns wartet. So muss er die knapp 10h am Ende doch alleine dort verbringen.

Nachdem das Problem unter der Flugzeugnase behoben wurde konnten wir auch einsteigen und sind sicher nach Dubai geflogen. Dort schnell noch die Bordingpässe für Robert und Alex organisiert, kurz frisch gemacht und Jan in die Arme geschlossen. Und weiter ging die Reise in der letzten Sitzreihe einer 777-300 mit wunderbarem morgendlichen Anblick der immer größer werdenden Metropolen Dubai während des Abflugs.

Und Boom - Touchdown - Landung in Bangkok. Endlich wieder hier. Auch wenn wir jetzt hier im warmen Süden sind, war es bei unserer Ankunft um 18:40 lokaler Zeit bereits dunkel. Nach der Ewigkeiten dauernden Passkontrolle wurde Jan am Gepäckband herb enttäuscht, als dass seine Kraxe nicht aufzufinden war. Also muss er die nächsten Stunden erst einmal mit aus unseren Koffern leben. Jetzt aber erst mal Geld tauschen und auf dem Flughafengebäude orientieren. Nachdem die Daheimgebliebenen kurz über die glückliche Ankunft informiert wurden, ging es zum Taxistand, um von dort aus mit einem lustigen Thai zu viert mit all unserem Gepäck im typischen Bangkoker Yellow Cab (Toyota) in die Khao San zu fahren. Leider war auf Grund des Todes der königlichen Schwester das Viertel rund um die Khao San fast hermetisch abgesperrt, so dass wir ca. 1km vom Ziel entfernt aus dem Taxi gekippt wurden. Also ging es vollbepackt die letzten Meter zu Fuss. Trotz leichter Desorientierung haben wir schlussendlich doch noch zu unserer ersten Unterkunft gefunden. Schnell frisch gemacht und dann auf in das abendliche Khao San Leben. Essen, Essen, Essen. Oh wie haben wir das vermisst. Nachdem die Bäuche vollgeschlagen wurden ging es für einen kleinen Nachtisch (Banana Pancake) noch einmal über die Khao San um letztendlich wie ein Stein ins Bett zu fallen.

Nachdem wir heute morgen in ein besseres Hostel gewechselt sind, stehen gleich, neben einigen organisatorischen Dingen (Sim-Karte, Jans Rucksack) und dem Besuch des Chatuchat Marktes, das freudige Wiedersehen mit Nadine an. Und natürlich essen - heute abend vorzugsweise mal in China Town.

Im Anflug auf Bangkok

17:41 Noch sitzen wir (Alex, Robert und ich) im Zug, wieder mal mit mehr als einer halben Stunde Verspätung. Danke Deutsche Bahn! Zum Glück haben wir ausreichend zeitlichen Puffer, um nicht zu sehr in Hektik zu verfallen. Also vertrödeln wir die Zeit mit dem Wurstquartett und fragen uns, was die unterschiedlichen Farben der Baretts der mitfahrenden Bundeswehrsoldaten zu bedeuten haben. So langsam verfliegen die Gedanken, ob man alles eingepackt hat, ob noch irgendwo offene Projekte sind. Der Urlaub rückt also schon jetzt ein wenig in das Bewußtsein.

Ich bin gespannt, ob Jan, der schon längst in der Luft ist, es vor seinem Abflug in Hamburg noch hin bekommen hat, uns ab Dubai vier zusammenhängende Sitzplätze im gemeinsamen Anschlussflieger nach Bangkok zu organisieren. Um 3:30 deutscher Zeit setzen wir in Dubai auf und werden von Jan empfangen. Knapp 3 Stunden später geht’s dann weiter nach Big BKK, wo Nadine auf uns wartet. Doch jetzt heißt es erst einmal: was wird Emirates im Unterhaltungssektor für uns vorbereitet haben?

Deep Zoom Extension - Sparse Image Scene Generator

For a long time I was looking for an elegant way to present my tons of pictures to friends and visitors of my blog. I played around with Silverlight to implement my own picture viewer, but wasn’t happy with all my attempts. Last week I gave Deep Zoom a chance and now think that I found the right solution for my problem. You may have seen those fancy samples about the Deep Zoom technology like the Hard Rock Memorabilia. If you just don’t know what Deep Zoom is I can recommend this presentation of Blaise Aguera y Arcas at TED.

Deep Zoom Composer - compose modeDeep Zoom Composer is a nice and handy tool to generate the tile patterns for each zoom level of a big image collection and to build up the so called sparse image scene graph with visual support. This graph contains the layout information (origin and scaling) of each image that is part of a Deep Zoom scene. Running the export process (3rd and last step) an XML file named SparseImageSceneGraph.xml will be produced. This is the source for the sparse image generation process that will create the tiles tree containing all the small image assets and an Deep Zoom Collection XML file (dzc_output.xml). The dzc_output.xml file in turn can be interpreted by a Silverlight application using the MultiScaleImage.aspx) element to get access to all image tiles in the tree structure. That’s the way Deep Zoom Composer works.

The problem and its solution

This process has a small problem for me. Looking at the large amount of pictures I’ve shoot since 2001 (around 30.000) it would be a hassle to manually arrange those (collection by collection) using the Deep Zoom Composer, where you have to drag & drop and scale each image on the surface. Okay there is the "Arrange in a Grid" feature that (in my opinion) does not result in a very eye-catching layout. That’s why I came to the conclusion of writing a small .NET console application that will manage this issue for me in an automatic way. SparseImageSceneGenerator was born.

Compared to the process of Deep Zoom Composer this tool will help you to automate the composing process to generate the SparseImageSceneGraph.xml. The command line application only needs at least two arguments: a path to the location of your images and an output path to the resulting SparseImageSceneGraph.xml file. SparseImageSceneGenerator reads and analysis the properties of all images to create a nearly square shaped layout for all images. Before going into detail here is the result:

How it works in detail

(1) After reading all properties (size and metadata) of all pictures the sum and the square root of this sum for all aspect ratios will be calculated.

(2) The square root now limits the width of a rectangle where each image will be aligned row by row (including a cell padding between each image). In the figure above the sum of the aspect ratios of the two portrait images results in 1.333 (plus padding). The 3rd landscape image (AR = 1.5) does not fit into the row, because it will overflow the limit of 1.87 (plus padding). So it wraps to the next row. This generated grid now contains the final layout of all images.

(3) In a final step we have to adjust each rows width to be 1.0. This means scaling the width and origin of each image and row. That’s it.

As you can see in the above sample the result is not a perfect square. It depends on the number of images. The more, the better (as you can see in the sample above). In addition SparseImageSceneGenerator supports the SparseImageTool that is part of the DZC installation to merge smoothly into the whole generation process. SparseImageTool is the command line version of the export process of DZC to create the final result based on the SparseImageSceneGraph.xml. The result is (as we know from the DZC export process) the dzc_output.xml file and the tree of tiles.

Download

Feel free to download the current version and please give me feedback on this tool:

Updated Silverlight demos - Clock, Attractor, Bezier

After Microsoft released the final version of Silverlight 2.0 last week I decided to update some of my samples I published before. Converting the Silverlight 2.0 Beta 2 based samples (physics attractor and the bending bezier curve) was straight forward without any problems. Instead the Silverlight 2.0 alpha based clock sample made some more work. That’s why I decided to setup a new solution and start from scratch by rewriting the code behind files.

Feel free to download the source files:

Clock-2.0.zip

Zwei wundervolle Tage - .NET Open Space in Leipzig

Gerade sind wir (Alex und ich) wieder daheim angekommen und haben die letzten Kisten mit all den Resten der letzten beiden Tage irgendwo in unserer WG untergebracht. Lecker Kuchen von der Bäckerei Göbecke stehen auch noch in Hülle und Fülle auf dem Küchentisch. Neben dem vielen ausnahmslos positivem Feedback der Teilnehmer haben die Organisatoren Torsten, Stefan, Alex (und ich irgendwie) mit dauerhaftem Grinsen den Mediencampus Villa Ida in Leipzig verlassen. Es war ein anstrengendes jedoch sehr gewinnbringendes Wochenende - für alle.

logo

Ich selbst war anfangs skeptisch, ob wir, die Teilnehmer, es schaffen die Veranstaltung so zu gestalten und zu beleben wie vorgesehen. Also dass sich alle am Geschehen beteiligen, die Beiträge spontan durch die Teilnehmer erstellt werden und der .NET Open Space zu dem wurde, was er werden sollte.

Solch eine "Unkonferenz" wie sie hier organisiert wurde füllt für mich (und alle anderen) genau diese Lücken, die auf gewöhnlichen Konferenzen entstehen. Die fehlende Kommunikation mit und unter den Teilnehmern wurde auf dem .NET Open Space durch das zugrunde liegende Konzept ausgebügelt.

Ein dickes Dankeschön an alle Teilnehmer, Sponsoren und vor allem den helfenden Händen (Antje, Jule, Katrin, Steffi, Susi, Maik der Hausmeister, Matthias und Yvonne), die dieses Ereignis ermöglicht haben. Ich hoffe wir sehen uns alle spätestens nächstes Jahr wieder - zum .NET Open Space 2009.

3x Thumbs up. Ein echt cooles Wochenende.

Geschafft!

Unsere WG-Katze

Lustig, wie sie sich mal wieder zwischen mir und meiner Tastatur platziert, um dem
Mauszeiger auf meinen Monitoren zu folgen. Und da soll man arbeiten.

Handling the BezierSegment as path in Silverlight

This small sample will show you the possibilities of Silverlights (and WPFs) BezierSegment
class. To draw a bezier curve you have to encapsulate the BezierSegment as part of
a Path element as shown in the following lines of code:

<Path x:Name="Curve" Stroke="#FFFFFFFF" StrokeThickness="2">
  <Path.Data>
    <PathGeometry>
      <PathGeometry.Figures>
        <PathFigureCollection>
          <PathFigure x:Name="Figure" StartPoint="27,56">
            <PathFigure.Segments>
              <PathSegmentCollection>
                <BezierSegment x:Name="Bezier"
                               Point1="227,156"
                               Point2="267,36"
                               Point3="380,30" />
              </PathSegmentCollection>
            </PathFigure.Segments>
          </PathFigure>
        </PathFigureCollection>
      </PathGeometry.Figures>
    </PathGeometry>
  </Path.Data>
</Path>

The curve itself is rendered using four points: the StartPoint attribute of the PathFigure
element and the three points Point1, Point2 and Point3 of the BezierSegment. Try to
play around with this sample and feel free to have
a look into the sources
.