2012-08-05

Ab nach Norden ...

... und das im wahrsten Sinne des Wortes. Ziel war an diesem Wochenende die Museumseisenbahn Küstenbahn Ostfriesland, die zum einen in der Stadt Norden ein interessantes Museum unterhält und zum anderen regelmäßige Fahrtage veranstaltet.
Da ich aufgrund des 16. Internationalen Bierfestivals direkt vor meiner Haustür die Flucht antreten wollte, bin ich schon am Freitag aufgebrochen und habe zusätzlich in Wedel, Buxtehude, Wilhelmshaven und Hamburg Station gemacht.
In Wedel gab es bei der Schiffsbegrüßungsanlage Willkomm-Höft am Schulauer Fährhaus dicke Pötte zu bestaunen - innerhalb einer guten Stunde kamen drei davon vorbei (zwei Containerschiffe aus China und ein Autotransporter aus Singapur).
Blick vom Schulauer Fährhaus bzw. von Willkomm-Höft auf die Elbe
Abends habe ich mir dann in Buxtehude die nette Altstadt angesehen.
Der Stavenort in Buxtehude beherbergt u.a. eine Kunstschule und einige Ateliers
Am nächsten Tag ging's nach Wilhelmshaven an den Strand des Jadebusens - tolles Wetter und Entspannung pur.
Blick von der Panoramaterrasse des Wattenmeerhauses auf den Jadebusen und den Südstrand samt Promenade ...
... und über das Außengeläde des Marinemuseums hinweg auf den Hafen
Am Sonntag ging's dann wie oben erwähnt weiter nach Norden.
Ein Blick auf einen Teil der Fahrzeugsammlung
Einfahrt des Zuges aus Dornum in Norden
Auf dem Rückweg bin ich dann nochmal kurz bei Herr Max in der Schanze eingekehrt ...

2012-07-22

Alter Treppenaufgang ...

Das Haus am Kleistpark bietet interessante Ausstellungen - aktuell eine mit Fotografien von Hildegard Ochse. Und das Haus hat einen schönen alten Treppenaufgang:
Treppenaufgang im Haus am Kleistpark
Zudem gab es Kino (Das verflixte 3. Jahr im Filmtheater am Friedrichshain), das Duckstein-Festival am Schloss CharlottenburgLinie 8 von Ades Zabel & Company im BKA-Theater und Brunch im Schmitt's ... meine Schwester war zu Besuch :-)

2012-07-18

String Equality in SQL Databases ...

Here's a thing I came across recently, when I wanted to check the correct function of a certain field validation within a Django app. That's what the code for that field looks like:
...
from myproject.models import User
...
# a field that checks whether a given user exists in another table
class CrossUserCheckCharField(forms.Field):
  def validate(self, value):
    super(CrossUserCheckCharField, self).validate(value)
    try:
      user = User.objects.using('mytable').get(id=value)
    except User.DoesNotExist:
      raise ValidationError(u'User %s does not exist.' % value)
...
For my unit tests (run by python manage.py test) I use a lightweight SQLite DB, from the development environment on (e.g. run by python manage.py runserver) MySQL is used. That's where the difference came up - with SQLite the test failed with a raised exception, with MySQL it passed - weird! It boils down to that MySQL thinks that two strings are equal, if they are only different in trailing whitespaces. That's not what I expect, when I check for equality of two strings! BTW, leading whitespaces are matched correctly. MySQL also offers a BINARY operator, which compares byte by byte making trailing whitespaces significant again.
So, I tried to approve this behaviour in a playground:
$ mysql -u someuser -p -D playground
...
Server version: 5.1.63-0ubuntu0.10.04.1 (Ubuntu)
...
mysql> CREATE TABLE mytest (
    -> _key VARCHAR(100) NOT NULL DEFAULT '',
    -> _value VARCHAR(255) NOT NULL DEFAULT '');
Query OK, 0 rows affected (0.04 sec)

mysql> INSERT INTO mytest VALUES ('aaa', 'bbb');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO mytest VALUES (' aaa ', 'ccc');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM mytest;
+------+--------+
| _key | _value |
+------+--------+
| aaa  | bbb    |
| aaa  | ccc    |
+------+--------+
2 rows in set (0.00 sec)

mysql> SELECT QUOTE(_key), QUOTE(_value) FROM mytest;
+-------------+---------------+
| QUOTE(_key) | QUOTE(_value) |
+-------------+---------------+
| 'aaa'       | 'bbb'         |
| 'aaa '      | 'ccc'         |
+-------------+---------------+
2 rows in set (0.00 sec)

mysql> SELECT QUOTE(_key), QUOTE(_value) FROM mytest
    -> WHERE _key = 'aaa';
+-------------+---------------+
| QUOTE(_key) | QUOTE(_value) |
+-------------+---------------+
| 'aaa'       | 'bbb'         |
| 'aaa '      | 'ccc'         |
+-------------+---------------+
2 rows in set (0.00 sec)

mysql> SELECT QUOTE(_key), QUOTE(_value) FROM mytest
    -> WHERE BINARY _key = 'aaa';
+-------------+---------------+
| QUOTE(_key) | QUOTE(_value) |
+-------------+---------------+
| 'aaa'       | 'bbb'         |
+-------------+---------------+
1 row in set (0.00 sec)






$ sqlite3 playground
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE mytest (
   ...> _key VARCHAR(100) NOT NULL DEFAULT '',
   ...> _value VARCHAR(255) NOT NULL DEFAULT '');
sqlite> INSERT INTO mytest VALUES ('aaa', 'bbb');
sqlite> INSERT INTO mytest VALUES ('aaa ', 'ccc');
sqlite> SELECT * FROM mytest;
aaa|bbb
aaa |ccc
sqlite> SELECT QUOTE(_key), QUOTE(_value) FROM mytest;
'aaa'|'bbb'
'aaa '|'ccc'
sqlite> SELECT QUOTE(_key), QUOTE(_value) FROM mytest
   ...> WHERE _key = 'aaa';
'aaa'|'bbb'

2012-07-10

What Options a HotSpot JVM Supports?

Today, I've taken notice of two helpful HotSpot JVM options: -XX:+PrintFlagsInitial and -XX:+PrintFlagsFinal. The first one shows the initial HotSpot options and their values, before HotSpot applies its rules and optimizations; the second one shows them afterwards. Comparing these two might help you to understand, how the HotSpot JVM works. In either case it shows, how many tunables are supported by your HotSpot JVM, and gives some idea, how to push the optimizations of that JVM further. You get even more flags, when you add -XX:+UnlockDiagnosticVMOptions to -XX:+PrintFlagsFinal.
The downside is, that you don't get any documentation for these flags. But it's a good starting point for further investigation either by web search or by grep'ing through the JVM's source code - if it is available like for the OpenJDK.

2012-06-27

Flogging Molly, zum Zweiten ...

Nachdem ich sie ja schon im vergangenen November live gesehen habe, war ich auch gestern mit von der Partie, als Flogging Molly im Huxleys Neue Welt gastierten (verlegt von der Zitadelle Spandau). Und es war wieder sehr, sehr gut - feinste Musik und super Stimmung. Nur war dieses Mal der Support - Deaf Havana (ok, die habe ich verpasst ...), Radio Dead Ones und The Bronx - gar nicht Folk-lastig, sondern teilweise ein ganz ordentliches Gedresche ...

2012-06-22

Co-Working

Diese Woche habe ich mit meinen Kollegen mal etwas Neues ausprobiert: Wir haben eine Woche lang im betahaus Berlin gearbeitet. Das betahaus ist ein sogenannter "co-working space", in dem man sich ganz nach Bedarf einmieten kann. Man sucht sich mit seinem Laptop einfach einen freien Platz - Strom und WLAN werden gestellt. Man kann auch feste Arbeitsplätze und Besprechungsräume buchen; außerdem gibt es einen Ruhearbeitsbereich für konzentriertes Arbeiten und im Erdgeschoss ein Café für die Verpflegung. Witzig ist auch die Idee des betabreakfast: gemeinsames Frühstück an einer langen Tafel zum Kennenlernen und ein bis zwei Vorträge über Projekte, Ideen etc.
Mein Fazit: Obwohl viel los war, konnte ich in dieser Atmospähre mit "Startup-Flair" sehr konzentriert arbeiten und habe ein paar interessante Leute und Projekte kennengelernt. Hat sich also gelohnt.

2012-06-02

Grauer Pott ...

... von wegen - hier ein paar Eindrücke aus Essen-Margarethenhöhe:
Ansonsten: