Archiv für die Kategorie ‘Software-Wahnsinn’

Das böse e

Mittwoch, 02. September 2009

Gestern hat mich ein ganz besonderer Buchstabe in den Wahnsinn getrieben: Das ℮! Nicht das jemand glaubt, e = ℮. Denn wenn man genau hinsieht, dann ist

e ≠ ℮

Es handelt sich nämlich hierbei um das sog. “estimated e” auf Verpackungen. Dieses ist ein Sonderzeichen, welches Windows, Mac und Linux eigentlich unbekannt ist und sich in Word und HTML aber herbei zaubern lässt. Des Rätsels Lösung lautet Unicode: Hier hat das Estimated Symbol die Position 8494 bzw. U+212e und dementsprechend die HTML-Entität ℮ bzw. ℮.

Wenn jetzt dieses “magische e” in einem HTML-Formular eingegeben wird und das Formular in PHP weiterverarbeitet wird, hat man ein Problem. Denn wie ich nach langem Suchen herausfinden konnte, wird dieses magische e bereits vom Browser in die numerische HTML-Entität umgewandelt, bevor der Request an den Server übermittelt wird. Herausfinden konnte ich das im Übrigen mit der genialen Firefox-Erweiterung “Live HTTP-Headers“.

Zurück zu meinem Problem: Es wurde also in einem HTML-Formular dieses böse ℮ eingegeben und diese Eingabe sollte später in einer E-Mail-Benachrichtigung ihren Platz finden. Da bereits der Browser die Umwandlung in eine HTML-Entität durchführte, musste diese nun PHP-seitig wieder rückgängig gemacht werden. Leichter gesagt als getan. Denn eine String-Konvertierung mittels mb_convert_encoding führte nicht zum Ziel. Egal, ob ich nach ISO-8859-1, ISO-8859-15, Windows-1252 oder auch UTF-8 konvertierte, das Ergebnis blieb das gleiche: Aus ℮ wurde ?

Nach Rücksprache mit dem Kunden habe ich dann eines gemacht:

$msg = str_replace('℮','e',$msg);

Da das ℮ kaum von einem normalen e zu unterscheiden ist, steht zukünftig ein normales e in den Benachrichtigungs-Mails geschrieben.

Die letztendliche Implementierung hat nicht lange gedauert. Die Suche, warum sich das ℮ so seltsam verhält, allerdings über zwei Stunden :-(

Pimp my Firefox 3.5

Mittwoch, 22. Juli 2009

Seit ein paar Tagen habe ich nun auch den Firefox auf Version 3.5 (genauer 3.5.1) aktualisiert, nachdem auch endlich das Plugin Firebug für den Firefox > 3.5 verfügbar war. Ich bin mit der neuen Version auch soweit zufrieden, außer dass sich Firefox immer noch gnadenlos mit Speicher aufpumpt und ich ihn gelegentlich einfach mal neu starten muss (das geht mit dem Plugin Update Notifier recht einfach).

Eine Sache störte mich allerdings wirklich: Im Firefox 3.0.x war es so, dass auch der letzte Tab immer als Tab angezeigt wurde (Einstellungen => Tabs => “Tab-Leiste immer anzeigen” angewählt). Zusätzlich konnte ich den letzten Tab mittels eines kleinen Icons schließen, ohne dass sich der Firefox beendet, und es wurde anstelle des geschlossenen Tabs ein leerer Tab angezeigt. Ich fand das ganz praktisch, denn so konnte ich den Firefox anweisen, dass er nach jedem Start die zuletzt geöffneten Tabs wieder öffnet – eben auch den leeren Tab. Und genau dieses Verhalten vermisste ich schmerzlich in der neuen Version.

Die Lösung fand ich nach einigem Suchen im Netz. Die Lösung besteht allerdings aus zwei Teil-Lösungen, da es anscheinend auch zwei verschiedene Probleme sind, die es zu lösen gilt:
(weiterlesen…)

Google Earth Bug?

Samstag, 12. April 2008

Eben staunte ich nicht schlecht. Ich hatte etwas in Google Earth nachgeschaut (ja, auch ich kann mich dafür begeistern) und später mein Notebook schlafen gelegt. Und nach dem Aufwachen des Notebooks hatte ich folgende hübsche Ansicht:

Klötzchen-Grafik in Google Earth

Manche Leute mögen ja vielleicht Klötzchen-Grafik – aber nicht in Google Earth!

Imagick unter Windows

Samstag, 27. Oktober 2007

Für unsere Applikation, die wir seit über einem halben Jahr entwickeln, setzen wir zur Erzeugung von Thumbnails und Seiten-Previews von PDF-Dateien bevorzugt ImageMagick ein. Wer mehr zu ImageMagick wissen will, der Besuche die Homepage oder lese sich den Wikipedia-Artikel durch. Der Vollständigkeit halber sei an dieser Stelle erwähnt, dass wir ImageMagick in Kombination mit Ghostscript einsetzen, damit auch PDF (und natürlich auch PostScript-Dateien) gerendert werden kann.

Aus PHP heraus rufen wir ImageMagick sowohl unter Windows als auch unter Linux per exec() auf. Nicht gerade besonders elegant, aber wirkungsvoll ;-) Vor allem ist das Ansprechen per exec() in einer Objekt-orientierten Umgebung alles andere als intuitiv. (Wir setzen bei besagtem Projekt Symfony als Framework ein). So haben wir uns also eine Adapter-Klasse geschrieben, die den Zugriff auf ImageMagick hübsch objektorientiert verpackt.

Unter Linux bereitet diese Art der Einbindung von ImageMagick uns keinerlei Kopfschmerzen. ImageMagick ist ebenso wie GhostScript auf den meisten Linux-Servern schon installiert oder mit geringem Aufwand über die Distributions-eigene Paketverwaltung schnell nachinstalliert. Auch die Performance lässt sich sehen. Und unter Windows? Die Installation von IM und GS klappt mit den grafischen Installern noch ohne Probleme. Aber die Performance von ImageMagick lässt per PHP und exec() doch ein wenig zu wünschen übrig (für das Rendern einer Vorschau benötigt unsere Applikation die doppelte bis dreifache Zeit unter Windows – trotz schnellerem Prozessor und mehr Hauptspeicher). Man merkt halt schon, für welche Plattform sowohl IM als auch GS entwickelt wurden.

Als native Schnittstelle gibt es schon seit Jahren das PECL-Paket Imagick. Es wurde jedoch seit 2004 nicht mehr weiter entwickelt. Erst im Frühjahr dieses Jahres haben sich wieder zwei Entwickler der Weiter-Entwicklung angenommen. Mittlerweile ist Imagick auch als Version 2.0.x stabil. Die 2er-Version wurde konsequent auf PHP5 und Oojekt-Orientierte Programmierung ausgelegt, so dass es keine Probleme bereiten sollte, Imagick in vorhandenen Projekten einzusetzen. Einziges Problem unter Windows ist jedoch, das PECL-Pakete nicht in PHP, sondern in C implementiert sind und man deshalb entweder vorkompilierte DLLs benötigt, oder selber den Compiler anwerfen muss. Da ich nicht über Microsoft Visual Studio verfüge und auch sonst ein wenig mit C auf Kriegsfuß stehe, blieb nur noch Variante eins übrig.

(weiterlesen…)

sfFileValidator und Firefox

Freitag, 31. August 2007

Ich bin gerade auf ein interessantes Phänomen mit Symfony gestossen, wenn ich eine Form-Validierung auf einen File-Upload von PDF-Dateien loslasse: In einem Modul der Backend-Applikation unseres Projektes ist ein File-Upload für PDF-Dateien vorgesehen. Dieses Form lasse ich auf den MIME-Type (in diesem Fall application/pdf) validieren. Das ganze lief auch schon auf einer anderen Maschine (auch dort mit Firefox 2.0.x) problemlos. Aber hier auf meinem Schleppi will die Validierung nicht funktionieren. Im Internet Explorer 7 hingegen klappt alles problemlos.

Mit der FF-Erweiterung “Live HTTP Headers” bin ich allerdings dem Fehler recht schnell auf die Spur gekommen: Der Firefox schickt anstelle von “application/pdf” den MIME-Type “text/html” mit. Warum er das macht kann ich noch nicht ganz nachvollziehen. Fakt ist aber, dass der sfFileValidator bei der Prüfung auf den MIME-Type des vom Browser mitgesendeten MIME-Type validiert und nicht auf den Tatsächlichen. Wenn alle Stricke reißen, muss ich wohl einen eigenen Validator schreiben, der dann “richtig” den MIME-Type prüft und sich nicht auf die Informationen des Browsers verlässt.

Virtualisierung auf meinem Notebook

Donnerstag, 30. August 2007

Gestern abend habe ich auf meinem Notebook, dass ich seit Montag besitze (ein HP NX9420 mit WinXP) die Prozessor-Virtualisierung im BIOS eingeschaltet, damit das M$ Virtual PC, welches ich installiert habe, auch von diesem recht netten Feature profitieren kann. Schließlich will ich im Virtual PC eine Linux-Box aufsetzen, damit ich Erfahrung sammeln kann, wie ich das aktuelle Projekt, welches ich mit Symfony entwickle, auch auf einem Deployment-Server ans Laufen bekomme. Also in gewisser Hinsicht ein lokaler bzw. virtueller Test-Server

(weiterlesen…)