Browsing all articles from August, 2011
12
Aug
2011

Es gab in meinem Leben bisher nichts, womit ich so viel Zeit verschwendet habe wie mit Encoding Problemen.

Für mein aktuelles Projekt entwickle ich zur Zeit einen crawler, der Websites zieht und analysiert. Natürlich bin ich da direkt auf sämtliche Encoding-Problemchen gestoßen, die man sich nur vorstellen kann und hatte unglaublich viel Spaß damit …

Ich verwende das Zend Framework und daher entsprechend die Klasse Zend_Http_Client um die HTTP-Requests abzusetzen.
Danach suche ich den Inhalt der Seite raus, sodass lediglich ein String ohne HTML-Tags und damit reinem Text übrig bleibt.
Gebe ich mir diesen nun einfach auf die Shell aus, stimmt das Encoding manchmal und manchmal nicht. Das sieht man dann immer schön an den kaputten Umlauten.

Also habe ich eine Funktion gebraucht, die das Encoding eines Strings konvertiert … Tja, wenn es denn so einfach wäre …
Die letzten Tage habe ich rund 20 Stunden damit verbracht eine Funktion zu schreiben, welche dafür sorgt, dass der String, der am Ende rauskommt, sauber dargestellt wird – unabhängig davon, was rein kommt. Das Problem hier war in erster Linie, dass selbst Strings, die sich als UTF-8 ausgegeben haben und von denen sogar mb_check_encoding() behauptet hat, es sei alles in bester Ordnung, haben kaputte Umlaute mit sich getragen. Also darauf konnte man sich schonmal gar nicht verlassen.

Ich möchte hier das Ergebnis meiner Arbeit mit euch teilen. Nicht erschrecken, es ist keine saubere Lösung (die sauberen Implementierungen haben allesamt nicht funktioniert). Der Code deckt auch nicht alle denkbaren Fälle ab, aber ich konnte bisher jeden beliebigen kaputten String mit deutschem Text und explodierten Umlauten in einen lesbaren String mit intakten Umlauten konvertieren. Da das mehrere 100 Texte aus verschiedensten Quellen aus dem Netz waren, behaupte ich mal, dass der Code recht brauchbar ist. Im Zweifelsfall dient er als gute Basis für eine umfassendere Implementierung.

Der Methode magicFixStringEncoding() kann man also einen beliebigen  String übergeben unabhängig davon ob er völlig in Ordnung ist oder total verstümmelt. Die Rückgabe der Methode sollte immer einen sauberen String mit funktionierenden Umlauten entsprechen.

Für Verbesserungsvorschläge bin ich jeder Zeit offen. Annsonsten viel Spaß denen, die den Code gebrauchen können ;)

 

 

class ITWS_Tool {
	public static function magicFixStringEncoding($strInput) {
		if (preg_match('/[üäöÄÖÜß]/i', $strInput) === 1) {
			$strInput = self::convertEncoding($strInput, 'UTF-8');

			if (strlen(utf8_decode($strInput)) !== strlen(utf8_decode(utf8_decode($strInput)))) {
				$strInput = utf8_decode($strInput);
			}
		} else {
			$strInput = self::convertEncoding($strInput, 'UTF-8', 'ISO-8859-15');
		}

        return $strInput;
    }

    public static function convertEncoding($strInput, $toEncoding, $fromEncoding = '') {
        if ($fromEncoding == '') {
            $fromEncoding = mb_detect_encoding($strInput, array('UTF-8', 'ASCII', 'ISO-8859-1', 'JIS', 'EUC-JP', 'SJIS'), true);
		}

        if ($fromEncoding == $toEncoding) {
            return $strInput;
		}

        return mb_convert_encoding($strInput, $toEncoding, $fromEncoding);
    }
}
read more
11
Aug
2011

Da ich in letzter Zeit zunehmends von Eclipse genervt bin (bzw. eigentlich allem, was mit Java zu tun hat, weils einfach der letzte Mist ist), habe ich mal netbeans nochmal angetestet. Zu verlieren hatte ich ja nichts, Eclipse war schließlich eben zum 5. mal heute abgestürzt und mir hat einfach die Motivation gefehlt es wieder zu starten.

Netbeans hatte ich vor zwei Jahren schonmal ausprobiert, war da aber von dem Layout der Benutzeroberfläche wenig begeistert – um nicht zu sagen, sie war hässlich. Das hat sich mittlerweile geändert. Fein.

Positiv beeindruckt hat mich erstmal die Tatsache, dass es ein Git Plugin gab. Dabei sollte es aber nicht bleiben, denn das importiere Projekt hat er direkt als Git Projekt und als Zend Framework Projekt erkannt. Abgefahren. Eclipse wusste das nichtmal nachdem ich es ihm klar gemacht habe. Egal. Ich habe alle Konfig-Einstellungen, die ich benötigt habe auch direkt gefunden. Super.

Besonders gefällt mir aber die Performance. Macht richtig Spaß damit zu arbeite, wenn man Eclipse gewohnt ist. Bis die JVM das zweit mal abgeraucht ist, habe ich etwas rumgespielt. Danach war ich von Java wieder so genervt, dass ich keine Lust mehr hatte.  Dennoch bin ich von Netbeans bisher beeindruckt. Die IDE bietet also durchaus das Potential Eclipse PDT als preferierte PHP IDE abzulösen.

Nur hoffen, dass Oracle endlich mal ein wenig an der Stabilität der JVM arbeitet, denn so macht das echt keinen Spaß. Aber was will man von Java auch anderes erwarten ;)

 

over and out

read more
3
Aug
2011

Wer seinem SSH Client dazu bringen möchte, für bestimmte Hosts andere KeyFiles zu verwenden bzw. bestimmte KeyFiles, kann folgende  Zeilen in seine ~/.ssh/config aufnehmen:

Host host.domain.tld
        Hostname host.domain.tld
        IdentityFile ~/.ssh/some_id_file
read more
2
Aug
2011

Ich bin ja ein riesen Fan von Dropbox und nutze das Tool wirklich intensiv. Wer 3 Rechner, Server, Notebooks, etc. oder mehr hat kann meinen Sympathie der Software gegenüber sicherlich teilen.

Was mich bisher etwas geärgert hat: Die Dropbox ist zwar verschlüsselt, aber auch Dropbox ist nicht perfekt sicher. Wer sich erinnert: Vor kurzem gab es eine Sicherheitslücke, die zu Folge hatte, dass der Service 2 Stunden lang beliebige Passwörter akzeptiert hat. Das darf nicht passieren, kann aber passieren. Und selbst wenn das Teil sicher ist und jemand an mein Passwort kommen sollte, sind die Daten in Gefahr. Daher habe ich bisher auch keine kritischen Daten in der Dropbox liegen gehabt. Nutze es hauptsächlich um Text Dateien mit Notizen, Bilder, Icons, Scripte, etc. in der cloud zu lagen, so dass ich von jedem Rechner/Server aus schnell ran komme.

Dem Sicherheitsproblem habe ich mich nun endlich mal angenommen. Da ich aber keine Lust hatte, meine komplette Dropbox nochmal zu verschlüsseln und das Webinterface somit unbrauchbar zu machen, bin ich einfach hingegangen und habe mir ein kleines TrueCrypt Volume in der Dropbox erstellt. Darin kann ich nun fröhlich auch kritische Daten lagen und selbst wenn jemand aus irgendeinem Grund Zugang zur Dropbox erhält (die Daten liegen ja auch auf jedem Rechner rum), hat er nur die unwichtigen und unkritischen Daten. Das TrueCrypt Volume ist mit einem extrem starken Passwort und 2 Verschlüsselungs-Algorithmen encrypted, das sollte also erstmal sicher sein.

Das Ganze ist eigentlich recht simpel. Man muss nur eines beachten: TrueCrypt darf den timestamp der Volume File nicht akutalisieren wenn man eine Datei in der Volume ändert. Denn sonst synchronisiert die Dropbox mit jeder Datei, die man in der Volume ändert, die komplette Volume und das sind bei mir im Moment 200 MB.
Aus diesem Grund in TrueCrypt auf Settings > Preferences > Security die Option “Preserve modification timestamp of file containers” deaktivieren. Damit synchronisiert Dropbox nur noch die Teile, die sich wirklich geändert haben.

read more
2
Aug
2011

Aloha ihr da draußen :)

Ich dachte, ich gönne euch mal wieder einen etwas längeren Blogeintrag, damit ihr etwas zum Lesen habt. Das Internet bietet ja sonst keinen interessanten Lesestoff ;)

Ich habe vor einiger Zeit angefangen ein ArchLinux Tutorial zu schreiben, welches sich mit der Distribution, der Installation usw. bis hin zum “perfekten” Desktop befasst. Dabei versuche ich alle Problemchen abzudecken, die für gewöhnlich auftreten können, best practices zu zeigen und demonstrieren wie man eine Linux Distribution auf einem Desktop ausreizen kann.
Leider ist das recht viel Arbeit und ich bin bereits in der Vorbereitungsphase auf über 8 Tutorial-Teile gekommen. Also werden daraus mindestens 8 Blogeinträge. Ich werde aber erst mit der Veröffentlichung anfangen, sobald ich mit Teil 7 fertig bin, da es keinen Sinn macht, wenn ich Teil 1-4 veröffentliche und ihr dann ein halbes Jahr auf Teil 5 warten müsst. Das möchte ja niemand. Wenn jemand Interesse daran hat, mir dabei zu helfen (als Gast-Autor z.B.) darf er/sie/es sich gerne bei mir melden ;)

Apropos Arch Linux, ich suche schon seit ein paar Tagen ein Stück Software, mit der ich von der Desktop-Oberfläche (gnome) aus  Blog-Einträge verfassen kann und diese direkt an meine WordPress-Installation senden kann. Es gibt zwar eine Hand voll Anwendungen, die alle einen sehr guten  Eindruck machen, leider habe ich bisher keine gefunden, die Proxies unterstützt bzw. bei denen ich nicht herausgefunden habe, wie ich einen Proxy konfigurieren kann. Das ist etwas schade … Hat jemand einen Vorschlag?

Außerdem sollte ich wohl auch mal was zu Google Plus sagen. Ich muss ehrlich gestehen, dass das Social Network bei mir Twitter ersetzt hat. Die Anzahl der Mitglieder des Netzwerks ist zwar noch recht überschaubar, aber Twitter bietet mir keine Features, die ich in G+ nicht habe. Ähnlich geht es mir mit Facebook, das im Allgemeinen und der Chat im Besonderen z.Z. dermaßen verbuggt ist, dass  ich meinen FB Account am liebsten löschen würde.  Leider verwende ich Facebook als primäre Kommunikationsplatform für meinen Freundeskreis und aus diesem sind bisher nur ein oder zwei Menschen überhaupt bei Google Plus zu finden, daher macht das im Moment noch nicht so viel Sinn. Ich hoffe das ändert sich noch. Abwarten. Aber selbst in der Beta läuft G+ deutlich stabiler als FB je war. Ich bin von dem Projekt positiv beeindruckt und hoffe, dass die Community in dem Maße weiter wächst.

Wer übrigens Einladungen haben möchte, darf sich gerne bei mir melden. Am besten direkt mit einer E-Mailadresse zu der schon ein Google-Account existiert.

 

over and out

read more
1
Aug
2011

Hier wie versprochen mein erster Eindruck zu Snow Leopard.

Negativ ist mir direkt erstmal aufgefallen, dass das System micht nach sämtlichen pers. Informationen fragt und diese dann fröhlich an  Apple überträgt. Was soll der Mist? Na ja, habe mir ein paar Daten ausgedacht, System läuft nun.

Das komplette Look and Feel ist ganz nett, aber bietet recht wenig Individualisierungsmöglichkeiten. Schade. Hier fehlen mir insb. Optionen wie “Fenster-Fokus folgt Maus” oder Ähnliches. Vielleicht habe ich es aber auch einfach noch nicht gefunden. Das ist ja nicht ausgeschlossen.

Was mich direkt gefreut hat: zsh ist vorinstalliert :) Generell wirkt das System sehr robust, konsistent und es macht tatsächlich auch Spaß damit zu arbeiten.

Was mich jetzt wirklich ärgert, ist die mangelnde Hardware-Komptabilität, die sich mit jedem Update  zudem noch einfach verändert … Was wohl der primäre Grund ist, warum ich bei Linux bleiben werde …

read more