Archive for July, 2006

Tool for Parsing mbox files to get delivery status messages

Sunday, July 30th, 2006

You send out newsletters? You manage online-accounts which are connected to an e-mail-address? So you have to keep track of the e-mail-addresses which become temporary or permanently unavailable. A good starting point is to provide a return-path in the header of every message you send.
Return-Path:
So you will get a delivery status notification (DSN) on failure.

[code]
Date: Sat, 22 Jul 2006 22:58:27 +0200 (CEST)
From: MAILER-DAEMON@your0815provider.com (Mail Delivery System)
Subject: Undelivered Mail Returned to Sender
To: sample-return-path@in-a-nutshell.net
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
boundary="346A8BD40B6.1153601907/your0815provider.com"
Content-Transfer-Encoding: 8bit
Message-Id: <20060722205827.7A544BD40AD@your0815provider.com>

This is a MIME-encapsulated message.

--346A8BD40B6.1153601907/your0815provider.com
Content-Description: Notification
Content-Type: text/plain

This is the Postfix program at host your0815provider.com.

I'm sorry to have to inform you that the message returned
below could not be delivered to one or more destinations.

For further assistance, please send mail to

If you do so, please include this problem report. You can
delete your own text from the message returned below.

The Postfix program

: host mx-ha01.web.de[217.72.192.149] said: 550
Benutzer hat zuviele Mails auf dem Server. / User has too
many messages on the server. (in reply to RCPT TO command)

--346A8BD40B6.1153601907/your0815provider.com
Content-Description: Delivery error report
Content-Type: message/delivery-status

Reporting-MTA: dns; your0815provider.com
Arrival-Date: Sat, 22 Jul 2006 22:58:27 +0200 (CEST)

Final-Recipient: rfc822; user_xy@web.de
Action: failed
Status: 5.0.0
Diagnostic-Code: X-Postfix; host mx-ha01.web.de[217.72.192.149] said: 550
Benutzer hat zuviele Mails auf dem Server. / User has too
many messages on the server. (in reply to RCPT TO command)

--346A8BD40B6.1153601907/your0815provider.com
Content-Description: Undelivered Message
Content-Type: message/rfc822
Content-Transfer-Encoding: 8bit
[/code]

The DSN info has a special content-type:
Content-Type: message/delivery-status

I implemented a small, greedy command-line-driven program in java, that parses an Mbox file and collects e-mail-addresses that caused an dsn with Action: failed.

For each e-mail-address there is one output, which can be configured using a template string.

I am using this to generate a sql-script where each line contains an update-statement to a refresh the availability status for a special e-mail-address.

The call looks like:
java -jar dnsextractor -t "update email_availability set dsn_email={sql:email:}, dsn_sent_time={:unixtime:}, dsn_classification={:dfnclass:}, dsn_obsolete={:obsolete:} where email = {sql:email:}; # ({dfn:Status}) {:date:}: {dfn:Diagnostic-Code:}" returnedmsgs -s sentmsgs

I am using this program to parse Thunderbird message-box files. Thunderbird uses a variation of the mboxrd format and I have not encountered any compatibility problems.

The program uses the Libraries from the GNU Classpath project to parse the mbox files. At the moment these libraries are a little bit buggy. I reported some bugs and did some workarounds.
The problems: 1. The library writes some stack-traces to System.err. 2. There are some example with e-mail-addresses of the kind "localpart."@gmx.de.

The program uses the dsn.jar from suns javamail library, to parse the DSN message-part.

The status of the DSN was not very useful. So the program includes an uncomplete list of regular expression patterns to cluster the DSNs by searching for these patterns within the Diagnostic-Code string.

There is also a feature to compare the sent-time of the last message sent to user A and the DSN received for the e-mail-address of user A. This is useful to recognize that a temporary problem has gone away.

Last but not least there is a feature, to parse DSNs which are delivered as plain text.

If there is some interest, I will try to publish the program and its source-code.

Which tool do you use to keep track of delivery status notifications?

package junit.framework does not exist on building swingx.jar

Friday, July 21st, 2006

The current swingx branch does not build successful using eclilpse to execute the ant-default-target:

DefaultDateSelectionModelTest.java:26: package junit.framework does not exist

build-impl.xml:142: Could not create task or type of type: junit

That seems to be an junit-classpath-issue. So it was easy to pass these problems by, by running the jar-target only.

Anybody out there, who wants to comment how to fix this problem?

Adressen in Drop-Down-Liste der IE-Adress-Zeile löschen

Friday, July 14th, 2006

Der Internet-Explorer speichert Internet-Adressen (=URLs), die man direkt in die Adresszeile eingibt. Selbst wenn man unter Internetoptionen/”Verlauf” leeren drückt, bleiben diese Einträge erhalten.

Heute wurde ich gefragt, wie man am einfachsten alle Adressen aus der URL-Liste entfernen kann.

Antwort:
Man startet das Programm regedit und löscht den entsprechenden Schlüssel. Also:
* Start/Ausführen/regedit [Enter-Taste dürcken]
* im Baum den folgenden “Ordner” markieren:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs

* [entf-Taste drücken] und das Löschen bestätigen

Noch etwas einfacher und automatisierter geht es wenn man eine reg-Datei erstellt, die regedit anweist, den Schlüssel zu löschen. Eine solche Datei würde folgendermaßen aussehen:

REGEDIT4
[-HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs]

Um auch gleichzeitig die History des Explorers zu löschen kann man die Datei erweitern auf:

REGEDIT4
[-HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs]
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU]

del_(i)e_urls.reg downloaden (Ziel speichern unter …)

Dann muss man diese Datei noch mit regedit öffnen und die Änderung bestätigen.

Alle Angaben wie immer ohne Gewähr.

missing java.awt.SystemColor.gradientActiveCaption

Friday, July 7th, 2006

I am missing the static fields gradientActiveCaption and SystemColor.gradientInactiveCaption in the class SystemColor of javas awt package. These values could be null if this information is not available.

also see: msdn about windows system colors

459 Megapixel-LCD

Tuesday, July 4th, 2006

Soeben ist mir eine Postwurfsendung in die Hände gefallen:
Ein Discounter bietet in Österreich ab 3. Juli einen LCD-Fernseher mit folgenden technischen Daten an: 32 Zoll, 19:9 Bildformat, …, Sleeptimer, 1366×768 dpi, ….

Bei einer Diagonale von 32 inch sollte das Display ca. eine Größe von 27,89 inch x 15,69 inch haben. Hätte das LCD tatsächlich eine Auflösung von 1366×768 dots per inch müsste es in etwa 459 Megapixel (also schon fast 0,5 Gigapixel) haben. Nicht schlecht und das um nur EUR 799,-. Da heißt es zuschlagen. ;-)
[RAW]

[/RAW]

Eclipse Tastaturbelegung kopieren

Monday, July 3rd, 2006

Heute hat mich ein Freund gefragt, ob es in Eclipse möglich ist die benutzerspezifische Tastenbelegung in einen anderen Workspace zu übernehmen. Ich habe das selbst noch nicht ausprobiert. Aber das sollte problemlos funktionieren. Eclipse speichert die Keybindings in der Datei org.eclipse.ui.workbench.prefs, die man relativ zum Workspace-Verzeichnis im Unterverzeichnis .metadata\.plugins\org.eclipse.core.runtime\.settings findet.

Mit File/Export/General/Preferences kommt man zu einem Dialog, in dem man wählen kann welcher Teil der Einstellungen exportiert werden soll:

file-export-key-bindings

Mit File/Import/General/Preferences kann man die epf-Datei wieder einspielen.

Unter Window/Preferences/General/Keys/View findet sich übrigens auch ein Export-Button. Dieser lässt aber nur den Export im CSV-Format zu. Mit dieser Funktion werden (im Gegensatz zu oben) auch alle Default-Belegungen exportiert. Diese Datei eignet sich also gut dazu die Daten in eine Tabellenkalkulation zu übernehmen um dort dann ganz schnell seinen eigenen Eclipse-Key-Settings-Cheat-Sheet zu erstellen. Jedenfalls wäre es einfach, wenn die CSV-Datei nicht aufgrund eines peinlichen Bugs fehlerhaft wäre.

eclipse preferences dialog

Alle Angaben beziehen sich auf Eclipse 3.2.
Alle Angaben wie immer ohne Gewähr.

Maven-2, Eclipse und Ein-Mann-Projekt

Sunday, July 2nd, 2006

Ich habe mir gestern und heute Maven2 näher angeschaut, weil ich es für ein Projekt verwenden wollte, indem ich vorerst der einzige Entwickler bin. Maven2 ermöglicht eine deklarative Beschreibung des Build-Prozesses und ist für Java-Projekte ausgelegt. Da es dem Prinzip “Convention Before Configuration” bleiben die XML-Dateien (pom.xml, settings.xml, etc.) die man zu schreiben hat bei einfachen, standardkonformen Projekten zum Unterschied von Ant klein und übersichtlich. Maven2 behält Überblick über die Abhängigkeiten zwischen den einzelnen Moduln. Zum Unterschied von Maven1 werden sogar transitive Abhängigkeiten berücksichtigt. Sogar das Downloaden von externen Moduln übernimmt Maven. Für Maven2 existieren schon zahlreiche in Java geschriebene Plugins die Maven2 erweitern. Maven2 generiert so nicht nur ein jar (bzw. war, etc.) – File sondern führt auch die junit-Test automatisch durch und generiert auf Wunsch eine Projekt-Homepage mit zahlreichen Reports. Maven2 übernimmt das automatisch Signieren und erstellt jnlp-Dateien und vieles andere mehr. Und natürlich kümmert sich maven2 auch um den automatischen Upload. Von diesen Möglichkeiten jetzt zu meinen perönlichen Erfahrungen.

Ich verwende Eclipse. Bei der Kombination von Maven und Eclipse ist folgendes zu beachten:

* mvn eclilpse:eclipse Dieser Befehl ruft das “Maven Eclipse Plugin”, das daraufhin die Eclipse Projekt-Einstellungen anhand der Maven-Deklarationen generiert.

* Mevenide bietet ein Eclipse-Plugin, um Maven1 in Eclipse zu integrieren

* m2eclipse plugin von Mergere ist ein Eclipse-Plugin für Maven2. Es beschränkt sich auf wenige Features. (maven per Kontext-Menü aufrufen und dessen Output im Console-Fenster von Eclipse lesen. Editor für Mavens pom.xml) Aber während meiner ersten Schritte habe ich es als praktisch empfunden.

* flaches Projektlayout. Wenn man sich den Package-Explorer von Eclipse ansieht, dann sind dort alle Projekte im selben Workspace. Keine Projekte sind in sich geschachtelt, wie das bei Maven-Projekten durchaus üblich ist. Dieses flache Layout kann man allerdings recht problemlos auch bei eigenen Maven-Projekten verwenden.

Trotzdem bin ich zu dem Schluß gekommen Maven2 es vorerst nicht zu verwenden. Hier die Gründe:

Allen voran:

  • 1. Wie in Maven2 auch empfohlen teile ich meine Projekte in viele Moduln auf, wobei jedes Modul in meinem Fall einem Projekt in meinem Eclipse-Workspace entspricht. Wenn außer mir niemand die Sourcen verändern darf habe ich jederzeit die Möglichkeit projektübergreifende Refactorings vorzunehmen. Mit den Refactoring-Funktionen von Eclipse macht das wirklich Spaß. Wenn ich die Projekteinstellungen von dem Eclipse-Plugin für Maven2 erstellen lasse scheint das nicht mehr zu funktionieren. “Project/Properties/Java Build Path/Projects” bleibt in diesem Fall leer, womit das projektübergreifende Refactoring nicht mehr klappt.

Hier noch ein paar weitere Kritikpunkte:

  • 2. Abgesehen von dem kostenlosen eBook “Better Builds With Maven” und den Hinweisen auf der Maven2 Website gibt es recht wenig gute Dokumentation. Die Fehlermeldungen von Maven2 bzw. seinen Plugins lassen (noch immer, Stand Juni 2006) zu wünschen übrig. Wenn ich schon in den ersten Stunden der Nutzung den Source-Code eines Programmes zu lesen beginne, weil ich anders nicht weiter komme, dann spricht das nicht unbedingt für diese Sofware.
  • 3. Ein vollständiges “best practice” Beispiel für Maven+Eclipse+SVN fehlt eindeutig.
  • 4. Die öffentlichen Maven-Repositories sind recht unvollständig und werden IMHO schlecht gewartet. Weder glazedlists-1.6.1 noch glazedlists-1.6.0 habe ich gefunden. glazedlists-1.5.0 war die aktuellste Version. Aber das scheint keine Ausnahme sondern die Regel zu sein. In diesem Fall muss man selbst Repositories anlegen.
  • 5. Rein theoretisch sollte man ein Maven Projekt ohne weiteren Aufwand mit einem Befehl auf der eigenen Plattform compilieren können. Da ja fehlende Libraries automatisch nachgeladen werden. In der Praxis ist es dann doch nicht so einfach: Viele Libraries (auch von sun) dürfen nicht einfach so zum Download angeboten werden, sondern dürfen nur von der Original-Website nach dem Akzeptieren der Lizenz-Bedingungen heruntergeladen werden. Damit wird es erst recht sehr mühselig.

Am Horizont tauchen neue Java-Erweiterungen auf (JSR 277, etc.) und oft liest man, dass User von Sun fordern, selbst Features zu standardisieren (bzw. zu implementieren), die mavens Repository-Funktionalität entsprechen.

Ich bin überzeugt davon, dass maven2 Probleme zu lösen versucht, die sich den meisten Entwickler stellen. Ob maven die Zukunft wird, das wird nicht zuletzt von den verfügbaren Tools und der Usability von maven abhängen. Ich finde: Es sollte auch für kleinere Projekte attraktiv werden maven zu nutzen.

PS: Kommentare zu Punkt 1 würden mich besonders interessieren. :-)

AntiVir meldet TR/Dldr.Zlob.VV.2 in Windows-Version von rssowl 1.2.1

Sunday, July 2nd, 2006

AntiVir findet den Trojaner TR/Dldr.Zlob.VV.2 in der Windows-Version von RSSOwl 1.2.1. Ist das eine Falschmeldung?

Die Virusdefinition zu diesem Virus ist am Freitag mit der VDF Version 6.35.00.97 ausgeliefert worden.

Hier ist der MD5-Code von rssowl.exe aus rssowl_1_2_1_win32_bin.zip:
74235bbc8186c5d1cf037cdc4447b61c rssowl.exe

RSSOwl ist ein in Java programmierter RSS-Reader der auf der Eclipse-Rich-Client-Platform basiert und unter der EPL lizenziert wird.

Stichworte: Virus, Trojanisches Pferd, TR/Dldr.Zlob.VV.2, TR/Dldr.ZIob.VV.2,TR/DIdr.Zlob.VV.2,TR/DIdr.ZIob.VV.2

* english post

AntiVir reports TR/Dldr.Zlob.VV.2 for rssowl.exe

Sunday, July 2nd, 2006

AntiVir finds the trojan TR/Dldr.Zlob.VV.2 in the windows version of RSSOwl 1.2.1. Is this a false positive?

74235bbc8186c5d1cf037cdc4447b61c rssowl.exe
246d200f7b08f78d568597c755fbd024 rssowl.ico
22fe988f1bfce8fa34ef3511faebbd43 rssowl.jar
370706340249da98c21748251bf960e4 swt-win32-3230.dll

RSSOwl is an open-source RSS-reader written in java and based on eclipse-rcp.

Keywords: Virus, TR/Dldr.Zlob.VV.2, TR/Dldr.ZIob.VV.2,TR/DIdr.Zlob.VV.2,TR/DIdr.ZIob.VV.2