Jul 302011
 

Die Anschläge von Oslo haben 76 Tote gefordert. Was ist passiert? Ein Geistesgestörter, stark beeinflußt von rechtspopulistischem bzw. -radikalem Gedankengut, hat auf einem Bauernhof irgendwo in Norwegen Bomben gebaut und diese im Regierungsviertel von Oslo gezündet. Danach fuhr er zu der Insel Utöya und ermordete dort 68 Teilnehmer eines Jugendcamps der solzialistischen Arbeiterpartei.

Utøya_2 Paal Sørensen 2011 CC BY-SA

Während die norwegische Regierung trotz des landesweiten Schocks mit Besonnenheit auf die Anschläge reagiert, werden hierzulande schon wieder Rufe nach verschärfter Sicherheit laut. Insbesondere die Vorratsdatenspeicherung wird als Allheilmittel gegen terroristische Anschläge aller Couleur gepriesen, was schlicht und einfach Blödsinn ist: jeder mit einem Minimum an Fachkenntnis kann sich sehr schnell ausrechnen, warum solch ein Instrument bestenfalls bei der Aufklärung, niemals aber bei der Verhinderung von Anschlägen helfen kann.

Das Gleiche gilt für die Rasterfahndung. Angenommen, eine totale Überwachung jedweden Gedankenguts, das im Internet veröffentlicht bzw. per email, SMS oder der guten alten Snail-Mail versendet wird, wäre möglich: wer bitte soll hier entscheiden, was von einem echten Terroristen stammt und was von einem Jugendlichen, der mal probiert, wieviel Aufmerksamkeit er erregen kann? Mal davon abgesehen: die meisten Terroristen sind schlau genug, *zuerst* ihre Anschläge zu begehen und sich *danach* dazu zu bekennen.

Tatsache ist: Man kann Anschläge nicht verhindern, genau so wenig, wie man verhindern kann, im Münchner Westpark Opfer eines Raubüberfalls zu werden. Die Polizei und die zugehörigen staatlichen Instrumente sind dafür da, einen bestimmten *Grad* an Sicherheit zu gewährleisten. Raubüberfälle im Münchner Westpark sind tatsächlich ziemlich unwahrscheinlich, ebenso wie ein Mann, der in ein Jugendcamp fährt und dort gezielt Leute erschießt. Dennoch kann beides geschehen, und es gibt dagegen keinen hundertprozentigen Schutz.

Auch in Zukunft werden Menschen bei Verkehrsunfällen sterben, Krebs bekommen oder Opfer von Raubüberfällen sein. Auch in Zukunft kann ein Geistesgestörter Sprengstoff aus Dünger und Waschmittel zusammenmixen, sich eine Knarre besorgen und damit Leute erschießen.

Tragische Vorfälle wie die Anschläge von Oslo vermitteln ein Gefühl der Hilflosigkeit und, daraus resultierend, Angst. Ein unangenehmes Gefühl, eines, das die Lebensqualität stark mindert. Man will es loswerden. Man will etwas tun, um keine Angst mehr haben zu müssen.

Das Tragische am menschlichen Dasein ist, daß sich die Angst meistens schon mindert, wenn man
irgendetwas tut – durch puren Aktionismus. Dieses ‘Wir tun was’-Gefühl hilft meistens in etwa bis zur nächsten Katastrophe. Wirklich verhindern können wir damit aber nichts.

Ich möchte damit nicht ausdrücken, daß man klare Defizite in Sachen Sicherheit nicht beseitigen sollte. Im Fall B. hat es solche Defizite aber schlicht und einfach nicht gegeben, und deshalb läßt sich auch nichts Grundlegendes verbessern. Die schmerzhafte Botschaft dieses Blogeintrags ist deshalb: die Angst, welche die Anschläge von Oslo und Utöya in uns hervorgerufen haben, kann nicht durch Verbesserung unserer Sicherheit gemindert werden. Natürlich: wir könnten aufhören, unsere Kinder in Jugendcamps zu schicken. Wir könnten jede größere Veranstaltung durch eine Hundertschaft an Polizisten mit Maschinenpistole bewachen lassen. Aber – von der Frage unserer persönlichen Freiheit mal ganz abgesehen – erreichen werden wir damit nicht viel, außer vielleicht einem persönlichen Gefühl des ‘Wir tun was.’. Letzten Ende bleibt gegen die Angst nur das, was Menschen zu allen Zeiten und an allen Orten getan haben: auch, wenn an jedem Tag ein neues Unglück geschehen kann, man muß seine Angst beherrschen und sein Leben trotzdem weiterleben.

Feb 172011
 

… oder wie man Lotus Notes in so etwas ähnliches wie einem email-Client verwandelt.

Kürzlich hat meine Firma von MS Outlook auf Lotus Notes als email-System umgestellt. Die Freude hielt sich bei den meisten von uns in Grenzen – wirkt doch selbst die neueste Version von Notes manchmal, als wären 10 Jahre Entwicklung spurlos daran vorbeigegangen: selbst Features, die bei einem email-Client heute völlig selbstverständlich sind, sind ungenügend, auf seltsame Weise implementiert oder fehlen ganz.

Eines davon ist das New-Mail-Popup. Sie wissen schon, das ist das kleine rechteckige Fenster, das beim Empfang einer neuen eMail am unteren rechten Bildschirmrand erscheint und darauf hinweist, daß da etwas eingetroffen ist – vorzugsweise gleich mit dem Titel der Nachricht und wer sie geschickt hat.
Ein Convenience-Feature, das man mit der Zeit schätzen lernt – erlaubt es einem doch, mit einem Blick wichtige Nachrichten von unwichtigen zu unterscheiden und nur für solche den Mail-Client zu öffnen, die eine sofortige Reaktion erfordern.
Wie angenehm das ist, erkennt man erst, wenn man es nicht mehr hat.

Lotus Notes notification with Growl and the Metro display CC BY
Lotus Notes hat so ein nettes Zusatzprogramm, den “Notes Minder”. Toll, dachte ich, das ist, was ich brauche. Kaum hat man das Ding konfiguriert (ja genau, man muß es separat konfigurieren), macht sich aber auch schon Enttäuschung bereit. Das versprochene ‘Popup’ ist ein modaler (!) Dialog – jede Mail verlangt also sofortige, unbedingte Aufmerksamkeit. Außerdem ist er häßlich.
Mag man den Minder nicht, bleibt nur die akustische Benachrichtigung, die Notes von Haus aus beherrscht. Aber dann heißt es bei jeder email (auch bei den völlig unwichtigen Nachrichten): Arbeit unterbrechen, Notes öffnen, Nachrichten lesen, Notes schließen und Arbeit wieder aufnehmen. Das ist wirklich suboptimal.

Ich verwende jetzt schon eine Weile Growl für Windows. Das tut eigentlich nichts anderes, als von einer Unzahl möglicher Plugins Nachrichten entgegenzunehmen und – man rät es schon – als Popup anzuzeigen, das je nach Lust und Laune konfiguriert werden kann bzgl. Aussehen, Platzierung, Verweildauer, begleitendem Sound usw. Für Outlook gibt es ein Plugin. Für Notes natürlich nicht.

Aber da ist der einzige große Vorteil von Lotus Notes: seine Programmierbarkeit. Inzwischen (Gott sei Dank!) nicht mehr nur in LotusScript, sondern auch in Java. Die so geschriebenen Agents können auch auf dem Client ausgeführt werden, was sie ideal für die gewünschten Notifications macht.

Ich habe also einen Java-Agent geschrieben, der Growl-Notifications verschickt. Hier der Quellcode – nicht sehr lang, aber für einen Notes-API-Frischling trotzdem nicht ganz einfach:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Document;
import lotus.domino.DocumentCollection;
import lotus.domino.Session;
 
public class JavaAgent extends AgentBase {
    private static final String ICON = "c:\windows\formatted\pathto\icon.png";
    private static final String NOTIFICATION_TYPE = "New Document";
    private static final String APPLICATION_TAG = "Lotus Notes";
 
    public void NotesMain() {
        System.out.println("Starting notification agent");
 
        try {
            final Runtime runtime = Runtime.getRuntime();
 
            // Register application on growl. This has to be done only once,
            // but it doesn't hurt to do it every time:
            runtime.exec("growlnotify /a:"" + APPLICATION_TAG + "" /r:"" + NOTIFICATION_TYPE + "" /i:"" + ICON
                + "" "Application registered"");
 
            final Session session = getSession();
            final AgentContext agentContext = session.getAgentContext();
 
            final DocumentCollection dc = agentContext.getUnprocessedDocuments();
            Document doc = dc.getFirstDocument();
 
            // Go through each unprocessed document that's not marked as read.
            // Display a maximum number of 10 notifications:
            for (int notificationCount = 0; notificationCount < 10 && doc != null; doc = dc.getNextDocument()) {
                if (!doc.getRead()) {
                    final String subject = doc.getItemValueString("Subject");
                    String from = doc.getItemValueString("From");
 
                    if (from.startsWith("CN=")) {
                        from = from.substring(3, from.indexOf("/"));
                    }
 
                    runtime.exec("growlnotify /a:"" + APPLICATION_TAG + "" /n:"" + NOTIFICATION_TYPE + "" /t:""
                        + subject + "" /i:"" + ICON + "" "" + from + """);
                    notificationCount++;
                    doc.markRead();
                }
            }
        } catch (final Exception e) {
            e.printStackTrace();
        }
    }
}

Ich muß gestehen daß ich faul war. Ich verwende Growl Notify zumn Versenden der Benachrichtigungen (growlnotify.exe muß sich im Pfad befinden).Eine native Java Growl library wäre vermutlich sowohl eleganter als auch schneller gewesen, aber das Kommandozeilen-Utililty ist einfach verdammt bequem. Vielleicht verbessere ich das Ganze irgendwann noch…

Der Agent ist als ‘scheduled’ mit einen minütlichen Intervall konfiguriert. Ich habe zwar durchaus versucht, den “After new mail arrives” – Event-Trigger zu vewenden, aber entweder muß man den Code dafür signieren, oder der Agent muß auf dem Server laufen – auf jeden Fall hat er nicht auf neue emails reagiert. Macht auch nichts. Emails müssen zumindest eine Minute warten können.

 Posted by at 20:21
Mai 292010
 

Finally, it’s done. I’ve released the first version of the ScalaEasyMock library (the naming is not very original, I have to admit).

ScalaEasyMock is a wrapper around the EasyMock library that focuses on mock controls and EasyMock Class Extension.

It provides a convenient, easy to use DSL for mock controls that makes heavy use of Scala manifests. Additionally, it contains helper classes that make it easy to create test objects with constructor arguments and partial mocks.

The library can be found on Google code, together with some documentation I’ve written:

Tutorial – scalaeasymock – Project Hosting on Google Code.

Happy mocking!

 Posted by at 14:48
Sep 132009
 

Die taz hat ein recht interessantes Interview mit Frau Zypries von der SPD gemacht. Ohne auf die weiteren Inhalte eingehen zu wollen (dazu gibt es bereits einen wie immer guten Artikel auf netzpolitik.org) möchte ich einenen Dialog herausgreifen, über den ich gestolpert bin:

taz: Die Umwelt- und Alternativbewegung und die aus ihr entstehenden Grünen wurden am Anfang auch nicht ernst genommen. Plötzlich saßen sie in den Parlamenten. Könnte das nicht wieder passieren?

Zypries: Es reicht nicht, wenn sich die Programmatik einer Partei darin erschöpft, einem Lebensgefühl Ausdruck zu verleihen nach dem Motto: wir sind jung, wir kennen das Netz und ihr Alten versteht davon nichts. Was die Piratenpartei zudem von den Grünen in ihren Anfängen unterscheidet: Ihr fehlen die Galionsfiguren mit politischem Profil, wie beispielsweise Otto Schily oder Joschka Fischer.

Das stimmt. Die Piratenpartei hat keine wirklichen Galionsfiguren, von dem eher berüchtigten als berühmten Jörg Tauss mal abgesehen. Betrachtet man die Piraten aus der Sicht einer Politikerin der alten Schule, versteht man leicht, warum sie die neue Partei nicht als Bedrohung sieht.

Galion der HMS Victory (author: McKari, see http://de.wikipedia.org/wiki/Wikipedia:Lizenzvorlagen_f%C3%BCr_Bilder vor license)

Galion der HMS Victory (author: McKari, licensed under cc-by-sa v3.0)

Hat sich Frau Zypries’ Sicht auf die Dinge seit gestern geändert? Immerhin waren  auf der  ‘Freiheit statt Angst’-Demo in Berlin mehr als 25000 Leute: eine ganz schöne Leistung für eine Bewegung (und damit sind jetzt nicht ausschließlich die Piraten gemeint) ohne Galionsfiguren und damit -nach Frau Zypries’ Interpretation – ohne jede politische Einflußkraft.

Vielleicht sollte die Dame ihre Meinung an dieser Stelle tatsächlich überdenken. Denn sie mokiert sich über den Vorwurf, das Internet nicht zu verstehen, und gibt ihm gleich im nächsten Satz neue Nahrung. Genau hier ist nämlich einer der Punkte, an dem, getragen durch das Internet, eine essenzielle Verschiebung im System von Macht und Einfluß stattfindet: die Netzgemeinschaft braucht keine Galionsfiguren, die für sie sprechen.

Die Netzgemeinschaft macht Politik nicht analog, sondern digital, nicht auf Makro-, sondern auf Mikroebene. Die Politik der Netzgemeinschaft äußert sich nicht in den Reden charismatischer Führer mit großer Klappe und perfekter Rhetorik, sondern im Gemurmel jedes einzelnen Mitglieds.

Hier liegt der große Unterschied: was früher ungehört an den Stammtischen verhallte, verbreitet sich im Netz in Windeseile, wird aufgegriffen und mit jeder Wiederholung verstärkt. Je populärer eine Meinung ist, um so lauter klingt sie auch im Netz wieder.

Da das Netz es erlaubt, mühelos und ohne finanziellen Aufwand die eigene Meinung zu äußern, erleben wir hier zum ersten Mal wahre Demokratie: eine echte Mehrheitsentscheidung ohne die Notwendigkeit, sich zu finanzstarken Lobbies zusammenzuschließen. Das ist es auch, was Politik und Wirtschaft am meisten daran fürchten – wahrscheinlich nur auf einer unterbewußten Ebene: nämlich, daß Politik in Zukunft nicht mehr nur von den Reichen und Mächtigen gemacht wird, daß die Wähler in Zukunft nicht mehr nur über vorgekaute Parteiprogramme ohne wirklichen Hintergrund und Absicht abstimmen, sondern tatsächlichen Einfluß auf einzelne Themen nehmen. Das ursprünglich behäbige Instrument des Volksentscheids wird durch das Netz zu einem effizienten Mittel echter Mehrheitsentscheidungen und könnte über kurz oder lang die Lobbypolitik zu einem Schattendasein verdammen.

Die Politiker, die die Politik von heute mit den Mitteln von gestern machen, sollten sich besser warm anziehen. Hier steht eine große Veränderung bevor, und die könnte sie eines Tages ihre Jobs kosten.

Creative Commons License
Die Stimme des Netzes – über Galionsfiguren und veraltete Politik von the-anvil.net steht unter einer Creative Commons Namensnennung 3.0 Deutschland Lizenz.
Beruht auf einem Inhalt unter the-anvil.net.

 Posted by at 13:11
Mai 132008
 

Are mock objects serializable? Sound’s like an idiot’s question, since no sane guy would ever consider serializing something that doesn’t really exist – that’s like trying to go to the basement of a movie mockup building.

However, as it often happens in a programmer’s life, sometimes you’re forced to behave weird. Especially with mock objects if you’re trying to feed them into a third-party library.

What I was doing is mocking parts of my application to do unit tests on a business process workflow written with Jboss’ jBPM. Specifically, I was testing a script embedded in the workflow’s XML (which prevents me from skipping the whole jBPM business and do straight tests on my Java classes).

The script calls an object that I have mocked, and I want to verify that the result gets written to the workflow’s execution context (that’s the data storage underlying it, basically a String->Object map):

There’s one big problem: jBPM is a framework with intrinsic persistence (using Hibernate) and any object written to a workflow’s execution context must be serializable (!). As I found out (the hard way, as it is often with these things): mock objects created using EasyMock (specifically, EasyMock Class Extensions) are *not* serializable, even if the class they pose as is…

When I ran straight into NotSerializableException, I tried to find ways around it. A possible tsrategy would be to add a special type converter to jBPM that allows mocks – but changing the code to be tested for testing is bad.

I thought of a lot bad solutions, I have to admit. However, the one I finally came up with is this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class MySerializableTest {
 
	/**
	 * The serializable class to mock.
	 */
	public static class MySerializable implements Serializable {
		private static final long serialVersionUID = -242728243854443748L;
	}
 
	/**
	 * The class that will be actually mocked. Neither the
	 * {@link MockedMySerializable#readExternal(ObjectInput)} nor
	 * {@link MockedMySerializable#writeExternal(ObjectOutput)} method will do
	 * anything - they are just there to be mocked.
	 */
	public static class MockedMySerializable extends MySerializable implements Externalizable {
 
		@Override
		public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException 
                {
			/* do nothing */
		}
 
		@Override
		public void writeExternal(ObjectOutput out) throws IOException {
			/* do nothing */
		}
	}
}

This does the trick: instead of mocking the class that implements java.io.Serializable, I create a subclass of it that implements java.io.Externalizable (for those who don’t know: that’s kind of the ‘big brother’ of Serializable which lets the user implement the actual serialization himself. Of course, I provide only a dummy implementation. Nothing will be serialized for real here, it’s just to keep the code that invokes serialization from crying.

Of course, the mock created must either be a nice mock or actually expect the writeExternal(..) method to be called. But that’s just a routine task…

Mai 172006
 
Author: Tom Murphy VII - licensed under cc-by-sa Tom Murphy VII CC BY-SA

„Ich habe bewiesen, daß es Gott nicht gibt“, sagte der Wissenschaftler, der hinter seinem großen grauen Schreibtisch in seinem weichen grauen Polsterstuhl saß.
„Wie interessant“, sagte Gott und trat neugierig näher an die Arbeitsfläche. Er warf einen Blick auf Taschenrechner, Füller, Bleistift und Radiergummi, die aufgereiht wie mit einem Lineal auf der grauen Platte lagen. Daneben: ein sorgfältig ausgerichteter Stapel Papier, beschriftet mit winzigen, schwer leserlichen Reihen von Zeichen.
„Das sieht aus wie Mathematik.“
Der Wissenschaftler nickte, müde lächelnd. „Das ist es auch! Die höchste Mathematik, die man sich nur vorstellen kann. Die Sprache des Universums!“
„Aber“, sagte Gott, „irgend etwas kann damit doch nicht stimmen, oder?“
„Nicht stimmen?“ Der Wissenschaftler beugte sich in seinem grau gepolsterten Stuhl nach vorne und sah Gott zum ersten Mal direkt an. „Natürlich stimmt es. Ich bin schließlich Wissenschaftler! Sie können mir glauben, daß ich alle Untersuchungen und Berechnungen mit peinlicher Genauigkeit durchgeführt habe.“ Erbost starrte er Gott an. „Verstehen Sie überhaupt etwas von der Materie?“
Gott zuckte ein wenig hilflos die Schultern. „Nicht so richtig. Trotzdem kommt es mir so vor, als müsse an dem Ergebnis etwas falsch sein.“
„Sie sind also ein Laie.“ Der Wissenschaftler seufzte, lehnte sich wieder zurück und ließ die Rollen seines Stuhls quietschen. „Fast hätte ich’s mir denken können. Laien meinen immer, daß sie solche Fragen aus dem Bauch heraus beantworten können, und scheren sich dabei einen Dreck um die Grundsätze der Empirie. Sehen Sie“, sagte er dann in etwas versöhnlicherem Tonfall, „ich habe es ja zuerst auch kaum glauben können. Es war ein Zufall, eine glückliche Fügung, die mich die eine große Formel entdecken ließ – den endgültigen Beweis der Nichtexistenz dessen, was wir als Gott bezeichnen.“
Er räusperte sich. „Ich habe Kopien meiner Arbeit an die bedeutendsten Mathematiker dieser Welt geschickt. Sie alle haben mir bestätigt, daß der Beweis absolut fehlerfrei und über jeden Zweifel erhaben ist.“
Einen Moment lang wußte Gott nicht, was er sagen sollte. Er glaubte dem Wissenschaftler, und noch mehr glaubt er allen Wissenschaftlern zusammen. Trotzdem blieben gewisse Zweifel an der Richtigkeit dieses Beweises, und er mußte eingestehen, daß er ein persönliches Interesse an der Aufklärung dieses Sachverhaltes hatte. Also nahm er seinen Mut zusammen und fragte:
„Darf ich auch mal nachrechnen?“
„Sie?“ fragte der Wissenschaftler. „Sie sind unqualifiziert, und sie verstehen nicht einmal die Grundlagen.“ Er deutete erbost auf das Bücherregal, das eine Seite des Raumes komplett einnahm und von der Decke bis zum Boden mit grauen, abgegriffenen Bänden gefüllt war. „Wissen Sie, wie lange man lernen muß, um all das zu verstehen?“
„Ich habe gerade ein wenig Zeit“, sagte Gott bescheiden. „Vielleicht dürfte ich mich ja für ein paar Tage oder länger hier niederlassen und Ihr Handwerk studieren, um dann später… nachzurechnen?“
Er wartete atemlos auf einen Hinauswurf, aber der Wissenschaftler runzelte nur die Stirn und dachte einen langen Moment nach. Dann lächelte er gutmütig und sagte: „Warum eigentlich nicht? Ich bin schließlich verpflichtet, den Wissensdurst jener zu fördern, die nach mir kommen. Außerdem: ob der Größe meines Werkes bleibt mir sowieso keine andere Wahl, als mich zur Ruhe zu setzen.“ Mit einer großzügigen Geste schob er Gott den Taschenrechner hin, bezeichnete ein Buch in dem Regal, daß er für einen geeigneten Beginn hielt, und verließ das Zimmer. Der graue Polsterstuhl wippte noch ein wenig.
Gott machte sich an die Arbeit. In der Schublade des Schreibtischs fand er leeres Papier zum Schreiben. Er nahm das Buch aus dem Regal, las es, machte sich Notizen und ging dann zum nächsten über. Hin und wieder wagte er einen Blick in den losen Stapel Blätter, der den Beweis enthielt, und jedes Mal verstand er ein wenig mehr.
Irgendwann verstand er alles, und er machte sich ans Nachrechnen. Er mußte jetzt häufig niesen, weil sich in dem Zimmer mittlerweile eine dicke Staubschicht angesammelt hatte.
Es war schwierig, den genialen Winkelzügen des Wissenschaftlers zu folgen, aber es gelang ihm. Als er fertig war, begann er von vorne. Und wieder, und wieder, und wieder, bis er endlich sicher war.
Alles war richtig. Es gab keine Fehler, keine Ungenauigkeiten, keinen Spielraum. Gott legte den Taschenrechner beiseite, wippte in dem gepolsterten Sessel hin und wartete darauf, daß er sich auflöste. Aber nichts geschah – nur die Rollen des Stuhls quietschten.
„Ich verstehe das nicht“, murmelte er vor sich hin. „Der Beweis ist hier. Ich bin hier. Aber ich bin mir völlig sicher, daß es einen von uns beiden nicht geben kann. Das ist doch logisch, oder?“

Auch zu lesen auf kurzgeschichten.de