Ein Freund von mir erzählte von einiger Zeit von einem interessanten kleinen Feature, das er in einer Entwicklungsumgebung (ich denke auf einem Mac) gefunden hatte. Eine Art Breakpoint, der aber nicht die Ausführung unterbrach, sondern ein einfach einen kurzen Ton produzierte. Konsequenz: Es war sehr einfach zu kontrollieren, ob und wie häufig die entsprechende Codezeile ausgeführt wurde.

Das ganze erinnerte mich sehr an die LED Matrizen an Supercomputern, die in SciFi Filmen so gerne gezeigt werden. Die hielt ich lange Zeit für eine Erfindung von Hollywood, bis ich selbst einmal an einem solchen System arbeiten durfte. Es war im Jahr 1997 und der Rechner stand ein paar 100km entfernt von mir. LEDs sah ich also nicht. Es gab aber eine kleine Webanwendung mit äquivalenter Funktion: Für jeden Prozessor wurde angezeigt, ob er aktiv war, oder vor sich hin idlete. Die LEDs waren also ein wichtiges debugging und tuning Werkzeug.

Vor ein paar Wochen habe ich die Idee mit dem Sound tatsächlich sinnvoll einsetzen können: In meinem aktuellen Projekt bauen wir eine auf Basis von Swing und Hibernate eine Rich Client Anwendung. Kritisch dabei ist, das jeder Dialog, die für sich vorgesehen Session verwendet und nur diese. Genau in diesem Bereich gab es ein Problem. Es war aber überhaupt nicht klar, bei welchem Fensterwechsel etwas schief ging. Also in unseren SessionManager ein Toolkit.getDefaultToolkit().beep() eingebaut, wann immer er eine neue Session erzeugt oder vernichtet. Und wenig später war die Stelle eingekreist, an der das Problem lag.

Nun ist ein hart verdrahtetes Toolkit.getDefaultToolkit().beep() aber nicht die feine englische Art, also habe ich das ganze einfach mal als Log4J Appender implementiert:

public class PingAppender extends AppenderSkeleton {

protected void append(LoggingEvent arg0) {
Toolkit.getDefaultToolkit().beep();
}

public void close() {}

public boolean requiresLayout() {
return false;
}
}


Das ganze in der Log4J Konfiguration verwenden:





[..]

[..]


Und schon piepst es, wenn ein Error geloggt wird. Natürlich kann man das ganze noch Bedarf verfeinern: Je nach Thread, Loglevel oder Logger eine anderen Ton, oder eine andere Tonhöhe.

Und wer Langeweile hat, kann zu einer existierenden Anwendung einen Appender bauen, der ein Musikstück spielt, wenn die richtigen Aktionen in der Anwendung ausgeführt werden.