Mrz 07

In meinem aktuellen Projekt gibt es die Anforderung, aus einer (Java EE-) Anwendung E-Mails zu verschicken. Das ist auch dank Apache Commons Email in wenigen Zeilen erledigt. Nun sollen manche Mails beim Empfänger idealerweise direkt als „wichtig“ angezeigt werden und das ist gar nicht so trivial, wie es auf Anhieb erscheint. Es gibt nämlich dafür keinen Standard-Header, sondern nur diverse Pseudo- (also: keine) Standards, die ursprünglich auch gar nicht primär für die Anzeige im Mail-Client des Empfängers, sondern für die MTAs auf dem Weg zwischen Sender und Empfänger gedacht waren.

Gefunden habe ich:

  • X-Priority mit Werten von 1 (High) bis 5 (Low) – Weglassen dieses Headers entspricht also 3 (Medium)
  • X-MSMail-Priority mit Werten von High bis Low – offenbar hatte Microsoft den Bedarf für eine eigene Variante
  • Importance mit Werten High, Normal, Low – anscheinend der einzige standardisierte Header für diesen Zweck, aber auch der von den meisten Mail-Clients ignorierte

Letzterer war in meinem konkreten Fall dennoch der entscheidende, da die Empfänger Lotus Notes verwenden und dieses bei Importance: High tatsächlich ein kleines rotes Ausrufezeichen zur Markierung der Wichtigkeit anzeigt.

Da aber ggf. auch andere Mail-Clients zum Einsatz kommen können, setze ich kurzerhand alle drei Header:

...
import org.apache.commons.mail.SimpleEmail;
...

SimpleEmail email = new SimpleEmail();
if (highPriority) {
	email.addHeader("X-Priority", "1");
	email.addHeader("X-MSMail-Priority", "High");
	email.addHeader("Importance", "High");
}
...

Über die generelle Sinnhaftigkeit, ob ein Mail-Versender über die Wichtigkeit einer Nachricht für den Empfänger bestimmen kann oder soll, will ich an dieser Stelle nicht diskutieren.

Fragen, Anmerkungen, Ergänzungen? Kennt Ihr noch weitere Header, die dasselbe bezwecken sollen?

written by Gunnar Schmid \\ tags: , , , ,

Jun 05

Eigentlich gebe ich nicht sonderlich viel auf irgendwelche Zertifikate, die gewisse technische Skills bescheinigen sollen, häufig genug aber nur Teilnahmebescheinigungen einer Schulung sind. Na gut, es gibt sicher auch eine Menge ausgesprochen anspruchsvolle Zertifizierungen und ich will deren Sinnhaftigkeit auch gar nicht in Frage stellen, nur habe ich für mich bisher wenig bis keine Veranlassung gesehen, mich für irgendwas zertifizieren zu lassen. Potentielle Auftraggeber wollen üblicherweise vor allem Projekterfahrung sehen, was in einen kleinen Teufelskreis führen kann: wie bekomme ich Projekterfahrung in bestimmten Skills, wenn ich zum Anwenden dieses Skills erstmal Projekterfahrung nachweisen soll?

Wie auch immer, vor gut zwei Jahren war ich mal in der glücklichen Situation, den Softwarestack für eine neu zu entwickelnde (Java-basierte) Web-Anwendung nahezu völlig frei auswählen zu dürfen. Im „Unterbau“ gab es für mich keine Gründe, von Altbewährtem wie Spring und Hibernate abzurücken, aber für den UI-Layer hatte ich doch ein paar spezifische Anforderungen. Es sollte einerseits einen modernen Anstrich haben mit AJAX usw., andererseits wollte ich mich so wenig wie möglich mit Javascript und auch mit HTML beschäftigen müssen. Nicht, dass ich das nicht auch könnte, wenn ich wollte, aber wenn ich die Wahl habe, verzichte ich gerne darauf. Die Wahl fiel auf Vaadin, was dem Entwickler erlaubt, komplett in Java zu bleiben. Auf der UI-Seite kommt GWT zum Einsatz, d. h. das benötigte Javascript wird generiert. Die Einarbeitung ging, vor allem dank der sehr ordentlichen Dokumentation, ziemlich schnell und die Anwendung nahm schnell Formen an. Damals gab es noch keinen offiziellen Spring-Support, sodass ich mir mit einem Add-on (von denen es zahlreiche für die verschiedensten Bereiche gibt) behelfen musste. Etwas frickelig war dann noch das Styling. Zwar muss man sich nicht mit blankem CSS herumplagen, sondern kann die Vorzüge von SCSS nutzen, aber manche Komponenten ließen sich einfach nicht bzw. nur sehr umständlich wie gewünscht stylen. Das hat sich wohl mit neueren Versionen von Vaadin bzw. mit dem neuen Standard-Theme verbessert, aber da bin ich noch nicht tiefer eingetaucht.

Nach Abschluss des Projekts gab es zwar immer mal wieder kleinere oder größere Erweiterungen an der Anwendung, aber vorwiegend fachlicher Natur, d. h. am technischen Setup hat sich nichts mehr Wesentliches geändert. Die weitere Vaadin-Entwicklung verfolge ich dennoch interessiert, denn wenn sich die Gelegenheit wieder bietet, würde ich das gerne wieder einsetzen.

Eine Zertifizierung als Vaadin-Entwickler, die die Firma Vaadin seit längerer Zeit anbietet, war mir dennoch nicht wichtig genug, um dafür Geld auszugeben. Vor ein paar Monaten gab es aber eine „free certification week“, in der man gratis an der Online-Prüfung teilnehmen konnte. Die Gelegenheit wollte ich dann doch nutzen, aber da ich das erst am letzten Tag mitbekam, hatte ich quasi keine Vorbereitungszeit. Die Prüfung ist ein Multiple-Choice-Test über sämtliche Aspekte des Vaadin-Frameworks, wobei nur eine begrenzte Zeit pro Frage zur Verfügung steht und jeweils eine oder mehrere Antwortmöglichkeiten richtig sein können. Dafür, dass ich in meinem bisher einzigen Vaadin-Projekt längst nicht alles genutzt habe, was das Framework anbietet, und mich dementsprechend nur mit einer Teilmenge detaillierter beschäftigt habe, habe ich mich ganz wacker geschlagen und den Test bestanden. Zum Bestehen waren 60% korrekte Antworten nötig und ich kam auf 64% – fühlte sich ein bisschen an wie früher in der Schule, wenn ich nicht für eine Klassenarbeit gelernt hatte und gerade so durchkam. 😉 Jedenfalls kein Resultat, mit dem ich hausieren gehen würde, aber nachdem ich im Forum das hier las, fühlte ich mich etwas besser:

„The test is quite hard, and only approx 20% of people pass the exam and not even Vaadin Ltd employees pass it on their first try“

Wenn man dann noch bedenkt, dass von angeblich 150.000 Vaadin-Nutzern nur 441 zertifiziert sind (Quelle: vaadin.com, Stand 01.06.2015), ist das ja vielleicht doch etwas wert.

Ich bin zertifiziert

written by Gunnar Schmid \\ tags: ,

Mrz 16

Lange herumgegoogelt und komplizierte, aber veraltete und nicht mehr funktionierende Anleitungen gefunden – das Home-Verzeichnis eines Benutzers in Mac OS X zu ändern scheint eine nicht-triviale Angelegenheit zu sein. Bzw. gewesen zu sein, denn unter 10.9 („Mavericks“), evtl. auch schon früher, ist es sehr einfach – wenn man es denn mal gefunden hat.

Warum sollte man das überhaupt wollen? Es kann natürlich diverse Gründe dafür geben. In meinem Fall war es die Anschaffung eines neuen MacBooks mit anschließender Migration der Daten vom alten Gerät. Da ich auf dem neuen zunächst wieder einen Benutzer-Account mit meinem Namen angelegt hatte (Home-Verzeichnis: „/Users/Gunnar“), wurde bei der Migration für den alten Account gleichen Namens automatisch ein Home-Verzeichnis „/Users/Gunnar 1“ erstellt. Das wäre an sich kein Problem, auch wenn es ein bisschen unschön aussieht, aber teilweise nervt das Leerzeichen im Pfad, da man dann dauernd Anführungszeichen drumherum setzen muss.

Wie eingangs erwähnt, war es wohl in früheren Versionen von OS X ein ziemlicher Krampf, das Home-Verzeichnis eines Benutzers zu ändern, aber heutzutage geht es sehr leicht:

  1. Mit einem Admin-Benutzer anmelden
  2. Im Finder in den Benutzer-Ordner („/Users“) navigieren und den entsprechenden Ordner umbenennen
  3. In der Benutzerverwaltung das Home-Verzeichnis auf den umbenannten Ordner ändern:
    Systemeinstellungen -> Benutzer & Gruppen -> Rechtsklick (bzw. Ctrl+Klick) auf den fraglichen Benutzer -> Erweiterte Optionen -> Benutzerordner

Das war alles.

Anwendungen, die absolute statt relativer Pfade in ihren Einstellungen gespeichert haben, müssen natürlich umkonfiguriert werden (z. B. Parallels), aber das sollte im Regelfall keine große Sache sein.

written by Gunnar Schmid \\ tags: , , ,

Jan 27

Ich schreibe spaßeshalber gerade ein kleines WordPress-Plugin. Anleitungen und Beispiele dafür gibt es reichlich im Netz, sodass dieses Unterfangen an sich nicht weiter schwierig ist, zumindest solange es sich um ein so triviales Ding wie in diesem Fall handelt.

Ein kleines Problem hat mich allerdings etwas genervt und auch wenn es mit etwas googlen recht schnell gelöst war, möchte ich es hier doch festhalten, vielleicht hilft es ja mal jemandem. Das Problem war, dass beim Aktivieren des Plugins immer diese Meldung angezeigt wurde:

Das Plugin hat unerwartet 3 Zeichen während der Aktivierung erzeugt. Falls du Meldungen “headers already sent” siehst oder dein Feed nicht funktioniert, solltest du das Plugin deaktivieren oder löschen.

Das schien zwar die Funktionalität des Plugins oder der WordPress-Installation nicht zu beeinträchtigen, aber so möchte man das natürlich nicht ausliefern. Blöderweise waren diese 3 ominösen Zeichen nirgends zu finden, weder in der WP-GUI noch in irgendwelchen Logs. Ein möglicher Grund hätte sein können, dass sich vor dem öffnenden <?php oder nach dem schließenden ?> einige Zeichen Whitespace befinden, aber das war bei mir nicht der Fall. Die Lösung lag schließlich in der Dateikodierung. Im von mir verwendeten Editor Notepad++ sind neue Dateien standardmäßig im ANSI-Format kodiert. Beim ersten Test merke ich aber, dass die Umlaute, die mein Widget produziert, nicht korrekt dargestellt werden, sodass ich auf UTF-8 umgestellt habe. Damit wurden die Umlaute dann richtig angezeigt. Allerdings enthält diese UTF-8-Datei dann ein BOM am Anfang, was offensichtlich von WordPress als unerwartete Zeichen interpretiert wurde. Nach Umstellen der Kodierung auf „UTF-8 ohne BOM“ passte dann alles.

written by Gunnar Schmid \\ tags: , , , , ,

Jul 12

Am Wochenende forderte mein iPhone mich auf, mein Exchange-Passwort einzugeben. Das irritierte mich schon sehr, da ich überhaupt keinen Exchange-Account habe, zumindest keinen aktiven. Ich hatte mal einen solchen Account zu Testzwecken eingerichtet, aber der war schon seit geraumer Zeit im iPhone deaktiviert. Die Meldung war auch nicht wirklich hilfreich, da dort nicht zu erkennen war, um welchen Account es sich denn handelte, der jetzt plötzlich ein Passwort haben möchte.

iPhone-Aufforderung, ein Exchange-Passwort einzugeben

Ich wählte also zunächst mal „Abbrechen“. Allerdings bemerkte ich recht bald, dass der Akku extrem schnell an Ladung verlor – man konnte beinahe dabei zusehen, wie die Prozente runterzählten. Nun ist man mit einem Smartphone ja nicht gerade verwöhnt, was Akkulaufzeiten angeht, vor allem, wenn dauerhaft UMTS, WiFi, Bluetooth und GPS aktiv sind, aber so etwa zwei Tage hält der Akku normalerweise schon durch. Es war also etwas faul und ich hatte natürlich schnell den Verdacht, dass es mit dieser seltsamen Passworteingabe zusammenhängen könnte. Oder sollte ich mir etwa versehentlich einen Schädling eingefangen haben?

Eine schnelle Google-Recherche brachte keinen konkreten Hinweis, aber dann fiel mir ein, dass mir Google Mail vor einigen Tagen angeboten hatte, die Endung meiner E-Mail-Adresse von googlemail.com auf gmail.com zu ändern. Da ich diese Adresse sowieso nur zu internem Gebrauch verwende und auch Mails an die bisherige Adresse weiterhin ankommen sollen, nahm ich dieses Angebot an. Ich hatte diese Änderung aber noch nicht im iPhone nachgezogen und offensichtlich hatte dieses ebenso hartnäckig wie vergeblich versucht, Mails herunterzuladen – und zwar mit solch einer Wiederholungsrate, dass ruckzuck der Akku leer war.

Seit der Korrektur der Accountdaten ist alles wieder normal und letztlich war es mein eigener Fehler, aber meiner Meinung nach hat sich das iPhone doch etwas doof verhalten und zwar an mehreren Punkten:

  • Wieso wird der GoogleMail-Account als „Exchange-Account“ bezeichnet?
  • Wieso ist die Passworteingabeaufforderung so schlecht gestaltet, dass man den Accountnamen nicht lesen kann?
  • Und wieso gibt der Mail-Client im iPhone nicht nach einigen Fehlversuchen auf statt solange weiterzumachen, bis der Akku leer ist?

Apple, bitte in iOS 5 verbessern!

written by Gunnar Schmid \\ tags: , , , , , ,