Bayerische Feiertage

fallen heute einige zusammen:

  1. CSU-Parteitag: Der Huber Erwin ist zum CSU-Parteivorsitzenden gewählt worden und löst somit Herrn Stoiber ab. Von dem wird gemunkelt, er würde in den kommenden Tagen den Transrapid nach Brüssel nehmen — Fahrzeit 10 Minuten.
  2. Wies’n aka Oktoberfest.
  3. Bayern München spielt und hat in Leverkusen gewonnen. Hätte aber ruhig ein Tor mehr fallen können.


Wettersteingebirge mit Zugspitze

Blick vom Moos bei Wielenbach auf Wettersteingebirge mit Zugspitze (23.09.2007)

EMC Erdfunkstelle in Raisting

EMC Global Teleport Raisting (23.09.2007)

Arbeiten im Bett

Gerade habe ich meinen Bettarbeitsplatz komplettiert, indem ich mir eine Funktastatur gekauft habe. Vor einigen Wochen schon habe ich einen Widescreen-TFT erworben und an Schnüren von der Decke über das Bett gehängt. Da baumelt das Ding jetzt leicht schräg in etwa einem Meter Höhe über dem Kopfende. Endlich nie wieder das blöde Kopfkissen türmen, um mühsam zu zweit Filme auf dem Laptop zu kucken. Fotos folgen.

Checkliste Java-Projekte

1. …

12. JRE-Kompatibilität

Kommen beim Kompilieren Warnings? Ist dies der Fall, ist zu überprüfen, ob als “deprecated” gesetzte Klassen oder Methoden verwendet wurden. Es gibt einen ganzen Haufen Anwendungen, die mit JDK 1.5 einfach nicht mehr funktionieren, da verwendete Klassen oder Methoden nicht mehr von java.lang (oder anderen APIs) unterstützt werden. Fallen in einer Version Elemente weg, so sind diese in älteren Versionen schon als deprecated gekennzeichnet.

1.6 Projektplanung

In jedem Projektplan ist Zeit zum Refactoren und zur Verbesserung der Performance einzuplanen. Nichts ist schlimmer, als in einem – natürlich auch wieder enorm zeitkritischen – Projekt in den erodierten Sourcen rumwühlen zu müssen und nach und nach immer unwartbareren Code zu pflegen.

14. Testing
14.56 Zufallsgeneratoren überprüfen
Zu testen:
verschiedene Seeds in hintereinander generierten Random-Objekten? Initialisiert man mehrere Random-Objekte hintereinander, z.B in einer Schleife, tut es ein einfaches new Randon(System.currentTimeMillis()) nicht mehr. Auf schnellen Rechnern führt das zu einem gleichen Verhalten der Randoms. Eine Lösung ist die Verwendung eines zusätzlichen Randoms zur Initialisierung.

23. Systemintegration

23.5 Speicherbedarf untersuchen

..

23.6 Garbage-Collection untersuchen

Bei der Systemintegration im Produktiv-, wie auch im Testsystem ist das Verhalten des Garbage-Collectors zu untersuchen.

Die JVM kann dazu mit den Parametern -gc:verbose und -XX:+PrintGCDetails gestartet werden.

Eine weitere interessante Perspektive gibt die Auswertung von jstat:

jps zeigt alle vm-Ids der laufenden Virtual Machines. Befehl ist Teil vom SDK. vm-Id ist typischerweise die pid.

jstat - [-t] [-h <lines>] <vmid> [<interval> [<count>]]
Beispiel: jstat -gcutil -h3 99999 250 200

Ein Tool, dass die Informationen zum Verhalten des Garbage Collector visualisiert, ist visualgc. Hier läßt sich auch der Grund für die Garbage Collection sehen: War es ein System.gc() oder gab es bessere Gründe? Das Tool ist nicht in der JDK 1.5 enthalten, kann aber bei Sun heruntergeladen werden.

Es sollte auch ein Auge auf die Auslastung des Perm-Spaces geworfen werden. Dieser ist unabhängig vom Gesamtheap. Die Größe läßt sich mit -XX:PermSize=..MB und -XX:MaxPermSize=..MB steuern. Im Default sollte die JVM 64MB reservieren, der aber unter mysteriösen Umständen auch schrumpfen kann. Ich bin mir nicht ganz sicher, ob es sich dabei um ein normales Vergrößern des Virtual Spaces ( nicht allozierter, aber reservierter Speicher) handelt. Setzt man die Größe mit -XX:PermSize scheint die Größe sich aber nicht zu verändern.

Bei Serveranwendungen ist es wichtig, das Verhältnis von Young zu Tenured Space zu untersuchen. Finden zuviele Young collections statt? In einer größeren Serveranwendung kann man u.U. eine Ratio von 1:2 festlegen ( -XX:NewRatio=2) (Young 1 : 2 Tenured) .

Im Client-Teil einer Anwendung reichen die default-Einstellungen meist aus.

Kann Internet Explorer mit setAttributeNode() kein Javascript-Event an DOM-Node binden?

Vorgestern trat ich mal wieder in eine Endlosschleife ein. Eigentlich wollte ich nur in einem XHTML-Dokument den Text innerhalb einer bestimmten Überschrift mit JavaScript zu einem Link umwandeln und diesen mit dem onclick-Attribut versehen. Quasi so:

vorher:

...
<div>
    <h1 id="header1">Hallo</h1>
</div>
...

nachher:

...
<div>
    <h1 id="header1">
        <a href="#" onclick="alert(this.tagName); return false">Hallo</a>
    </h1>
</div>
...

Dachte mir also, mit etwas DOM-Manipulation läßt sich der ganze Vorgang schön abwickeln und habe mir eine Funktion in dieser Art gebacken:

function tutNicht() {
    var heading = document.getElementById('header1');
    var headingText = document.createTextNode(heading.firstChild.nodeValue);

    var aElem = document.createElement('a');
    aElem.appendChild(headingText);

    var hrefAttrib = document.createAttribute("href");
    hrefAttrib.nodeValue = '#';

    var onclickAttrib = document.createAttribute("onclick");
    onclickAttrib.nodeValue = "alert(this.tagName); return false";

    aElem.setAttributeNode(onclickAttrib);
    aElem.setAttributeNode(hrefAttrib);

    heading.removeChild(heading.firstChild);
    heading.appendChild(aElem);
}

Jetzt wird es interessant. Der Internet Explorer (Version 6+7) führt zwar die Manipulationen am DOM aus (wovon ich mich mittels des IE DomInspectors überzeugte), wenn man dann aber auf den Link klickt wird das OnClick-Event nicht ausgelöst.

Habe länger im Trüben gestochert bis mir die Idee kam, den Link mal unschön über die Eigenschaft innerHTML der Überschrift zu erzeugen. Nun funktioniert die Sache plötzlich auch im IE und die Funktion alert() wir bei klicken aufgerufen:

function tut() {
    var heading = document.getElementById('header1');
    var text = heading.firstChild.nodeValue;
    heading.removeChild(heading.firstChild);

    heading.innerHTML = '<a href="#" onclick="alert(this.tagName); return false;">' + text + '</a>';
}

Ein äußerst interessantes Phänomen welches es noch zu ergründen gilt.

Innenminister Schäuble regt Ablenkungskonferenz an

Die jüngste Festnahme dreier Terrorverdächtiger dürfte Herrn Schäuble ja recht gelegen kommen. So konnte er nun eine Sonderkonferenz der Inneminister anregen und damit eine wunderbare Gelegenheit schaffen um von seinen Ausrutscher bzgl. der Änderung des Waffenrechts abzulenken. Man möchte faßt vermuten dass der Zugriff auf die Verdächtigen nicht zufällig diese Woche stattfand.