<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lieber Linux &#187; Tipp</title>
	<atom:link href="http://www.lieber-linux.de/category/tip/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lieber-linux.de</link>
	<description>Linux und Open Source Software im Blog</description>
	<lastBuildDate>Thu, 26 Jan 2012 17:58:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>CIFS verzögert Shutdown in Debian</title>
		<link>http://www.lieber-linux.de/2011/12/cifs-verzogert-shutdown-in-debian/</link>
		<comments>http://www.lieber-linux.de/2011/12/cifs-verzogert-shutdown-in-debian/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 22:19:04 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[CIFS]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[Shutdown]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=1040</guid>
		<description><![CDATA[Manche Sachen nerven, aber wenn es nicht allzu nervt, geht man eine Lösung nie an: Wenn man CIFS-Freigaben gemountet hat, sollten diese natürlich beendet (umount) werden, bevor die Netzwerkverbindung abgebaut wird. Dazu kennt Debian verschiedene Kill-Scripte in /etc/rc6.d/ beziehungsweise /etc/rc0.d/. Das Problem an der Stelle ist, dass in den reboot- oder shutdown-Modus per init erst [...]]]></description>
			<content:encoded><![CDATA[<p>Manche Sachen nerven, aber wenn es nicht allzu nervt, geht man eine Lösung nie an: Wenn man <strong>CIFS</strong>-Freigaben gemountet hat, sollten diese natürlich beendet (<em>umount</em>) werden, bevor die Netzwerkverbindung abgebaut wird. Dazu kennt <strong>Debian</strong> verschiedene Kill-Scripte in <em>/etc/rc6.d/</em> beziehungsweise <em>/etc/rc0.d/</em>. Das Problem an der Stelle ist, dass in den <em>reboot-</em> oder <em>shutdown</em>-Modus per <em>init</em> erst gewechselt wird, wenn <strong>KDE</strong> sich fertig abgemeldet hat. Dann ist allerdings auch unter Umständen die per NetworkManager aufgebaute WLAN-Verbindung im Eimer.</p>
<p>Ein Grund mehr, Netzwerk-Verbindungen nicht im Desktop, sondern in <em>/etc</em> abzufackeln &#8211; warum sollte ein gewöhnlicher Nutzer einen Rechner in ein fremdes Netzwerk schleusen dürfen? Viel zu riskant, sagt da der Admin! Auf der anderen Seite nicht ganz so zeitgemäß. Der Trend geht eher zum Zweitrechner, und es gibt wohl mehr Rechner als Root-Accounts auf dieser Welt. Jeder ist also Root, und deshalb darf auch jeder seinen Rechner im Desktop dahin einstöpseln, wovon ihn sowieso nur noch ein beherztes <em>sudo</em> trennt.</p>
<p>Um das nervige Problem zu beenden, habe ich mir heute ein eigenes shutdown-Script geschrieben, welches <em>myshutdown</em> heißt und unter <em>/usr/local/bin</em> liegt. Es <em>umount</em>et also erst alle aktiven <strong>CIFS</strong>-Drives und beendet dann den Rechner per <em>shutdown -h now</em>. Zugegebenermaßen ein sehr krudes Mittel, weil KDE natürlich auch gern sauber beendet werden möchte, aber man kann es leider nicht allen recht machen.</p>
<pre>#!/bin/bash

MNT=`mount | grep "type cifs" | cut -d' ' -f 3`
for mntpoint in $MNT
do
        umount $mntpoint
done

/sbin/shutdown -h now</pre>
<p>Das ganze Script mit <em>chmod a+x,u+s</em> für alle ausführbar machen und wer will, kann das noch in die <em>/etc/sudoers</em> eintragen:</p>
<pre>nudge   ALL=(ALL) NOPASSWD:/usr/local/bin/myshutdown</pre>
<p>Das ganze kann man dann per <em>khotkeys</em> auf das KDE-Standard-Shutdown-Kürzel <em>Strg + Alt + Bild runter</em> mappen. Und schon gehts tierisch schnell ab in den Keller mit dem Rechner. Keine Timeouts beim Abwarten auf ein <strong>CIFS</strong>-Drive ohne Netzwerk mehr &#8211; hier sind 300 Sekunden Timeouts nicht Ungewöhnliches.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2011/12/cifs-verzogert-shutdown-in-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>App vorgestellt: id3v2 zum Editieren von MP3-id3-Tags</title>
		<link>http://www.lieber-linux.de/2011/05/app-vorgestellt-id3v2-zum-editieren-von-mp3-id3-tags/</link>
		<comments>http://www.lieber-linux.de/2011/05/app-vorgestellt-id3v2-zum-editieren-von-mp3-id3-tags/#comments</comments>
		<pubDate>Mon, 23 May 2011 20:57:17 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Musik]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[ID3]]></category>
		<category><![CDATA[MP3]]></category>
		<category><![CDATA[Tags]]></category>
		<category><![CDATA[Tool]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=954</guid>
		<description><![CDATA[Das Mini-Kommandozeilen-Tool id3v2 zur Bearbeitung von id3-Tags in MP3-Dateien ist ein sehr schönes Tool. Es ist ganz easy installiert und angewendet. Zum Beispiel löscht man sowohl alte (v1) wie neue Meta-Daten von MP3-Songs mit -D: $ id3v2 -D MeinSong.mp3 Ganz intuitiv auch die weiteren Optionen zum Setzen von Daten: &#8211;artist (-a), &#8211;song (-t), &#8211;album (-A), [...]]]></description>
			<content:encoded><![CDATA[<p>Das Mini-Kommandozeilen-Tool id3v2 zur Bearbeitung von id3-Tags in MP3-Dateien ist ein sehr schönes Tool. Es ist ganz easy installiert und angewendet. Zum Beispiel löscht man sowohl alte (v1) wie neue Meta-Daten von MP3-Songs mit -D:</p>
<pre>$ id3v2 -D MeinSong.mp3</pre>
<p>Ganz intuitiv auch die weiteren Optionen zum Setzen von Daten: &#8211;artist (-a), &#8211;song (-t), &#8211;album (-A), &#8211;year (-y), &#8211;track (-T):</p>
<pre>$ id3v2 --artist "Chuck Norris Girls" --song "Hell Yeah" MeinSong.mp3</pre>
<p>Und das coolste Feature ist, dass der editierende Aufruf die Tags nicht löscht, sondern nur die spezifizierten Teile ersetzt. Hat man also eine ganze Platte ohne Tags, so kann man schnell mal</p>
<pre>$ id3v2 --artist "Mölkau All Stars" --album "The red album" --year "1994" *.mp3</pre>
<p>benutzen, um seine Sammlung zu korrigieren.</p>
<p>Viel Spaß!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2011/05/app-vorgestellt-id3v2-zum-editieren-von-mp3-id3-tags/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vi: Getter und Setter automatisch generieren</title>
		<link>http://www.lieber-linux.de/2010/12/vi-getter-und-setter-automatisch-generieren/</link>
		<comments>http://www.lieber-linux.de/2010/12/vi-getter-und-setter-automatisch-generieren/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 17:27:21 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Generieren]]></category>
		<category><![CDATA[Getter]]></category>
		<category><![CDATA[Setter]]></category>
		<category><![CDATA[Stub]]></category>
		<category><![CDATA[vi]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=928</guid>
		<description><![CDATA[Ich habe bisher im vi nicht wirklich vermisst, dass Code generiert wird. Aber seit dem ich es habe, finde ich es nur noch cool. Das möchte ich Euch auf jeden Fall vorstellen. Und zwar heißt das tolle Script php_getset.vim. Zur Installation kopiert man es einfach in den Ordner ftplugin im share-Verzeichnis des vim. Das ist [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe bisher im vi nicht wirklich vermisst, dass Code generiert wird.<br />
Aber seit dem ich es habe, finde ich es nur noch cool. <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Das möchte ich Euch auf jeden Fall vorstellen.<br />
<span id="more-928"></span><br />
Und zwar heißt das tolle Script <strong>php_getset.vim</strong>. Zur Installation kopiert man es einfach in den Ordner <em>ftplugin</em> im share-Verzeichnis des vim. Das ist bei mir zur Zeit <em>/usr/share/vim/vim72/ftplugin/</em>. Es generiert in einer <strong>PHP</strong>-Klassendefinition automatisch <strong>Getter</strong> und <strong>Setter</strong>-Funktionen für eine Property (eine Klasseneigenschaft). Zum Beispiel in</p>
<pre>class Test
{
    protected $active;
}
</pre>
<p>möchte eigentlich jeder die beiden Methode <em>isActive()</em> und <em>setActive($active)</em> implementieren &#8211; wohl zu 99% Wahrscheinlichkeit. Mit diesem Skript (Download unter <a href="http://www.vim.org/scripts/script.php?script_id=1707">http://www.vim.org/scripts/script.php?script_id=1707</a>) geht das wie folgt. Man geht auf die Zeile</p>
<pre>    protected $active
</pre>
<p>und gibt in dem vi-Kommando-Modus ein:</p>
<pre>:InsertBothGetterSetter
</pre>
<p>und schon erscheint folgendes Gerüst</p>
<pre>class Test
{
    protected $active;

    /**
    * get active
    */
    function getActive() {
        return $this-&gt;active;
   }

    /**
    * set active
    */
    function setActive($active) {
        $this-&gt;active = $active;
    }
}</pre>
<p>Super-cool. Die Templates für die Funktionen lassen sich in der ~/.vimrc anpassen. Die Variablen %varname% und %funcname% kann man also auch beliebig einbauen, oder die eigene Tab-Weite anpassen. Damit sollte das Plugin soweit fit für den professionellen Einsatz sein und der Tipp- und Doku-Aufwand hat sich merklich verringert. Das ist richtig wohltuend.</p>
<h3>getypte Variablen</h3>
<p>Allerdings benutze ich gerne &#8220;getypte&#8221; Variablennamen, also $bActive oder $sURL. Dann würde die Funktion leider immer <em>getSURL</em>() oder <em>getBActive()</em> heißen &#8211; das ist natürlich nicht das Gelbe vom Ei. Für diesen Fall habe ich das Plugin ein klein wenig angepasst und ihr bekommt es hier <a href="http://www.lieber-linux.de/php_getset.vim">http://www.lieber-linux.de/php_getset.vim</a> zum Download. Es ist kompatibel zum Vorgänger-Script und erkennt camelCased-typisierte Property-Namen mit den Präfixen b (bool), n (int), s (string), f (float), dt (datetime), a (array) und r (ressource). Und das beste  daran ist: Jetzt stehen zwei weitere Template-Variablen bereit: %property% und %vartype%. Dadurch lässt sich das Ganze noch mit einem geschickten Casting versehen:</p>
<pre>let b:phpgetset_getterTemplate =
\ "\n" .
\ "\t/**\n" .
\ "\t* Get %property%.\n" .
\ "\t*\n" .
\ "\t* @return %vartype%\n" .
\ "\t* @author Mathias Lieber\n" .
\ "\t*/\n" .
\ "\tpublic function %funcname%()\n" .
\ "\t{\n" .
\ "\t\treturn (%vartype%) $this-&gt;%varname%;\n" .
\ "\t}\n\n"

let b:phpgetset_setterTemplate =
\ "\n" .
\ "\t/**\n" .
\ "\t* Set %property%.\n" .
\ "\t*\n" .
\ "\t* @param %vartype% $%varname%\n" .
\ "\t* @return bool\n" .
\ "\t* @author Mathias Lieber\n" .
\ "\t*/\n" .
\ "\tpublic function %funcname%($%varname%)\n" .
\ "\t{\n" .
\ "\t\t$this-&gt;%varname% = (%vartype%) $%varname%;\n" .
\ "\t\treturn TRUE;\n" .
\ "\t}\n\n"
</pre>
<p>Am Ende würde das Klassen-Stub also folgendermaßen getypt aussehen:</p>
<pre>class Test
{
    protected $bActive;

    /**
    * Get Active.
    *
    * @return bool
    * @author Mathias Lieber
    */
    public function getActive()
    {
        return (bool) $this-&gt;bActive;
    }

    /**
    * Set Active.
    *
    * @param bool $bActive
    * @return bool
    * @author Mathias Lieber
    */
    public function setActive($bActive)
    {
        $this-&gt;bActive = (bool) $bActive;
        return TRUE;
    }
}
</pre>
<p>Und das finde ich nun richtig gut. Wer mag, benennt noch <em>getActive()</em> in <em>isActive()</em> um. <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/12/vi-getter-und-setter-automatisch-generieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Effektiv Spam bekämpfen mit Wegwerf-Mail-Adressen</title>
		<link>http://www.lieber-linux.de/2010/11/effektiv-spam-bekaempfen-mit-wegwerf-mail-adressen/</link>
		<comments>http://www.lieber-linux.de/2010/11/effektiv-spam-bekaempfen-mit-wegwerf-mail-adressen/#comments</comments>
		<pubDate>Fri, 26 Nov 2010 12:14:44 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[Spam]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=917</guid>
		<description><![CDATA[Man kann seinen Mail-Server leider nicht gegen jeden Spammer schützen, das ist klar. Es werden sich immer wieder neue Lücken für Unrat auftun. Seien es Sicherheitslücken oder auch derart, dass eine Email-Adresse publiziert werden muss. Zum Beispiel, wenn man Ansprechpartner für ein gewisses Thema ist. Deswegen habe ich über eine andere Alternative nachgedacht und dabei [...]]]></description>
			<content:encoded><![CDATA[<p>Man kann seinen Mail-Server leider nicht gegen jeden Spammer schützen, das ist klar. Es werden sich immer wieder neue Lücken für Unrat auftun. Seien es Sicherheitslücken oder auch derart, dass eine Email-Adresse publiziert werden muss. Zum Beispiel, wenn man Ansprechpartner für ein gewisses Thema ist. Deswegen habe ich über eine andere Alternative nachgedacht und dabei sind mir Einmal-Mail-Adressen in den Sinn gekommen. Die Idee dahinter: Email-Adressen, die automatisch ablaufen.<br />
<span id="more-917"></span></p>
<p>Dazu ist natürlich eine ganze Reihe von Infrastruktur notwendig. Deswegen eignen sich solche Spielchen nur, wenn man einen eigenen Mailserver betreibt, an dessen Regelwerk man auch noch ungefragt herumschrauben darf. Da ich Herr meines eigenen Postfix bin, kann ich mich hier vollstens austoben. Das heißt, obwohl ich hier nur die Idee vorstellen möchte, kann es sein, dass ich einige Postfix-Spezifika berühre. Man möge es mir verzeihen.</p>
<h3>Das Konzept</h3>
<p>Zunächst war die Idee eine andere: Man möchte wissen, welche schlampigen Institutionen die eigenen Daten weiterverkaufen. Man gibt einem Shop oder einer Webseite daher nicht die eigentliche private Mail-Adresse, sondern einen Alias, der nur für diese Webseite bestimmt ist. Zumeist werden diese Aliase in einem LDAP oder in der Datei /etc/aliases angelegt. Zum Beispiel legt man sich im eigenen LDAP eine Reihe von kryptischen Email-Adressen zu, die etwa ixfklhs7@meine-domain.de heißen. Trifft nun nach einer gewissen Zeit Spam an diese exklusiv vergebene Email-Adresse ein, so kann man a) den Betreiber auffordern, die Weitergabe abzustellen (Abmahnung etc.), oder auch b) ganz einfach relaxen und diesen Alias streichen.</p>
<p>Vorteil dieser Lösung ist: Sie macht nur mäßig Aufwand und ist relativ leicht zu adminstrieren.</p>
<p>Nachteile sind: Die Alias-Email-Adresse gilt für immer. Habe ich viele Websites, auf denen ich gelegentlich shoppe, so muss ich irgendwann dringend aufräumen (OK, solange ich nicht viel Spam auf diese Aliase erhalte, kann ich sie aktiviert lassen).</p>
<h3>Die Zeit-Komponente</h3>
<p>Weiter darüber nachgedacht, könnte man sich das Leben noch einfacher gestalten und die Alias-Email-Adresse automatisch löschen lassen. Man vergibt quasi ein Ablaufdatum an eine Email-Adresse. Damit ist eine Email-Adresse eine Art temporäres Kommunikations-Token. Nehmen wir mal an, man definiert ein Token für 3 Monate als gültig. Wer innerhalb dieser 3 Monate auf meine Email antwortet oder selbst eine Email verfasst, der kommt durch. Danach wird die Email als nicht-existent abgewiesen (&#8220;Local recipient unknown&#8221; etc.)</p>
<p>Der Vorteil: Ich muss mich nicht mehr bemühen, alte Alias zu löschen.</p>
<p>Der Nachteil: Ich muss mich um ständig neue Aliase kümmern.</p>
<h3>Die Praxis</h3>
<p>Egal, ob es sich um den ersten oder um den zweiten Ansatz handelt: Sicherlich ist alles organisatorisch zu lösen, schöner wäre doch aber eine transparente Lösung. Diese würde uns die Nachteile jeder Lösung teilweise wettmachen. Ich stelle mir das so vor:</p>
<p>1. Meinem Mail-Client gebe ich ein Häkchen mit &#8220;individuelle Email erzeugen&#8221;. Er schaut also ins LDAP und vergibt eine neue EMail-Adresse, in dem er gleich ein neues, temporäres Benutzer-Objekt anlegt. Dort wird auch das Ablaufdatum hinterlegt. Als Maildrop-Attribut wird meine richtige Adresse hinterlegt. Ich könnte dann noch die Domäne des Shops hinterlegen, um a) zu wissen, wofür ich das angelegt habe, und b) um den Empfang später auf diese Domäne einzuschränken.</p>
<p>2. Es wird nun die temporäre Email-Adresse zur Erzeugung der Email verwendet.</p>
<p>2. Postfix versendet diese Email nichts-wissend.</p>
<p>3. Ein mir unbekannter Absender schreibt diese Email an. Nun kann ich die Virtual Lookups im LDAP so gestalten, dass ein Suchmuster verwendet wird, was nur nicht-abgelaufene Aliase heraussucht. Dazu muss ich das LDAP-Query des Postfix entsprechend mit zwei oder mehr Suchparametern ausstatten:</p>
<pre>(&amp;(mail=%s)(dtCreated&gt;=20101012000000+0200))</pre>
<p>Das Datum muss also dynamisch übergeben werden. Sollte das technisch schwierig werden, bietet es sich vielleicht an, per Cronjob täglich einmal abgelaufene Aliase aus dem LDAP zu streichen oder ein bAktiv-Flag auf FALSE zu setzen. Dann kann auch ein statisches Suchmuster in Postfix angegeben werden. Kombinierbar wäre das Vorgehen ebenso mit einem Filter, der die Absender-Domäne im LDAP-Objekt mit prüft. Das beugt der Absenderfälschung zwar wenig vor, aber es gibt eine Menge Domains und bis die passende gefunden ist, sollte der Spammer auf eine der bekannten RBL-Listen auftauchen.</p>
<p>4. Wenn die Email abgelaufen ist, so wird sie nicht gefunden und damit die Mail nicht zugestellt. Das Postfach bleibt leer.</p>
<p>Alternativ zu diesem Vorgehen könnte der MTA-Client ein Loopup im LDAP machen. Findet er dort einen Eintrag für die Ziel-Email im Adressbuch (also ein Bekannter), wird die Email nicht umgeschrieben. Ist kein Eintrag vorhanden, wird transparent eine temporäre Email-Adresse verwendet. Das setzt allerdings gute Pflege des Adressbuchs voraus.</p>
<h3>Fazit</h3>
<p>Soviel zu meiner Idee, ich werde mich demnächst damit etwas praktischer beschäftigen und würde eventuell noch ein paar Code-Zeilen dazu posten. Wenn jemand Anmerkungen oder weiterführende Ideen hat, bitte ich um aktiven Beitrag. Vielleicht kennt jemand schon Plugins, die so etwas tun?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/11/effektiv-spam-bekaempfen-mit-wegwerf-mail-adressen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Varchar Länge in MySQL</title>
		<link>http://www.lieber-linux.de/2010/11/varchar-laenge-in-mysql/</link>
		<comments>http://www.lieber-linux.de/2010/11/varchar-laenge-in-mysql/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 14:33:40 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Unicode]]></category>
		<category><![CDATA[varchar]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=889</guid>
		<description><![CDATA[Früher war es sehr oft üblich, varchar(255) an jede Hauswand zu sprühen, wo Text in MySQL zu speichern war. In letzter Zeit sehe ich häufig varchar(32), varchar(64) und so weiter in verschiedenen Datenbank-Layouts. Ist das besser? Welche Länge ist eigentlich gut? In diversen Foren wird über varchar diskutiert, denn es ist oft ein entscheidendes Performance-Kriterium. [...]]]></description>
			<content:encoded><![CDATA[<p>Früher war es sehr oft üblich, <strong>varchar(255)</strong> an jede Hauswand zu sprühen, wo Text in <strong>MySQL</strong> zu speichern war. In letzter Zeit sehe ich häufig <strong>varchar(32)</strong>, varchar(64) und so weiter in verschiedenen Datenbank-Layouts. Ist das besser? Welche Länge ist eigentlich gut? In diversen Foren wird über varchar diskutiert, denn es ist oft ein entscheidendes <strong>Performance</strong>-Kriterium.</p>
<p><span id="more-889"></span></p>
<h3>varchar im Allgemeinen</h3>
<p>Der Datentyp varchar ist ja dafür gedacht, eine variable Anzahl von Zeichen in der entsprechenden Spalte vorzuhalten. Das klingt erstmal sehr einleuchtend und flexibel. Der große Vorteil von varchar gegenüber seinem Komplement char ist also, dass bei einer Speicherung einer sehr kurzen Zeichenkette, wie &#8220;Hallo Welt&#8221;, nicht alle X vordefinierten &#8220;Plätze&#8221; gebucht werden, sondern nur soviel Speicher, wie benötigt wird. Das scheint also eine gute Sache zu sein, denn es erlaubt uns, mehr Daten zu speichern und dabei weniger Platz zu verbrauchen.</p>
<h3>varchar in MySQL beleuchtet</h3>
<p>Um herauszufinden, welche Länge für unsere MySQL-Applikation die Richtige ist, müssen wir natürlich wissen, wie MySQL im speziellen varchar-Spalten behandelt. Das kann sicherlich anders sein, als es Oracle&#8217;s größeres Hausprodukt oder der MSSQL-Server machen. Zunächst die historische Seite: 255 war lange Zeit die größte Anzahl, die man angeben konnte. Warum? Das kommt wohl von der verwendeten Programmiersprache, C. Dort wird eine Zeichenkette als Arrays von Bytes angelegt. Und das letzte Byte muss noch für das Abschluss-Zeichen<em> &#8220;\0&#8243; </em>reichen &#8211; das Null-Byte. 255 Zeichen, plus Null-Byte, das macht genau 256 Zeichen. Wer sich ein bisschen mit Computern auskennt, erkennt hier gleich eine Zweierpotenz &#8211; also eine Zahl, die sich gut in die Speicherarchitektur einpasst. Sie ist in Informatiker-Worten &#8220;<em>aligned</em>&#8220;, also an günstigen Speichergrenzen &#8220;<em>ausgerichtet</em>&#8220;. Denn der Computer verarbeitet Daten ja immer in 8, 16, 32 oder 64 Bit &#8211; da machen sich Vielfache davon gut.</p>
<p>Noch deutlicher wird das MySQL-Verhalten, wenn man sich die alten Borland-<strong>Pascal</strong>-<strong>Strings</strong> anschaut. Dort hielt das <strong>erste</strong> Byte die Länge der Zeichenkette, und anschließend kam Zeichen für Zeichen ohne End-Terminierung. Und so legt auch MySQL die varchar-Daten an. Und historisch konnte MySQL ja auch nur US-ASCII-Bytes verstehen, keine komplexen chinesischen oder japanischen Zeichen, wie sie heute dank Unicode kein Problem mehr darstellen. Jedes Zeichen war also genau 1 Byte, also 8 Bit lang. Und dieses erste Byte hielt also die Länge der dann folgenden Zeichenkette. Es war also nicht möglich, keine größere <strong>Länge</strong> als 255 in einem <strong>Byte</strong> anzugeben. Daher also auch die <strong>255</strong>.</p>
<h3>Mehr als 255 Zeichen</h3>
<p>Was ist denn mit mehr Text? Zum einen gibt es die Text-Spalte (bis 65,566 Zeichen), zum anderen lässt sich der MySQL-varchar-Typ aber auch mit mehr Zeichen betreiben. Das heißt, dass aber mehr Platz vorneweg nötig ist, um die folgende Textmenge zu beschreiben. Also mindestens 2 Byte. Gibt man also varchar(2010) an, so verbraucht das genau 2012 Bytes an Platz. Das ist für die Verarbeitung vielleicht ungut. Sollte man da auf eine ausgerichtete Größe wie 2046  (2048 &#8211; 2) wechseln? Man kann hier nur munkeln und vermuten, aber im Grunde wird es nicht schlecht sein, denke ich mir.</p>
<h3>Varchar in der Praxis</h3>
<p>Wenn MySQL bei Abfragen mehrere Tabellen über <strong>JOIN</strong>s verknüpft, so kann es an dieser Stelle noch nicht wissen, wieviel Daten pro Zeile hineinflattern werden. Also reserviert es sicherheitshalber mal die maximal mögliche Zeichenanzahl an dieser Stelle. Mit varchar(255) werden also pro JOIN-Ergebnis-Zeile in dieser Spalte 256 Bytes verbraten. Auch wenn 99% der Einträge nur &#8220;Hallo&#8221; oder &#8220;Welt&#8221; enthalten &#8211; es ist ein Jammer. Aber besser, man weiß es wenigstens vor dem Layout der DB als hinterher. Schlimmer präsentiert sich allerdings noch der MySQL-Datentyp &#8220;<strong>TEXT</strong>&#8221; oder &#8220;<strong>BLOB</strong>&#8221; &#8211; der darf nämlich in JOINs auf keinen Fall im Speicher landen, sagt MySQL. Also wandert jede Temp-Table mit TEXT oder BLOB auf die Platte &#8211; das macht richtig Laune. Nun, es gibt hier aber auch einen Trick: Man legt /tmp auf Linux-Systemen einfach als <strong>tmpfs</strong> im RAM an. Das performt auch sehr gut mit PHP-Session-Files.</p>
<h3>Was ist denn mit den Kanji oder chinesischen Zeichen?</h3>
<p>Tja, jetzt wird es ja noch bunter. In ein Byte passt doch nur ein ASCII-Zeichen! Also muss jeder Zeichen-Platz nun erweitert werden, damit auch diese Schriftzeichen gespeichert werden können. MySQL macht das je nach dem angegebenen Zeichensatz, Collation genannt, unterschiedlich. Wer hier <strong>UTF-8</strong> wählt, bringt MySQL dazu, pro Zeichen ganze 3 Byte (!) einzukalkulieren. Das bedeutet, ein varchar(255) verbrät in  vollem Zustand ganze 255 * 3 = 765 + 2 = 768 Bytes. Das ist dann schon eine ganze Menge. Knapp eine halbe Schreibmaschinenseite. Damit ein UTF-8-Text noch eine ein-bytige Längenbeschreibung erhält, darf er also ganze 85 Zeichen enthalten -&gt; varchar(85) ist also dein Freund. Wer mit <strong>UCS-2</strong> (16 Bit) gut fährt, vermeidet variable Zeichen-Byte-Längen und kann doch über 65,000 Schriftzeichen unterstützen. Das Unicode-Level von UCS-2 ist dasselbe wie mit den 3 Byte des UTF-8 in MySQL &#8211; für volle Unicode-Unterstützung wären hier nämlich bis zu <a href="http://de.wikipedia.org/wiki/UTF-8">10 Byte </a>pro Zeichen nötig. Allerdings wächst UTF-8 in den letzten Jahren, auch dank XML, Google und Co., zu einem De-facto-Standard heran.</p>
<p>Der Zeichensatz kann in MySQL zunächst auf Datenbank-Ebene angegeben werden. Wird dann bei Tabellen-Anlage nichts weiter mitgeteilt, wird der Datenbank-Zeichensatz übernommen. Wird der Tabelle etwas mitgegeben, verwendet diese spezielle Tabelle einen anderen Zeichensatz. Einer Spalte kann man ebenso einen besonderen Zeichensatz mitgeben. Ohne Angabe zieht wiederum der Tabellen-Zeichensatz. Das klingt auch erstmal sehr vernünftig, denn wo man nichts braucht, so man nichts verbrauchen. Allerdings muss man aufpassen, dass man Tabellen-Schlüssel vergleichbar hält. Möchte man also zwei Tabellen in einem JOIN verknüpfen und über (Un-)Gleichheit zweier Strings zusammenführen oder sortieren, dann sollten diese Spalten dieselbe Collation besitzen. MySQL beschwert sich sonst und verweigert die Operation. Toll, oder?</p>
<h3>Was ist mit geraden Angaben wie varchar(32)?</h3>
<p>Wer sich im Online-Bereich bewegt, weiß, wie oft Algorithmen 32Bit zurückgeben. Ist ja auch schön &#8220;aligned&#8221;. Allerdings, wie wir jetzt wissen, würde es dazu führen, dass MySQL immer 33 Bytes verbraucht &#8211; das ist richtig doof! Total &#8220;unaligned&#8221;. Was macht man denn damit? Erweitert man das auf varchar(63) &#8211; das wäre zwar richtig gut aligned, aber auch irgendwie viel zu viel Platzverschwendung in JOINs. Vielleicht geht man hier auf varchar(35) für 36 Byte (=32 + 4) oder varchar(47) für 48 Byte (= 32 + 16) &#8211; man weiß es nicht. Da würde ich gern mehr Erfahrung sammeln, welche Methode am Ende die Nase vorn hat. Der Vorsprung könnte sich allerdings im esotherischen Bereich bewegen, da hier Platten-IO, Netzwerk, Speicher, CPU und Luftfeuchte eine komplexe Wechselwirkung eingehen. Fakt ist, das selbst in UTF-8-Datenbanken sich hier eine ASCII- oder Latin1-Kodierung gut machen, um MD5-Werte oder PHP-Session-IDs zu speichern. Alles andere ist wirklich Perlen vor die Säue.</p>
<h3>Fazit</h3>
<p>Man vermeide varchar, wo es geht. Denn sie klingen erst mal praktisch, aber der Ärger ist hoch. Am besten, man führt numerische Strassenbezeichnungen ein, und Familien- oder Vornamen werden auf dem Bürgeramt auf BIGINT indiziert und Kommentare auf Websites werden nur noch per Doodle-Vorwahl akzeptiert: &#8220;How do you rate this site: Good, Better, Best&#8221;. <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Im Ernst, man sollte sie wirklich vermeiden. Wo man sie braucht, sollte man die Länge auf sinnvolle Weise begrenzen, auf eine minimale Kodierung achten und die Vergleichbarkeit zwischen verknüpften Tabellen sicherstellen. Um wichtige Tabellen nicht mit varchar&#8217;s zu überfrachten, kann man diese auch gut und gerne in 2 Tabellen aufsplitten: Eine sehr schmale und schnelle für die Indizes mit minimalen Angaben und möglichst fixer Zeilenbreite und eine, die wenig frequentierte, erweiterte Textangaben beinhaltet. Zu guter Letzt beachte man noch die Ausrichtung, wo es möglich ist. In dieser Reihenfolge gehandelt, kann eigentlich nichts mehr schiefgehen. Viel Erfolg mit varchar in MySQL!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/11/varchar-laenge-in-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPad oder WePad</title>
		<link>http://www.lieber-linux.de/2010/04/ipad-oder-wepad/</link>
		<comments>http://www.lieber-linux.de/2010/04/ipad-oder-wepad/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 18:37:26 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[Tipp]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[Safari]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[WePad]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=789</guid>
		<description><![CDATA[Heute habe ich zum ersten Mal das iPad in den Händen gehalten. Hier findet ihr meinen ersten Eindruck von Apple&#8217;s neuem Baby &#8211; was mich gefreut oder auch gestört hat. Zunächst ist es etwas schwerer, als es auf den ersten Blick erscheint. Auf der Rückseite ist es leicht gerundet, sodass es zwar gut in einer [...]]]></description>
			<content:encoded><![CDATA[<p>Heute habe ich zum ersten Mal das iPad in den Händen gehalten. Hier findet ihr meinen ersten Eindruck von Apple&#8217;s neuem Baby &#8211; was mich gefreut oder auch gestört hat.</p>
<p>Zunächst ist es etwas schwerer, als es auf den ersten Blick erscheint. Auf der Rückseite ist es leicht gerundet, sodass es zwar gut in einer Hand liegt, aber beim Hinlegen wie eine Gemüsewiege hin- und herschaukelt, wenn man mal mit zwei Händen tippen will. Das ist wohl etwas unglücklich. Apple-typisch hat das iPad nur 4 echte Tasten: An, Laut/Leiser, Lock für automatische Drehung des Bildschirms und den vom iPhone bekannten Zurück-Button zentral unter dem Screen. Schauen wir mal weiter.</p>
<p><span id="more-789"></span></p>
<p>Wir haben hier die amerikanische iPad-Variante im Haus, denn die deutsche gibts ja noch nicht. Die Tastatur wirkt recht übersichtlich und die Tasten groß genug zum schnellen Tippen. Für jede Sondertaste muss allerdings umgeschalten werden, so auch beim @-Zeichen, und das in Web 2.0-Zeiten! Und die Tastatur bleibt dann in diesem Modus. Also muss man für eine Zahl zum Beispiel 3-mal tippen. Das könnte man besser machen.</p>
<p>Insgesamt ist die Haptik auf dem Touchscreen schnell erlernbar. Auch die winzigsten Elemente einer Website ließen sich meist problemlos treffen, das funktioniert wirklich sehr gut. Statt Tabs bietet der Safari-Browser hier nur Fenster an, die aber durch einen Schnellumschalter nebeneinander erscheinen und das Wechseln recht übersichtlich machen. Soweit konnten wir keine Probleme mit CSS oder JavaScript ausmachen &#8211; Web-Designer sollten also mit dem iPad keine zusätzlichen Probleme erwarten. Unsere auf 1024 Pixel optimierte Webseite passte auch absolut genau in den iPad-Screen. Jippieeh! <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Dennoch ist nicht alles gold, was glänzt &#8211; das Display des iPad zum Beispiel glänzt nach 2 Minuten Benutzung stolz vor Fettabdrücken. Bei über 45 Grad Neigung sieht man als Nebensurfer nur noch das spiegelnde Glas des Displays, auf dem sich so nach und nach eine speckige Butterschicht bildet. Hier hätte man auch gleih mal ein fusselfreies Tuch beilegen können. Dieses gibt es sicherlich mit Steve-Jobs-Counterfei für günstige 19 Euro mit Apple-Shop Eurer Wahl. <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Aber im Ernst: Der Kampf zwischen Apple und Adobe nervt mehr, als er Früchte trägt &#8211; der fehlende Flash-Player wird so manche witzige Webseite den iPad-Nutzern verwehren.</p>
<p>Kommen wir zu weiteren Schwächen der Version 1.0: Die WLAN-Geschwindigkeit ist auch nicht das gelbe vom Ei, und der sehr aufgeräumt wirkende Desktop wirkt schnell leer und feature-arm. Es fehlen ebenso Bluetooth und Webcam &#8211; hier will Apple sicherlich ein iPad 2.0 (und später iPad 3.0) nachschieben und den Markt dreimal abschöpfen &#8211; das zu erkennen, macht nicht gerade glücklich mit dem Gerät.</p>
<h3>Fazit</h3>
<p>Insgesamt ist das Gerät für 750 Euro viel zu teuer für die gebotenen Features &#8211; es ist eher ein großes iPhone. Ich freue mich auf das WePad, denn ich schätze Freiheit, und da sieht es wohl mit dem Linux viel besser für eine persönlichere Einrichtung des Geräts aus. Und dort wird es wohl auch einen Flash-Player geben. Apple muss meiner Meinung nach aufpassen, nicht zum zweiten Microsoft zu werden &#8211; nämlich nicht zu versuchen, die eigenen Benutzer aus kurzsichtigen politischen Gründen so einzuschränken, bis sie es satt haben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/04/ipad-oder-wepad/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>MP3-Dateien schneiden</title>
		<link>http://www.lieber-linux.de/2010/04/mp3-dateien-schneiden/</link>
		<comments>http://www.lieber-linux.de/2010/04/mp3-dateien-schneiden/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 09:39:14 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[Tipp]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[Konsole]]></category>
		<category><![CDATA[MP3]]></category>
		<category><![CDATA[mp3cut]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=760</guid>
		<description><![CDATA[Manchmal hat man keine Lust, MP3-Audio-Dateien erst in ein grafisches Programm wie Audacity oder ähnliches zu laden, bevor man diese zerschneiden oder zusammenbasteln kann. Hier hat mir das Programm mp3cut gute Dienste leisten können. Nach einer neuen Installation meines Rechners hatte ich vergessen, mp3cut neu zu kompilieren. Heute habe ich allerdings entdeckt, dass es auch [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal hat man keine Lust, <strong>MP3</strong>-<strong>Audio</strong>-<strong>Dateien</strong> erst in ein grafisches Programm wie <strong>Audacity</strong> oder ähnliches zu laden, bevor man diese zerschneiden oder zusammenbasteln kann. Hier hat mir das Programm <strong>mp3cut</strong> gute Dienste leisten können. Nach einer neuen Installation meines Rechners hatte ich vergessen, <strong>mp3cut</strong> neu zu kompilieren. Heute habe ich allerdings entdeckt, dass es auch im <strong>Debian</strong>-<strong>Paket</strong> <strong>poc-streamer</strong> als Werkzeug enthalten ist.</p>
<p>Ein einfacher Schnitt kann da zum Beispiel so aussehen:</p>
<pre>$ mp3cut -o out.mp3 -t 1:24-2:12 beispiel.mp3
</pre>
<p>Und schwuppdiwupp hat man das angegebene Stückchen als neues MP3. Dabei benutzt mp3cut ganz intelligent Stellen, in denen es zu keinen Störungen kommt, um die Qualität an den Schnitträndern zu erhalten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/04/mp3-dateien-schneiden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML-Tabellen per Javascript sortieren lassen</title>
		<link>http://www.lieber-linux.de/2010/03/html-tabellen-per-javascript-sortieren-lassen/</link>
		<comments>http://www.lieber-linux.de/2010/03/html-tabellen-per-javascript-sortieren-lassen/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 18:20:39 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Sortierung]]></category>
		<category><![CDATA[Tabelle]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=751</guid>
		<description><![CDATA[&#8230;Ich habe zulange gewartet &#8230;meine Schmerzgrenze war vielleicht zu hoch &#8230;aber heute tat ich diesen Schritt &#8230;und suchte nach &#8220;javascript sort table&#8221; &#8230;und die Lösung lag doch nur einen Steinwurf entfernt &#8230;und schmeichelte mit einer kinderleichten Installation &#8230;warum habe ich so lange gewartet?! Ich kann es nicht mehr nachvollziehen&#8230; Hier verkünde ich: Wer dieses tolle [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;Ich habe zulange gewartet &#8230;meine Schmerzgrenze war vielleicht zu hoch &#8230;aber heute tat ich diesen Schritt &#8230;und suchte nach &#8220;javascript sort table&#8221; &#8230;und die Lösung lag doch nur einen Steinwurf entfernt &#8230;und schmeichelte mit einer kinderleichten Installation &#8230;warum habe ich so lange gewartet?! Ich kann es nicht mehr nachvollziehen&#8230;</p>
<h3>Hier verkünde ich: Wer <span style="text-decoration: underline;"><a href="http://www.kryogenix.org/code/browser/sorttable/">dieses tolle Tool zum Sortieren von HTML-Tabellen</a></span> NICHT einsetzt, gehört zurückversetzt nach Klasse <strong>Web 0.9</strong>! So, basta!</h3>
<p>Ich möchte es nie mehr missen!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/03/html-tabellen-per-javascript-sortieren-lassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subversion: propset keyword Id automatisieren</title>
		<link>http://www.lieber-linux.de/2010/02/subversion-propset-keyword-id-automatisieren/</link>
		<comments>http://www.lieber-linux.de/2010/02/subversion-propset-keyword-id-automatisieren/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 17:15:21 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tipp]]></category>
		<category><![CDATA[Id]]></category>
		<category><![CDATA[Keyword]]></category>
		<category><![CDATA[Property]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=727</guid>
		<description><![CDATA[Wer seine Quelldateien in einem Subversion (SVN) vorhält, kennt die Keywords Id oder Revision, die man zum Beispiel in PHP folgendermaßen in einer Datei example.php als Kommentar benutzen kann: /* $Id$ */ Beim Einchecken macht SVN aus dem Keyword Id: /* $Id: example.php 569 2010-02-19 15:17:49Z nudge $ */ Wenn nun jemand im Projekt ein [...]]]></description>
			<content:encoded><![CDATA[<p>Wer seine Quelldateien in einem <strong>Subversion</strong> (<strong>SVN</strong>) vorhält, kennt die <strong>Keywords</strong> <em>Id</em> oder <em>Revision</em>, die man zum Beispiel in <strong>PHP</strong> folgendermaßen in einer Datei <em>example.php</em> als Kommentar benutzen kann:</p>
<pre>/* $Id$ */
</pre>
<p>Beim Einchecken macht SVN aus dem Keyword Id:</p>
<pre>/* $Id: example.php 569 2010-02-19 15:17:49Z nudge $ */
</pre>
<p>Wenn nun jemand im Projekt ein bisschen herumsucht und nicht so richtig zurechtkommt, so sagt ihm diese Angabe, dass es sich um die Datei <em>example.php</em> handelt, die in Revision <em>569</em> des Projekts vorliegt, und diese wurde am <em>19.02.2010</em> um <em>15:17</em> das letzte Mal geändert, und zwar vom Benutzer <em>Nudge</em>. Das ist richtig toll, doch leider macht das SVN erst, wenn man alle Dateien mit diesem Keyword-Property ausgestattet hat. Besser also, man erleichtert sich das durch eine geeignete Voreinstellung. Diese bekommt man in der Datei ~/.subversion/config hin:</p>
<pre>[miscellany]
enable-auto-props = yes

[auto-props]
*.php = svn:keywords=Id;svn:eol-style=native
</pre>
<p>Bisher erstellte Dateien berührt diese Voreinstellung nicht. Wenn man schon eine ganze Menge Dateien eingecheckt hat, so benutzt man am besten ausgecheckten (!)  Pfad des Projekts folgenden Bash-Befehl, um alle darin enthaltenen PHP-Dateien nachträglich das Keyword-Property zu verpassen:</p>
<pre>$ find ./ -name '*.php' -exec svn propset svn:keywords 'Id' {} \;
</pre>
<p>Und schon ist man dem PHP-Entwickler-Glück wieder ein Stückchen näher gekommen. <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/02/subversion-propset-keyword-id-automatisieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forestle, die grüne Suchmaschine, und lahme Nachahmer</title>
		<link>http://www.lieber-linux.de/2010/02/forestle-die-gruene-suchmaschine-und-lahme-nachahmer/</link>
		<comments>http://www.lieber-linux.de/2010/02/forestle-die-gruene-suchmaschine-und-lahme-nachahmer/#comments</comments>
		<pubDate>Sun, 07 Feb 2010 12:47:27 +0000</pubDate>
		<dc:creator>Nudge</dc:creator>
				<category><![CDATA[Tipp]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[lighttpd]]></category>
		<category><![CDATA[Natur]]></category>
		<category><![CDATA[Suchmaschine]]></category>

		<guid isPermaLink="false">http://www.lieber-linux.de/?p=716</guid>
		<description><![CDATA[Ich kann Euch nur www.forestle.org als Suchmaschine ans Herz legen, denn hier wird pro Suche 0,1m² Regenwald zum Schutz vor Rodung gekauft. Im Hintergrund wird Yahoo&#8217;s Suchmaschine angesprochen, die ja bekanntlich  Bing-Technologie einsetzt. Dagegen sind die Domain-Nachahmer bei forrestle.org etwas lahmer und schaffen es wohl derzeit nicht, ihren lighttpd zu konfigurieren:]]></description>
			<content:encoded><![CDATA[<p>Ich kann Euch nur <a href="http://www.forestle.org">www.forestle.org</a> als Suchmaschine ans Herz legen, denn hier wird pro Suche 0,1m² Regenwald zum Schutz vor Rodung gekauft. Im Hintergrund wird Yahoo&#8217;s Suchmaschine angesprochen, die ja bekanntlich  Bing-Technologie einsetzt.</p>
<p>Dagegen sind die Domain-Nachahmer bei forrestle.org etwas lahmer und schaffen es wohl derzeit nicht, ihren <strong>lighttpd</strong> zu konfigurieren: <img src='http://www.lieber-linux.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div id="attachment_717" class="wp-caption alignnone" style="width: 578px"><a href="http://www.lieber-linux.de/wp-content/uploads/forrestle.png"><img class="size-full wp-image-717" title="forrestle" src="http://www.lieber-linux.de/wp-content/uploads/forrestle.png" alt="" width="568" height="360" /></a><p class="wp-caption-text">forrestle</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.lieber-linux.de/2010/02/forestle-die-gruene-suchmaschine-und-lahme-nachahmer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

