Boykottiert Olympia (Version 1)!

Nachdem weder die Sportorganisatoren, noch die Sportler, Fernsehsender und Sponsoren die Stärke besitzen, die Spiele in der Parteien-Diktatur China zu boykottieren, habe ich heute beschlossen, dass ich das einfach selber machen muss. Olympia scheint ja ohnehin nur noch ein weiterer großer Spielball wirtschaftlicher Interessen zu sein. Also kuck ich mir den ganzen Witz einfach nicht an. Ich werde keine Bandenwerbung in den Stadien lesen, ich werde keine Fernsehwerbung in den Pausen sehen und keine Produkte von “offiziellen Sponsoren” kaufen. Sprich, die Kohle mit der das ganze Hamsterrad am Laufen gehalten wird, wird wenigstens bei mir keinerlei Wirkung zeigen.

Macht jemand mit?

Http-Get and encoding – the technical stone age

Every day another fuckup. Today it was encoding. Somehow our excel exports did not work for cities with umlauts. MUST be an encoding thing. Interesting: It did work pretty well on Jetty, but good ol’ Tomcat throwed me broken characters in my servletrequest.

I tried javascript escape and the result was that it didn’t even work in Jetty anymore. So after proper reading (http://jira.codehaus.org/browse/JETTY-113, http://jetty.mortbay.org/jetty5/faq/faq_s_900-Content_t_International.html), I accepted that you just CANNOT put umlauts in a get-request. You are able to escape it, but there is apparently no standard how the server retranslates it. But how to do it? First idea was to post it. Post uses the given encoding and all is fine. And why not doin’ it ajaxian? Well, because it just doesn’t work. The server is building the document and returns the binary data, but what do I do then? Tried putting it in a new document, but it just doesn’t work. After a few hours and some thousand curses, I ended up writing a hidden html-form, which looks really ugly, being the ONLY handwritten form in the whole javascript-driven application.

In short:

Never try to use special characters in Http-Get!

Forget using ajax to retrieve a file!

How to live with hibernate proxies

Stumbled over the fucking hibernate-CGlib-Proxies again. So here is what I found out and what helped me a lot:

If you load an object via the load()-method hibernate returns a proxy by default. As long as you don’t access any primitive property this thing won’t materialize. No prob, you might think and in most circumstances it isn’t. But consider this example:

class Plan {

// Cascade-type all, fetch lazy
private Plan lastVersion;
private boolean active

public Plan(Plan lastVersion){
if (lastVersion != null){
lastVersion.active = false;
}
this.active = true;
}
}

I don’t want to expose a public setter here to ensure the integrity of my versioning. Now the fuck-up:

Let’s say I get the current Plan from my Client and want to save it, the following code seems pretty straight forward:

// transactionmanaged service-method

Plan lastVersion = getHibernateTemplate().load(Plan.class, 4)

Plan currentPlan = new Plan(lastVersion);

getHibernateTemplate().saveOrUpdate(currentPlan);

BUT (as you might have guessed) this doesn’t work. At the end I do have two entries in my db both marked as active. Why that? lastVersion is a cglib-Proxy and hibernate does not recognize any changes that are not done by the setter. A possible workaround would be a private setter in the plan class, but somehow not even this is recognized by hibernate. So what are our options? One is to change the fetchmode of the lastversion. But doing so means sucking all previous versions from db when loading. Same happens when you mark the class @Proxy(lazy=false) as its a recursive structure. Played around with access types a while but that doesn’t have any influence. Finally I found out, that if you work with the “real” object instead of the proxy, it all works fine. To do so, you have to use the method get() instead of load(). Get() makes the db call instantly and returns a materialized object. In difference to the eager-fetchmode, all containing subtypes remain proxies.

That all leads to the questions, how we can make a clean separation between the ORM-Layer and our business-objects with hibernate. It’s just not transparent, when we got hibernate-specific-behaving objects flyin’ around in our domain-layer. And well, I don’t really have an answer on that…

Saltimbocca a la Romana di Bruno

Zutaten

für 4 Personen

8 hauchdünne Scheiben Kalbsschnitzel ( 3-5 mm)

eine gute Handvoll frischer Salbei

8 Scheiben luftgetrockneten Schinken

Olivenöl

Salz, Pfeffer

5cl Weißwein

drittel Becher Sahne

Zubereitung

Den Salbei sehr fein hacken. Die Schnitzel auf ein Küchenbrett legen und mit der flachen Seite eines breiten Messers oder einem Fleischklopfer flach ziehen / klopfen. Jede Scheibe einseitig mit einem halben bis einem Teelöffel des Salbeis bestreichen. Auf die bestrichene Seite wird der Schinken gelegt. Dann wird das Fleisch in der Hälfte umgeklappt, so dass der Schinken innen liegt. Mit einem Zahnstocher zusammenhalten.

Öl in der Pfanne erhitzen, die Saltimbocca hineingeben und ca. 2 min pro Seite braten.

Dann aus der Pfanne nehmen und nach Möglichkeit warm stellen. Den Bratensaft mit 5cl Weißwein ablöschen und kurz unter Rühren köcheln lassen, bis der Alkohol verdampft. Pfanne von der Kochstelle nehmen, mit einem drittel Becher Sahne auffüllen und unterrühren. Pfanne wieder auf die Kochstelle setzen und das Ganze unter Rühren leicht köcheln lassen. Abschließend die Saltimbocca für maximal eine Minute mit dazugeben, so dass sich die Sauce in der Fleischtasche verteilt. Guten!

Pangasius im Bananenblatt

Gestern gab es mal wieder Breakfinner, die hochmoderne Mischung aus Breakfast und Dinner, welche zwischen 0:00 und 4:00 konsumiert wird. Das diesmalige Nachtmahl: In Curry marinierter Pangasius, im Bananenblatt gegart. Hier das Rezept.

Zutaten

1 Bananenblatt (frisch vom Asiaten)

1-2 Chillis

1 Stange frisches Zitronengras

1 Kanten Ingwer

1 halbe Dose möglichst cremige Kokosmilch

1-2 EL roten Curry (prinzipiell ersetzbar durch die einzelnen Gewürze, die oben z.T. eh schon aufgelistet sind)

1 Limette

5 Limettenblätter

2 Pangasiusfilets

1 bißchen Sesamöl

etwas Fischsauce

etwas Sojasauce (Shoyu)

Zubereitung

1. Eine Marinade herstellen: Dazu die feingehackten Chillis und den Ingwer bei mittlerer Hitze in Sesamöl anbraten. Das Zitronengras in kurze Stücke teilen, diese schräg einschneiden und mit in die Pfanne geben. Nach einigen Minuten mit der Kokosmilch ablöschen und die Currypaste, Fischsauce und Sojasauce unterrühren. Das ganze ein bißchen einkochen, bis eine relativ feste Konsistenz erreicht ist. Abschmecken.

2. Aus dem Bananenblatt 2 Vierecke mit etwa 30 x 40 cm Seitenlänge ausschneiden. Diese vorsichtig in der heißen Pfanne mit wenig Wasser weichdünsten. Es reicht, dass die Blätter flexibel genug werden, um beim Einfalten nicht zu brechen.

3. Den Fisch mit Limettensaft beträufeln, mit Marinade einschmieren und mit den zu dünnen Streifen geschnittenen Limettenblättern bestreuen. Etwas ziehen lassen.

4. Den Fisch mittig auf die Bananenblätter legen und einfalten. Die Seiten des Pakets umfalten und mit Zahnstochern fixieren. Es ist nicht schlimm, wenn einige Risse in den Blättern sind. Ein luftdichter Abschluss des Fisches ist nicht nötig.

5. Den Fisch im Ofen mit Ober-und Unterhitze bei 180-200°C etwa 37 min garen lassen. Die Bananenblätter sind schon etwas graubraun, wenn der Fisch fertig ist. Optimalerweise hat der Fisch eine Art Kruste bekommen und ist zart ohne Ende. Guten Appetit!

Einkaufstipps Köln:

Riesenauswahl (und eben auch Bananenblätter) gibts im Asia-Shop an der Strassenbahnhalte Barbarossaplatz.

Über Pangasius: http://www.radiobremen.de/nordwestradio/mare-radio/meeresbewohner/

Messerschärfen

Gestern habe ich mir einen Schleifstein gekauft. Das verdammte Ding hat knapp 60 Euro gekostet. Und als ich dann zuhause ankam, ging das Rätseln los. Wie schleift man denn jetzt richtig? Die Probeversuche nach beiliegender Anleitung gingen ziemlich daneben. Sehr geholfen hat mir aber diese Video-Anleitung: http://www.kochmesser.de/video-anleitung-messer-schleifen.html
Die Versuche mit minderqualitativen Messern haben nicht gut funktioniert. Aber mein teures Zwilling-Messer ist doch deutlich schärfer.

Audiodokumente im Netz

Schöne Seite mit haufenweise deutschen Audios aus den Bereichen Politik, Gesellschaft und Kultur gefunden: http://www.mediaculture-online.de Höre mir gerade Professor Pfeiffer an. Im aktuellen Spiegel wird er in einem Artikel über die “Spezies” “Junge Männer” den “Kriminalisten, der in aller Munde ist”* genannt. Die Qualität des Artikels entsprach allerdings auch in etwa der des Professors. Erzählt irgendwas über seine Sohn. Und irgendwas über Störche. Und wohl im Endeffekt, warum Computer spielen scheiße ist.

* oder so ähnlich

Mac Mail: Where is the mailtext?

Heute wieder über eine seltsame Sache gestolpert: Ein Kollege konnte Mails mit Attachment, die über javax.mail verschickt wurden, nicht richtig lesen. Der Mailtext war in Mac Mail einfach nicht zu sehen. Über Webmail und andere Mailprogramme gabs keinerlei Probleme. Klar, muss irgendwas mit dem Mimetype zu tun haben. Und so ist es dann auch. Es gibt (zumindest in Spring) vier MIME-Möglichkeiten für Mails:

1. MULTIPART_MODE_NO -> Gar keine Attachments

2. MULTIPART_MODE_MIXED -> klappt im Outlook, sonst eher schlecht

3. MULTIPART_MODE_RELATED -> klappt in fast allem inkl. Mac Mail, aber nicht Lotus Notes

4. MULTIPART_MODE_MIXED_RELATED -> klappt in fast allem inkl. Lotus Notes, aber nicht in Mac Mail

So. Toll. Immerhin hat man die Wahl zwischen verschiedenen Übeln.