reapers blog

Stolpersteine mit UTF-8, MySQL und PHP
geschrieben von: reaper, 28.02.2011

Viele alte Datenbestände die in MySQL Datenbanken schlummern sind noch immer Latin1 encodiert, das ist in Zeiten von UTF-8 allerdings ein Graus, zumal selbst PHP dies inzwischen unterstützt. Hat man also noch so eine Altlast herum zu liegen und will diese migrieren dann gibt es ein paar simple Schritte die man beachten sollte.

Zunächst geht es daran die Applikation UTF-8 tauglich zu machen. Als erstes müssen die Daten migriert werden, das geht mittels Iconv bei MySQL-Dumps ziemlich fix. Zuerst zieht man sich einen Dump von der betroffenen Datenbank:

mysqldump -u <user> -p --default-character-set=latin1 \
--skip-set-charset --add-drop-table <datenbank> > dump.sql

Als nächstes kommt die Konvertierung an die Reihe. Da MySQL-Dumps in der Regel reine Textdateien sind kann man mit einfachen Textwerkzeugen rangehen:

iconv -c -f latin1 -t utf-8 dump.sql \
| sed s/latin1/utf8/ > converted_dump.sql

Damit sollten alle Latin1 Zeichen in UTF-8 umgewandelt worden sein. Der Parameter -c sorgt dafür das bereits in UTF-8 vorliegende Zeichen einfach ignoriert werden. Abschließend wird der Dump nun wieder über die bestehende Datenbank gebügelt:

mysql -u <user> -p <datenbank> < converted_dump.sql

Soweit so gut, die Daten liegen jetzt korrekt in der Datenbank. Bleiben noch ein paar kleine Änderungen an der Applikation. So sollte man sicherstellen das sich nirgends mehr ein utf8_encode versteckt und das etwaige header die noch von ISO-8859 sprechen in UTF-8 geändert werden. Nicht vergessen sollte man das Characterset der Datenbankverbindung auf UTF-8 zu setzen. Dazu einfach einmalig SET NAMES 'UTF8' aufrufen, dann sollte alles wohl-encodiert über die Bühne gehen.

Don't live with Broken Windows
geschrieben von: reaper, 22.10.2010

Manchmal ist es schon kurios. Beim Design von Software achtet man auf schöne Strukturen, sauberen Quellcode und irgendwann kommt der Zahn der Zeit. Üblicherweise in Gestalt eines Kunden oder Benutzers der unbedingt dieses oder jenes Feature haben möchte. Die schönen Strukturen werden etwas aufgeweicht, der Quellcode bekommt ein paar Entscheidungsbäume mehr und alle sind erstmal zufrieden. Natürlich nimmt man sich vor das alles im nächsten Release besser zu machen aber sind wir mal ehrlich, wer macht das wirklich, bzw. wer hat die Zeit dafür.

Und das ganze kommt oft noch schlimmer, nach ein paar Monaten wird die Funktion gar nicht mehr gebraucht. Eine neue Implementierung wird hinzugefügt und das Design wird weiter aufgeweicht, denn den unbenutzen Code tastet man inzwischen nicht mehr an, weil man nicht mehr weiß wer ihn noch braucht oder man meint ihn nochmal brauchen zu können.

Ich für meinen Teil habe in letzter Zeit an mehrfach festgestellt wie befreiend es sein kann alten Ballast über Board zu werfen. Und solches Refaktoring macht sogar noch Spaß, denn am Ende sieht man wieder ein wenig Licht. Die Strukturen die man sich einstmals erdacht hat schimmern wieder durch das Gewirr von Anpassungen hindurch und plötzlich wird einem wieder klar wie schön Software doch eigentlich sein kann.

So habe ich im Backend meines CMS immer daran festgehalten Texte mittels BB-Code zu formatieren und war auch irgendwie der Meinung das ein Umbau nicht lohnt und wahnsinnig aufwendig sei. Inzwischen habe ich das System umgebaut, die Daten migriert und alles was mit BB-Code zu tun hat weitestgehend entfernt. Und siehe da das System ist ein wenig schneller geworden, der Code etwas lesbarer und ich kann sogar ohne Probleme einen WYSIWYG Editor im Backend verwenden, einfach nur indem ich eine Altlast beseitigt habe.

Um den Pragmatic Programmer zu zitieren: "Don't live with Broken Windows", wenn der Code hässlich oder ineffizient wird dann tu etwas dagegen. Die Zeit verzeiht keine Fehler und wenn man etwas nicht mehr braucht sollte man den Mut haben es zu entfernen, genauso wie man eine fehlerhafte Lösung korrigieren sollte wenn man sie entdeckt.

Was ist schlimmer als fehlende Dokumentation...
geschrieben von: reaper, 18.09.2010

... eine fehlerhafte Dokumentation. Es gibt da draußen Orte an denen sind Quellcode-Kommentare ganz wichtig. Sind sie ja manchmal auch. Ich bin zwar der festen Auffassung das Quellcode sich selbst-dokumentieren sollte und das Quellcode der einer umfangreichen Erklärung bedarf eigentlich gar keine Daseinsberechtigung besitzt aber es gibt Zeiten da geht es eben nicht anders.

Gerade stoße ich auf Quellcode aus meiner eigenen Vergangenheit, aus einer Phase als oben geschriebenes noch nicht galt und ich selbst der Meinung war es wäre schick jede Methode zu dokumentieren, dabei bemerke ich einfach das ich diese Dokumentation zwar angelegt, aber nie aktualisiert habe.

Und voller Scham fällt mir das Kapitel "The Evils of Duplication" aus dem Pragmatic Programmer ein, denn Quellcode Kommentare sind, so sie von Hand geschrieben werden eine ganz klare Form von Duplikation. Merke: DRY - Don't repeat yourself!!!

Subversion Webinterface - WebSVN
geschrieben von: reaper, 25.09.2009

Subversion ist eine feine Sache, selbst wenn man nur ganz allein an einem Projekt arbeitet. Mit verschiedenen Tools kann man Subversion schließlich auch in allerlei Entwicklungsumgebung und Dateibrowser integrieren. Von der Mächtigkeit der Kommandozeile sprechen wir dabei noch gar nicht.

Auch sehr nett finde ich die Möglichkeit per Webinterface auf ein Repository zugreifen zu können. Greift man per WebDAV auf sein Repository zu hat man auf jeden Fall schon mal die Möglichkeit sich per Webbrowser den HEAD anzuschauen, schöner geht es allerdings mit WebSVN.

WebSVN ist eine Weboberfläche mit der man sich Repositories anzeigen lassen kann. Dabei kann man auch Versionen vergleichen, Dateien annotieren lassen oder Repositories per RSS Feed abonnieren.

In der bei Debian Lenny mitgelieferten Version 2.0 ist das alles noch recht rudimentär, mit der aktuellen Version 2.2.1 kann man allerdings schon recht bequem arbeiten und als Hilfstool beim Mergen oder bei der Recherche abseits der IDE ist das durchaus sehr hilfreich. Eine Demo finde sich unter anderem auf der Webseite der Entwickler.

Laut Dokumentation lässt sich auch die SVN Authentifizierung verwenden, das habe ich selbst aber noch nicht ausprobiert.

tags: coding tools

Sinnvolle Technik - Trackback Daten per RDF
geschrieben von: reaper, 17.09.2009

So beim Bloggen verlinkt man ja gern man die eine oder andere Seite. Und nicht selten handelt es sich dabei um ein Blog auf welches man dann eigentlich sinnvollerweise auch ein Trackback setzen sollte. Leider heißt das dann aber nicht selten auf den hübsch gestylten Seiten nach der Trackback URL zu suchen und dann diese per Copy & Paste zu kopieren. Dabei könnte die Lösung so einfach sein, wenn einfach alle Blogs, Foren und Seiten die gern Trackbacks empfangen wollen entsprechende RDF (Resource Description Framework) Informationen anbieten würden.

Darüber können dann Blogs und Tools automatisch nach der Trackback URL suchen und auch automatisch die Trackbacks setzen. Funktioniert im übrigen Prima und ist auch gar nicht schwer zu implementieren. Nachteil der Geschichte ist das man so natürlich noch schneller zur Zielscheibe von Trackback Spam wird, aber da man den i.d.R. auch hat wenn man nur die URL irgendwohin schreibt ist das dann auch egal.

tags: coding web

Der Fluch der ternären Operation
geschrieben von: reaper, 08.07.2009

Programmierer sind ja schreibfaul. Statt einer normalen Verzweigung erfanden sie also irgendwann die ternäre Operation. Also das weglassen des umständlichen if .. then .. else Krams und die Reduktion der Anweisung auf eine Zeile. Das kann viel Tipparbeit sparen, und reduziert die Codezeilen und erhöht unter Umständen die Übersicht. Immer wieder stoplere ich aber auch über ternäre Operationen die sich über mehrere Zeilen erstrecken und ungefähr so lesbar sind wie das Kleingedruckte auf einem Mobilfunkvertrag.

Das führt dann dazu das eigentlich offensichtliche Fehler übersehen werden. Als Beispiel: einer Variable wird entweder ein Wert oder NULL zugewiesen. Später wird geprüft ob die Variable NULL ist und die Verbeitung abgebrochen. Blöd nur wenn jetzt vor der Prüfung die 20 Zeilen später passiert jemand die Variable verwendet und übersieht das diese auch NULL sein kann.

Dabei könnte das Leben so einfach sein wenn man einfach abbricht statt die Variable erst umständlich auf NULL zu setzen. Der ternäre Operationen haben durchaus ihre Berechtigung, aber nicht um jeden Preis und schon gar nicht wenn dadurch die Lesbarkeit des Quellcodes leidet.

tags: coding

Know your tools
geschrieben von: reaper, 08.04.2009

Manchmal ist es gar witzig anzusehen wie Windowsnutzer Texte verarbeiten. Man nehme ein Dokument mit mehr weit mehr als tausend Zeilen aus dem etwa die Hälfte der Zeilen entfernt werden sollen die einem bestimten Muster entsprechen. Der klassische Ansatz unter Linux: cat FILENAME | grep -v "PATTERN" > NEW FILENAME. Der Ansatz des Windowsusers: Zeile markieren, Backspace, nächste Zeile markieren, Backspace... Klingt lustig, im wahrsten Sinne des Wortes.

Wenn MySQL mal wieder behauptet
geschrieben von: reaper, 26.03.2009

das man sich nicht einloggen kann weil nutzername@hostname keinen Zugriff hat heißt das in hässlichen Wirklichkeit das nutzername[from]remotehos[at]databasehost keinen Zugriff hat und nicht das die Konfiguration des Datenbankzugangs falsch ist.

Command-line Fu
geschrieben von: reaper, 08.03.2009

Eine wunderbare und ausnahmsweise sinnvolle Form des Microbloggings. Command-line Fu ist eine Sammlung von mehr oder weniger komplexen Kommandozeilenbefehlen. Hier findet man Dinge die man schon immer mal gebraucht hat ohne viel GUI und ganz dem Unix Motto: One Tool, one Job folgend. Selbstverständlich ist jeder eingeladen seine persönlichen Favoriten zu bewerten oder selbst zu submitten.

Das ZSH Buch ist da
geschrieben von: reaper, 07.10.2008

Ein Buch das man wohl auch unrezensiert mal eben im Affekt bestellen kann dürfte das zsh-Buch von Julius Plenz und Sven Guckes sein. Auf 200 Seiten gibt es eine Einführung in die Untiefen der besten Shell aller Zeiten. Schon deshalb und weil mich mit der zsh eine fast schon religöse Verehrung verbindet freue ich mich auf eine zügige Lieferung lieber online Buchversand!
Meine Stimme gegen Nazis! Nazis raus aus dem Internet Stoppt die Vorratsdatenspeicherung! Jetzt klicken und handeln! rsp-blogs.de
Soweit nicht anders angegeben, stehen die Bilder/Texte unter der Creative Commons Attribution Non-Commercial Share Alike Lizenz. Logos gehoeren dem jeweiligen Eigentümer.