Author Archives: alex

An Instant Messenger Emoticon Theme Generator

For the regular readers of this blog this post is a little different, because it’s in English instead of German as usual. The reason is, this is an announcement of a tool I put together over the last months, which I consider interesting not only for German speaking users. So I hereby announce a smiley theme generator software for different instant messenger programs, but let’s start at the beginning.

In 2007 I took the smiley graphic files from a local internet community1 to build my own emoticon theme for the Jabber client Psi. This was basically putting together a description file and installing it and I described and announced it in this blog.2 Last year I started using Perl Template Toolkit 2 for building my personal homepage and thought this would be a great tool to build this smiley stuff in a more automatic way and for more than one instant messenger. Although I barely remember, it seems I also wrote about it in this blog.3

This year now I made some new friends with different messengers and started reworking the whole thing, especially to add some more messengers and to be able to use it for more graphic themes and here it is: a possibility to put your smiley graphics in a folder, write one description file for the mapping from smiley codes in the text (like :-) or :’-( and so on) to your graphic files, run the build script and have ready to install smiley theme packages for a bunch of different instant messenger programs. Let me quote the README file:

The purpose of this software is to create installable smiley iconset files for various instant messenger programs with a templating mechanism (using Perl Template Toolkit). This means smiley theme authors only have to provide the graphics and write one simple template file with the definitions which texts are related to which graphics, e.g. ‘:-)’ to the smiling graphics file. Add a little metadata, call the build script and you’re done. With help of the templates the definition file formats of the different messengers are created and a packing script does the rest of the magic. You don’t have to worry about a dozen different formats for definition files and packing conventions.

To use this software you need Subversion to check out the sources, an operating system running Perl and the Perl Template Toolkit 2, you must be able to execute shell scripts like from Bash or Zsh and have tar, gzip and zip ready. So every Unix or Linux like OS should work, on Microsoft Windows you could try your luck with cygwin, however I didn’t test this because I run Debian/GNU Linux. ;-)

Check out the tool with your preferred subversion client from https://www.antiblau.de/svn/penguineering_tools/trunk/im_emoticons/ and see the file README inside which contains all the necessary descriptions how to use the software. It is licensed under a BSD style license so you are free to use and change it to your needs. We also have a wiki page for it in our bugtracking system. You can also view the sourcecode and create tickets there.

For demonstrating the power of the templating approach I took the very nice (and free) smileys from simplesmileys.org and let the software build smiley themes for all the already supported instant messengers. You can download pre-build theme files for Adium, Kopete, Miranda, Pidgin and Psi from tools.penguineering.com.

Of course these five messengers are not all. If you have a template file for another one, don’t hesitate to contact me. Also if you have free smiley graphics and build a description file we could integrate in the subversion repository, I would be delighted if you just send it in.

In the hope this is useful for anybody else, have fun with it! :-)

  1. WebUni []
  2. WebUni Iconset für Psi []
  3. Mit Kanonen auf Smileys []

Seltsame Suchbegriffe

Im Gegensatz zu anderen Blogs stolpern die meisten Leute hier mit eher gewöhnlichen Suchbegriffen rein. Da wollen die Leute wissen, bei man bei Subversion zu einer früheren Revision zurückkehrt, mit Perl Passwörter generiert oder haben irgendein Problem mit Grub 2 unter Debian. Die meisten Besucher dieses Blogs scheinen tatsächlich über Google her zu finden. Die wenigsten hinterlassen Kommentare, aber wir bilden uns einfach ein, unsere Beiträge wären hilfreich. ;-)

Manchmal sind aber auch Perlen unter den Suchanfragen, wo ich mir ein Grinsen nicht verkneifen kann. Die schönsten aus dem vergangenen Jahr sind nun hier gesammelt und kommentiert, viel Vergnügen.

13.5.2009 – 10:38 Yahoo: programmieren pferd unicode

Ich will nicht sagen, dass mich täglich beschäftigt, was derjenige finden wollte, aber jedesmal wenn ich den Entwurf für den Beitrag aufgemacht habe, rollte so ein WTF vor meinem inneren Auge vorbei. Ich versteh’s nicht. Was macht das Pferd in dieser Suchanfrage?

27.7.2009 – 20:44: welches dev hat lvm unter eisfair

Oh das ist leicht zu beantworten, nein warte … ganz so leicht dann doch nicht. Bei LVM unterscheidet man ja die Physical Volumes von den Volume Groups und von den Logical Volumes. Da gibt es also mindestens zwei in Frage kommende Devices, die von der Partition, die nachher als Physical Volume in die Volume Group gehängt wird und jedes Logical Volume bekommt auch noch mal ein Device. Wenn das so ist, verweigere ich die Aussage.

30.07.2009 – 14:24 Google: Beheben ließ sich das in meiner Debian-Installation dann einfach durch die Installation der Pakete firmware-ipw2×00 und firmware-linux.

Das kuriose an dieser Suchanfrage: da schreibt jemand einen ganzen Satz, der exakt so lautet, wie der, den ich in meinem Beitrag geschrieben habe. Also ich such mich nicht selbst auf diese Weise. Wieso tut man sowas?

02.08.2009 – 20:24 Google: eisfair web konfiguration

Vielleicht hätte ich den Beitrag wie Andreas Your Questions Answered nennen sollen. Um auf die Frage zurückzukommen: ein Webinterface für die Konfiguration gibt es bei eisfair nicht und es ist auch kurzfristig keins geplant. Wenn es eins geben sollte, müsste das kompatibel zur Konfiguration auf der Konsole1 sein, was erstmal grundlegende Umbauten auf noch tieferen Ebenen erfordern würde. Kurz und gut: gibt’s nicht und hat im eisfair-Team auch keine Priorität.

11.11.2009 – 09:10 Google: C Platte wird beim Hochfahren immer auf Resistenz geprüft warum?

Resistenz? Wogegen? Viren etwa? Das kann einem natürlich leicht passieren, wenn man ein Betriebssystem benutzt, dass seine Partitionen mit C, D, E usw. bezeichnet. *fg*

05.12.2009 – 22:15 Google: warum ist ein multimessenger mehr hackbar als die normalen?

Mehr Angriffsvektoren, weil mehr Protokolle mit mehr potentiellen Lücken? Aber wer da Bedenken hat: es gibt ja zum Glück auch reine Jabber-Clients. :D

09.03.2010 – 20:31 T-Online: was ist wenn bei gmx ich keine neuen nachrichte sehen kann?

Du hast keine Freunde! :P

23.04.2010 – 06:31 Google: bin ich online zu sehen wenn ich mich bei gmx einlogge?

Im Prinzip ja. ;)

17.05.2010 – 14:51 Google: www auweia keys

Je länger ich darüber nachdenke, was hier wohl gesucht wurde, desto eher kommt mir ein gewisses Pferd in den Sinn …

07.06.2010 – 01:03 Google: wordpress passwort generator knacken

Da, da habt Ihr’s. Die Leute suchen danach, wie sie die Keys knacken können, die von dem WordPress Passwort Generator ausgespuckt werden. Lieber selbst generieren, beispielsweise unter Debian/Ubuntu mit dem Programmpaket pwgen oder eben noch besser selbst schreiben so ein Programm.

25.06.2010 – 08:00 Google: utf-8 funktioniert nicht

Tut es wohl!!1elf! :P

14.07.2010 – 22:53 Google: gegenteil generator

Den hätte ich auch gern. Aktuell bitte um mir das Gegenteil von Müdigkeit zu generieren, oder das Gegenteil von Dauerhitze oder das Gegenteil von …

  1. die übrigens kinderleicht ist, wenn man mal über seinen Klickibuntischatten springt []

Text vs. Binary

Einer der täglichen Stolpersteine auf dem Weg zum C-Guru, hat mich gerade eine Stunde Lebenszeit gekostet. Vergleiche:

fopen( "header.bin", "wb" )

mit

fopen( "header.bin", "w" )

und dann noch den Auszug aus C in a Nutshell

The mode string may also include b as the second or third letter (that is, "ab+" for example is the same as "a+b"), which indicates a binary file, as opposed to a text file. The exact significance of this distinction depends on the given system.

»The given system« in diesem Fall Microsoft Visual C++® 6.0 unter Windows XP. Und was macht das, wenn man das b weg lässt? Es fügt vor jedes 0x0A, das man mit fwrite() in eine Datei schreibt, selbständig ein 0x0D ein, damit aus dem LF auch brav ein CRLF wird. Und ich wunder mich, warum meine Dateien größer sind, als sie sein sollten …

HowTo: Syntaxhighlighting für Graphviz in Notepad++

Für die 8 Stunden am Tag, wo ich gezwungen bin, Windows zu benutzen, ist Notepad++ der Editor meiner Wahl. Eingebaut ist Syntaxhighlighting für eine ganze Reihe von Programmiersprachen, zum Teil auch recht exotische Sachen, aber natürlich nicht alles, was irgendwie möglich ist. Ein derartiger Fall ist Graphviz, die bekannte Software zur Visualisierung von Graphen. Ich benutze das hier um Zustandsmaschinen zu visualisieren. Die Dateien schreibe ich manuell, was zwar bisschen Arbeit macht, aber Änderungen sind doch deutlich schneller einzupflegen als wenn ich das beispielsweise in Inkscape zeichnen würde.

Vor ein paar Wochen hatte ich mal unmotiviert im Netz recherchiert, wie es mit Syntaxhighlighting für Graphviz in Notepad++ aussieht, kurz und gut: schlecht. Allerdings hat der Editor eine interessante Funktion, mit der man sich schnell selbst ein rudimentäres Syntaxhighlighting zusammenklicken kann. Einfach im Menü auf Ansicht und dann Benutzerdefinierte Sprache …1 klicken. Da öffnet sich ein Fenster, wo man dann erstmal auf »Neue erstellen« klickt. Für die Einstellungen, die ich jetzt für Graphviz gemacht habe, hab ich mal ein paar Screenshots angelegt:

Auf dem vierten Screenshot sieht man bereits das Endergebnis. So ganz perfekt ist es nicht. Folding funktioniert nicht und die Marker für Kommentarblöcke müssen zwingend von Leerzeichen umschlossen sein, damit der Block erkannt wird. Ansonsten bin ich ganz zufrieden, besser als völlig ohne ist es allemal.

Wer sich das nicht selbst zusammenklicken will, kann auch die Datei userDefineLang.xml von hier laden. In dieser speichert Notepad++ diese Einstellungen nämlich und zwar unter Windows XP im Pfad C:\Dokumente und Einstellungen\adahl\Anwendungsdaten\Notepad++2

Achtung: Wenn Ihr selbst schon eigene Einstellungen für andere Sprachen definiert habt, nicht einfach überschreiben, damit die alten Sachen nicht verloren geben! Aber die Datei ist XML, da sollte man sich leicht den passenden Teil rausziehen können.

  1. bzw. View und dann User Define Dialog… []
  2. Pfad natürlich an lokale Gegebenheiten anpassen! []

WordPress Key-Generator reloaded

Das Gegenteil von »gut« ist »gut gemeint«. Im konkreten Fall hätte ich nicht gedacht, dass die Jungs von WordPress immer noch den Service anbieten, mit dem sich die notwendigen Keys generieren lassen kann, die man in die Config eintragen muss.1

Ich hatte das schon beim Upgrade auf Version 2.6 im Beitrag »Keys für Upgrade auf WordPress 2.6« thematisiert. Anscheinend hat das niemanden interessiert.

Egal wie groß das Vertrauen zu Anbieter XY sein mag. Es ist sicherheitstechnisch betrachtet äußerst fragwürdig, sich seine Schlüssel von jemand anderem generieren zu lassen. Selbst drei mal einen Apfel auf die Tastatur fallen lassen, ist da noch sicherer. Also Leute: Hirn einschalten, Schlüssel selbst generieren. Möglichkeiten das auf seinem eigenen Rechner zu tun, gibt es wie Sand am Meer, da braucht man keine Website von wordpress.org dafür!

  1. siehe Neue Schlüssel ab WordPress 3.0 für die Konfiguration []

Gebrauchte Daten kaufen

In den letzten Wochen habe ich für dienstliche Zwecke vier alte Speicherkarten vom Typ MMC gebraucht bei der elektronischen Bucht erstanden. Auf allen vieren waren noch Daten drauf. Sicher, die waren frisch formatiert, aber alle nur im Schnelldurchlauf. Neues Dateisystem anlegen und fertig. Kein einziger der Verkäufer hielt es für notwendig, wirklich alle Daten zu löschen.

Ich bin nun kein Forensiker und meine Zeit für solchen Spielkram ist begrenzt. Aber da ich den coolen Hex-Editor Bless sowieso installiert und Images der Karten angelegt hatte, um Partitionstabellen und Volume Boot Records zu untersuchen, hab ich natürlich noch kurz weiter über die Dumps geschaut. Beim wirklich nur flüchtigen drüber Gucken habe ich Kartendaten für ein Navigationsgerät, Musikdateien im mp3-Format und Tabellen mit Adressen von Ärzten1 gefunden. Gerade bei letzterem handelt es sich um sensible Daten, die man vermutlich nicht wissentlich weitergegeben hat. Da rollen sich mir ja dann schon die Fußnägel hoch.

Damit die ganze Aufregung hier nicht umsonst ist, noch ein kleiner Tipp, wie man hier zwei Fliegen mit einer Klappe schlagen kann. Man benutzt einfach das Tool badblocks unter Linux im Schreibmodus. Vorsicht ist angebracht, mit Datenträgern, die man noch braucht, wenn aber wirklich alles gelöscht werden kann, dann hier der Auszug aus der manpage mit der passenden Option:

-w Use write-mode test. With this option, badblocks scans for bad blocks by writing some patterns (0xaa, 0x55, 0xff, 0x00) on every block of the device, reading every block and comparing the contents.

Das Programm schreibt also bestimmte Muster auf die Karte und liest diese dann nochmal zurück und zwar für jeden einzelnen Block. Wenn Fehler dabei auftreten, werden die gemeldet und man kann den Datenträger wegwerfen. Wenn keine Fehler auftreten, kann man die Karte ruhigen Gewissens verkaufen und sicher sein, dass ausschließlich Nullen drauf stehen.

Ganz wichtig: damit das funktioniert, führt man badblocks mit root-Rechten aus und lässt es auf das ganze Device los. Da muss man vorher das passende rausfinden und 100% (und kein µ weniger) sicher sein, dass man das richtige erwischt hat. Wenn noch ein Filesystem auf der Karte ist, einfach mounten und mit mount nach dem Device gucken. Oder mit dmesg anzeigen lassen, wie die Karte beim Anstecken erkannt wurde. Oder aus /proc/partitions das Device mit der passenden Größe ablesen. Oder am besten alle Möglichkeiten zusammen. Der fertige Befehl in meinem Fall hier und heute:

badblocks -sw /dev/sde

Falls man nun gerade kein Linux zur Hand hat, bitte in Windows beim Formatieren unbedingt vermeiden die »Schnellformatierung« zu aktivieren. Oder am besten nach der Formatierung nochmal das Programm h2testw der c’t drüber laufen und Daten schreiben lassen, damit wenigstens die Adressdaten der Homöopathen verschwinden. Nicht dass die am Ende noch wer aufsucht, oder vermöbelt oder potenziert oder so …

Ach ja und abgesehen vom Verkaufen von alten Datenträgern: die erwähnten Programme sollte man auch auf jeden frisch neu erworbenen Datenträger loslassen, um sicherzugehen, dass der auch funktioniert. Ist mir nämlich in den letzten Wochen mit einer neuen Festplatte und einem neuen USB-Stick passiert, dass die gleich vom Start weg defekt waren und umgetauscht werden mussten.

  1. und Homöopathen, man beachte die Unterscheidung … ;) []

Zurück im Jahr 2000 mit fli4l

Ich befinde mich gerade auf den Chemnitzer Linux-Tagen 2010 am Stand von eisfair und fli4l. Unser überaus schicker Standrouter1 ist ein sogenanntes WRAP Board, also schon bisschen abgehangen. Der Hersteller hat hier leider keine Pufferbatterie für die RTC vorgesehen, so dass die Uhr nach jedem Stromausfall am 1.1.2000 um 0:00 (UTC) losläuft.

Nun läuft selbstverständlich fli4l (in der aktuellen Version 3.4.0) auf der Kiste und dort gibt es das Paket (bei fli4l traditionell opt genannt) chrony, was eben chrony bereitstellt, einen kleinen Dienst um die Zeit über NTP abzugleichen. Den Sprung von 2000 auf 2010 möchte der aber nicht automatisch abgleichen, so dass hier ein manueller Eingriff erforderlich ist. Die nötige Prozedur ist leider nicht ganz selbsterklärend, daher hier das kurze HowTo, wie man dort vorgehen kann.

Schritt 1: Den chronyd mit den richtigen Optionen neu starten. Per default wird dort bloß -r gesetzt. Die Option -s erlaubt auch das Setzen der RTC über chrony. Also erstmal per ssh einloggen. Dann:

killall chronyd
chronyd -r -s

Schritt 2: Beim chronyd einloggen. Dazu gibt man auf der Shell einfach chronyc ein. Per default darf man dann erstmal fast nichts, aber man kann das vom Paketmaintainer hinterlegte Passwort eingeben, um mehr Rechte zu erlangen. Bitte wie folgt eingeben:

chronyc
password dummy

Schritt 3: Die Zeit setzen. Dazu erlaubt man sich das zunächst mal mit dem Befehl manual, dann setzt man die Zeit und dann sagt man ihm noch, dass er das auch der RTC verklickern soll. Beim Setzen der Zeit reicht es das auf eine Minute genau zu machen, den Rest erledigt chrony später ganz normal per NTP.

manual on
settime 2010-03-14 08:55

Bei der Eingabe von settime springt die von chronyd erzeugte CPU-Last auf über 90%. Nach einem weiteren Neustart von chronyd, ist die Zeit gesetzt, ich kann nicht sagen warum, aber der pragmatische Ansatz funktioniert hier. Also:

killall chronyd
chronyd -r -s

Jetzt passt schonmal die Systemzeit, ein rtcdata im chronyc zeigt aber noch die alte Zeit der RTC. Also führt man hier nochmal ein trimrtc aus. Die Änderung braucht ein paar Minuten um übernommen zu werden, das geschieht aber dann automatisch.

So, und jetzt wo die Zeit vom Messerouter richtig eingestellt ist, freuen wir uns auf den zweiten Tag hier. Gestern war es schon gut besucht und es waren viele freundliche Interessenten am Stand. Der Sonntag Morgen läuft etwas ruhiger an, da könnte man eigentlich nochmal einen Kaffee trinken …

Update: die so gesetzte Uhrzeit übersteht auch einen Soft Reboot. D.h. wenn man das WRAP hinter eine USV hängt, braucht man die ganze Prozedur nur einmal auszuführen! ;-)

  1. wo alle Besucher nur fragen, wo man die Hardware kaufen kann []

HowTo: Auf Kanal 13 funken mit Debian

Unter uns sind neue Nachbarn eingezogen. Im Gegensatz zu den alten Nachbarn, verfügen diese über WLAN. Damit sind sie nicht die einzigen, im Funkspektrum tummeln sich hier ständig mindestens ein halbes Dutzend Funkzellen – kennt man vermutlich heutzutage aus jedem deutschen Mietshaus.

Grund genug für meinen Mitbewohner, den Kanal unseres WLAN-Access-Points mal in eine bisher wenig genutzte Region zu verschieben: Kanal 13. Nachtigall ick hör Dir trapsen, war da nicht mal was, mit Kanälen, die in den USA verboten sind, in Europa aber nicht? Muss wohl so sein, und da Debian ja fürsorglich ist, ist die Einstellung für USA default – obwohl, wenn man sich die Lösung ansieht, kann man Debian vermutlich nicht mal die Schuld in die Schuhe schieben.

Was also, wenn das Notebook jetzt nur Netze bis Kanal 11 anzeigt? Dann legt man unter Debian eine Datei in /etc/modprobe.d/ an. Wie die heißt, ist nicht so wichtig, bei mir heißt die wlan_EU.conf, auf .conf sollte sie wohl enden. Drin steht bei mir folgendes:

options cfg80211 ieee80211_regdom=EU

Eine Zeile, reicht aus. Die übergibt dem Kernelmodul cfg80211 beim Laden die passende Option und dann sind alle Kanäle sichtbar. An einigen Stellen im Weltnetz steht das “EU” noch in Anführungszeichen, also wenn’s ohne nicht klappt, dann vielleicht mit.

Xen: Debian Squeeze DomU in Debian Lenny Dom0

Aus der Reihe »Sonntag nachmittag für Frustrationstolerante« heute Folge 137 aus der Reihe »Virtualisierte Maschinen und freie Betriebssysteme«. Folgende Ausgangssituation: Server mit installiertem Debian Lenny als Xen Host (Dom0), es laufen diverse virtuelle Maschinen (DomU), unter anderem welche mit Debian Etch, eisfair-1, eisfair-2 und eben auch eine mit Debian Squeeze, dem aktuellen Testing-Zweig der Debian-Distribution. Bis auf die DomU mit eisfair-1 liefen alle virtuellen Maschinen bis dato mit dem Kernel 2.6.26-2-xen-686, der auch auf dem Host zum Einsatz kommt.

Vor einigen Tagen nun gab es in Debian Squeeze ein Update von udev 149 auf 150. Das Paket verweigerte dann aber die Installation mit dem Hinweis, dass der verwendete Kernel zu alt sei. Das war durchaus nervig, weil dadurch auch die Updates anderer Pakete nicht mehr eingespielt wurden, also hieß es: Kernel-Update.

Einfach mal schnell Kernel-Update gestaltete sich dann leider nicht so einfach. Debian hat Xen quasi aus der Distribution rausgeworfen bzw. bietet keine dedizierten Xen-Kernel mehr an. Gut, das ließ sich noch relativ problemlos lösen. Die Wahl fiel auf linux-image-2.6.30-bpo.2-686-bigmem von backports.org, denn dort heißt es:

This kernel also runs on a Xen hypervisor. It supports only unpriviledged (domU) operation.

Also fix den Kernel in der Dom0 installiert. DomU runtergefahren, Config angepasst, Kernelmodule ins Dateisystem der DomU kopiert, DomU gestartet und dann – nichts. Beim Hochfahren blieb die virtuelle Maschine einfach hängen, und zwar schon so früh im Bootprozess, dass ich keine Ahnung hatte, woran das lag.

Der nächste Schritt bestand dann darin eine weitere VM zum Testen aufzusetzen und die Suchmaschine der Wahl zu befragen. Ich weiß nicht, wo ich überall gelesen habe und was ich alles probiert habe. Am Ende funktionierte der Kernel, es waren nur Anpassungen an der Xen-Config notwendig, daher erstmal hier die Config und dann noch ein paar Kommentare dazu:

kernel  = '/boot/vmlinuz-2.6.30-bpo.2-686-bigmem'
ramdisk = '/boot/initrd.img-2.6.30-bpo.2-686-bigmem'
memory  = '128'
root    = '/dev/xvda1 ro'
disk    = [ 'phy:heaven/falbala_root,xvda1,w',
            'phy:heaven/falbala_swap,xvda2,w' ]
name    = 'falbala'
vif  = [ 'mac=00:16:3e:7d:4b:a2, bridge=eth0' ]
extra = 'xencons=hvc0 console=hvc0'
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

Wie man sieht, sind die Block-Devices, die in die VM gereicht werden, LVM Logical Volumes. Hier musste ich die Durchgereichten von /dev/sda* auf /dev/xvda* wechseln. Das hat definitiv mit dem verwendeten Kernel zu tun, der die Blockdevices nur noch dort ähm findet, oder so. Ich denke das war die entscheidende Änderung. In der mit »extra« beginnenden Zeile, habe ich die Angaben für die Xen-Konsole noch angepasst, irgendwo hatte ich gelesen, dass das jetzt hvc0 und nicht mehr xvc0 heißen muss. Die entsprechenden Änderungen an /etc/fstab und /etc/inittab innerhalb der virtuellen Maschine mussten natürlich auch noch vorgenommen werden, aber danach lief die DomU wieder und auch das Update von udev ließ sich problemlos einspielen. :-)

Understanding the Perl/UTF-8 Madness

Ich habe gerade eine halbe Stunde damit verbracht, mal wieder diesem grandiosen xkcd-Comic gerecht zu werden. Los ging das mit einem Link, den ich bei qbi im Blog gefunden habe: Surviving the Perl/UTF-8 Madness. Der Name des Autors kam mir bekannt vor, ich glaube Tux hat ab und zu mal Links von dessen privatem Blog fallen lassen. Ich war also gespannt, was da kommt und wurde dann leider enttäuscht.

Worum geht’s? Es geht um Perl und wie Perl mit Encodings umgeht. Seit Perl 5.8 gibt es da ein sinnvolles Vorgehen, das sich aber anscheinend noch nicht rumgesprochen hat. Nachlesen kann man das sehr gut zusammengefasst im Tutorial perlunitut. Ich fasse das hier nochmal auf deutsch zusammen, weil es da anscheinend immer noch Missverständnisse gibt.

Wichtig zu wissen: Perl unterscheidet text/character strings von byte/binary strings (und das wirkt sich auf bestimmte Befehle wie print, uc, length usw. aus). Es wird häufig behauptet, die text strings wären UTF-8. Das mag so sein, ist aber völlig irrelevant und geht am eigentlichen Problem vorbei. Wie Perl diese text strings intern darstellt, kann einem total egal sein. Wichtiger ist, wie man damit umgeht und das fasst auch perlunitut korrekt zusammen:

  1. Receive and decode
  2. Process
  3. Encode and output

D.h. alles, was von außen kommt, egal ob von Nutzereingaben, aus Dateien oder Datenbanken, ist zunächst mal ein binary string. Wenn das Zeichenketten sind, mit denen ich Zeichenkettenoperationen durchführen will, muss ich die als erstes von byte strings in character strings umwandeln. Dazu kann ich binmode setzen, einen encoding Parameter bei open nutzen oder die decode-Funktionen aus dem Module Encoding bemühen, das ist faktisch alles das selbe, Tim Toady halt.

Der zweite Schritt ist klar: process, irgendwie auf den character strings rumackern. Beim dritten Schritt, dem output aus Perl raus dann der umgekehrte Weg: ich wandle meine character strings zurück in byte strings mit dem entsprechenden Encoding meiner Zielplattform, sei es nun STDOUT, ein file oder eine Netzwerkverbindung, egal und ebenfalls egal, ob das iso8859* oder UTF-8 oder sonstwas ist. Wenn man diese drei Schritte im Kopf behält und Worte wie utf-8 flag aus seinem Hirn streicht, kommt man mit Perl und Zeichensätzen klar.

Bisschen aufpassen muss man bei Fremdmodulen, da muss man im Zweifelsfall mal genauer hinsehen, wie die das handhaben. Was man vermeiden sollte: einfach davon ausgehen, dass Perl intern UTF-8 zur Repräsentation von character strings verwendet. Damit wird man über kurz oder lang auf die Nase fallen.

Neben perlunitut gibt es noch weitere gute Quellen zum Nachlesen:

Wenn man tiefer eintauchen will, kann man auch noch perlunicode oder perluniintro lesen, aber das ist dann schon harter Stoff. ;-)