2012-03-04

Nederland Reloaded

Nachdem ich vor knapp zehn Jahren das letzte Mal in den Niederlanden war, bin ich an diesem Wochenende in Utrecht gewesen. Anlass war die diesjährige On traXS! im dortigen Eisenbahnmuseum. Auch ohne diese hochkarätige Modellbahnausstellung bietet das Museum mit seiner vielfältigen Fahrzeugsammlung einiges. Hier nun paar Impressionen aus dem Museum:
Amerika war ein häufiges Anlagenthema
Ein Blick von oben auf einen Teil der Ausstellungsfläche
Auf dem Außengelände finden sich ebenfalls viele Fahrzeuge - hier eine NS 2498
Natürlich habe ich mir dann noch Utrecht selbst ein wenig angesehen - ein nettes, quirliges Städtchen, das an Amsterdam in klein erinnert. Genauso wie in Amsterdam habe ich mich gewundert, dass bei dem ganzen Gewusel aus Fußgängern und Radfahrern in den Haupteinkaufstraßen anscheinend so wenig passiert. Kulinarisch hat es mich dann zu Friet Speciaal (Pommes mit Mayo, Ketchup und Zwiebelwürfeln) und Kaassouffle (frittierte Käsetache in Panade) hingezogen ... bekommt man übrigens auch hier in Berlin in der Snackbar De Molen. Und auch hier ein paar Impressionen aus der Utrechter Innenstadt:
Die Oudegracht
Parkplatzprobleme auf Niederländisch
Übernachtet habe ich in Essen und bin per Bahn in knapp zwei Stunden in Utrecht gewesen. In Essen kann ich das Astra-Theater/Luna im Astra empfehlen. Angesehen habe ich mir den aktuellen Film von Doris Dörrie namens Glück.

2012-02-07

Brüssel, Bruxelles, Brussel, Brussels ...

Da ich am vergangenen Wochenende die FOSDEM 2012 besucht habe und noch nie zuvor in Brüssel war, bin ich ein wenig früher angereist und ein wenig später abgereist, um mir einen Eindruck von Brüssel verschaffen zu können ... zum Glück ging mein Flieger am Freitag früh genug, um dem am selben Tag folgenden Schneechaos zuvorzukommen.
Die Altstadt und das Stadtzentrum kann man bequem zu Fuß erforschen - für alles weitere kann man das gute Netz an öffentlichen Verkehrsmitteln nutzen ... hier hilft einem die Brussels Card, Kosten zu sparen (neben freiem Eintritt in zahlreiche Museen und Rabatte in diversen Geschäften).
Ein Blick in die Galeries Royales
Auf dem Grande Place
Auf dem Place Royale
Sehr zu empfehlen ist das Comic-Museum. Das Magritte-Museum habe ich am Freitag leider nicht mehr geschafft - und montags ist es geschlossen :-(

Auf dem Weg zum Comic-Museum ...
... und im Comic-Museum
Überall findet man historische Gebäude (neben einigen Bausünden der Sechziger Jahre und der folgenden Jahrzehnte), mit Comicfiguren verzierte Häuserfassaden und die obligatorischen Pralinen- und Schokoladenläden - typisch sind auch die "Fritten"läden und die Verkaufsstände für Waffeln. Die Stadt verströmt einen weltoffenen Flair, der den französischen Einfluss erkennen lässt. Auffällig sind auch die zahlreichen begrünten Plätze und Parks.
Verzierte Hausfassade ...
... und noch eine
Im Stadtpark mit Blick auf den Königspalast ...
... und um 180 Grad gedreht mit Blick auf das Parlament
Da ich leider sowohl im Ausland als auch im Inland schon Gegenteiliges erlebt habe, muss ich an dieser Stelle das Sofitel Le Louise außerordentlich loben: ein freundlicher und aufmerksamer Service, ein großes und sauberes Zimmer, freies WLAN, ein superleckeres und reichhaltiges Frühstück und eine gute Lage.

2012-02-06

FOSDEM 2012 ...

Last weekend FOSDEM 2012 took place at the area of the Université libre de Bruxelles (ULB) - and it's been the first time I've been there. All in all it's been a great and well-organized conference with lots of interesting talks - unfortunately with many interesting ones in parallel ... so, I've missed a lot of them. Here are the talks I've attended.

  • On Saturday:
    • Ensuring uptime in a small startup: A good talk about some principles on how to ensure uptime during schema updates - based on PostgreSQL, but applies to any relational database.
    • An introduction to Ada 2005 and Ada 2012: A time shift back into my days at the university - at least concerning the presentation style: good didactics and very old-style slides. I've never coded in Ada. So, this talk gave me a rough introduction.
    • Why Java for Linux Applications?: A very personal talk about the speaker's learnings when trying to develop a GUI for an existing set of programs - and why he failed with C and Gtk+ ending up with Java and Swing.
    • Debian packaging for beginners: As I'm working a lot with RPM packaging and have never done packages for Debain-based systems so far, this talk was a good introduction for me.
    • Linux Containers and OpenVZ: Nothing really new for me, but a good overview of the current state and the upcoming features.
    • Garbage Collection Visualization, GCSpy and NetBeans in tandem: I expected a bit more hands-on, as I spent a lot of time on GC optimization for various JVM scenarios. But GCSpy seems to be a project worth looking at in the near future.
Winter impressions at the ULB area
Besides the talks there were many booths from a lot of vendors and organizations.
Beastie, the mascot of BSD operating systems

2012-01-25

Gebrannte Mandeln

Man bringe 1/8 Liter Wasser, 160g Zucker, ein Päckchen Vanillezucker und Gewürze nach Belieben (z.B. Zimt und Chili) zum Kochen, gebe 200g ungeschälte Mandeln zu und rühre alles bei großer Hitze mit einem Holzlöffel so lange um, bis der Zucker trocken wird. Dann so lange bei mittlerer Hitze weiterrühren, bis der Zucker die Mandeln karamellisiert. Nun muss es schnell gehen: Die heiße Masse auf einer hitzebeständigen Fläche auf Backpapier verteilen, und sofort mit zwei Gabeln die Mandeln auseinanderziehen. Ergebnis:
Nun gut auskühlen lassen und die Mandeln ggf. noch vereinzeln. Und dann: Genießen!
Das Rezept habe ich aus der Süßen Werkstatt Julia von einem Pralinenkurs mitgenommen - Danke an Julia!

2012-01-15

Some MongoDB "hackin'"

I recently wanted to know, which databases and collections exist in a running MongoDB. That's what I came up with:
var mongodb_conn = db.getMongo();
var admin_db = mongodb_conn.getDB("admin");


var role = "(MASTER)";
if (!admin_db.isMaster().ismaster) {
  mongodb_conn.setSlaveOk(true);
  role = "(SLAVE)";
}
var db_list = admin_db.runCommand("listDatabases").databases;
for (var db_index in db_list)  {
  var curr_db_name = db_list[db_index].name;
  var curr_coll_list = admin_db.getSiblingDB(curr_db_name).getCollectionNames();
  print(role + " " + curr_db_name + " " + curr_coll_list);
}
Just save the above lines of Javascript to a file, e.g. getCollections.js and run it against the MongoDB, which may produce an output similar to the following:

$ mongo --quiet getCollections.js
(MASTER) map_reduce_example myresults,system.indexes,things
(MASTER) test_database posts,system.indexes
(MASTER) graylog2 alerted_streams,blacklists,filtered_terms,historic_server_values,hosts,jobs,message_counts,messagecomments,messages,server_values,settings,streamcategories,streams,system.indexes,system.users,users
(MASTER) admin
(MASTER) local
(MASTER) test

Having got so far I wanted to know the (top level) properties of all documents stored in the MongoDB. As all documents are schema-less, I ended up in using MapReduce:
var mongodb_conn = db.getMongo();
var admin_db = mongodb_conn.getDB("admin");

var role = "(MASTER)";
if (!admin_db.isMaster().ismaster) {
  mongodb_conn.setSlaveOk(true);
  role = "(SLAVE)";
}
var db_list = admin_db.runCommand("listDatabases").databases;
for (var db_index in db_list) {
  var curr_db_name = db_list[db_index].name;
  var curr_db = admin_db.getSiblingDB(curr_db_name);
  var curr_coll_list = curr_db.getCollectionNames();
  for (var coll_idx in curr_coll_list) {
    var mapred = curr_db.runCommand({"mapreduce" : curr_coll_list[coll_idx], "map" : function() { for (var key in this) { emit(key, null); } }, "reduce" : function(key, anything) { return null; }, "out" : "myoutput" });
    var key_list = curr_db.myoutput.distinct("_id");
    for (var key_idx in key_list) {
      print(role + " " + curr_db_name + " " + curr_coll_list[coll_idx] + " " + key_list[key_idx]);
    }
    curr_db.myoutput.drop();
  }
}
So, in the map phase all documents of all collections in all databases are looked at and all top level properties of those documents are emitted as keys. In the reduce phase no further aggregations are performed, as we already got what we want - a result collection with all top level properties.
Again, save that code to a file, e.g. getAllKeys.js and run it against the MongoDB, which may produce an output similar to the following:
$ mongo --quiet getAllKeys.js
...
(MASTER) test_database posts date
(MASTER) test_database posts tags
(MASTER) test_database posts text
(MASTER) graylog2 historic_server_values _id
(MASTER) graylog2 historic_server_values created_at
(MASTER) graylog2 historic_server_values type
(MASTER) graylog2 historic_server_values value
(MASTER) graylog2 hosts _id
(MASTER) graylog2 hosts host
(MASTER) graylog2 hosts message_count
(MASTER) graylog2 message_counts _id
(MASTER) graylog2 message_counts hosts
(MASTER) graylog2 message_counts streams
(MASTER) graylog2 message_counts timestamp
(MASTER) graylog2 message_counts total
(MASTER) graylog2 messages _id
(MASTER) graylog2 messages _original_level
(MASTER) graylog2 messages _thread_name
(MASTER) graylog2 messages created_at
...
It's not optimized so far, but it does what I needed. The result is somehow a simulation of what you get on relational databases when running select ... from all_tab_columns ... (Oracle) or select ... from information_schema.columns ... (MySQL).

2011-12-27

Tilt-Shift ...

Da muss man erst in die alte Heimat fahren, um von einem neuen Video aus und über die neue Heimat zu erfahren - mein Dank geht an Dagmar, Dietmar und Olli. Hier nun das Video:
... und hier gibt's eine Kurzreportage darüber. Und hier die Homepage des Schöpfers.

2011-12-16

Broilers

So, wahrscheinlich das letzte Konzert des Jahres: Die Broilers aus Düsseldorf im Huxleys Neue Welt. Nachdem sie bereits Ende Oktober dort gastierten, haben sie auch gestern wieder den Laden voll bekommen. Stilrichtung: irgendwas aus Oi, Punk, Rockabilly, Ska ... also sehr nett ... hier ein ruhigeres Lied:
Support waren Sonic Boom Six aus Manchester, UK - nett, nur die Stimme der Sängerin war auf Dauer etwas nervig ...