<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" version="2.0">
  <channel>
    <title><![CDATA[Robo47 Content Feed (Blog, Codeschnipsel, Texte, Tools)]]></title>
    <link>http://www.robo47.net</link>
    <description><![CDATA[Feed für robo47.net]]></description>
    <pubDate>Wed, 11 Nov 2009 14:27:52 +0100</pubDate>
    <managingEditor>robo47@robo47.net (Benjamin Steininger)</managingEditor>
    <webMaster>robo47@robo47.net</webMaster>
    <generator>Zend_Feed</generator>
    <language>de-de</language>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <geo:lat>49.5858</geo:lat><geo:long>8.7694</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-nc-sa/3.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Robo47" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
      <title><![CDATA[Updates und Umstellung der RSS-Feeds]]></title>
      <link>http://www.robo47.net/blog/175-Updates-und-Umstellung-der-RSS-Feeds</link>
      <guid>http://www.robo47.net/blog/175-Updates-und-Umstellung-der-RSS-Feeds</guid>
      <description>&lt;p&gt;
	So, mal wieder ein paar Neuerungen ins Live-System &amp;uuml;bertragen:&lt;/p&gt;
&lt;p&gt;
	Sowohl das Zend Framework (1.9.5), als auch Doctrine (1.2.0ALPHA3) und ezComponents (2009.1.2) wurden auf die aktuellsten Versionen geupdatet. Im Backend sowie Frontend kommt jetzt der CKEditor als WYSIWYG-Editor zum Einsatz, im Frontend bei den Kommentaren und im Backend bei allen HTML-Inhalten. Neben dem schon l&amp;auml;nger vorhandenen Tweet This-Button gibt es jetzt auch einen Dent-This Button f&amp;uuml;r Identi.ca User (An einer Integration f&amp;uuml;r Pingbacks z.b. von Identi.ca arbeite ich noch). Ausserdem werden meine Eigenen Kommentare jetzt etwas hervorgehoben.&lt;/p&gt;
&lt;p&gt;
	Die gr&amp;ouml;&amp;szlig;te &amp;Auml;nderung gab es bei den Feeds. Hier habe ich jetzt Blogeintr&amp;auml;ge, Texte, Codeschnipsel und Tools in einen Feed gemergt.&lt;/p&gt;
&lt;p&gt;
	Die aktuellen Urls zum normalen Feed und zum Kommentar-Feed sind:&lt;br /&gt;
	&lt;a href="http://www.robo47.net/feed/content.rss"&gt;http://www.robo47.net/feed/content.rss&lt;/a&gt;&lt;br /&gt;
	&lt;br /&gt;
	&lt;a href="http://www.robo47.net/feed/comments.rss"&gt;http://www.robo47.net/feed/comments.rss&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	Desweiteren bietet auch jeder Text, Blogeintrag, Codeschnipsel und jedes Tool jeweils einen eigenen Kommentar-Feed, falls man nur an Kommentaren zu einem einzelnen Eintrag interessiert ist.&lt;/p&gt;
&lt;p&gt;
	Die alten Feed-Urls werden nat&amp;uuml;rlich noch eine Zeit lang normal laufen und dann erstmal via 301er Header auf die neuen Urls umgeleitet, wer also einen Reader hat der keinen 301er Header unterst&amp;uuml;tzt sollte am besten gleich die Url updaten. Irgendwann werde ich dort dann nur noch einen Fehlermeldungsbeitrag ausgeben um auch die letzten &amp;uuml;briggebliebenen auf die neuen Feeds aufmerksam zu machen bevor ich sie dann abschalte.&lt;br /&gt;
	Wer &amp;uuml;brigends noch via &lt;strong&gt;Feedburner&lt;/strong&gt; meinen Feed abonniert, sollte auch auf die neuen Urls umstellen, da vorhabe Feedburner auch irgendwann abschalten.&lt;/p&gt;
&lt;p&gt;
	Die J/K-Navigation auf Basis von JQuery die ich testweise eingebaut hatte hab ich wieder rausgenommen nachdem mich jemand darauf hingewiesen hatte, dass man damit kein j und kein k mehr in den Text-Feldern tippen konnte, da werde ich auch mal schauen inwieweit ich das was gebastelt bekomme das den Focus noch &amp;uuml;berpr&amp;uuml;ft.&lt;br /&gt;
	&lt;br /&gt;
	Aus technischer Sicht steht dann wohl als n&amp;auml;chstes mal die Unterst&amp;uuml;tzung f&amp;uuml;r Pingbacks auf dem Plan (Hoffentlich tut sich sich da bald was bei &lt;a href="http://framework.zend.com/wiki/pages/viewpage.action?pageId=13107298"&gt;Zend_Service_Linkback&lt;/a&gt;) und die seit ZF 1.8 nicht mehr lauff&amp;auml;higen Unittests (sowie neue schreiben f&amp;uuml;r alles was seitdem dazugekommen ist) will ich auch mal wieder reaktivieren und zum Teil neu schreiben. Allgemein steht einiges an Refactoring hinter den Kulissen an wozu ich laufende Unittests begr&amp;uuml;&amp;szlig;en w&amp;uuml;rde. Und wenn das abgeschlossen ist werde ich wohl mal etwas intensiver in Richtung Nutzung von JQuery und/oder Dojo bei den ganzen Tools gehen. Und nebenbei muss dann irgendwoher noch ein neues Design kommen :) Der angepeilter Termin liegt irgendwo zwischen 2020 und 2030 :)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=khDuH5dgsRI:mJL7LfO4o4s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=khDuH5dgsRI:mJL7LfO4o4s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=khDuH5dgsRI:mJL7LfO4o4s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=khDuH5dgsRI:mJL7LfO4o4s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=khDuH5dgsRI:mJL7LfO4o4s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=khDuH5dgsRI:mJL7LfO4o4s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=khDuH5dgsRI:mJL7LfO4o4s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 28 Oct 2009 01:35:31 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Apache Access Log Formate - common, combined, combinedio, forensic - Vorteile und Tools zur Auswertung]]></title>
      <link>http://www.robo47.net/text/41-Apache-Access-Log-Formate-common-combined-combinedio-forensic-Vorteile-und-Tools-zur-Auswertung</link>
      <guid>http://www.robo47.net/text/41-Apache-Access-Log-Formate-common-combined-combinedio-forensic-Vorteile-und-Tools-zur-Auswertung</guid>
      <description>&lt;p&gt;Apache bietet standardmäßig 2 verschiedene Formate für die
Zugriffs-Log-Dateien an, das ist &lt;code&gt;common&lt;/code&gt; und &lt;code&gt;combined&lt;/code&gt;.
In Kombination mit mod_logio (Üblicherweise mitkompiliert) kommt noch
&lt;code&gt;combinedio&lt;/code&gt; hinzu, mit mod_log_forensic steht auch das
&lt;code&gt;forensic&lt;/code&gt;-Format zur Verfügung und über die Direktive 
&lt;code&gt;LogFormat&lt;/code&gt; ist es auch möglich seine eigenen Formate so
zusammenstellen wie man braucht.&lt;/p&gt;

&lt;p&gt;Der Unterschied zwischen den Formaten besteht in den Informationen die
geloggt werden.&lt;/p&gt;

&lt;h2&gt;Das common-Format&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Common&lt;/code&gt; bietet insgesamt am wenigsten Informationen an: &lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;IP&lt;/li&gt;
  &lt;li&gt;Benutzer&lt;/li&gt;
  &lt;li&gt;Datum&lt;/li&gt;
  &lt;li&gt;Request&lt;/li&gt;
  &lt;li&gt;Statuscode&lt;/li&gt;
  &lt;li&gt;Größe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Die IP sollte klar sein, Benutzer wird im Falle einer Authentifizierung
durch eines der Authentifikations-Module (mod_authn_alias, mod_authn_anon,
mod_authn_dbd, mod_authn_default, mod_authn_file oder mod_authnz_ldap) des
Apachen mit dem Benuternamen gefüllt, das Datum sollte auch klar sein. Der
Request enthält Informationen über die Art des Requests (HEAD, GET, POST,
PUT) den Pfad + Dokument + Parameter [GET] an den sich der Request gerichtet
hat und ob es sich um HTTP 1.0 oder HTTP 1.1 handelt. Mit Größe ist die
Anzahl an Bytes die das übertragende Dokument hat gemeint (ohne Header).&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Das combined-Format&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Combined&lt;/code&gt; baut auf &lt;code&gt;Common&lt;/code&gt; auf und besitzt 2
zusätzlich Felder:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Referrer&lt;/li&gt;
  &lt;li&gt;UserAgent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Referrer wird dabei mit dem Wert des Referer-Headers gefüllt wenn der
Client diesen mitsendet und UserAgent ist die Signatur des Browsers des Clients
falls dieser den Header mitsendet.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Das combinedio-Format von mod_logio&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Combinedio&lt;/code&gt; baut wie der Name schon erahnen lässt wiederrum auf
&lt;code&gt;Combined&lt;/code&gt; auf und erweitert dieses um 2 weitere Felder: &lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Input&lt;/li&gt;
  &lt;li&gt;Output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Input ist dabei die Anzahl an Bytes die bei der Anfrage des Clients an den
Server über die Leitung gegangen sind, Output ist die Anzahl der Bytes der
kompletten Antwort vom Server.&lt;/p&gt;

&lt;p&gt;Im Gegensatz zur reinen Größe des Dokuments das auch in
&lt;code&gt;Common&lt;/code&gt; und &lt;code&gt;Combined&lt;/code&gt; vorkommt, kommen hier auch die
Header die der Client bei der Anfrage und der Server bei seiner Antwort
mitsendet zum tragen, ausserdem erscheint hier auch der entstandene Traffic der
durch Dateien die z.b. via Dateiupload hochgeladen wurden oder auch Dateien die
via PUT (z.b. mod_svn) hochgeladen wurden.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Das forensic-Format von mod_log_forensic&lt;/h2&gt;

&lt;p&gt;Das Forensic-Format loggt zwar nicht wie combinedio die Größe der Header
bei Request und Response, aber dafür alle Header und deren Werte. Jedem
Request wird eine eindeutige ID zugewisen die im Log erscheint, ausserdem wird
bei jedem Request doppelt geloggt einmal sobald der Request ankommt, also bevor
er weiter ausgeführt wird und sobald die Antwort an den Client gesendet
wurde.&lt;/p&gt;

&lt;p&gt;Sollte also ein Request abgebrochen werden erscheint in der Log nur ein
Eintrag.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Fazit&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Combinedio&lt;/code&gt; erlaubt durch die zusätzlichen Werte für Input und
Output die beste Auswertung des entstandenen Traffics, da bei Upload-Lastige
Seiten wie z.b. ein paar meiner Tools, die Datei-Uploads einen großen Teil des
Traffics ausmachen oder auch wenn ein Vhost z.b. mit &lt;a
href="/blog/174-Web-Gui-zur-Verwaltung-von-Subversion-Repositorys-inklusive-Usern-Gruppen-und-Ordnerbasierten-Rechte-mit-USVN"&gt;USVN
zum hosten von Subversion-Repositorys via https + webdav&lt;/a&gt; genutzt wird. Mit
common und combined erhält man hier nur die Größe der abgerufenen Dokumente
was teilweise wirklich nur ein Bruchteil des entstandenen Traffics ist.&lt;/p&gt;

&lt;p&gt;Forensic hingegen macht Sinn wenn es sich um eine Sicherheitskritische
Applikation handelt und Informationen über auftretende fehlerhafte Requests
wichtig sind. &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Tools zur Analyse von combinedio-Logs&lt;/h2&gt;

&lt;p&gt;Während sich &lt;code&gt;common&lt;/code&gt; und &lt;code&gt;combined&lt;/code&gt; vom
standard-webalizer auswerten lassen, gilt das nicht für combinedio-Logs. Dazu
muss man einen der Forks wie z.b. &lt;a
href="http://www.patrickfrei.ch/webalizer/"&gt;Webalizer Xtended&lt;/a&gt; von Patrick
Frei oder &lt;a href="http://www.stonesteps.ca/projects/webalizer/"&gt;Stone Steps
Webalizer&lt;/a&gt; nutzen. Desweiteren kann auch &lt;a
href="http://awstats.sourceforge.net/"&gt;Awstats&lt;/a&gt; mit
&lt;code&gt;combinedio-&lt;/code&gt;Logfiles&lt;code&gt;&lt;/code&gt; umgehen.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Weitere Logs&lt;/h2&gt;

&lt;p&gt;Weitere Logs für andere Bereiche auf die ich hier nicht groß eingehe
bietet der Apache Webserver übringends noch für Fehlermeldungen, mod_rewrite
und mod_cgi. Bei den Fehlermeldungen lässt sich mit &lt;code&gt;LogLevel&lt;/code&gt;
einstellen welche Meldungen geloggt werden, bei mod_rewrite ist es über die
Direktive &lt;code&gt;RewriteLog&lt;/code&gt; und &lt;code&gt;RewriteLogLevel&lt;/code&gt; möglich
jede Rewrite-Aktion einer URL zu loggen und bei mod_cgi ist es über die
&lt;code&gt;ScriptLog&lt;/code&gt; Direktive möglich sämtliche Header und die Ausgabe
jedes Aufruf eines cgi-Scriptes zu loggen.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=raIXuRFlfzM:zVEfVwsT-Q4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=raIXuRFlfzM:zVEfVwsT-Q4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=raIXuRFlfzM:zVEfVwsT-Q4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=raIXuRFlfzM:zVEfVwsT-Q4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=raIXuRFlfzM:zVEfVwsT-Q4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=raIXuRFlfzM:zVEfVwsT-Q4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=raIXuRFlfzM:zVEfVwsT-Q4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 16 Oct 2009 21:04:55 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Die PHP ZipArchive-Erweiterung und der comp_method-Wert]]></title>
      <link>http://www.robo47.net/text/40-Die-PHP-ZipArchive-Erweiterung-und-der-comp_method-Wert</link>
      <guid>http://www.robo47.net/text/40-Die-PHP-ZipArchive-Erweiterung-und-der-comp_method-Wert</guid>
      <description>&lt;p&gt;Also ich meinen &lt;a
href="/codeschnipsel/18-Archiv-Statistik-mit-Groese-gepackt-und-Ungepackt-fuer-Zip-Archive-mit-php-und-ZipArchive"&gt;Codeschnipsel
zum Anzeigen von Informationen über Zip-Archive&lt;/a&gt; geschrieben hab, bin auf
die Information comp_method aufmerksam geworden die man sich über die Methode
statIndex() bzw. statName() des ZipArchiv-Objektes für Dateien ausgeben lassen
kann. Dieses Feld gibt an in welcher Form (mit welcher Methode) die einzelne
Datei innerhalb des Archivs komprimiert ist. Mögliche Modis lassen sich aus
den ZipArchive::CM_-Konstanten und den Angaben im Manual ableiten:&lt;/p&gt;
&lt;pre&gt;ZIPARCHIVE::CM_STORE (integer)
stored (uncompressed).
ZIPARCHIVE::CM_SHRINK (integer)
shrunk
ZIPARCHIVE::CM_REDUCE_1 (integer)
reduced with factor 1
ZIPARCHIVE::CM_REDUCE_2 (integer)
reduced with factor 2
ZIPARCHIVE::CM_REDUCE_3 (integer)
reduced with factor 3
ZIPARCHIVE::CM_REDUCE_4 (integer)
reduced with factor 4
ZIPARCHIVE::CM_IMPLODE (integer)
imploded
ZIPARCHIVE::CM_DEFLATE (integer)
deflated
ZIPARCHIVE::CM_DEFLATE64 (integer)
deflate64
ZIPARCHIVE::CM_PKWARE_IMPLODE (integer)
PKWARE imploding
ZIPARCHIVE::CM_BZIP2 (integer)
BZIP2 algorithm&lt;/pre&gt;

&lt;p&gt;Leider unterstützt die Zip-Extension diese Werte nur beim lesen, es ist
noch nicht möglich diese Werte zu ändern oder beim erstellen eines Archivs zu
setzen um.&lt;/p&gt;

&lt;p&gt;Sinnvolle Anwendungsgebiete würden mir da auch ein paar einfallen, z.b.
wenn man Archive mit vielen eh schon komprimierten Dateien (jpeg, png, mp3, ...
) erstellen will und den unnötigen Rechenaufwand diese weiter zu komprimieren
sparen will könnte man mit ZIPARCHIE::CM_STORE veranlassen dass die Datei(en)
überhaupt nicht komprimiert werden und so das Zip-Archiv als einfachen
Container genutzt wird. Mit bzip2 wäre es möglich in einigen Fällen eine
bessere Kompression auf Kosten einer höheren Rechenzeit zu erreichen.&lt;/p&gt;

&lt;p&gt;Ich hoffe allerdings dass diese Funktionalität es irgendwann in die
Zip-Erweiterung schafft.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9NSft4IkezM:EIDsa_DXOYQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9NSft4IkezM:EIDsa_DXOYQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9NSft4IkezM:EIDsa_DXOYQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=9NSft4IkezM:EIDsa_DXOYQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9NSft4IkezM:EIDsa_DXOYQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=9NSft4IkezM:EIDsa_DXOYQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9NSft4IkezM:EIDsa_DXOYQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 14 Oct 2009 22:06:39 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Web-Gui zur Verwaltung von Subversion Repositorys inklusive Usern, Gruppen und Ordnerbasierten Rechte mit USVN]]></title>
      <link>http://www.robo47.net/blog/174-Web-Gui-zur-Verwaltung-von-Subversion-Repositorys-inklusive-Usern-Gruppen-und-Ordnerbasierten-Rechte-mit-USVN</link>
      <guid>http://www.robo47.net/blog/174-Web-Gui-zur-Verwaltung-von-Subversion-Repositorys-inklusive-Usern-Gruppen-und-Ordnerbasierten-Rechte-mit-USVN</guid>
      <description>&lt;p&gt;Wer mal vor dem Problem steht SVN-Repros auf einem Server komfortabel zu
verwalten (neue anlegen, alte löschen, Benutzer und Gruppen-Rechte,
Ordner-basierte Rechte, Viewer, etc) und nicht immer für jedes Repository sich auf dem Server einloggen will, es händisch anlegen und händisch Log-Dateien für Benutzer und Gruppen editieren will, der sollte sich unbedingt mal &lt;a
href="http://usvn.info/"&gt;USVN&lt;/a&gt; anschauen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://usvn.info/"&gt;USVN&lt;/a&gt; ist ein auf das
Zend Framework aufbauende Web-GUI das die Verwaltung von Repositorys, Gruppen und Usern sehr stark erleichtert.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://usvn.info/"&gt;USVN&lt;/a&gt; schreibt dabei normale Configs für SVN die dann im Zusammenspiel mit mod_dav und mod_svn den Usern die Repros via http oder https zur Verfügung stellen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://usvn.info/"&gt;USVN&lt;/a&gt; existiert momentan in Version 1.0.1 und
steht unter der &lt;a href="http://www.cecill.info/index.en.html"&gt;Cecill
Lizenz&lt;/a&gt; einer zur GPL kompatiblen, französischen Lizenz. Ein paar &lt;a
href="http://usvn.info/screenshots"&gt;schöne Screenshots von USVN gibt es
hier&lt;/a&gt;. Und &lt;a href="http://usvn.info/download"&gt;runterladen kann man es
hier&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Oo1cGLvtrXM:g-hfYiz-IBI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Oo1cGLvtrXM:g-hfYiz-IBI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Oo1cGLvtrXM:g-hfYiz-IBI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Oo1cGLvtrXM:g-hfYiz-IBI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Oo1cGLvtrXM:g-hfYiz-IBI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Oo1cGLvtrXM:g-hfYiz-IBI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Oo1cGLvtrXM:g-hfYiz-IBI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 14 Oct 2009 22:00:37 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Exif und IPTC Informationen im Firefox Browser anzeigen mit FxIF und Exif Viewer]]></title>
      <link>http://www.robo47.net/text/39-Exif-und-IPTC-Informationen-im-Firefox-Browser-anzeigen-mit-FxIF-und-Exif-Viewer</link>
      <guid>http://www.robo47.net/text/39-Exif-und-IPTC-Informationen-im-Firefox-Browser-anzeigen-mit-FxIF-und-Exif-Viewer</guid>
      <description>&lt;p&gt;
Also Hobby-Photograph bin ich oftmals interessiert was für Exif-Daten gewisse Bilder in Foren, auf Blogs oder sonstigen Webseiten haben. Sie immer runterzuladen und lokal mit einem Programm zu öffnen ist auf Dauer viel zu umständlich, also bietet es sich an mit einer Extension direkt im Browser die Informationen anzuzeigen.
&lt;/p&gt;
Die Auswahl ist dabei nicht sonderlich groß:
&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5673"&gt;FxIF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://addons.mozilla.org/de/firefox/addon/3905"&gt;Exif Viewer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
FxIF ist schön klein und integriert sich im Rechtsklick-Menü in dem Punkt &amp;quot;Eigenschaften&amp;quot;, während Exif Viewer einen eigenen Punkt im Rechtsklick-Menü &amp;quot;Zeige Exif-Daten&amp;quot; hinzufügt und dort in Listen oder Tabellen-Form eine Übersicht über die Exif und IPTC-Informationen anzeigt.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SIjdQRNn0zA:-Yv7IIidylY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SIjdQRNn0zA:-Yv7IIidylY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SIjdQRNn0zA:-Yv7IIidylY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=SIjdQRNn0zA:-Yv7IIidylY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SIjdQRNn0zA:-Yv7IIidylY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=SIjdQRNn0zA:-Yv7IIidylY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SIjdQRNn0zA:-Yv7IIidylY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 09 Oct 2009 10:16:18 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Remove Trailing Spaces sed-basierter Ant Task]]></title>
      <link>http://www.robo47.net/codeschnipsel/29-Remove-Trailing-Spaces-sed-basierter-Ant-Task</link>
      <guid>http://www.robo47.net/codeschnipsel/29-Remove-Trailing-Spaces-sed-basierter-Ant-Task</guid>
      <description>Ant-Task der alle Leerzeichen und Tabs am Zeilenende in allen php und phtml-Dateien im Verzeichnis directory entfernt, auf Basis von SED (läuft also nur auf unixoiden Betriebsystemen die SED installiert haben und deren SED den Parameter -i schon unterstützen.&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="projectname" basedir="."&gt;
    &lt;target name="removeTrailingSpaces"&gt;
        &lt;apply executable   = "sed"
               failonerror  = "true"&gt;
            &lt;arg value="s/[ ]*$//" /&gt;
            &lt;arg value="-i" /&gt;
            &lt;fileset dir="directory"&gt;
                &lt;include name="**/*.php" /&gt;
                &lt;include name="**/*.phtml" /&gt;
            &lt;/fileset&gt;
        &lt;/apply&gt;
    &lt;/target&gt;
&lt;/project&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=s4a57iZhEdQ:O3ofaxeqyHg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=s4a57iZhEdQ:O3ofaxeqyHg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=s4a57iZhEdQ:O3ofaxeqyHg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=s4a57iZhEdQ:O3ofaxeqyHg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=s4a57iZhEdQ:O3ofaxeqyHg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=s4a57iZhEdQ:O3ofaxeqyHg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=s4a57iZhEdQ:O3ofaxeqyHg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 30 Sep 2009 04:18:13 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Die SPL - Standard PHP Library]]></title>
      <link>http://www.robo47.net/blog/173-Die-SPL-Standard-PHP-Library</link>
      <guid>http://www.robo47.net/blog/173-Die-SPL-Standard-PHP-Library</guid>
      <description>&lt;p&gt;
    Seit nun 5 Jahren (seit Version 5.0 von PHP) gibt es die SPL - Standard PHP
    Library.&lt;br /&gt;
    Die an &lt;a href="http://de.wikipedia.org/wiki/Standard_Template_Library"&gt;C++'s STL - Standard Template Library&lt;/a&gt;
    angelehnte Extension hatte ihren Ursprung vor 6 Jahren in der
    &lt;a href="http://pecl.php.net"&gt;PECL - PHP Extension Community Library&lt;/a&gt;
    und wurde in PHP 5 direkt zu einer Core-Komponente die für mich heute kaum
    noch wegzudenken ist.
&lt;br /&gt;
    Mit der SPL kamen vordefinierte Interfaces wie Countable, IteratorAggregate
    und Serializable, die wirklich vielen interessanten Iteratoren,
    die Klassen SplFileInfo und SplFileObject,
    ArrayAccess, das es einem endlich ermöglichte eigene Container zu schreiben
    die den Array-Operator ([]) nutzen und
    mit PHP 5.3 auch noch ein paar neue Datenstrukturen.
&lt;/p&gt;
&lt;h3&gt;Inhaltsverzeichnis&lt;/h3&gt;
&lt;ul class="list"&gt;
    &lt;li&gt;&lt;a href="#Exceptions"&gt;Exceptions&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#Iteratoren"&gt;Iteratoren&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#Vordefinierte_Interfaces"&gt;Vordefinierte Interfaces&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#Datenstrukturen"&gt;Datenstrukturen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#Observer"&gt;Observer&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#Funktionen"&gt;Funktionen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#SPL_Codeschnipsel"&gt;SPL-Codeschnipsel&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#Weiterfuehrende_Informationen"&gt;Weiterführende Informationen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#Fazit"&gt;Fazit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a name="Exceptions" id="Exceptions"&gt;Exceptions&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Die SPL bringt zusätzlich zu der auch seit PHP 5 vorhandenen
    Standard-Exception einen Satz an weiteren Exceptions für
    verschiedene Fälle mit die man benutzen kann
    oder auch darauf seine eigenen Exceptions aufbauen kann.
    Die Exceptions selbst bieten keinerlei zusätzliche Funktionalität
    sondern erben nur von der Standard-Exception, sollen aber durch
    ihre Namen zur Verbesserung der Codequalität beitragen und eine Hilfe
    beim Debuggen bieten. Ihre Namen ähneln denen aus aus anderen Sprachen wie
    Java oder C++.
&lt;/p&gt;
&lt;ul class="list"&gt;
    &lt;li&gt;BadFunctionCallException&lt;/li&gt;
    &lt;li&gt;BadMethodCallException&lt;/li&gt;
    &lt;li&gt;DomainException&lt;/li&gt;
    &lt;li&gt;InvalidArgumentException&lt;/li&gt;
    &lt;li&gt;LengthException&lt;/li&gt;
    &lt;li&gt;LogicException&lt;/li&gt;
    &lt;li&gt;OutOfBoundsException&lt;/li&gt;
    &lt;li&gt;OutOfRangeException&lt;/li&gt;
    &lt;li&gt;OverflowException&lt;/li&gt;
    &lt;li&gt;RangeException&lt;/li&gt;
    &lt;li&gt;RuntimeException&lt;/li&gt;
    &lt;li&gt;UnderflowException&lt;/li&gt;
    &lt;li&gt;UnexpectedValueException&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a name="Iteratoren" id="Iteratoren"&gt;Iteratoren&lt;/a&gt;&lt;/h2&gt;
&lt;ul class="list"&gt;
    &lt;li&gt;AppendIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;ArrayIterator (seit PHP 5.0)&lt;/li&gt;
    &lt;li&gt;CachingIterator (seit PHP 5.0)&lt;/li&gt;
    &lt;li&gt;DirectoryIterator (seit PHP 5.0)&lt;/li&gt;
    &lt;li&gt;EmptyIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;FilterIterator (seit PHP 5.0)&lt;/li&gt;
    &lt;li&gt;GlobIterator (seit PHP 5.3)&lt;/li&gt;
    &lt;li&gt;InfiniteIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;IteratorIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;LimitIterator (seit PHP 5.0)&lt;/li&gt;
    &lt;li&gt;MultipleIterator (seit PHP 5.3)&lt;/li&gt;
    &lt;li&gt;NoRewindIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;ParentIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;RecursiveArrayIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;RecursiveCachingIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;RecursiveDirectoryIterator (seit PHP 5.0)&lt;/li&gt;
    &lt;li&gt;RecursiveFilterIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;RecursiveFilesystemIterator (seit PHP 5.3)&lt;/li&gt;
    &lt;li&gt;RecursiveIteratorIterator (seit PHP 5.0)&lt;/li&gt;
    &lt;li&gt;RecursiveTreeIterator (seit PHP 5.3)&lt;/li&gt;
    &lt;li&gt;RecursiveRegexIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;RegexIterator (seit PHP 5.1)&lt;/li&gt;
    &lt;li&gt;SimpleXMLIterator (seit PHP 5.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Die Iteratoren haben wohl bei mir persönlich das größte Interesse
    geweckt, die Möglichkeiten mit dem DirectoryIterator oder dem
    RecursiveDirectoryIterator Verzeichnis-Strukturen vernünftig
    iterieren zu können anstatt umständlich mit glob() oder
    open/read/closedir() zu arbeiten, kombiniert mit eigenen
    FilterIterator und SortIterator lässt sich damit sehr komfortabel
    arbeiten.&lt;br /&gt;
    Das SplFileInfo-Objekt erlaubt es beim Traversieren der
    Verzeichnis-Iteratoren dann auch sehr komfortabel auf alle
    relevanten Informationen des Elements zuzugreifen und mittels
    dem SplFileObject lässt sich über die einzelnen Zeilen einer
    Datei iterieren
&lt;/p&gt;
&lt;h2&gt;&lt;a name="Vordefinierte_Interfaces"
       id="Vordefinierte_Interfaces"&gt;Vordefinierte Interfaces&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Die vordefinierten Interfaces wie Countable, Serializeable, Iterator,
    IteratorAggregate, RecursiveIterator, Seekableiterator und ArrayAccess spielen
    eine ganz besondere Rolle, weil sie im Gegensatz zu selbst definierten
    Interfaces direkt in C geschrieben sind und im Hintergrund die Verknüpfung mit
    nativen PHP-Funktionen und Sprachkonstrukten (count(), serialize(), foreach())
    ermöglichen oder Klassen die das Interface implementieren um Operatoren ([])
    erweitern.
&lt;/p&gt;
&lt;h2&gt;&lt;a name="Datenstrukturen" id="Datenstrukturen"&gt;Datenstrukturen&lt;/a&gt;&lt;/h2&gt;
Seit PHP 5.3 sind auch einige Klassen dazugekommen die dynamische
und Geschwindigkeits/Speicherverbrauch-optimierte Datenstrukturen zur
Verfügung stellen. &lt;br /&gt;
Dazu gehören:
&lt;ul class="list"&gt;
    &lt;li&gt;SplDoublyLinkedList&lt;/li&gt;
    &lt;li&gt;SplStack&lt;/li&gt;
    &lt;li&gt;SplQueue&lt;/li&gt;
    &lt;li&gt;SplHeap&lt;/li&gt;
    &lt;li&gt;SplMaxHeap&lt;/li&gt;
    &lt;li&gt;SplMinHeap&lt;/li&gt;
    &lt;li&gt;SplPriorityQueue&lt;/li&gt;
    &lt;li&gt;SplFixedArray&lt;/li&gt;
    &lt;li&gt;SplObjectStorage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Eine nette Presentation mit ein paar Benchmarks zu diesen Datenstrukturen
    von &lt;a href="http://ishouldbecoding.com/"&gt;Matthew Turland&lt;/a&gt; findet man
    bei Slideshare: &lt;a href="http://www.slideshare.net/tobias382/new-spl-features-in-php-53"&gt;New SPL Features in PHP 5.4&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="Observer" id="Observer"&gt;Observer&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Mit den Interfaces SplObserver und SplSubject stellt die SPL seit PHP 5.1
    auch fertige Beispiel-Interfaces für das &lt;a href="http://de.wikipedia.org/wiki/Observer_(Entwurfsmuster)"&gt;Observer-Pattern&lt;/a&gt;
    zur Verfügung. Zur Implementierung des Observers bietet sich dann gleich
    die neue SplObjectStorage-Klasse an.
&lt;/p&gt;
&lt;h2&gt;&lt;a name="Funktionen" id="Funktionen"&gt;Funktionen&lt;/a&gt;&lt;/h2&gt;
Auch wenn die SPL eigentlich eine wachsende Sammlung von (abstrakten)
Klassen und Interfaces ist, haben sich auch ein paar Funktionen dazugesellt.
&lt;ul class="list"&gt;
    &lt;li&gt;class_implements - Gibt die implementierten Interfaces einer Klasse
        zurück&lt;/li&gt;
    &lt;li&gt;class_parents - Gibt die Elternklassen eines Objekts zurück&lt;/li&gt;
    &lt;li&gt;iterator_apply - Wendet eine Callback-Funktion auf alle Elemente eines
        Interators an (wie array_walk für Arrays)&lt;/li&gt;
    &lt;li&gt;iterator_count - Zählt die Anzahl der Elemente eines Iterators&lt;/li&gt;
    &lt;li&gt;iterator_to_array - Wandelt einen Iterator in ein Array mit Elementen
        um&lt;/li&gt;
    &lt;li&gt;spl_autoload_call - Funktion zum laden einer Klasse mit den vorhandenen
        Autoload-Funktionen&lt;/li&gt;
    &lt;li&gt;spl_autoload_extensions - Gibt die verwendeten Dateiendungen für die
        Autoload-Funktion zurück&lt;/li&gt;
    &lt;li&gt;spl_autoload_functions - Gibt alle vorhandenen Autoload-Funktionen
        zurück&lt;/li&gt;
    &lt;li&gt;spl_autoload_register - Hinzufügen von Autoload-Funktionen&lt;/li&gt;
    &lt;li&gt;spl_autoload_unregister - Entfernen von Autoload-Funktionen&lt;/li&gt;
    &lt;li&gt;spl_autoload - Implementierung für die autoload-Funktion&lt;/li&gt;
    &lt;li&gt;spl_classes - Gibt ein Array mit allen in der aktuellen Version zur
        Verfügung gestellten SPL-Klassen zurück&lt;/li&gt;
    &lt;li&gt;spl_object_hash - Gibt einen eindeutigen Hash für das Objekt zurück&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Sehr interessant sind die spl_autoload_*-Funktionen die in den
    Autoloadern der meisten Frameworks und Bibliotheken genutzt werden,
    damit lassen sich sehr schöne Regeln zum automatischen Laden
    (Lazy Load) von Klassen und Interfaces erstellen damit nur Klassen geladen werden
    die auch wirklich gebraucht werden, aber jeder gleichzeitig frei
    ist das Mapping zwischen Klassenname und Dateinamen selbst zu bestimmen.&lt;br /&gt;
    So lassen sich auch verschiedene Frameworks und Bibliothken mit
    Autoloading zusammen nutzen. Was man schön am Autoloader des
    &lt;a href="http://framework.zend.com/"&gt;Zend Frameworks&lt;/a&gt; sieht.
&lt;/p&gt;
&lt;h2&gt;&lt;a name="SPL_Codeschnipsel" id="SPL_Codeschnipsel"&gt;SPL-Codeschnipsel&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Auch ich habe ein paar &lt;a href="/codeschnipsel/"&gt;Codeschnipsel&lt;/a&gt; auf meiner
    Seite die Klassen und Interfaces der &lt;a href="/tags/SPL"&gt;SPL&lt;/a&gt; nutzen, insbesondere &lt;a
        href="/tags/DirectoryIterator"&gt;DirectoryIterator&lt;/a&gt;, &lt;a
        href="/tags/RecursiveDirectoryIterator"&gt;RecursiveDirectoryIterator&lt;/a&gt; und &lt;a
        href="/tags/SplFileInfo"&gt;SplFileInfo&lt;/a&gt;.
&lt;/p&gt;
&lt;ul class="list"&gt;
    &lt;li&gt;&lt;a
            href="/codeschnipsel/1-Verzeichnisse-rekursiv-auslesen-mit-den-Iteratoren-der-SPL"&gt;Verzeichnisse
            (rekursiv) auslesen mit den Iteratoren der SPL&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a
            href="/codeschnipsel/15-Ordnergroese-Anzahl-Dateien-Ordner-und-Symlinks-mit-PHP-und-der-RecursiveDirectoryIterator-auszulesen"&gt;Ordnergröße,
            Anzahl Dateien, Ordner und Symlinks mit PHP und der
            RecursiveDirectoryIterator auszulesen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a
            href="/codeschnipsel/9-Zip-Archiv-von-einem-Ordner-mit-PHP-erstellen-und-entpacken"&gt;Zip-Archiv
            von einem Ordner mit PHP erstellen und entpacken&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a
            href="/codeschnipsel/19-Verschachtelte-XML-Dateiliste-eines-Ordner-ueber-den-RecursiveDirectoryIterator-und-DOM-erstellen"&gt;Verschachtelte
            XML-Dateiliste eines Ordner über den RecursiveDirectoryIterator und DOM
            erstellen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a
            href="/codeschnipsel/20-Lineare-XML-Dateiliste-eines-Ordner-ueber-den-RecursiveDirectoryIterator-und-DOM-erstellen"&gt;Lineare
            XML-Dateiliste eines Ordner über den RecursiveDirectoryIterator und DOM
            erstellen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a
            href="/codeschnipsel/21-CSV-Dateiliste-eines-Ordners-erstellen"&gt;CSV-Dateiliste
            eines Ordners erstellen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a
            href="/codeschnipsel/22-TXT-Dateiliste-eines-Ordners-erstellen"&gt;TXT-Dateiliste
            eines Ordners erstellen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/codeschnipsel/27-Alle-Bilder-jpg-jpeg-png-gif-aus-einem-Verzeichnis-mit-PHP-und-dem-RegexIterator-herausfiltern"&gt;Alle Bilder (jpg, jpeg, png, gif) aus einem Verzeichnis mit PHP und dem RegexIterator herausfiltern&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="/codeschnipsel/28-Groesen-und-Dateityp-gefilterte-Dateiliste-mit-dem-RecursiveDirectoryIterator-dem-RegexIterator-und-einem-eigenen-FilterIterator-SizeFilterIterator"&gt;Größen und Dateityp gefilterte Dateiliste mit dem RecursiveDirectoryIterator, dem RegexIterator und einem eigenen FilterIterator (SizeFilterIterator)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a name="Weiterfuehrende_Informationen"
       id="Weiterfuehrende_Informationen"&gt;Weiterführende Informationen&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Meiner Meinung nach die beste und aktuellste API-Übersicht über die SPL von
    &lt;a href="http://marcus-boerger.de/"&gt;Marcus &amp;quot;helly&amp;quot; Börger&lt;/a&gt; findet
    man hier auf php.net: &lt;a href="http://www.php.net/~helly/php/ext/spl/"&gt;http://www.php.net/~helly/php/ext/spl/&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    Zu beachten ist, dass es dort auch Iteratoren, Interfaces und Klassen
    gibt die es noch nicht in ein Releases der SPL geschafft haben, manche
    sind noch in der Entwicklung und werden wohl in späteren Releases von PHP 5.3 zur
    Verfügung stehen.
&lt;/p&gt;
&lt;p&gt;
    Ansonsten gibt es natürlich auch im PHP-Manual ein paar Seiten über die
    &lt;a href="http://de2.php.net/manual/de/book.spl.php"&gt;SPL&lt;/a&gt;, diese sind allerdings
    meistens nicht auf dem neuesten Stand.
&lt;/p&gt;
&lt;p&gt;
    Das Buch Professionelle Softwareentwicklung mit PHP 5 von
    &lt;a href="http://sebastian-bergmann.de/"&gt;Sebastian Bergmann&lt;/a&gt;
    (Programmierer von &lt;a href="http://www.phpunit.de/"&gt;PHPUnit&lt;/a&gt;) bietet
    neben anderem auch einen guten Einstieg in die SPL mit ein paar Code-Beispielen.
    Das Buch gibt es kostenlos zum online lesen unter
    &lt;a href="http://professionelle-softwareentwicklung-mit-php5.de/"&gt;http://professionelle-softwareentwicklung-mit-php5.de/&lt;/a&gt;
    oder bei Amazon:
    &lt;a href="http://www.amazon.de/gp/product/3898642291?ie=UTF8&amp;amp;tag=robonetblog-21&amp;amp;linkCode=as2&amp;amp;camp=1638&amp;amp;creative=19454&amp;amp;creativeASIN=3898642291"&gt;Professionelle Softwareentwicklung mit PHP 5: Objektorientierung, Entwurfsmuster, Modellierung und fortgeschrittene Datenbankprogrammierung&lt;/a&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="Fazit" id="Fazit"&gt;Fazit&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Obwohl die SPL einiges zu bieten hat, sie auch schon in einigen Frameworks
    (wie dem Zend Framework oder Symfony) zum Einsatz kommt, wird sie leider
    von vielen PHP-Programmierer nicht genutzt, was meiner Meinung nach am
    stärksten an ihrem geringen Bekanntheitsgrad liegt und auch etwas an der
    Dokumentation (und den Übersetzungen) im PHP-Manual die meistens
    sehr stark hinter der wirklichen Entwicklung hinterherhinken. Trotzdem kann
    ich jedem Programmierer der mit PHP 5 oder sogar 5.3 arbeitet nur empfehlen
    sich diese Extension mal genauer anzuschauen. Ich werde versuchen in der
    nächsten Zeit noch ein paar mehr Codeschnipsel und vielleicht kleine Artikel
    zur SPL zu verfassen um die Möglichkeiten die sich insbesondere durch
    die Iteratoren ergeben aufzeigen.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=68mFtedEv9Q:pRfrQqM_c6A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=68mFtedEv9Q:pRfrQqM_c6A:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=68mFtedEv9Q:pRfrQqM_c6A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=68mFtedEv9Q:pRfrQqM_c6A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=68mFtedEv9Q:pRfrQqM_c6A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=68mFtedEv9Q:pRfrQqM_c6A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=68mFtedEv9Q:pRfrQqM_c6A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 29 Sep 2009 16:09:23 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Größen und Dateityp gefilterte Dateiliste mit dem RecursiveDirectoryIterator, dem RegexIterator und einem eigenen FilterIterator (SizeFilterIterator)]]></title>
      <link>http://www.robo47.net/codeschnipsel/28-Groesen-und-Dateityp-gefilterte-Dateiliste-mit-dem-RecursiveDirectoryIterator-dem-RegexIterator-und-einem-eigenen-FilterIterator-SizeFilterIterator</link>
      <guid>http://www.robo47.net/codeschnipsel/28-Groesen-und-Dateityp-gefilterte-Dateiliste-mit-dem-RecursiveDirectoryIterator-dem-RegexIterator-und-einem-eigenen-FilterIterator-SizeFilterIterator</guid>
      <description>Dieser Codeschnipsel zeigt die verwendung eines selbst geschriebenen FilterIterators, dem mySizeFilterIterator der Dateien nach ihrer Größe filtert.&lt;br /&gt;
Ausserdem kommt danach noch der RegexFilter (auch ein FilterIterator, aber Bestandteil der SPL) zum Einsatz um nur die .pdf und .txt Dateien auszugeben.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&lt;?php
$dirIter = new RecursiveDirectoryIterator('./');
$recursiveIterator = new RecursiveIteratorIterator($dirIter,
    RecursiveIteratorIterator::SELF_FIRST,
    RecursiveIteratorIterator::CATCH_GET_CHILD);

/**
 * Filter
 */
class mySizeFilterIterator extends FilterIterator
{
    protected $isMinSize = true;
    protected $size = 0;

    /**
     *
     * @param Iterator
     * @param integer
     * @param boolean
     */
    public function __construct(Iterator $iterator,
                                $size,
                                $minSize = true)
    {
        parent::__construct($iterator);
        $this-&gt;size = $size;
        $this-&gt;isMinSize = $minSize;
    }

    /**
     * Filtert ungewünschte Einträge heraus
     * @throws InvalidArgumentException
     * @return bool
     */
    public function accept() {
        if (!parent::current() instanceof SplFileInfo) {
            $message = 'Iterators value need to be a SplFileInfo-Object';
            throw new InvalidArgumentException($message);
        }
        if ($this-&gt;isMinSize) {
            if (parent::current()-&gt;getSize() &lt;= $this-&gt;size) {
                return false;
            }
        } else {
            if (parent::current()-&gt;getSize() &gt;= $this-&gt;size) {
                return false;
            }
        }
        return true;
    }
}

$sizeIterator = new mySizeFilterIterator($recursiveIterator, 300, true);

foreach($sizeIterator as $key =&gt; $value) {
    // $key ist der alte Key
    // $value weiterhin das SplFileInfo-Objekt
    echo $key . PHP_EOL;
}
echo '&lt;hr /&gt;';

// Jetzt erweitern wir das ganze noch mit dem RegexIterator um nur
// pdf und txt-Dateien zu bekommen
$regexIterator = new RegexIterator($sizeIterator,
                                   '~^.+\.(pdf|txt)$~i');

foreach($regexIterator as $key =&gt; $value) {
    // $key ist der alte Key
    // $value weiterhin das SplFileInfo-Objekt
    echo $key . PHP_EOL;
}

?&gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Wjpbr_SCGy4:liolov3w0Pc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Wjpbr_SCGy4:liolov3w0Pc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Wjpbr_SCGy4:liolov3w0Pc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Wjpbr_SCGy4:liolov3w0Pc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Wjpbr_SCGy4:liolov3w0Pc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Wjpbr_SCGy4:liolov3w0Pc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Wjpbr_SCGy4:liolov3w0Pc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 29 Sep 2009 11:18:24 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Alle Bilder (jpg, jpeg, png, gif) aus einem Verzeichnis mit PHP und dem RegexIterator herausfiltern]]></title>
      <link>http://www.robo47.net/codeschnipsel/27-Alle-Bilder-jpg-jpeg-png-gif-aus-einem-Verzeichnis-mit-PHP-und-dem-RegexIterator-herausfiltern</link>
      <guid>http://www.robo47.net/codeschnipsel/27-Alle-Bilder-jpg-jpeg-png-gif-aus-einem-Verzeichnis-mit-PHP-und-dem-RegexIterator-herausfiltern</guid>
      <description>Kleiner Schnipsel um zu zeigen wie man mittels dem RegexIterator (einem FilterIterator der SPL) einen RecursiveDirectoryIterator filtern kann um z.b. nur Bilder (jpg, jpeg, png, gif) aus einem Verzeichnis mit PHP und dem RegexIterator herausfiltern.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&lt;?php
$dirIter = new RecursiveDirectoryIterator('./');
$recursiveIterator = new RecursiveIteratorIterator($dirIter,
    RecursiveIteratorIterator::SELF_FIRST,
    RecursiveIteratorIterator::CATCH_GET_CHILD);
$regexIterator = new RegexIterator($recursiveIterator,
                                   '~^.+\.(jpeg|jpg|gif|png)$~i',
                                   RegexIterator::GET_MATCH);

foreach($regexIterator as $key =&gt; $value) {
    // $key ist jetzt der alte Key
    // $value ein Array mit matches genauso wie $matches bei  
    // http://de2.php.net/preg_match
    echo $key . PHP_EOL;
}
?&gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=y5b-8lNNom4:Y8_SqAzGdQo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=y5b-8lNNom4:Y8_SqAzGdQo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=y5b-8lNNom4:Y8_SqAzGdQo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=y5b-8lNNom4:Y8_SqAzGdQo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=y5b-8lNNom4:Y8_SqAzGdQo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=y5b-8lNNom4:Y8_SqAzGdQo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=y5b-8lNNom4:Y8_SqAzGdQo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 29 Sep 2009 10:48:03 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Mail() ist tot, es lebe mail()]]></title>
      <link>http://www.robo47.net/text/38-Mail-ist-tot-es-lebe-mail</link>
      <guid>http://www.robo47.net/text/38-Mail-ist-tot-es-lebe-mail</guid>
      <description>&lt;p&gt;
Immer wieder sieht man wie sich Leute mit mail() abquälen wenn sie mit
PHP E-Mails versenden wollen. &lt;br /&gt;
&lt;br /&gt;
Die Probleme können hier verschiedene Ursachen haben:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; unzureichende Kenntnisse über relevante RFC's (Umbrüche,
Datumsformate)&lt;/li&gt;
&lt;li&gt; fehlende/falsche header&lt;/li&gt;
&lt;li&gt; bescheidenes/umständliches Setup beim Hoster (Zusätzliches
freischalten von Absender, Limitierungen für Anzahl, Größe,
Empfängerzahl ... )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Während es für die kleine schnelle Info-Mail gerade noch okay ist,
versuchen Leute immer wieder das Rad neu zu erfinden wenn es
um Dinge wie HTML-Mails, Datei-Anhängen, eingebette Daten oder die passende
Mail-Header geht. &lt;br /&gt;
Das muss heutzutage absolut nicht sein, denn dieses Rad wurde
schon zu oft neu erfunden und die Chance dass E-Mails wegen
Kleinigkeiten (falscher Umbruch, ungültiger Header, falsches Datumsformat, ...) von anderen
Mailservern als SPAM markiert werden, ganz abgelehnt werden
oder der Mailclient sie
am Ende nicht ordentlich darstellen kann ist einfach zu groß.&lt;br /&gt;
Die Möglichkeiten eventuelle Fehler zu debuggen sind oftmals sehr schwer, weil sie von vielen Faktoren wie z.b. dem eigenen Mailserver, dem fremden Mailserver, dem Mailclient des Empfängers, der jeweiligen Konfiguration dieser Komponenten und eventueller weiterer Komponenten abhängt.
&lt;br /&gt;
Deshalb sollte man zum verschicken von Emails auf fertige
erprobte und geteste Klassen zurückgreifen. &lt;br /&gt;
&lt;br /&gt;
Hier gibt es mittlerweile einige sehr gute
Klassen die neben HTML-Mails, eingebetten Daten (CSS, Bilder),
Datei-Anhängen und Mail-Headern auch noch
verschiedene Transports (mail(),
Sendmail und SMTP) unterstützen. Ausserdem verfügen manche sogar noch über Plugins oder Erweiterungen für LoadBalancing zwischen mehreren Servern, Failover, Speicher-sparende Versand (trotz großer Dateianhänge) und Queueing die sich beim Massenversand von Mails von Vorteil sein können.&lt;br /&gt;
&lt;br /&gt;
Beim Versand über SMTP spart man sich oftmals auch die Nervereien mit dem
umständlichen Setup beim Hoster und gerade beim Versenden von großen
Mengen an Mails (Newsletter etc) ist der direkte Versand via SMTP auch noch schneller.&lt;br /&gt;
&lt;br /&gt;
Ein paar dieser Klassen möchte ich hier mal auflisten und für ein paar
habe ich auch ein paar fertige Codeschnipsel die zeigen wie man damit
eine HTML-Email via SMTP versendet.&lt;br /&gt;
&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;td&gt;Mailer&lt;/td&gt;
      &lt;td&gt;Version&lt;/td&gt;
      &lt;td&gt;PHP-Version&lt;/td&gt;
      &lt;td&gt;Extensions&lt;/td&gt;
      &lt;td&gt;Lizenz&lt;/td&gt;
      &lt;td&gt;Links&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;phpmailer&lt;/td&gt;
      &lt;td&gt;5.0.2 (26.05.2009)&lt;/td&gt;
      &lt;td&gt;php 5&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt; LGPL v2.1&lt;/td&gt;
      &lt;td&gt;&lt;a
 href="http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/PHPMailer%20v5.0.2/"&gt;Download&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Zend_Mail&lt;/td&gt;
      &lt;td&gt;1.9.3 (22.09.2009)&lt;/td&gt;
      &lt;td&gt;php 5.2&lt;/td&gt;
      &lt;td&gt;spl&lt;br /&gt;
optional: posix&lt;/td&gt;
      &lt;td&gt;&lt;a href="http://framework.zend.com/license"&gt;New
BSD License&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;
      &lt;a href="http://framework.zend.com/download/latest"&gt;Download&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ezcMail&lt;/td&gt;
      &lt;td&gt;1.6.3 (22.06.2009)&lt;br /&gt;
ezComponents 2009.1.2
      &lt;/td&gt;
      &lt;td&gt;php 5.2&lt;/td&gt;
      &lt;td&gt;pcre, spl, reflection, iconv&lt;br /&gt;
optional: openssl, mcrypt, fileinfo &lt;/td&gt;
      &lt;td&gt;&lt;a
 href="http://ezcomponents.org/introduction/license"&gt;New BSD
License&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;
      &lt;a href="http://ezcomponents.org/download"&gt;Download&lt;/a&gt;&lt;a
 href="http://ezcomponents.org/docs/tutorials/Mail"&gt;&lt;br /&gt;
Dokumentation&lt;/a&gt;&lt;br /&gt;
      &lt;a
 href="http://ezcomponents.org/docs/api/2009.1.2/classtrees_Mail.html"&gt;API&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Swiftmailer&lt;/td&gt;
      &lt;td&gt;4.0.5 (27.09.2009)&lt;/td&gt;
      &lt;td&gt;php5&lt;/td&gt;
      &lt;td&gt;spl&lt;/td&gt;
      &lt;td&gt;LGPL 3&lt;/td&gt;
      &lt;td&gt;&lt;a href="http://swiftmailer.org/download"&gt;Download&lt;/a&gt;&lt;a
 href="http://swiftmailer.org/docs/introduction"&gt;&lt;br /&gt;
Dokumentation&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Swiftmailer&lt;/td&gt;
      &lt;td&gt;3.3.3 (26.03.2008)&lt;/td&gt;
      &lt;td&gt;php 4/php5&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;LGPL 3&lt;/td&gt;
      &lt;td&gt;&lt;a href="http://swiftmailer.org/downloads/archive"&gt;Download&lt;/a&gt;&lt;a
 href="http://swiftmailer.org/wikidocs/"&gt;&lt;br /&gt;
Dokumentation&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PEAR Mail&lt;br /&gt;
(PEAR Mime)&lt;/td&gt;
      &lt;td&gt;1.1.4 (11.10.2006)&lt;br /&gt;
1.2.0 beta (15.5.2009)&lt;/td&gt;
      &lt;td&gt;php4&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;PHP 2.02/New BSD License&lt;/td&gt;
      &lt;td&gt;&lt;a href="http://pear.php.net/package/Mail"&gt;Download&lt;/a&gt;&lt;a
 href="http://pear.php.net/package/Mail/docs/1.1.14/"&gt;&lt;br /&gt;
Dokumentation&lt;/a&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
Alle diese Klassen bieten die Grundfunktionen für den Versand von
(Html-)E-Mails via mail() oder SMTP, erlauben es Dateianhänge
hinzuzufügen und unterstützen das setzen von Mail-Headern (Return-Path,
etc).&lt;br /&gt;
&lt;br /&gt;
Ich selbst setzte meistens Zend_Mail ein da ich eh mit dem
Zend_Framework arbeite. Ansonsten fällt meine Wahl auf den Swiftmailer.&lt;br /&gt;
&lt;br /&gt;
Codeschnipsel für den Versand von HTML-Emails via SMTP:&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.robo47.net/codeschnipsel/14-Html-E-Mail-ueber-SMTP-via-phpmailer-5.0-versenden"&gt;HTML-Email via SMTP versenden mit phpmailer 5.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.robo47.net/codeschnipsel/5-Html-E-Mail-ueber-SMTP-via-Swiftmailer-3.3-versenden"&gt;HTML-Email via SMTP versenden mit Swiftmaler 3.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.robo47.net/codeschnipsel/13-Html-E-Mail-ueber-SMTP-via-Swiftmailer-4.0-versenden"&gt;HTML-Email via SMTP versenden mit Swiftmailer 4.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.robo47.net/codeschnipsel/4-Html-E-Mail-ueber-SMTP-via-Zend_Mail-versenden"&gt;HTML-Email via SMTP versenden mit Zend_Mail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.robo47.net/codeschnipsel/7-Html-E-Mail-ueber-SMTP-via-PEAR-Mail-und-PEAR-Mime-versenden"&gt;HTML-Email via SMTP versenden mit Pear Mail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AYJTwgNe2Es:hJL6UR5D2i4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AYJTwgNe2Es:hJL6UR5D2i4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AYJTwgNe2Es:hJL6UR5D2i4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=AYJTwgNe2Es:hJL6UR5D2i4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AYJTwgNe2Es:hJL6UR5D2i4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=AYJTwgNe2Es:hJL6UR5D2i4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AYJTwgNe2Es:hJL6UR5D2i4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 28 Sep 2009 01:43:34 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Größe der gemounteten Festplatte/Laufwerke auslesen mit PHP unter Linux]]></title>
      <link>http://www.robo47.net/codeschnipsel/26-Groese-der-gemounteten-Festplatte-Laufwerke-auslesen-mit-PHP-unter-Linux</link>
      <guid>http://www.robo47.net/codeschnipsel/26-Groese-der-gemounteten-Festplatte-Laufwerke-auslesen-mit-PHP-unter-Linux</guid>
      <description>Um diesen Code nutzen zu können muss die funktion exec() erlaubt sein, es muss sich um ein Linux-System handeln und die df-binary muss von dem Benutzer unter dem PHP läuft ausgeführt werden können.
&lt;br /&gt;
Beispiel-Ausgabe:
&lt;pre&gt;
Es wurden 2 Laufwerke gefunden: 

Laufwerk: /dev/md2
Dateisystem: ext3
Größe: 688G
Belegt: 36G
Frei: 617G
Benutzt %: 6%
Mountpunkt: /

Laufwerk: /dev/md1
Dateisystem: ext3
Größe: 2.0G
Belegt: 86M
Frei: 1.9G
Benutzt %: 5%
Mountpunkt: /boot


&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&lt;?php
exec('df -h -T', $output);
$devices = array();
foreach($output as $line) {
    $expl = explode(' ', preg_replace('~[ ]+~', ' ', $line));
    // ignore all drives which don't begin with /
    if (count($expl) == 7 &amp;&amp; strlen($expl[0]) &gt; 0 &amp;&amp; $expl[0]{0} == '/') {
        $devices[] = array('device' =&gt; $expl[0],
                           'filesystem' =&gt; $expl[1],
                           'size' =&gt; $expl[2],
                           'used' =&gt; $expl[3],
                           'free' =&gt; $expl[4],
                           'usedpercent' =&gt; $expl[5],
                           'mountpoint' =&gt; $expl[6]);
    }
}
echo 'Es wurden ' . count($devices) . ' Laufwerke gefunden: ' . PHP_EOL .
     PHP_EOL;
foreach($devices as $device) {
    echo 'Laufwerk: ' . $device['device'] . PHP_EOL;
    echo 'Dateisystem: ' . $device['filesystem'] . PHP_EOL;
    echo 'Größe: ' . $device['size'] . PHP_EOL;
    echo 'Belegt: ' . $device['used'] . PHP_EOL;
    echo 'Frei: ' . $device['free'] . PHP_EOL;
    echo 'Benutzt %: ' . $device['usedpercent'] . PHP_EOL;
    echo 'Mountpunkt: ' . $device['mountpoint'] . PHP_EOL;
    echo PHP_EOL;
}
?&gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=4VfcNygDwkA:imlcE2Csikk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=4VfcNygDwkA:imlcE2Csikk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=4VfcNygDwkA:imlcE2Csikk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=4VfcNygDwkA:imlcE2Csikk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=4VfcNygDwkA:imlcE2Csikk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=4VfcNygDwkA:imlcE2Csikk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=4VfcNygDwkA:imlcE2Csikk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 27 Sep 2009 14:57:16 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Prozessor / CPU mit PHP unter  Linux auslesen]]></title>
      <link>http://www.robo47.net/codeschnipsel/25-Prozessor-CPU-mit-PHP-unter-Linux-auslesen</link>
      <guid>http://www.robo47.net/codeschnipsel/25-Prozessor-CPU-mit-PHP-unter-Linux-auslesen</guid>
      <description>Um diesen Code nutzen zu können muss die funktion exec() erlaubt sein, es muss sich um ein Linux-System handeln, die free-binary muss von dem Benutzer unter dem PHP läuft ausgeführt werden können und er muss Lesezugriff auf /proc/cpuinfo haben
&lt;br /&gt;
Beispiel-Ausgabe:
&lt;pre&gt;
Das System hat 8 Prozessoren und/oder Kerne:
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
 - Intel(R) Core(TM) i7 CPU         920  @ 2.67GHz
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&lt;?php
exec('cat /proc/cpuinfo', $output);
$processors = array();
foreach($output as $line) {
    if (strpos($line, 'model name') !== false) {
        list($null, $cpu) = explode(':', $line);
        $processors[] = trim($cpu);
    }
}
echo 'Das System hat ' . count($processors) . ' Prozessoren und/oder Kerne:' .
     PHP_EOL;
foreach($processors as $processor) {
    echo ' - ' . $processor . PHP_EOL;
}
?&gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=wLiQzlA3wb4:af49vFepyyY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=wLiQzlA3wb4:af49vFepyyY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=wLiQzlA3wb4:af49vFepyyY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=wLiQzlA3wb4:af49vFepyyY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=wLiQzlA3wb4:af49vFepyyY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=wLiQzlA3wb4:af49vFepyyY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=wLiQzlA3wb4:af49vFepyyY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 27 Sep 2009 14:34:34 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Größe des Arbeitsspeichers und der Swap-Datei mit php unter Linux bestimmen]]></title>
      <link>http://www.robo47.net/codeschnipsel/24-Groese-des-Arbeitsspeichers-und-der-Swap-Datei-mit-php-unter-Linux-bestimmen</link>
      <guid>http://www.robo47.net/codeschnipsel/24-Groese-des-Arbeitsspeichers-und-der-Swap-Datei-mit-php-unter-Linux-bestimmen</guid>
      <description>Um diesen Code nutzen zu können muss die funktion exec() erlaubt sein, es muss sich um ein Linux-System handeln auf dem free installiert ist (Standard bei Debian/Ubuntu) und die free-binary muss von dem Benutzer unter dem PHP läuft ausgeführt werden können.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
&lt;?php
// -b -&gt; Speicher in Bytes
// -k -&gt; Speicher in Kilobyte
// -m -&gt; Speicher in Megabyte
// -g -&gt; Speicher in Gigabytes
exec('free -t -m', $output);
list($null, $ram_total, $ram_used, $ram_free, $ram_shared, $ram_buffers, 
     $ram_cached)
     = explode(' ', preg_replace('~[ ]+~', ' ', $output[1]));
list($null, $swap_total, $swap_used, $swap_free)
    = explode(' ', preg_replace('~[ ]+~', ' ', $output[3]));
list($null, $total_total, $total_used, $total_free)
     = explode(' ', preg_replace('~[ ]+~', ' ', $output[4]));
unset($null);
echo 'Arbeitsspeicher: ' . $ram_total . 'MB' . PHP_EOL;
echo 'benutzt: ' . $ram_used . 'MB' .PHP_EOL;
echo 'frei: ' . $ram_free . 'MB' .PHP_EOL;
echo PHP_EOL;
echo 'Swap: ' . $swap_total . 'MB' .PHP_EOL;
echo 'benutzt: ' . $swap_used . 'MB' .PHP_EOL;
echo 'frei: ' . $swap_free . 'MB' .PHP_EOL;
echo PHP_EOL;
echo 'Total: ' . $total_total . 'MB' .PHP_EOL;
echo 'benutzt: ' . $total_used . 'MB' .PHP_EOL;
echo 'frei: ' . $total_free . 'MB' .PHP_EOL;
?&gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ikOyshgISAQ:u-xabo31Lro:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ikOyshgISAQ:u-xabo31Lro:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ikOyshgISAQ:u-xabo31Lro:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ikOyshgISAQ:u-xabo31Lro:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ikOyshgISAQ:u-xabo31Lro:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ikOyshgISAQ:u-xabo31Lro:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ikOyshgISAQ:u-xabo31Lro:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 27 Sep 2009 14:14:15 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[PHP Syntax-Check Lint Ant Task]]></title>
      <link>http://www.robo47.net/codeschnipsel/23-PHP-Syntax-Check-Lint-Ant-Task</link>
      <guid>http://www.robo47.net/codeschnipsel/23-PHP-Syntax-Check-Lint-Ant-Task</guid>
      <description>PHP Syntax-Check als ANT TASK für Zend Framework Projekte den ich bei mir einsetzte. Wird z.b. laufen gelassen bevor Unittests laufen.
&lt;br /&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project name="projectname" basedir="."&gt;
    &lt;target name="phplinttest"&gt;
        &lt;apply executable   = "php"
               failonerror  = "true"
               error        = "checkphp.err.txt"&gt;
            &lt;arg value="-l" /&gt;
            &lt;fileset dir="application"&gt;
                &lt;include name="**/*.php" /&gt;
                &lt;include name="**/*.phtml" /&gt;
            &lt;/fileset&gt;
            &lt;fileset dir="scripts"&gt;
                &lt;include name="**/*.php" /&gt;
            &lt;/fileset&gt;
            &lt;fileset dir="public"&gt;
                &lt;include name="**/*.php" /&gt;
            &lt;/fileset&gt;
            &lt;fileset dir="library/App"&gt;
                &lt;include name="**/*.php" /&gt;
            &lt;/fileset&gt;
            &lt;fileset dir="tests"&gt;
                &lt;include name="**/*.php" /&gt;
            &lt;/fileset&gt;
        &lt;/apply&gt;
    &lt;/target&gt;
&lt;/project&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AHptcdmoPj0:WjDd1Nv_aLU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AHptcdmoPj0:WjDd1Nv_aLU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AHptcdmoPj0:WjDd1Nv_aLU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=AHptcdmoPj0:WjDd1Nv_aLU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AHptcdmoPj0:WjDd1Nv_aLU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=AHptcdmoPj0:WjDd1Nv_aLU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=AHptcdmoPj0:WjDd1Nv_aLU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 23 Sep 2009 17:36:41 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Canon Objektive und die darin verbauten Bildstabilisator Generationen]]></title>
      <link>http://www.robo47.net/text/37-Canon-Objektive-und-die-darin-verbauten-Bildstabilisator-Generationen</link>
      <guid>http://www.robo47.net/text/37-Canon-Objektive-und-die-darin-verbauten-Bildstabilisator-Generationen</guid>
      <description>&lt;table&gt;
  &lt;thead&gt;
  &lt;tr&gt;
    &lt;td&gt;Objektiv&lt;/td&gt;
    &lt;td&gt;Blenden&lt;/td&gt;
    &lt;td&gt;vom 3-Bein Stativ nutzbar&lt;/td&gt;
    &lt;td&gt;Modis&lt;/td&gt;
    &lt;td&gt;Anlaufzeit&lt;/td&gt;
    &lt;td&gt;Erscheinungs Jahr&lt;/td&gt;
  &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-s-15-85-3.5-5.6-is-usm" href="#canon-ef-s-15-85-3.5-5.6-is-usm"&gt;Canon
EF-S 15-85mm 1:3.5-5.6 IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-4&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;Automatischer Wechsel&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Oktober 2009&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-s-17-55-2.8-is-usm" href="#canon-ef-s-17-55-2.8-is-usm"&gt;Canon
EF-S 17-55mm 1:2.8L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Mai 2006&lt;br&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-s-17-85-3.5-5.6-is-usm" href="#canon-ef-s-17-85-3.5-5.6-is-usm"&gt;Canon
EF-S 17-85mm 1:4-5.6 IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;September 2004&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-s-18-55-3.5-5.6-is" href="#canon-ef-s-18-55-3.5-5.6-is"&gt;Canon
EF-S 18-55mm 1:3.5-5.6 IS&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-4&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;Automatischer Wechsel&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;September 2007&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-s-18-135-3.5-5.6-is" href="#canon-ef-s-18-135-3.5-5.6-is"&gt;Canon
EF-S 18-135mm 1:3.5-5.6 IS&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-4&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;Automatischer Wechsel&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Oktober 2009&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-s-18-200-3.5-5.6-is" href="#canon-ef-s-18-200-3.5-5.6-is"&gt;Canon
EF-S 18-200mm 1:3.5-5.6 IS&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;September 2008&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-s-55-250-4-5.6-is" href="#canon-ef-s-55-250-4-5.6-is"&gt;Canon
EF-S 55-250mm 1:4-5.6 IS&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-4&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;Automatischer Wechsel&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;November 2007&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-24-105-4.0-l-is-usm" href="#canon-ef-24-105-4.0-l-is-usm"&gt;Canon
EF 24-105mm 1:4L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Oktober 2005&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-28-135-3.5-5.6-is-usm" href="#canon-ef-28-135-3.5-5.6-is-usm"&gt;Canon
EF 28-135mm 1:3.5-5.6 IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;nein&lt;/td&gt;
      &lt;td&gt;-&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt;Februar 1998&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-28-300-3.5-5.6-l-is-usm" href="#canon-ef-28-300-3.5-5.6-l-is-usm"&gt;Canon
EF 28-300mm 1:3.5-5.6L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Juni 2004&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-70-200-2.8-l-is-usm" href="#canon-ef-70-200-2.8-l-is-usm"&gt;Canon
EF 70-200mm 1:2.8L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5&lt;/td&gt;
      &lt;td&gt;September 2001&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-70-200-4.0-l-is-usm" href="#canon-ef-70-200-4.0-l-is-usm"&gt;Canon
EF 70-200mm 1:4L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-4&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5&lt;/td&gt;
      &lt;td&gt;November 2006&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-70-300-4.0-5.6-is-usm" href="#canon-ef-70-300-4.0-5.6-is-usm"&gt;Canon
EF 70-300mm 1:4-5.6 IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;nein&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Oktober 2005&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-70-300-4.5-5.6-do-is-usm" href="#canon-ef-70-300-4.5-5.6-do-is-usm"&gt;Canon
EF 70-300mm 1:4.5-5.6 DO IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;nein&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Juni 2004&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-75-300-4.5-5.6-is-usm" href="#canon-ef-75-300-4.5-5.6-do-is-usm"&gt;Canon
EF 75-300mm 1:4.5-5.6 IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;nein&lt;/td&gt;
      &lt;td&gt;&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt;September 1995&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-100-2.8L-macro-is-usm" href="#canon-ef-100-2.8L-macro-is-usm"&gt;Canon
EF 100mm 1:2.8L Macro IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2 bei 1facher Vergrößerung&lt;br /&gt;
1-3 bei 0,5facher Vergrößerung&lt;br /&gt;
1-4 bei normalen Aufnahmen&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;Automatischer Wechsel&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;September 2004&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-100-400-4.5-5.6-l-is-usm" href="#canon-ef-100-400-4.5-5.6-l-is-usm"&gt;Canon
EF 100-400mm 1:4.5-5.6L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;nein&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt;November 1998&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-200-2.0-l-is-usm" href="#canon-ef-200-2.0-l-is-usm"&gt;Canon
EF 200mm 1:2L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-5&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;April 2008&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-300-4.0-l-is-usm" href="#canon-ef-300-4.0-l-is-usm"&gt;Canon
EF 300mm 1:4L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;nein&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt;März 1997&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-300-2.8-l-is-usm" href="#canon-ef-300-2.8-l-is-usm"&gt;Canon
EF 300mm 1:2.8L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt;Juli 1999&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-400-2.8-l-is-usm" href="#canon-ef-400-2.8-l-is-usm"&gt;Canon
EF 400mm 1:2.8L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt; September 1999&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-400-4.0-do-is-usm" href="#canon-ef-400-4.0-do-is-usm"&gt;Canon
EF 400mm 1:4 DO IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-3&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5&lt;/td&gt;
      &lt;td&gt;Dezember 2001&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-500-4.0-l-is-usm" href="#canon-ef-500-4.0-l-is-usm"&gt;Canon
EF 500mm 1:4L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt;Juli 1999&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-600-4.0-l-is-usm" href="#canon-ef-600-4.0-l-is-usm"&gt;Canon
EF 600mm 1:4L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-2&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;1s&lt;/td&gt;
      &lt;td&gt; September 1999&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;a name="canon-ef-800-5.6-l-is-usm" href="#canon-ef-800-5.6-l-is-usm"&gt;Canon
EF 800mm 1:5.6L IS USM&lt;/a&gt;&lt;/td&gt;
      &lt;td&gt;1-4&lt;/td&gt;
      &lt;td&gt;ja&lt;/td&gt;
      &lt;td&gt;IS Mode 1/2&lt;/td&gt;
      &lt;td&gt;0,5s&lt;/td&gt;
      &lt;td&gt;Mai 2008&lt;br /&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
Quellen unter anderem:
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://www.canon.de/For_Home/Product_Finder/Cameras/EF_Lenses/Image_Stabilization_Lenses/index.asp"&gt;Canon Image Stabilization Lenses EF Objektive &lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.canon.com/camera-museum/camera/lens/"&gt;Canon Camera Museum&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.dslr-forum.de/showthread.php?t=541246"&gt;Bildstabilisator Generation - DSLR-Forum&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a href="#modes" name="modes" id="modes"&gt;IS Modes&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
IS Mode 1 korrigiert Verwackeln in allen Richtungen, wohingegen IS Mode 2 nur eine Richtung korrigiert um z.b. auch bei Mitziehern genutzt zu werden.
&lt;/p&gt;
&lt;p&gt;
Ein paar weitere Informationen zum Bildstabilisator von Canon finden
sich auch auf der Webseite von &lt;a
 href="http://www.poelking.com/wbuch2/chaostage/chaostage.htm"&gt;Fritz
Pölking&lt;/a&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;strong style="color: red;"&gt;Sollten Werte oder
Angaben nicht stimmen würde ich mich über einen Kommentar, eine Email oder eine
Nachricht übers Kontaktformular freuen.&lt;/strong&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tcLKDyOBo8k:BoPAUXrwct0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tcLKDyOBo8k:BoPAUXrwct0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tcLKDyOBo8k:BoPAUXrwct0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=tcLKDyOBo8k:BoPAUXrwct0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tcLKDyOBo8k:BoPAUXrwct0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=tcLKDyOBo8k:BoPAUXrwct0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tcLKDyOBo8k:BoPAUXrwct0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 23 Sep 2009 16:22:27 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[TXT-Dateiliste eines Ordners erstellen]]></title>
      <link>http://www.robo47.net/codeschnipsel/22-TXT-Dateiliste-eines-Ordners-erstellen</link>
      <guid>http://www.robo47.net/codeschnipsel/22-TXT-Dateiliste-eines-Ordners-erstellen</guid>
      <description>Erstellt eine CSV-Datei mit allen Dateien und Ordnern&lt;br /&gt;&lt;br /&gt;&lt;?php
error_reporting(E_ALL | E_STRICT);
$dirIter = new RecursiveDirectoryIterator('./');
$recursiveIterator = new RecursiveIteratorIterator($dirIter,
    RecursiveIteratorIterator::SELF_FIRST,
    RecursiveIteratorIterator::CATCH_GET_CHILD);

$fp = fopen('file.txt', 'w');

foreach ($recursiveIterator as $element) {
    /* @var $element SplFileInfo */
    fputs($fp, $element-&gt;getPathname() . "\n");
}

fclose($fp);

echo file_get_contents('file.txt');&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Bbz-XT_jhvk:AkNwdVTOnsI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Bbz-XT_jhvk:AkNwdVTOnsI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Bbz-XT_jhvk:AkNwdVTOnsI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Bbz-XT_jhvk:AkNwdVTOnsI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Bbz-XT_jhvk:AkNwdVTOnsI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Bbz-XT_jhvk:AkNwdVTOnsI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Bbz-XT_jhvk:AkNwdVTOnsI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 23 Sep 2009 00:22:20 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[CSV-Dateiliste eines Ordners erstellen]]></title>
      <link>http://www.robo47.net/codeschnipsel/21-CSV-Dateiliste-eines-Ordners-erstellen</link>
      <guid>http://www.robo47.net/codeschnipsel/21-CSV-Dateiliste-eines-Ordners-erstellen</guid>
      <description>Erstellt eine CSV-Datei mit allen Dateien und Ordnern&lt;br /&gt;&lt;br /&gt;&lt;?php
error_reporting(E_ALL | E_STRICT);
$dirIter = new RecursiveDirectoryIterator('./');
$recursiveIterator = new RecursiveIteratorIterator($dirIter,
    RecursiveIteratorIterator::SELF_FIRST,
    RecursiveIteratorIterator::CATCH_GET_CHILD);

$fp = fopen('file.csv', 'w');

foreach ($recursiveIterator as $element) {
    /* @var $element SplFileInfo */
    $line = array('name' =&gt; $element-&gt;getPathname(),
                  'type' =&gt; $element-&gt;getType(),
                  'size' =&gt; $element-&gt;getSize());
    fputcsv($fp, $line, ',', '"');
}

fclose($fp);

echo file_get_contents('file.csv');&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CCIVt0J19GE:fuq5tagaDF0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CCIVt0J19GE:fuq5tagaDF0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CCIVt0J19GE:fuq5tagaDF0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=CCIVt0J19GE:fuq5tagaDF0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CCIVt0J19GE:fuq5tagaDF0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=CCIVt0J19GE:fuq5tagaDF0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CCIVt0J19GE:fuq5tagaDF0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 23 Sep 2009 00:22:20 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Lineare XML-Dateiliste eines Ordner über den RecursiveDirectoryIterator und DOM erstellen]]></title>
      <link>http://www.robo47.net/codeschnipsel/20-Lineare-XML-Dateiliste-eines-Ordner-ueber-den-RecursiveDirectoryIterator-und-DOM-erstellen</link>
      <guid>http://www.robo47.net/codeschnipsel/20-Lineare-XML-Dateiliste-eines-Ordner-ueber-den-RecursiveDirectoryIterator-und-DOM-erstellen</guid>
      <description>Gibt ein lineares XML-Dokument mit der Dateiliste des aktuellen Verzeichnisses und allen Unterverzeichnisse aus.&lt;br /&gt;&lt;br /&gt;&lt;?php
error_reporting(E_ALL | E_STRICT);
$dirIter = new RecursiveDirectoryIterator('./');
$recursiveIterator = new RecursiveIteratorIterator($dirIter,
    RecursiveIteratorIterator::SELF_FIRST,
    RecursiveIteratorIterator::CATCH_GET_CHILD);

$document = new DOMDocument();
$list = $document-&gt;createElement('list', null);
$document-&gt;appendChild($list);

foreach ($recursiveIterator as $element) {
    /* @var $element SplFileInfo */
    $newNode = $document-&gt;createElement('entry', null);
    /* @var $newNode DOMNode */
    $newNode-&gt;setAttribute( 'name' , $element-&gt;getPathname() );
    $newNode-&gt;setAttribute( 'type' , $element-&gt;getType() );
    $newNode-&gt;setAttribute( 'size' , $element-&gt;getSize() );
    $list-&gt;appendChild($newNode);
}
header('Content-Type: text/xml');
echo $document-&gt;saveXML();&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YytLMpQrxrI:NvG7wnNKy_s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YytLMpQrxrI:NvG7wnNKy_s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YytLMpQrxrI:NvG7wnNKy_s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=YytLMpQrxrI:NvG7wnNKy_s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YytLMpQrxrI:NvG7wnNKy_s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=YytLMpQrxrI:NvG7wnNKy_s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YytLMpQrxrI:NvG7wnNKy_s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 23 Sep 2009 00:13:11 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Verschachtelte XML-Dateiliste eines Ordner über den RecursiveDirectoryIterator und DOM erstellen]]></title>
      <link>http://www.robo47.net/codeschnipsel/19-Verschachtelte-XML-Dateiliste-eines-Ordner-ueber-den-RecursiveDirectoryIterator-und-DOM-erstellen</link>
      <guid>http://www.robo47.net/codeschnipsel/19-Verschachtelte-XML-Dateiliste-eines-Ordner-ueber-den-RecursiveDirectoryIterator-und-DOM-erstellen</guid>
      <description>Gibt ein verschachteltes XML-Dokument mit der Dateiliste des aktuellen Verzeichnisses und allen Unterverzeichnisse aus.&lt;br /&gt;&lt;br /&gt;&lt;?php
error_reporting(E_ALL | E_STRICT);
$dirIter = new RecursiveDirectoryIterator('./');

$document = new DOMDocument();
$list = $document-&gt;createElement('list', null);
$document-&gt;appendChild($list);

function addLevel(RecursiveDirectoryIterator $iterator, 
                  DOMNode $parentNode,
                  DOMDocument $document)
{
    foreach ($iterator as $element) {
        /* @var $element SplFileInfo */

        $newNode = $document-&gt;createElement('entry', null);
        /* @var $newNode DOMNode */
        $newNode-&gt;setAttribute( 'name' , $element-&gt;getPathname() );
        $newNode-&gt;setAttribute( 'type' , $element-&gt;getType() );
        $newNode-&gt;setAttribute( 'size' , $element-&gt;getSize() );
        $parentNode-&gt;appendChild($newNode);
        if ($iterator-&gt;hasChildren()) {
            addLevel($iterator-&gt;getChildren(), $newNode, $document);
        }
    }
}
addLevel($dirIter, $list, $document);

header('Content-Type: text/xml');
echo $document-&gt;saveXML();&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9CBESqRvksg:XHPJ06a4EPs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9CBESqRvksg:XHPJ06a4EPs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9CBESqRvksg:XHPJ06a4EPs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=9CBESqRvksg:XHPJ06a4EPs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9CBESqRvksg:XHPJ06a4EPs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=9CBESqRvksg:XHPJ06a4EPs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9CBESqRvksg:XHPJ06a4EPs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 23 Sep 2009 00:07:08 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Deutsche Wörterbücher für Rechtschreibprüfung in Evolution und Pidgin unter Debian / Ubuntu installieren]]></title>
      <link>http://www.robo47.net/text/36-Deutsche-Woerterbuecher-fuer-Rechtschreibpruefung-in-Evolution-und-Pidgin-unter-Debian-Ubuntu-installieren</link>
      <guid>http://www.robo47.net/text/36-Deutsche-Woerterbuecher-fuer-Rechtschreibpruefung-in-Evolution-und-Pidgin-unter-Debian-Ubuntu-installieren</guid>
      <description>&lt;p&gt;
Pidgin und Evolution können, wenn installiert, aspell zur Rechtschreibkorrektur nutzen. Um das deutsche Wörter zu installieren reicht ein:
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;sudo apt-get install aspell-de&lt;/pre&gt;
&lt;p&gt;
In Pidgin kann man das hervorheben von falsch geschriebenen Wörter unter Werkzeuge -&gt; Einstellungen -&gt; Unterhaltungen -&gt; Falsch geschriebene Wörter hervorheben aktivieren.
&lt;br /&gt;
In Evolution findet man es unter Bearbeiten -&gt; Einstellungen -&gt; Editoreinstellungen -&gt; Rechtschreibprüfung -&gt; Rechtschreibprüfung während der Eingabe durchführen. Dort lässt sich dann auch das gewünschte Wörterbuch auswählen.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Z_7N4R8w80w:pU0K51rCluc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Z_7N4R8w80w:pU0K51rCluc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Z_7N4R8w80w:pU0K51rCluc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Z_7N4R8w80w:pU0K51rCluc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Z_7N4R8w80w:pU0K51rCluc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Z_7N4R8w80w:pU0K51rCluc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Z_7N4R8w80w:pU0K51rCluc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 22 Sep 2009 23:43:10 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Shell in Tilda leeren (clear / reset)]]></title>
      <link>http://www.robo47.net/text/35-Shell-in-Tilda-leeren-clear-reset</link>
      <guid>http://www.robo47.net/text/35-Shell-in-Tilda-leeren-clear-reset</guid>
      <description>&lt;p&gt;
Wer bevor er zu GNOME gewechselt ist KDE genutzt hat und dort als Drop-Down-Shell
(Quake oder First-Person-Shooter-Konsole) &lt;strong&gt;Yakuake&lt;/strong&gt; genutzt hat war es gewohnt dass ein
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;clear&lt;/pre&gt;
&lt;p&gt;
oder die Tastenkombination STRG + L wirklich den kompletten aktuellen 
Shell-Tab leert hat (auch Scrollbar wird zurückgesetzt und alte Inhalte sind wirklich weg, 
wie im Gnome-Terminal über Terminal -&gt; Zurücksetzen und leeren), wird bei Tilda feststellen, dass dem nicht so 
ist. Das hat mich einige Zeit lang gestört bis ich darauf gestoßen bin dass man mittels
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;reset&lt;/pre&gt;
&lt;p&gt;
die komplette Shell zurücksetzen kann, womit auch bei Tilda sämtliche alten Inhalte wieder entfernt werden.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jaktPnF362Y:0Web7OOCFMA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jaktPnF362Y:0Web7OOCFMA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jaktPnF362Y:0Web7OOCFMA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jaktPnF362Y:0Web7OOCFMA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jaktPnF362Y:0Web7OOCFMA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jaktPnF362Y:0Web7OOCFMA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jaktPnF362Y:0Web7OOCFMA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 22 Sep 2009 22:04:37 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Kleines Update]]></title>
      <link>http://www.robo47.net/blog/172-Kleines-Update</link>
      <guid>http://www.robo47.net/blog/172-Kleines-Update</guid>
      <description>So, hab das Blog-System wieder etwas ausgebaut, gibt jetzt eine kleine und bescheidene Archiv-Funktion, einen Tweet-This-Button, ausserdem ein paar kleinere Bugs gefixt.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ODYVofIteUw:-HSq1wbGpTI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ODYVofIteUw:-HSq1wbGpTI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ODYVofIteUw:-HSq1wbGpTI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ODYVofIteUw:-HSq1wbGpTI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ODYVofIteUw:-HSq1wbGpTI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ODYVofIteUw:-HSq1wbGpTI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ODYVofIteUw:-HSq1wbGpTI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 22 Sep 2009 14:35:37 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Half-Life / Counter Strike 1.6 server unter 64-Bit Linux (Debian Lenny) installieren]]></title>
      <link>http://www.robo47.net/text/34-Half-Life-Counter-Strike-1.6-server-unter-64-Bit-Linux-Debian-Lenny-installieren</link>
      <guid>http://www.robo47.net/text/34-Half-Life-Counter-Strike-1.6-server-unter-64-Bit-Linux-Debian-Lenny-installieren</guid>
      <description>&lt;p&gt;
    Gestern stand ich vor dem Problem einen Counter-Strike-Server auf dem Hetzner EQ4 Root Server (Intel i7 mit &lt;strong&gt;64bit&lt;/strong&gt; Debian Lenny) zu installieren. Das Problem war, dass er die runtergeladene &lt;strong&gt;hldsupdatetool.bin&lt;/strong&gt; nicht ausführen wollte. Die Fehlermeldung war recht kryptisch und ergab ohne googlen erstmal keinen Sinn:
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;./hldsupdatetool.bin: No such file or directory.&lt;/pre&gt;
&lt;p&gt;
    Nachdem ich mir absolut sicher war dass die Datei auch wirklich existierte hab ich nach viel googlen dann endlich die Lösung des Problems gefunden:
    &lt;br /&gt;
    Die binary ist eine &lt;strong&gt;32bit&lt;/strong&gt;-binary was man mit dem Befehl
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;file hldsupdatetool.bin&lt;/pre&gt;
&lt;p&gt;
    herausfinden kann.&lt;br /&gt;
    Ausgabe:
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;hldsupdatetool.bin: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped&lt;/pre&gt;
&lt;p&gt;
    Das Problem mit der 32Bit-binary ist, dass die sich auf einem reinen 64bit system nicht ausführen lässt. Dazu muss man erst die &lt;strong&gt;ia32-libs&lt;/strong&gt; installieren.
&lt;/p&gt;
&lt;p&gt;
    Unter Debian/Ubuntu geht das via:
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;apt-get install ia32-libs&lt;/pre&gt;
&lt;p&gt;
    Danach lässt sich die binary problemlos ausführen um den Steam-Client zu entpacken über den man dann den Counter-Strike/Half-Life 1.6 Server installieren kann.
&lt;/p&gt;
&lt;p&gt;
    Mehr zu Installation, Konfiguration und dem starten findet man bei &lt;a href="http://www.counter-strike.de/content/server/linux_steam.php"&gt;counter-strike.de&lt;/a&gt;.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=hND94ZWMpZE:_hXP0GLlDdI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=hND94ZWMpZE:_hXP0GLlDdI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=hND94ZWMpZE:_hXP0GLlDdI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=hND94ZWMpZE:_hXP0GLlDdI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=hND94ZWMpZE:_hXP0GLlDdI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=hND94ZWMpZE:_hXP0GLlDdI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=hND94ZWMpZE:_hXP0GLlDdI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 22 Sep 2009 10:36:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Bin ne Woche weg]]></title>
      <link>http://www.robo47.net/blog/171-Bin-ne-Woche-weg</link>
      <guid>http://www.robo47.net/blog/171-Bin-ne-Woche-weg</guid>
      <description>Nur als kleine Info falls ihr euch wundert warum keine Kommentare freigeschalten werden oder ich ansonsten nicht antworte, ich bin ne Woche mit meinem Vater in Spanien (&lt;a href="http://de.wikipedia.org/wiki/Cadaqu%C3%A9s"&gt;Cadaqués&lt;/a&gt;) tauchen. Sollte so am 20. wieder im Lande sein.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=teBPdGBLdWE:wyYyqCIs1Qc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=teBPdGBLdWE:wyYyqCIs1Qc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=teBPdGBLdWE:wyYyqCIs1Qc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=teBPdGBLdWE:wyYyqCIs1Qc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=teBPdGBLdWE:wyYyqCIs1Qc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=teBPdGBLdWE:wyYyqCIs1Qc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=teBPdGBLdWE:wyYyqCIs1Qc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 11 Sep 2009 15:24:46 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Einzelnes Verzeichnis aus Zip-Archiv mit php und ZipArchiv entpacken]]></title>
      <link>http://www.robo47.net/codeschnipsel/17-Einzelnes-Verzeichnis-aus-Zip-Archiv-mit-php-und-ZipArchiv-entpacken</link>
      <guid>http://www.robo47.net/codeschnipsel/17-Einzelnes-Verzeichnis-aus-Zip-Archiv-mit-php-und-ZipArchiv-entpacken</guid>
      <description>Mit diesem Schnipsel kann man automatisch einen einzelnen Ordner und alle Ordner und Dateien darin in ein Verzeichnis entpacken. &lt;br /&gt;
Dabei bleibt die Verzeichnisstruktur erhalten, inklusive dem Verzeichnis das man entpacken will.&lt;br /&gt;&lt;br /&gt;&lt;?php
$absolutePath = realpath('tmp/'); // Absoluter Pfad wohin man entpacken will
$directory = '/archiv'; // Verzeichnis im Archiv das man entpacken will
$archiv = new ZipArchive();
$archiv-&gt;open('archiv.zip');
$i = 0;
$entries = array();
// Alle Dateien raussuchen deren Pfad mit dem gewünschten Pfad anfängt
while(false !== ($stat = $archiv-&gt;statIndex($i))) {
    if (strpos($stat['name'], $directory ) === 0) {
        echo $stat['name'] . '&lt;br /&gt;';
        $entries[] = $stat['name'];
    }
    $i++;
}
// nur die gewünschten Einträge entpacken
// allerdings wird dabei die Archiv-Struktur inklusive $directory beibehalten.
$archiv-&gt;extractTo($absolutePath, $entries);&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MBu52zFl-PY:bymqnb8t8GQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MBu52zFl-PY:bymqnb8t8GQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MBu52zFl-PY:bymqnb8t8GQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=MBu52zFl-PY:bymqnb8t8GQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MBu52zFl-PY:bymqnb8t8GQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=MBu52zFl-PY:bymqnb8t8GQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MBu52zFl-PY:bymqnb8t8GQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 20 Aug 2009 12:53:42 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Archiv-Statistik mit Größe gepackt und Ungepackt für Zip-Archive mit php und ZipArchive]]></title>
      <link>http://www.robo47.net/codeschnipsel/18-Archiv-Statistik-mit-Groese-gepackt-und-Ungepackt-fuer-Zip-Archive-mit-php-und-ZipArchive</link>
      <guid>http://www.robo47.net/codeschnipsel/18-Archiv-Statistik-mit-Groese-gepackt-und-Ungepackt-fuer-Zip-Archive-mit-php-und-ZipArchive</guid>
      <description>Zeigt in einer Tabelle die gepackte und ungepackte Größe jeder Datei im Archiv an sowie die Methode mit der diese Datei gepackt wurde.&lt;br /&gt;&lt;br /&gt;&lt;?php
$archivFile = 'archiv.zip';
$archiv = new ZipArchive();
$archiv-&gt;open($archivFile);
$i = 0;
$sizeCompressed = 0;
$sizeUncompressed = 0;

// Manche Konstanten sind nur definiert wenn sie auch unterstütz werden 
// (z.b. CM_BZIP2)
$modes = array();
$modes[ZIPARCHIVE::CM_DEFAULT] = 'default';
$modes[ZIPARCHIVE::CM_STORE] = 'store';
$modes[ZIPARCHIVE::CM_SHRINK] = 'shrink';
$modes[ZIPARCHIVE::CM_REDUCE_1] = 'reduce 1';
$modes[ZIPARCHIVE::CM_REDUCE_2] = 'reduce 2';
$modes[ZIPARCHIVE::CM_REDUCE_3] = 'reduce 3';
$modes[ZIPARCHIVE::CM_REDUCE_4] = 'reduce 4';
$modes[ZIPARCHIVE::CM_IMPLODE] = 'implode';
$modes[ZIPARCHIVE::CM_DEFLATE] = 'deflate';
$modes[ZIPARCHIVE::CM_DEFLATE64] = 'deflate64';
$modes[ZIPARCHIVE::CM_PKWARE_IMPLODE] = 'pkware implode 1';
//$modes[ZIPARCHIVE::CM_BZIP2] = 'bzip2';

echo '&lt;table&gt;' . PHP_EOL;
echo '  &lt;tr&gt;' . PHP_EOL;
echo '    &lt;td&gt;Name&lt;/td&gt;' . PHP_EOL;
echo '    &lt;td&gt;Größe ungepackt&lt;/td&gt;' . PHP_EOL;
echo '    &lt;td&gt;Größe gepackt&lt;/td&gt;' . PHP_EOL;
echo '    &lt;td&gt;Methode&lt;/td&gt;' . PHP_EOL;
echo '  &lt;/tr&gt;' . PHP_EOL;

while(false !== $archiv-&gt;statIndex($i)) {

    $stat = $archiv-&gt;statIndex($i);
    $sizeCompressed += $stat['comp_size'];
    $sizeUncompressed += $stat['size'];
    $i++;
    echo '  &lt;tr&gt;' . PHP_EOL;
    echo '    &lt;td&gt;' . $stat['name'] . '&lt;/td&gt;' . PHP_EOL;
    echo '    &lt;td&gt;' . $stat['size'] . ' bytes&lt;/td&gt;' . PHP_EOL;
    echo '    &lt;td&gt;' . $stat['comp_size'] . 'bytes&lt;/td&gt;' . PHP_EOL;
    echo '    &lt;td&gt;';
    if (isset($modes[$stat['comp_method']])) {
        echo $modes[$stat['comp_method']];
    } else {
        echo 'unbekannt';
    }
        echo '&lt;/td&gt;' . PHP_EOL;
    echo '  &lt;/tr&gt;' . PHP_EOL;
}
echo '&lt;table&gt;' . PHP_EOL;
echo '&lt;br /&gt;&lt;pre&gt;' . PHP_EOL;
echo 'Anzahl Dateien: ' . $i . '&lt;br /&gt;';
echo 'Archivgröße:    ' .  filesize($archivFile). '&lt;br /&gt;';
echo 'Größe der Dateien im Archiv: &lt;br /&gt;';
echo 'ungepackt:      ' . $sizeUncompressed . ' bytes &lt;br /&gt;';
echo 'gepackt:        ' . $sizeCompressed . ' bytes &lt;br /&gt;';
echo '&lt;/pre&gt;';&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=of-zMyqhPbc:COukyelcBXc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=of-zMyqhPbc:COukyelcBXc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=of-zMyqhPbc:COukyelcBXc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=of-zMyqhPbc:COukyelcBXc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=of-zMyqhPbc:COukyelcBXc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=of-zMyqhPbc:COukyelcBXc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=of-zMyqhPbc:COukyelcBXc:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 20 Aug 2009 12:53:42 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Dateien in einem Zip-Archiv mit php und ZipArchiv auflisten]]></title>
      <link>http://www.robo47.net/codeschnipsel/16-Dateien-in-einem-Zip-Archiv-mit-php-und-ZipArchiv-auflisten</link>
      <guid>http://www.robo47.net/codeschnipsel/16-Dateien-in-einem-Zip-Archiv-mit-php-und-ZipArchiv-auflisten</guid>
      <description>Codeschnipsel zum auflisten aller Dateien die in einem Archiv sind und die Anzahl der Dateien.&lt;br /&gt;&lt;br /&gt;&lt;?php
$archiv = new ZipArchive();
$archiv-&gt;open('archiv.zip');
$i = 0;
while(false !== $archiv-&gt;statIndex($i)) {
    $stat = $archiv-&gt;statIndex($i);
    echo $stat['name'] . '&lt;br /&gt;';
    $i++;
}
echo 'Anzahl Dateien: ' . $i;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VLEuz04udYQ:1ygxJRuMQY0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VLEuz04udYQ:1ygxJRuMQY0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VLEuz04udYQ:1ygxJRuMQY0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=VLEuz04udYQ:1ygxJRuMQY0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VLEuz04udYQ:1ygxJRuMQY0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=VLEuz04udYQ:1ygxJRuMQY0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VLEuz04udYQ:1ygxJRuMQY0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 20 Aug 2009 12:50:12 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Trackbacks sind zurück]]></title>
      <link>http://www.robo47.net/blog/170-Trackbacks-sind-zurueck</link>
      <guid>http://www.robo47.net/blog/170-Trackbacks-sind-zurueck</guid>
      <description>So Trackbacks sollten jetzt für Texte, Tools, Codeschnipsel und Blogeinträge möglich sein, die Trackbacks aus dem alten System (genauer gesagt .. einer ) wurden auch wieder importiert und mit etwas Glück gibt es Sonntag oder Montag auch wieder ein bißchen was neues im Bereich Texte und Codeschnipsel.
&lt;br /&gt;
Die Urls haben sich übrigends geändert, weil ich damit erstmal die alten Trackback-SPAM-Bots drausen halte die aktuell teilweise immernoch mehr als 40 Spamversuche pro Tag versuchen, an Urls die Seit ~ 2 Wochen nen 404 liefern ...&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=vuYu0B382mE:4w3ZXfSuwok:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=vuYu0B382mE:4w3ZXfSuwok:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=vuYu0B382mE:4w3ZXfSuwok:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=vuYu0B382mE:4w3ZXfSuwok:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=vuYu0B382mE:4w3ZXfSuwok:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=vuYu0B382mE:4w3ZXfSuwok:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=vuYu0B382mE:4w3ZXfSuwok:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 20 Aug 2009 00:49:51 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Mein Umstieg auf Linux, der Weg in eine neue bessere Welt]]></title>
      <link>http://www.robo47.net/blog/169-Mein-Umstieg-auf-Linux-der-Weg-in-eine-neue-bessere-Welt</link>
      <guid>http://www.robo47.net/blog/169-Mein-Umstieg-auf-Linux-der-Weg-in-eine-neue-bessere-Welt</guid>
      <description>&lt;p&gt;
Seit ungefähr 10 Monaten bin ich jetzt komplett auf Linux umgestiegen. 
Angefangen habe ich mit Kubuntu 8.04 (KDE als Windows-Manager), allerdings hat
mir die KDE-Umgebung nicht wirklich zugesagt und als ich mir testweise Kubuntu
8.10 angeschaut, hatte ich das Gefühl Vista installiert zu haben, 
das hat mir dann überhaupt nicht zugesagt und so bin ich über Ubuntu 8.10
(Gnome als Windows-Manager) zu aktuell Ubuntu 9.04 gekommen.
&lt;/p&gt;&lt;p&gt;
Allgemein lässt sich sagen ich will Linux unter keinen Umständen mehr missen,
eine mächtige Kommandozeile (anfangs bash mittlerweile zsh), ein Paketmanager (apt)
um kinderleicht sich mit dem kompletten Grundstock an Programmen zu versorgen 
und diese sowie das Betriebsystem aktuell zu halten zu bleiben, 
&lt;/p&gt;
&lt;p&gt;
Der Umstieg war sogar viel einfacher als anfangs gedacht, fast meine kompletten 
Standardprogramme wie Thunderbird, OpenOffice , Firefox, Pidgin, 
Skype, VLC, Filezilla und RSSOwl sowie meine Entwicklungsumgebung 
bestehend aus Eclipse PDT, Subversion, Apache, MySQL, php, liefen alle auch 
nativ unter Linux.
&lt;/p&gt;
&lt;p&gt;
Als Ersatz für Winamp hab ich etliche Programme ausprobiert, darunter xmms, amarok, 
banshee, Songbird, Rhythmbox um schlussendlich dann bei Exaile zu landen.
&lt;/p&gt;
&lt;p&gt;
Das einzigen Programme für das ich auf Anhieb bisher keine wirkliche Alternative
gefunden habe ist Pixmantec Rawshooter, ein Programm um digitale Photos im RAW-Format
zu entwickeln. Die bisher getesten Alternativen haben irgendwie nicht wirklich in meinen 
Workflow gepasst, hatten gewisse für mich Grundlegende features nicht und waren 
meist auch ein gutes Stück langsamer. Daher nutze ich Rawshooter aktuell noch via
Wine.
&lt;/p&gt;
&lt;p&gt;
Bei einigen Programmen und Tools hab ich auch für meinen Geschmack besseren Alternativen
gefunden, als IDE nutze ich mittlerweile nicht mehr Eclipse PDT sondern Netbeans 
(aktuell 6.8 M1) das ich neben PHP im Studium z.b. auch für Java und C++ eingesetzt 
habe und das auch eine gute Unterstützung für ANT, PHPUnit, JUnit und ein paar 
weitere Tools (&lt;a href="http://www.whitewashing.de/"&gt;Benjamin Eberlei&lt;/a&gt;
entwickelt gerade ein &lt;a href="http://www.whitewashing.de/blog/articles/119"&gt;Plugin zur Nutzung von PHP_CodeSniffer in Netbeans&lt;/a&gt;) hat.
&lt;/p&gt;
&lt;p&gt;
Als Versionskontrollsystem bin ich recht schnell von Subversion zu Git gewechselt, 
anfangs indem ich Gits SVN-Support genutzt habe und aktuell sind alle Repros 
die ich nutze zu Git migriert und ich hab sie auf meinen Server via SSH erreichbar abgelegt.
&lt;/p&gt;
&lt;p&gt;
Enso Launcher den ich früher benutzt habe wurde durch Gnome-Do ersetzt, zwar nicht
ganz so mächtig, aber für mich völlig ausreichend.
&lt;/p&gt;
&lt;p&gt;
Nachdem mir mein Thunderbird einfach mit der Zeit zu langsam wurde, nutze ich ihn jetzt nur noch
als Mailarchiv und spiele aktuell mit Evolution herum. Etwas flotter, und standardmäßig schon PGP und einen Kalender integriert.
&lt;/p&gt;
&lt;p&gt;
Was mir unter Linux einfach gefällt ist die große Flexibilität und die vielen 
Alternativen die man bei vielen Tools und Programmen hat, eine Shell mit der man 
auch arbeiten kann (was würde ich ohne cat, tail, grep, xargs und co machen ?)
&lt;/p&gt;
&lt;p&gt;
Einige neue Programme sind auch dazu gekommen:
&lt;br /&gt;
Mit Zim habe ich eine nützliche Desktop-Wiki in der ich Todos, Notizen, Anleitungen, 
nützliche Befehle und anderen Kram hinterlegen kann, gekoppelt mit git sogar mit einer History. 
&lt;br /&gt;
Vorher hatte ich noch Tomboy ausprobiert, aber Zim war am meisten nach meinem Geschmack.
&lt;br /&gt;
Tilda ist ein Terminal-Emulator der wie in vielen First-Person-Shootern per 
Knopfdruck von oben runterscrollt und auch noch mehrere Terminals in einzelnen 
Tabs zur Verfügung stellt, ausprobiert hatte ich hier vorher noch Yakuake, Kuake und YeahConsole.
&lt;br /&gt;
Gwibber ist nachdem mir Twitux nicht gefallen hat mein Twitter-Client geworden, 
die Alternativen hätten Adobe Air gebraucht, was mir da nicht wirklich zugesagt hat.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Y8cQ1z6Y77c:YWEp0nl2qiA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Y8cQ1z6Y77c:YWEp0nl2qiA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Y8cQ1z6Y77c:YWEp0nl2qiA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Y8cQ1z6Y77c:YWEp0nl2qiA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Y8cQ1z6Y77c:YWEp0nl2qiA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Y8cQ1z6Y77c:YWEp0nl2qiA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Y8cQ1z6Y77c:YWEp0nl2qiA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 11 Aug 2009 21:56:55 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Trackback und Kommentarspam]]></title>
      <link>http://www.robo47.net/blog/168-Trackback-und-Kommentarspam</link>
      <guid>http://www.robo47.net/blog/168-Trackback-und-Kommentarspam</guid>
      <description>Wie zu erwarten ging es mal wieder richtig schnell, nach nichteinmal 12 Stunden sind schon die ersten Bots über die Kommentarfunktion hergefallen. Dank &lt;a href="http://akismet.com/"&gt;Akismet&lt;/a&gt; wird der Kram direkt als SPAM markiert, trotzdem werde ich wohl in Zukunft noch das ein oder andere einbauen um Akismet so wenig wie möglich bemühen zu müssen.
&lt;br /&gt;
Die Trackbackspam-Versuche auf die alten Trackback-Urls sind trotz 404 noch nicht so schnell gestorben und ich denke die werden auch noch einige Zeit weitergehen. Sobald ich die Funktion wieder eingebaut habe, werde ich dort wohl auch Akismet zur SPAM-Bekämpfung einsetzen oder ich schaue mir mal eine Alternative wie &lt;a href="http://antispam.typepad.com/"&gt;Typepad Antispam&lt;/a&gt;, &lt;a href="http://defensio.com/"&gt;Defensio&lt;/a&gt; oder &lt;a href="http://mollom.com/"&gt;Mollom&lt;/a&gt; an, alle 3 bieten auch eine API an über die man Kommentare und Trackbacks überprüfen kann.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=KVHnzrG8HTQ:hHq0WEWmC5w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=KVHnzrG8HTQ:hHq0WEWmC5w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=KVHnzrG8HTQ:hHq0WEWmC5w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=KVHnzrG8HTQ:hHq0WEWmC5w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=KVHnzrG8HTQ:hHq0WEWmC5w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=KVHnzrG8HTQ:hHq0WEWmC5w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=KVHnzrG8HTQ:hHq0WEWmC5w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sat, 08 Aug 2009 09:56:52 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Es geht weiter]]></title>
      <link>http://www.robo47.net/blog/167-Es-geht-weiter</link>
      <guid>http://www.robo47.net/blog/167-Es-geht-weiter</guid>
      <description>So, nach über einem Jahr Stille, gibt es hier endlich mal wieder etwas neues. Nach langen Überlegungen habe ich beschlossen meinen Bog und die ausgelagerten Tools von &lt;a href="http://public.robo47.net"&gt;public.robo47.net&lt;/a&gt; hier unter einer Plattform zusammenzufassen. Das neue System hinter dem Blog hat seine Ursprünge 2008 und hat eine lange Evolution hinter sich. Von Zend Framework 1.5 bis hin zur aktuellen Version 1.9. Wer mehr von der Technik hinter der Seite erfahren will findet unter &lt;a href="/about-technik"&gt;Über die Technik&lt;/a&gt; eine Übersicht.
&lt;br /&gt;
Ich hab auch vor in Zukunft hier wieder etwas aktiver hier zu sein soweit es die Uni zulässt. Jetzt werde ich mal noch die Kontaktanfragen die liegen geblieben sind abarbeiten und dann kann ich mich hier noch etwas um die neuen Inhalte, Blogeinträge und soweiter kümmern.
&lt;br /&gt;
Was bisher fehlt im Vergleich zur letzen Version ist die Trackback-Funktion, das wird wohl in einem der nächsten Updates kommen Dafür gibt es aber z.b. einen Kommentar-Feed und für jeden Blogeintrag einen Kommentar-Feed.
&lt;br /&gt;
Einige Spielereien sind aktuell noch deaktiviert, weil ich den Footer nicht noch größer machen wollte, dazu gehört z.b. eine Latest-Tweets-Integration und eine Anzeige von Alben von Jamendo.
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MhYfD88fHHU:3CFljsfXrGk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MhYfD88fHHU:3CFljsfXrGk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MhYfD88fHHU:3CFljsfXrGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=MhYfD88fHHU:3CFljsfXrGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MhYfD88fHHU:3CFljsfXrGk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=MhYfD88fHHU:3CFljsfXrGk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MhYfD88fHHU:3CFljsfXrGk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 07 Aug 2009 21:10:40 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Hashwert einer Zeichenkette berechnen]]></title>
      <link>http://www.robo47.net/tool/10-Hashwert-einer-Zeichenkette-berechnen</link>
      <guid>http://www.robo47.net/tool/10-Hashwert-einer-Zeichenkette-berechnen</guid>
      <description>Verschiedene Haswerte für einen Text bestimmen&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=G5VMWk4UIvg:D-GrHZqOVNw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=G5VMWk4UIvg:D-GrHZqOVNw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=G5VMWk4UIvg:D-GrHZqOVNw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=G5VMWk4UIvg:D-GrHZqOVNw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=G5VMWk4UIvg:D-GrHZqOVNw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=G5VMWk4UIvg:D-GrHZqOVNw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=G5VMWk4UIvg:D-GrHZqOVNw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Hashwert einer Datei bestimmen]]></title>
      <link>http://www.robo47.net/tool/9-Hashwert-einer-Datei-bestimmen</link>
      <guid>http://www.robo47.net/tool/9-Hashwert-einer-Datei-bestimmen</guid>
      <description>Verschiedene Hashwerte einer Datei bestimmen&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3li1JQbhxL8:u8bV6J3HQmE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3li1JQbhxL8:u8bV6J3HQmE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3li1JQbhxL8:u8bV6J3HQmE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=3li1JQbhxL8:u8bV6J3HQmE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3li1JQbhxL8:u8bV6J3HQmE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=3li1JQbhxL8:u8bV6J3HQmE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3li1JQbhxL8:u8bV6J3HQmE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Auslösungen auslesen - Shutter Count]]></title>
      <link>http://www.robo47.net/tool/8-Ausloesungen-auslesen-Shutter-Count</link>
      <guid>http://www.robo47.net/tool/8-Ausloesungen-auslesen-Shutter-Count</guid>
      <description>Kamera Auslösungen aus den Exifs eines unbearbeiten Bilds (out-of-cam) auslesen&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=f2OZVkwWRPU:YTCexAYPsuw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=f2OZVkwWRPU:YTCexAYPsuw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=f2OZVkwWRPU:YTCexAYPsuw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=f2OZVkwWRPU:YTCexAYPsuw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=f2OZVkwWRPU:YTCexAYPsuw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=f2OZVkwWRPU:YTCexAYPsuw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=f2OZVkwWRPU:YTCexAYPsuw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[SSH-Fingerprint unter Linux auslesen]]></title>
      <link>http://www.robo47.net/text/1-SSH-Fingerprint-unter-Linux-auslesen</link>
      <guid>http://www.robo47.net/text/1-SSH-Fingerprint-unter-Linux-auslesen</guid>
      <description>&lt;p&gt;
    Da die meine am meisten verwendeten Clients für SSH-Verbindungen (Putty/Filezilla/etc) nirgends eine Klartext-Variante der Fingerprint speichern denen man vertraut hat speichern ich aber von Filezilla 2.X auf Filezilla 3.X wechseln wollte und meine Liste mit den Fingerprints nicht dabei hatte, habe ich nach einem anderen Weg gesucht und gefunden.
    &lt;br /&gt;
    Mittels dem folgenden Befehl lässt sich der Fingerprint eines
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
ssh-keygen -lf keyfile
&lt;/pre&gt;
&lt;p&gt;
    Die Keyfiles findet man dann beispielsweise in /etc/ssh/ ansonsten muss man mal in der config des sshd nachschauen.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VPpTiGhM6qQ:gBwM7E5X4BA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VPpTiGhM6qQ:gBwM7E5X4BA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VPpTiGhM6qQ:gBwM7E5X4BA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=VPpTiGhM6qQ:gBwM7E5X4BA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VPpTiGhM6qQ:gBwM7E5X4BA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=VPpTiGhM6qQ:gBwM7E5X4BA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=VPpTiGhM6qQ:gBwM7E5X4BA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[TAR unter Linux verwenden]]></title>
      <link>http://www.robo47.net/text/3-TAR-unter-Linux-verwenden</link>
      <guid>http://www.robo47.net/text/3-TAR-unter-Linux-verwenden</guid>
      <description>&lt;p&gt;
    Mit dem Programm &lt;strong&gt;tar&lt;/strong&gt; kann man unter &lt;strong&gt;Linux&lt;/strong&gt;
    Tar-Archive (auch Tarballs genannt) erstellen, entpacken und auf Wunsch
    auch mit gzip, bzip2 komprimieren um Platz zu sparen. Bzip2
    erreicht hier in den meisten Fällen eine etwas höhere Kompression und
    schafft es damit noch kleinere Dateien zu erstellen, dafür dauert die
    Kompression aber auch länger. &lt;br /&gt;
    Übliche Endungen für Tarballs und komprimierten Tar-Archiven sind:
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;.tar (ohne Kompression)&lt;/li&gt;
    &lt;li&gt;.tar.gz (gzip)&lt;/li&gt;
    &lt;li&gt;.tgz (gzip)&lt;/li&gt;
    &lt;li&gt;.tar.Z (gzip)&lt;/li&gt;
    &lt;li&gt;.tar.bz2 (bzip2)&lt;/li&gt;
    &lt;li&gt;.tbz (bzip2)&lt;/li&gt;
    &lt;li&gt;.tbz2 (bzip2)&lt;/li&gt;
    &lt;li&gt;.tbz2 (bzip2)&lt;/li&gt;
    &lt;li&gt;.tbz2 (bzip2)&lt;/li&gt;
    &lt;li&gt;.tar.7z (7zip)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tar-Archive unter Linux erstellen&lt;/h2&gt;
&lt;p&gt;ohne Kompression:&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
tar -cvf dateiname.tar ./ordnername
&lt;/pre&gt;
&lt;p&gt;mit bzip2-Kompression:&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
tar -cjvf dateiname.tar.bz2 ./ordnername
&lt;/pre&gt;
&lt;p&gt;mit gzip-Kompression:&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
tar -czvf dateiname.tar.gz ./ordnername
&lt;/pre&gt;
&lt;h2&gt;Tar-Archive unter Linux entpacken&lt;/h2&gt;
&lt;p&gt;ohne Kompression:&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
tar -xvf dateiname.tar
&lt;/pre&gt;
&lt;p&gt;mit bzip2-Kompression:&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
tar -xjvf dateiname.tar.bz2
&lt;/pre&gt;
&lt;p&gt;mit gzip-Kompression:&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
tar -xzvf dateiname.tar.gz
&lt;/pre&gt;
&lt;p&gt;
    Ein Vorteil von tar im Einsatz unter Linux ist, dass für jede Datei und
    jedes Verzeichnis die Dateirechte und der Besitzer mitgespeichert wird,
    so werden diese auch beim entpacken wiederhergestellt und damit eignet
    sich tar in vielen Fällen besser für das erstellen von Backups unter Linux als
    beispielsweise ZIP oder RAR-Archive.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8emdl-oadGg:2RPc2C9ztfs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8emdl-oadGg:2RPc2C9ztfs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8emdl-oadGg:2RPc2C9ztfs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=8emdl-oadGg:2RPc2C9ztfs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8emdl-oadGg:2RPc2C9ztfs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=8emdl-oadGg:2RPc2C9ztfs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8emdl-oadGg:2RPc2C9ztfs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Html-E-Mail über SMTP via phpmailer versenden]]></title>
      <link>http://www.robo47.net/codeschnipsel/6-Html-E-Mail-ueber-SMTP-via-phpmailer-versenden</link>
      <guid>http://www.robo47.net/codeschnipsel/6-Html-E-Mail-ueber-SMTP-via-phpmailer-versenden</guid>
      <description>&lt;p&gt;
Beispiel-Code zum versenden einer E-Mail über SMTP mit der Klasse phpmailer. Verwendet wurde Version 2.3 des phpmailers.
&lt;/p&gt;
&lt;h3&gt;Downloads:&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://phpmailer.codeworxtech.com/"&gt;phpMailer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$data = array();
$data['smtp'] = array();
$data['smtp']['host'] = 'mail.example.com';
$data['smtp']['port'] = '25';
$data['smtp']['username'] = 'username';
$data['smtp']['password'] = 'password';

$data['from'] = array('name' =&gt; 'Absender', 'email' =&gt; 'absender@example.com');
$data['to'] = array('name' =&gt; 'Empfänger', 'email' =&gt; 'empfaenger@example.com');
$data['charset'] = 'utf-8';
$data['subject'] = 'Html Mail';
$data['html'] = '
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;'.$data['subject'].'&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;h1&gt;Meine Html-Mail&lt;/h1&gt;
            &lt;p&gt;
                Lorem ipsum dolor sit amet.
            &lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;';

$data['text'] = 'Meine Html-Mail

Lorem ipsum dolor sit amet.';

require_once '/class.phpmailer.php';

$mail = new PHPMailer(true);        // true for throwing Exception on Problems

// Server-Zugangsdaten setzen
$mail-&gt;IsSMTP();
$mail-&gt;IsHTML(true);                                // Als HTML-Mail senden
$mail-&gt;SMTPAuth = true;
$mail-&gt;set('Host', $data['smtp']['host']);
$mail-&gt;set('Username', $data['smtp']['username']);
$mail-&gt;set('Password', $data['smtp']['password']);
$mail-&gt;set('Port', $data['smtp']['port']);
$mail-&gt;set('Body', $data['html']);                  // HTML Nachricht setzen
$mail-&gt;set('AltBody', $data['text']);               // Text Nachricht setzen
$mail-&gt;set('CharSet', $data['charset']);            // Charset festlegen
$mail-&gt;set('Subject', $data['subject']);            // Betreff setzen
$mail-&gt;SetFrom($data['from']['email'], $data['from']['name']);
$mail-&gt;AddAddress($data['to']['email'],
                  $data['to']['name']);             // Empfänger hinzufügen

// Email absenden
$mail-&gt;Send();&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=xvNFZumLN9s:sZLhd2kO9PA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=xvNFZumLN9s:sZLhd2kO9PA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=xvNFZumLN9s:sZLhd2kO9PA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=xvNFZumLN9s:sZLhd2kO9PA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=xvNFZumLN9s:sZLhd2kO9PA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=xvNFZumLN9s:sZLhd2kO9PA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=xvNFZumLN9s:sZLhd2kO9PA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Martin Wieser - Kamera Setup für Canon EOS 1D(s) Mark II (N)]]></title>
      <link>http://www.robo47.net/text/4-Martin-Wieser-Kamera-Setup-fuer-Canon-EOS-1D-s-Mark-II-N</link>
      <guid>http://www.robo47.net/text/4-Martin-Wieser-Kamera-Setup-fuer-Canon-EOS-1D-s-Mark-II-N</guid>
      <description>&lt;p&gt;
    Hier gibt es das Dokument &lt;strong&gt;Kamera Setup&lt;/strong&gt; für die Kameras Canon EOS 1D(s) Mark II (N) von &lt;strong&gt;Martin Wieser&lt;/strong&gt;.
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;a href="/media/data/martin-wieser-kamera-setup.pdf"&gt; &lt;img src="/media/images/pdf.gif" alt="PDF-Dokument" /&gt; Martin Wieser - Kamera Setup.pdf&lt;/a&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    &lt;a href="http://www.adobe.com/de/products/acrobat/readstep2.html"&gt;&lt;img src="/media/images/adobe.jpg" alt="Get Adobe Reader"/&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CZzFMZwpiGA:PZN5S55rMMQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CZzFMZwpiGA:PZN5S55rMMQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CZzFMZwpiGA:PZN5S55rMMQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=CZzFMZwpiGA:PZN5S55rMMQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CZzFMZwpiGA:PZN5S55rMMQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=CZzFMZwpiGA:PZN5S55rMMQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CZzFMZwpiGA:PZN5S55rMMQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Exifs aus Bild auslesen]]></title>
      <link>http://www.robo47.net/tool/7-Exifs-aus-Bild-auslesen</link>
      <guid>http://www.robo47.net/tool/7-Exifs-aus-Bild-auslesen</guid>
      <description>Exif-Informationen aus einem Bild auslesen&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=HOBABzRWQM0:2B14vczmHBE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=HOBABzRWQM0:2B14vczmHBE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=HOBABzRWQM0:2B14vczmHBE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=HOBABzRWQM0:2B14vczmHBE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=HOBABzRWQM0:2B14vczmHBE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=HOBABzRWQM0:2B14vczmHBE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=HOBABzRWQM0:2B14vczmHBE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Canon Digital Photo Professional (DPP) 3.5.2 und weitere Canon Tools ohne CD installieren]]></title>
      <link>http://www.robo47.net/text/2-Canon-Digital-Photo-Professional-DPP-3.5.2-und-weitere-Canon-Tools-ohne-CD-installieren</link>
      <guid>http://www.robo47.net/text/2-Canon-Digital-Photo-Professional-DPP-3.5.2-und-weitere-Canon-Tools-ohne-CD-installieren</guid>
      <description>&lt;p&gt;
    Da sich aktuell die runtergeladenen Installer auf der Canon-Seite nur als
    &amp;quot;Updater&amp;quot; zu erkennen geben und sich damit ohne eine ältere
    Version der Programme, die Updates nicht installieren lassen, habe ich nach
    einem Weg gesucht wie man auch ohne eine installierte Version in den Genuss
    aktueller Canon-Programme kommt. Da es ja durchaus mal vorkommen kann, dass
    man die CD die bei der Kamera dabei war nicht mehr hat, nicht findet oder
    zum Beispiel eine Kamera gebraucht ohne Handbücher und CDs gekauft hat, ist
    dieser Wunsch durchaus nachvollziehbar.
&lt;/p&gt;
&lt;p&gt;
    Diese kurze Anleitung beschreibt wie man &lt;strong&gt;Canon Digital Photo
    Professional (DPP) 3.5.2&lt;/strong&gt; und damit auch weitere Canon Programme
    wie den Canon Zoombrowser EX 6.3.1 und das Canon
    EOS Utility 2.5.1 ohne CDs mit einer alten Version installieren kann.
     Es funktioniert NICHT für das Panorama-Tool
     &lt;em&gt;PhotoStitch&lt;/em&gt;. Mit großer Sicherheit wird das auch für
     zukünftige Versionen der Programme funktionieren, sollten die alten
     Versionen nicht aus dem Netz genommen werden.
&lt;/p&gt;

&lt;p&gt;
    Der Trick ist eigentlich recht simpel und wurde von
    &lt;a href="http://www.dslr-forum.de/member.php?u=120"&gt;Scorpio&lt;/a&gt;
    im &lt;a href="http://www.dslr-forum.de"&gt;DLSR-Forum&lt;/a&gt; beschrieben:
    &lt;a href="http://www.dslr-forum.de/showthread.php?p=756369#post756369"&gt;
    DPP Software oder Download&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    Um eine aktuelle Version zu installieren braucht man eine alte Version die
    installiert ist.&lt;br /&gt;

    Das Problem das sich jetzt aber stellt, woher bekommt man eine alte Version
    von DPP ? Also habe ich ein bißchen
    &lt;a href="http://www.google.de"&gt;Google&lt;/a&gt; bemüht und bin am Ende auf den
    &lt;a href="ftp://download.canon.jp/pub/"&gt;Public FTP von Canon Japan&lt;/a&gt;
    gestoßen, dort liegen in dem
    &lt;a href="ftp://download.canon.jp/pub/driver/digitalcamera/"&gt;Unterverzeichnis /pub/driver/digitalcamera/&lt;/a&gt;
     einige Version von &lt;strong&gt;Canon Digital Photo Professional (DPP)&lt;/strong&gt;
     und weiteren Programmen in japanisch.
     Dass DPP Japanisch ist, ist uns erstmal egal, weil wir später eh eine
     neuere Version in einer anderen Sprache drüberinstallieren wollen. Ich
     habe für meine Installation
     &lt;a href="ftp://download.canon.jp/pub/driver/digitalcamera/dpp211w.exe"&gt;Canon Digital Photo Professinal 2.11 (DPP) [dpp211w.exe]&lt;/a&gt; genommen.
&lt;/p&gt;

&lt;p&gt;
    Im nächsten Schritt brauchen wir einen Entpacker wie
    &lt;a href="http://www.7-zip.org/"&gt;7Zip&lt;/a&gt; (Winrar oder Winzip sollten auch
    funktionieren). Mit diesem Entpacker, entpacken wir die runtergeladene
    Version von &lt;strong&gt;DPP&lt;/strong&gt; in ein Verzeichnis unserer Wahl. Dort
    wechseln wir in den Ordner: &lt;code&gt;\INSTALL\COMMON&lt;/code&gt; und führen
    die Install.exe aus.
&lt;/p&gt;
&lt;p&gt;
    Dank einer sehr guten Oberfläche bei der man eigentlich nur nach den großen
    Buttons suchen muss die grün werden wenn man darüber fährt, lässt sich
    &lt;strong&gt;DPP&lt;/strong&gt; nun auf Japanisch recht einfach installieren.
&lt;/p&gt;

&lt;p&gt;
    Ist &lt;strong&gt;Canon Digital Photo Professinal (DPP)&lt;/strong&gt; erstmal auf
    Japanisch installiert, kann man sich nun die aktuellen Versionen der
    Canon-Programme besorgen und drüberinstallieren. Die findet man auf der
    Canon-Seite, ein paar direkte Links gibts hier:
&lt;/p&gt;
&lt;h2&gt;Windows:&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://de.software.canon-europe.com/software/0031973.asp"&gt;Canon Digital Photo Professional (DPP) 3.5.2 Windows&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://de.software.canon-europe.com/software/0032650.asp"&gt;Canon Zoombrowser EX 6.3.1 Windows&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://de.software.canon-europe.com/software/0030937.asp"&gt;Canon EOS Utility EX 2.5.1 Windows&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 &lt;h2&gt;Mac:&lt;/h2&gt;
 &lt;ul&gt;
    &lt;li&gt;&lt;a href="http://de.software.canon-europe.com/software/0031975.asp"&gt;Canon Digital Photo Professional (DPP) 3.5.2 MAC&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://de.software.canon-europe.com/software/0030941.asp"&gt;Canon EOS Utility EX 2.5.1 MAC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Eine weitere von mir bisher noch nicht geteste Variante, die etwas weniger aufwändig ist, gibt es
     im &lt;a href="http://www.dslr-forum.de/showthread.php?t=203665"&gt;dslr-forum&lt;/a&gt;.
     &lt;br /&gt;Dank für den Link geht an Christian Aysner.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eALoTWauue0:TI2PznXVX0U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eALoTWauue0:TI2PznXVX0U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eALoTWauue0:TI2PznXVX0U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=eALoTWauue0:TI2PznXVX0U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eALoTWauue0:TI2PznXVX0U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=eALoTWauue0:TI2PznXVX0U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eALoTWauue0:TI2PznXVX0U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Seriennummer aus Bild auslesen]]></title>
      <link>http://www.robo47.net/tool/6-Seriennummer-aus-Bild-auslesen</link>
      <guid>http://www.robo47.net/tool/6-Seriennummer-aus-Bild-auslesen</guid>
      <description>Seriennummer der Kamera aus Bild auslesen&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8M19Hh8_7zc:vVMBvJ9eNVA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8M19Hh8_7zc:vVMBvJ9eNVA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8M19Hh8_7zc:vVMBvJ9eNVA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=8M19Hh8_7zc:vVMBvJ9eNVA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8M19Hh8_7zc:vVMBvJ9eNVA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=8M19Hh8_7zc:vVMBvJ9eNVA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8M19Hh8_7zc:vVMBvJ9eNVA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Fehlerausgabe in PHP-Scripten]]></title>
      <link>http://www.robo47.net/codeschnipsel/2-Fehlerausgabe-in-PHP-Scripten</link>
      <guid>http://www.robo47.net/codeschnipsel/2-Fehlerausgabe-in-PHP-Scripten</guid>
      <description>Kleines Code-Beispiel wie man die Ausgabe von Fehlermeldungen in PHP aktiviert.&lt;br /&gt;
Absolute Pflicht während der Entwicklung von Applikationen um frühzeitig zu sehen wo man Fehler macht, unsauber arbeitet, z.b. auf uninitialisierte Variablen zugreift oder ähnliches.&lt;br /&gt;&lt;br /&gt;&lt;?php
// Gibt an welche PHP-Fehler überhaupt angezeigt werden
error_reporting(E_ALL | E_STRICT);
// Um die Fehler auch auszugeben, aktivieren wir die Ausgabe
ini_set('display_errors', 1);

// Da man in einem Produktivsystem üblicherweise keine Fehler ausgeben 
// will sondern sie nur mitloggen will, bietet es sich an dort die
// Ausgabe der Fehler zu deaktivieren und sie stattdessen in ein Log-File
// schreiben zu lassen
ini_set('display_errors', 0);
ini_set('error_log', '/pfad/zur/logdatei/php_error.log');&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=C98RSOAiX3c:6u_YCG4o5iA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=C98RSOAiX3c:6u_YCG4o5iA:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=C98RSOAiX3c:6u_YCG4o5iA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=C98RSOAiX3c:6u_YCG4o5iA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=C98RSOAiX3c:6u_YCG4o5iA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=C98RSOAiX3c:6u_YCG4o5iA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=C98RSOAiX3c:6u_YCG4o5iA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[exiftool update script]]></title>
      <link>http://www.robo47.net/codeschnipsel/3-exiftool-update-script</link>
      <guid>http://www.robo47.net/codeschnipsel/3-exiftool-update-script</guid>
      <description>&lt;p&gt;
Kleines Script zum updaten von exiftool das ich auf meinem Server (Debian 4) und meinem Notebook (Ubuntu 8.10) verwende um exiftool aktuell zu halten.
&lt;/p&gt;
&lt;p&gt;
Das Script nutzt &lt;a href="http://www.gnu.org/software/wget/"&gt;wget&lt;/a&gt; zum herunterladen, &lt;a href="http://www.gnu.org/software/tar/"&gt;tar&lt;/a&gt; und &lt;a href="http://www.gnu.org/software/gzip/"&gt;gzip&lt;/a&gt; zum entpacken von exiftool. &lt;br /&gt;
Ausserdem sind zum installieren von exiftool Root-Rechte erforderlich.
&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;#!/bin/bash
if [ -n "$1" ]; then
    
    # Variablen setzen
    URL="http://sno.phy.queensu.ca/~phil/exiftool/Image-ExifTool-"$1".tar.gz"
    FILE="./Image-ExifTool-"$1".tar.gz"
    DIRECTORY="./Image-ExifTool-"$1

    # Falls Datei schon existiert -&gt; löschen
    if [ -f $FILE ]; then
        rm $FILE
    fi
    
    #downloaden
    echo "1) Herunterladen"
    wget -q --directory-prefix=./ $URL
    if [ ! -f $FILE ]; then
        echo "Datei konnte nicht heruntergeladen werden:"
        echo $URL
        exit 1
    fi
    
    #entpacken
    echo "2) Entpacke Archiv"
    tar -xzf $FILE
    if [ $? -ne 0 ]; then
        echo "Fehler beim entpacken";
        exit 1; 
    fi 
    
    if [ ! -d $DIRECTORY ]; then
        echo "Ordner $DIRECTORY wurde nicht erstellt";
        exit 1; 
    fi 
    
    cd $DIRECTORY

    echo "3) Make"
    
    # creating makefile
    perl Makefile.PL &gt; /dev/null
    if [ $? -ne 0 ]; then
        echo "perl Makefile.PL fehlgeschlagen";
        exit 1; 
    fi 
    
    # make
    make &gt; /dev/null
    if [ $? -ne 0 ]; then
        echo "make fehlgeschlagen";
        exit 1; 
    fi 
    
    #tests
    echo "4) Tests"
    make test &gt; /dev/null
    if [ $? -ne 0 ]; then
        echo "Tests fehlgeschlagen";
        exit 1; 
    fi 
    echo "5) Installation"
    make install &gt; /dev/null
    if [ $? -ne 0 ]; then
        echo "Installieren fehlgeschlagen";
        exit 1; 
    fi 
    echo ""
    echo "exiftool Version:"
    exiftool -ver
    exit 0
else 
    echo "Exiftool Update Script 0.1 by Benjamin Steininger"
    echo "url:   www.robo47.net"
    echo "email: robo47@robo47.net"
    echo "Paramter VERSION wurde nicht übergeben."
    echo "Aufruf: $0 VERSION"
fi&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ALauf5Ya8i0:P1_3Tpo1_wY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ALauf5Ya8i0:P1_3Tpo1_wY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ALauf5Ya8i0:P1_3Tpo1_wY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ALauf5Ya8i0:P1_3Tpo1_wY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ALauf5Ya8i0:P1_3Tpo1_wY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ALauf5Ya8i0:P1_3Tpo1_wY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ALauf5Ya8i0:P1_3Tpo1_wY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Html-E-Mail über SMTP via Zend_Mail versenden]]></title>
      <link>http://www.robo47.net/codeschnipsel/4-Html-E-Mail-ueber-SMTP-via-Zend_Mail-versenden</link>
      <guid>http://www.robo47.net/codeschnipsel/4-Html-E-Mail-ueber-SMTP-via-Zend_Mail-versenden</guid>
      <description>&lt;p&gt;
Beispiel-Code zum versenden einer E-Mail über SMTP mit der Klasse Zend_Mail vom Zend Framework. Verwendet wurde Version 1.7.3 des Frameworks.
&lt;/p&gt;
&lt;h3&gt;Anmerkung&lt;/h3&gt;
&lt;p&gt;
Die Komponenten Zend_Mail gibt es nicht einzeln zum Download, sondern nur im Paket mit dem kompletten Zend Framework, sie lässt sich allerdings auch außerhalb des komplette Zend Framework nutzen hat allerdings ein paar Abhängigkeiten mehr dazu unter &lt;a href="http://framework.zend.com/manual/de/requirements.dependencies.html"&gt;Abhängig der Framework-Komponenten&lt;/a&gt;.
&lt;/p&gt;
&lt;h3&gt;Downloads:&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://framework.zend.com/download/latest"&gt;Zend Framework&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$data = array();
$data['smtp'] = array();
$data['smtp']['host'] = 'mail.example.com';
$data['smtp']['port'] = '25';
$data['smtp']['username'] = 'username';
$data['smtp']['password'] = 'password';

$data['from'] = array('name' =&gt; 'Absender', 'email' =&gt; 'absender@example.com');
$data['to'] = array('name' =&gt; 'Empfänger', 'email' =&gt; 'empfaenger@example.com');
$data['charset'] = 'utf-8';
$data['subject'] = 'Html Mail';

$data['html'] = '
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;'.$data['subject'].'&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;h1&gt;Meine Html-Mail&lt;/h1&gt;
            &lt;p&gt;
                Lorem ipsum dolor sit amet.
            &lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;';

$data['text'] = 'Meine Html-Mail

Lorem ipsum dolor sit amet.';

// Zend Auto-Loader verwenden
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

$config = array('auth'     =&gt; 'login',
                'username' =&gt; $data['smtp']['username'],
                'password' =&gt; $data['smtp']['password'],
                'port'     =&gt; $data['smtp']['port']);

// SMTP-Transport für Zend_Mail erstellen
$smtp = new Zend_Mail_Transport_Smtp($data['smtp']['host'], $config);

// Mail erstellen
$mail = new Zend_Mail($data['charset']);
$mail-&gt;setSubject($data['subject'])                           // Betreff setzen
     -&gt;setBodyHtml($data['html'], $data['charset'])           // HTML Nachricht
     -&gt;setBodyText($data['text'], $data['charset'])           // TEXT Nachricht
     -&gt;setFrom($data['from']['email'], $data['from']['name']) // Absender
     -&gt;addTo($data['to']['email'], $data['to']['name'])       // Empfänger
     -&gt;send($smtp);                                           // Absenden&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=LUkm4P3Fwbs:nKa-FrPUGFY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=LUkm4P3Fwbs:nKa-FrPUGFY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=LUkm4P3Fwbs:nKa-FrPUGFY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=LUkm4P3Fwbs:nKa-FrPUGFY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=LUkm4P3Fwbs:nKa-FrPUGFY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=LUkm4P3Fwbs:nKa-FrPUGFY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=LUkm4P3Fwbs:nKa-FrPUGFY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Verzeichnisse (rekursiv) auslesen mit den Iteratoren der SPL]]></title>
      <link>http://www.robo47.net/codeschnipsel/1-Verzeichnisse-rekursiv-auslesen-mit-den-Iteratoren-der-SPL</link>
      <guid>http://www.robo47.net/codeschnipsel/1-Verzeichnisse-rekursiv-auslesen-mit-den-Iteratoren-der-SPL</guid>
      <description>Die folgenden Code-Beispiele sollen zeigen wie man in PHP mit Hilfe der Iteratoren der SPL (DirectoryIterator, RecursiveDirectoryIterator und RecursiveIteratorIterator) Verzeichnisse auslesen kann.&lt;br /&gt;&lt;br /&gt;&lt;?php
/**
 * vorhandene Verzeichnisstruktur:
 *
 * + files
 *   + dir 1
 *     + dir 1.1
 *       + file1
 *       + file2
 *     + file1
 *     + file2
 *   + dir 2
 *     + dir 2.1
 *       + file1
 *       + file2
 *     + dir 2.2
 *       + file1
 *       + file2
 */



echo 'Dateien: ' . PHP_EOL;
$iterator = new DirectoryIterator('./files');
foreach($iterator as $element) {
    if ($element-&gt;isFile()) {
        echo $element-&gt;getFilename() . PHP_EOL;
    }
}

// iterator wieder zurücksetzen
$iterator-&gt;rewind();

echo PHP_EOL . PHP_EOL . 'Verzeichnisse: ' . PHP_EOL;

// Verzeichnisse aus Verzeichnis auflisten
foreach($iterator as $element) {
    if ($element-&gt;isDir()) {
        echo $element-&gt;getFilename() . PHP_EOL;
    }
}

echo PHP_EOL . PHP_EOL . 'Rekursive Verzeichnisse: ' . PHP_EOL;

$recursiveIterator = new RecursiveDirectoryIterator('./files');
$recursiverecursiveIterator = new RecursiveIteratorIterator($recursiveIterator,
                                         RecursiveIteratorIterator::SELF_FIRST);

foreach($recursiverecursiveIterator as $element) {
    if ($element-&gt;isDir()) {
        $depth = $recursiverecursiveIterator-&gt;getDepth();
        echo str_repeat('  ', $depth);
        echo $element-&gt;getFilename() . PHP_EOL;
    }
}

// iteratoren zurücksetzen
$recursiveIterator-&gt;rewind();
$recursiverecursiveIterator-&gt;rewind();

echo PHP_EOL . PHP_EOL . 
     'Rekursive Struktur mit Verzeichnissen und DateienVerzeichnisse:' . 
     PHP_EOL;
foreach($recursiverecursiveIterator as $element) {
    if ($element-&gt;isDir() || $element-&gt;isFile()) {
        $depth = $recursiverecursiveIterator-&gt;getDepth();
        echo str_repeat('  ', $depth);
        echo '[' . strtoupper($element-&gt;getType()) . '] ';
        echo $element-&gt;getFilename() . PHP_EOL;
    }
}

/**
 * Komplette Ausgabe des Scripts:

Verzeichnisse:
dir 1
.
dir 2
..


Rekursive Verzeichnisse:
dir 1
  dir 1.1
dir 2
  dir 2.2
  dir 2.1


Rekursive Struktur mit Verzeichnissen und DateienVerzeichnisse:
[DIR] dir 1
  [FILE] file2
  [FILE] file1
  [DIR] dir 1.1
    [FILE] file2
    [FILE] file1
[DIR] dir 2
  [FILE] file2
  [DIR] dir 2.2
    [FILE] file2
    [FILE] file1
  [FILE] file1
  [DIR] dir 2.1
    [FILE] file2
    [FILE] file1
 */&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iE2kKsg_kq4:IjZUVUue0Ao:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iE2kKsg_kq4:IjZUVUue0Ao:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iE2kKsg_kq4:IjZUVUue0Ao:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=iE2kKsg_kq4:IjZUVUue0Ao:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iE2kKsg_kq4:IjZUVUue0Ao:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=iE2kKsg_kq4:IjZUVUue0Ao:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iE2kKsg_kq4:IjZUVUue0Ao:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[DNS Lookup - IP 2 DNS]]></title>
      <link>http://www.robo47.net/tool/3-DNS-Lookup-IP-2-DNS</link>
      <guid>http://www.robo47.net/tool/3-DNS-Lookup-IP-2-DNS</guid>
      <description>DNS Lookup zu einer IP&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-j9s-DajRgM:Vx5EwzCRxEo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-j9s-DajRgM:Vx5EwzCRxEo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-j9s-DajRgM:Vx5EwzCRxEo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=-j9s-DajRgM:Vx5EwzCRxEo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-j9s-DajRgM:Vx5EwzCRxEo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=-j9s-DajRgM:Vx5EwzCRxEo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-j9s-DajRgM:Vx5EwzCRxEo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Wie ist meine IP im Internet]]></title>
      <link>http://www.robo47.net/tool/5-Wie-ist-meine-IP-im-Internet</link>
      <guid>http://www.robo47.net/tool/5-Wie-ist-meine-IP-im-Internet</guid>
      <description>Wie ist meine momentane IP im Internet&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=T0iXbE2Aiko:PWpHTfNRxxE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=T0iXbE2Aiko:PWpHTfNRxxE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=T0iXbE2Aiko:PWpHTfNRxxE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=T0iXbE2Aiko:PWpHTfNRxxE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=T0iXbE2Aiko:PWpHTfNRxxE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=T0iXbE2Aiko:PWpHTfNRxxE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=T0iXbE2Aiko:PWpHTfNRxxE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[IP Lookup - DNS 2 IP]]></title>
      <link>http://www.robo47.net/tool/4-IP-Lookup-DNS-2-IP</link>
      <guid>http://www.robo47.net/tool/4-IP-Lookup-DNS-2-IP</guid>
      <description>IP Lookup zu einem Hostname&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=asEww6_mcBE:4zeqd75j32U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=asEww6_mcBE:4zeqd75j32U:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=asEww6_mcBE:4zeqd75j32U:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=asEww6_mcBE:4zeqd75j32U:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=asEww6_mcBE:4zeqd75j32U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=asEww6_mcBE:4zeqd75j32U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=asEww6_mcBE:4zeqd75j32U:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Html-E-Mail über SMTP via PEAR::Mail und PEAR::Mime versenden]]></title>
      <link>http://www.robo47.net/codeschnipsel/7-Html-E-Mail-ueber-SMTP-via-PEAR-Mail-und-PEAR-Mime-versenden</link>
      <guid>http://www.robo47.net/codeschnipsel/7-Html-E-Mail-ueber-SMTP-via-PEAR-Mail-und-PEAR-Mime-versenden</guid>
      <description>&lt;p&gt;
Beispiel-Code zum versenden einer E-Mail über SMTP mit der Klasse PEAR::Mail PEAR::Mail_Mime und PEAR::Net_SMTP aus dem PHP Extension and Application Repository. Verwendete Versionen: Mail: 1.2.0b1, Mail_Mime: 1.5.2, Net_SMTP 1.3.2, PEAR: 1.7.2
&lt;/p&gt;
&lt;h3&gt;Anmerkung:&lt;/h3&gt;
&lt;p&gt;
Der Code von PEAR ist ursprünglich für PHP 4 geschrieben worden, daher kommt es mit error_reporting(E_ALL | E_STRICT); zu einigen Warnmeldungen betreffs der Strict Standards. 
&lt;/p&gt;
&lt;h3&gt;Downloads:&lt;/h3&gt;
&lt;p&gt;
  Entweder man nutzt den PEAR-Installer: &lt;br /&gt;
  &lt;code&gt;pear install pear/Mail pear/Mail_Mime pear/Net_SMTP&lt;/code&gt;&lt;br /&gt;
  Oder man lädt sich die Pakete einzeln herunter:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://pear.php.net/package/Mail"&gt;Pear::Mail&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://pear.php.net/package/Mail_Mime"&gt;Pear::Mail_Mime&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://pear.php.net/package/Net_SMTP"&gt;Pear::Net_SMTP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$data = array();
$data['smtp'] = array();
$data['smtp']['host'] = 'mail.example.com';
$data['smtp']['port'] = '25';
$data['smtp']['username'] = 'username';
$data['smtp']['password'] = 'password';

$data['from'] = array('name' =&gt; 'Absender', 'email' =&gt; 'absender@example.com');
$data['to'] = array('name' =&gt; 'Empfänger', 'email' =&gt; 'empfaenger@example.com');
$data['charset'] = 'utf-8';
$data['subject'] = 'Html Mail';

$data['html'] = '
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;'.$data['subject'].'&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;h1&gt;Meine Html-Mail&lt;/h1&gt;
            &lt;p&gt;
                Lorem ipsum dolor sit amet.
            &lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;';

$data['text'] = 'Meine Html-Mail

Lorem ipsum dolor sit amet.';

require_once 'Mail.php';
require_once 'Mail/mime.php';

$options = array( 'auth'     =&gt; true,
                  'host'     =&gt; $data['smtp']['host'],
                  'port'     =&gt; $data['smtp']['port'],
                  'username' =&gt; $data['smtp']['username'],
                  'password' =&gt; $data['smtp']['password']);

$mailer = Mail::factory('smtp', $options);

$mail = new Mail_Mime(PHP_EOL);
$mail-&gt;setHTMLBody($data['html']);                   // Html-Body

$header = $mail-&gt;headers();
$header['Subject']      = $data['subject'];         // Betreff setzen
$header['from']         = $data['from']['email'];   // Absender setzen
$header['Content-type'] = 'text/html';
$header['Charset']     = 'UTF-8';

$mailer-&gt;send($data['to']['email'], $header, $mail-&gt;get());&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=twq1bSyGQqY:oYcsgDNxP00:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=twq1bSyGQqY:oYcsgDNxP00:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=twq1bSyGQqY:oYcsgDNxP00:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=twq1bSyGQqY:oYcsgDNxP00:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=twq1bSyGQqY:oYcsgDNxP00:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=twq1bSyGQqY:oYcsgDNxP00:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=twq1bSyGQqY:oYcsgDNxP00:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Linux History Clean Script]]></title>
      <link>http://www.robo47.net/codeschnipsel/8-Linux-History-Clean-Script</link>
      <guid>http://www.robo47.net/codeschnipsel/8-Linux-History-Clean-Script</guid>
      <description>&lt;p&gt;
Da für mich unter Linux die history der Shell sehr wichtig ist und die mit der zeit dann doch auch recht vollgemüllt mit gleichen einträgen ist, hab ich mir ein kleines PHP-Script gebastelt mit dem ich die History aufräumen kann ohne die reihenfolge oder ähnliches zu verändern.
&lt;/p&gt;
&lt;p&gt;
Während die mir bekannten Shell-Einzeiler mit uniq und sort alle die Reihenfolge innerhalb der History kaputt gemacht haben, hab ich mir ein kleines Script mit PHP gebastelt, das eine Datei einliest und jeweils das letzte vorkommen einer Zeile wieder in eine Datei schreibt, so bleibt die Reihenfolge innerhalb der history komplett erhalten.
&lt;/p&gt;
&lt;p&gt;
Das Script einfach irgendwo abspeichern und dann einen Symlink in einem Ordner innerhalb von PATH setzen, dann kann man es von überall aufrufen.
&lt;/p&gt;
&lt;code&gt;
usage: cleanfile [OPTION] FILE&lt;br /&gt;
cleanHistory 0.2&lt;br /&gt;
 -h, --help   Shows this help&lt;br /&gt;
 -d, --debug  Shows debug information after cleaning the file&lt;br /&gt;
&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;#! /usr/bin/php
&lt;?php
// Copyright (c) 2008-2009, Benjamin Steininger (Robo47)
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright notice,
//      this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of Robo47 nor the names of its contributors may be
//       used to endorse or promote products derived from this software without
//       specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
// THE POSSIBILITY OF SUCH DAMAGE.

define('startTime', microtime(true));
error_reporting(E_ALL | E_STRICT);

define('CLEAN_HISTORY_VERSION',     '0.2');
define('FILE_NOT_FOUND',            1);
define('FILE_NOT_READABLE',         2);
define('FILE_NOT_WRITEABLE',        3);
define('NO_FILE',                   4);


function showHelp($binary) {
    echo 'usage: ' . basename($binary) . ' [OPTION] FILE' . PHP_EOL;
    echo 'cleanHistory ' . CLEAN_HISTORY_VERSION . PHP_EOL;
    echo ' -h, --help   Shows this help' . PHP_EOL;
    echo ' -d, --debug  Shows debug information after cleaning the file' .
         PHP_EOL;
}

$debug = false;
if ($argc &gt; 3) {
    echo 'too many parameters';
    return 0;
}
$count = 1;
foreach($argv as $key =&gt; $arg) {
    switch($arg) {
        case '--help':
        case '-h':
            showHelp($argv[0]);
            return 0;
        break;
        case '--debug':
        case '-d':
            if ($key == 1) {
                $count++;
            }
            $debug = true;
        break;
    }
}

if (!isset($argv[$count])) {
    echo 'no file given' . PHP_EOL;
    return NO_FILE;
}

$sourceFile = $argv[$count];

if (!file_exists($sourceFile)) {
    echo 'File not found: ' . $sourceFile;
    return FILE_NOT_FOUND;
}
if (!is_readable($sourceFile)) {
    echo 'File not readable: ' . $sourceFile;
    return FILE_NOT_READABLE;
}
if (!is_writeable($sourceFile)) {
    echo 'Unable to write to file: ' . $sourceFile;
    return FILE_NOT_WRITEABLE;
}

$beforeSize = filesize($sourceFile);

// read sourcefile into array
$aSource = file($sourceFile);

// reverse array to filter
$aSource = array_reverse($aSource);
$aTarget = array();

// add all new lines to thenew array if they arent already in
foreach ($aSource as $line) {
    $line = trim($line);
    if (!isset($aTarget[$line]) &amp;&amp; !empty($line)) {
        $aTarget[$line] = $line;
    }
}

// reverse array again for writing into file
$aTarget = array_reverse($aTarget);

file_put_contents($sourceFile, implode(PHP_EOL, $aTarget));

if (true === $debug) {
    $sizeAfter = filesize($sourceFile) / 1024;
    $beforeSize = $beforeSize / 1024;
    $memUsage = memory_get_peak_usage() / 1024;
    echo 'Time: ' . round(microtime(true) - startTime, 3) . PHP_EOL;
    echo 'lines before: ' . count($aSource) . PHP_EOL;
    echo 'lines after:  ' . count($aTarget) . PHP_EOL;
    echo 'size before:  ' . round($beforeSize, 2) . 'kb ' . PHP_EOL;
    echo 'size after:   ' . round($sizeAfter, 2) . 'kb ' . PHP_EOL;
    echo 'mem-peak    : ' . round($memUsage, 0) . 'kb' . PHP_EOL;
}
return 0;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DocFyrZiv_s:-jdiiZDjwa4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DocFyrZiv_s:-jdiiZDjwa4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DocFyrZiv_s:-jdiiZDjwa4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=DocFyrZiv_s:-jdiiZDjwa4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DocFyrZiv_s:-jdiiZDjwa4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=DocFyrZiv_s:-jdiiZDjwa4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DocFyrZiv_s:-jdiiZDjwa4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[sh: line 1: host: command not found und Invalid query name 1 im Apache-Log]]></title>
      <link>http://www.robo47.net/text/9-sh-line-1-host-command-not-found-und-Invalid-query-name-1-im-Apache-Log</link>
      <guid>http://www.robo47.net/text/9-sh-line-1-host-command-not-found-und-Invalid-query-name-1-im-Apache-Log</guid>
      <description>&lt;p&gt;
Ich habe vor einiger Zeit folgenden immer wiederkehrenden Fehler in den Log-Files meines Apachen gefunden:
&lt;br /&gt;
&lt;/p&gt;
&lt;strong&gt;sh: line 1: host: command not found&lt;/strong&gt;
&lt;p&gt;
Das ganze deutet zuerst darauf hin, dass das Tool &lt;strong&gt;host&lt;/strong&gt; (Ein Werkzeug zum Kontaktieren von DNS-Servern) nicht installiert ist.
&lt;/p&gt;
&lt;p&gt;
Unter Ubuntu/Debian brachte das installieren von &lt;em&gt;host&lt;/em&gt;
eine scheinbare Abhilfe, allerdings nur scheinbar, stattdessen häufte sich jetzt ein neuer Fehler im Log:
&lt;code&gt;Invalid query name 1&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
Nach langem hin und her konnte ich als indirekten schuldigen PHP und dort das SMF-Forum dafür verantwortlich machen. Schuld war dabei die Einstellung &lt;em&gt;hostname lookups&lt;/em&gt; des SMFs [und das dadurch aufgerufene gethostbyaddr()] wie ich dort im Forum dann herausfand. Als Lösung des Problems konnte man nun entweder dieses Feature ausschalten, oder wieder host deinstallieren und stattdessen dann bind9-hosts intalliere, da host gewisse Parameter nicht unterstützt die bind9-hosts kann.
&lt;/p&gt;
&lt;h2&gt;Lösung&lt;/h2&gt;
&lt;p&gt;Unter Debian/Ubuntu: &lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
apt-get install bind9-host
&lt;/pre&gt;
&lt;p&gt;
&lt;a href="http://www.simplemachines.org/community/index.php?topic=114315.msg979924#msg979924"&gt;Thread im SMF-Forum&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=1kE9CW4B0UQ:STgO9vqC9Vs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=1kE9CW4B0UQ:STgO9vqC9Vs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=1kE9CW4B0UQ:STgO9vqC9Vs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=1kE9CW4B0UQ:STgO9vqC9Vs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=1kE9CW4B0UQ:STgO9vqC9Vs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=1kE9CW4B0UQ:STgO9vqC9Vs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=1kE9CW4B0UQ:STgO9vqC9Vs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Domain vor Domainumzug auf neuen Server testen]]></title>
      <link>http://www.robo47.net/text/8-Domain-vor-Domainumzug-auf-neuen-Server-testen</link>
      <guid>http://www.robo47.net/text/8-Domain-vor-Domainumzug-auf-neuen-Server-testen</guid>
      <description>&lt;p&gt;
    Ein vielen bekanntes Problem wenn man eine Domain (sei es ein Forum, ein Blog, ein Shop oder was sogar mehrere Systeme) umziehen will, ist es vorher zu überprüfen, ob das System denn einwandfrei läuft, bevor auch die DNS-Einträge für die Domain angepasst werden. Hier mal ein paar Tips wie man so einen Umzug vorher besser testen kann ohne dass das böse erwachen erst nach dem Umschalten der Domain kommt.
&lt;/p&gt;
&lt;p&gt;
Als erstes sollte man sich um die Datenbank kümmern. Irgendwann zu der Zeit die laut Log-Dateien die am wenigsten frequentierte ist, schaltet man das System in den hoffentlich vorhandenen &lt;strong&gt;Wartungsmodus&lt;/strong&gt;.&lt;br /&gt;
Dann erstellt man einen aktuellen &lt;strong&gt;Dump der Datenbank&lt;/strong&gt;, diesen spielt man dann auf dem neuen Server ein und ändert anschließend die Datenbankdaten im alten System auf die IP, Benutzername, Passwort und Datenbankname des neuen Servers. &lt;br /&gt; Das ganze erfordert allerdings auch, dass beim neuen Anbieter die (MySQL-)Datenbank von außen erreichbar ist, was bei vielen Webspace-Hostern nicht der Fall ist! &lt;br /&gt;
Dann kann man den &lt;strong&gt;Wartungsmodus&lt;/strong&gt; erstmal beenden. (Wichtig ist hierbei, dass das System keine Daten mehr ins Dateisystem speichert, die relevant sind, bei Foren sollte man z.b. während der Umzugsphase Datei-Anhänge, neue Avatare und ähnliche Features deaktivieren.)
Dann kann man fortfahren und die kompletten Inhalte vom FTP des alten Servers auf den neuen Server umziehen.
&lt;/p&gt;
&lt;p&gt;
Hat man jetzt einen eigenen Server, sollte man den passenden vhost für die Domain schon anlegen, andernfalls sollte man seinen Provider darum bitten dies zu tun (Wenn man nur Webspace bei dem Provider hat).
Jetzt kann man indem man in der hosts-Datei des Betriebssystem (Windows: C:\WINDOWS\system32\drivers\etc\hosts | Linux: /etc/hosts | MacOS: /etc/hosts)
einen Eintrag für die Domain macht:
&lt;/p&gt;
&lt;pre class="block brush: plain"&gt;
IP.DES.NEUEN.SERVERS       www.domain.tld&lt;br /&gt;
IP.DES.NEUEN.SERVERS       domain.tld
&lt;/pre&gt;
&lt;p&gt;
schon das System auf dem neuen Server einrichten und testen. Dieser Eintrag macht nichts anderes, als die IP für diese Domain nicht mehr vom DNS-Server des Providers zu beziehen, sondern fest einzustellen, damit kann man selbst ohne dass die anderen User der Seite es mitbekommen, schon auf dem neuen System surfen, testen und arbeiten.
&lt;/p&gt;
&lt;p&gt;
Nachdem man das komplette System jetzt auf dem neuen Server eingerichtet hat, kann man dann den Domainumzug starten. (&lt;strong&gt;Wichtig ist, jetzt die Einträge in der Hosts-Datei wieder zu löschen, damit man auch mitbekommt, wann die Domain beim eigenen Provider als umgezogen gilt.&lt;/strong&gt;)
&lt;/p&gt;
&lt;p&gt;
Ein paar Dinge die man aber auf jeden Fall noch beachten sollte sind, wenn man die Domain umzieht, werden irgendwann die DNS-Einträge geändert (sobald diese geändert sind, ist die Domain auf dem neuen Server erreichbar, theoretisch), bis diese Änderung allerdings auf allen DNS-Servern bei allen Providern angekommen ist, können bis zu 24 Stunden vergehen.
Heißt, es kann sein, dass man selbst zwar schon wenn man die Domain eingibt auch auf den neuen Server kommt, andere Leute aber nicht (selbst wenn sie beim gleichen Internet Provider sind). Daher sollte man jetzt keinesfalls schon alle Features wie Dateiuploads aktivieren, sonst kann es passieren, dass die Leute die noch auf dem alten Server sind, dort eine Datei hochladen, die dann nicht auf dem neuen Server liegt. Um so ein Problem zu umgehen kann man einfach, nach z.B. 24 Stunden, wenn man meint, dass genug Zeit vergangen ist, auf dem alten Server das Forum/den Shop (oder was auch immer) durch eine Informationsseite ersetzen, dass das Projekt gerade umzieht und bald wieder erreichbar sein sollte, dann kann man auch wieder die ganzen Features auf dem neuen Server aktivieren und muss keine Angst haben, dass es zu verschwundenen Dateianhängen oder ähnlichem kommt.
&lt;/p&gt;
&lt;p&gt;
Da ich im Oktober 2006 selbst ein paar Umzüge machen musste haben sich diese Tricks als sehr praktisch erwiesen, weil man zuverlässig vorher schon seine Systeme testen kann, ohne dass es zu längeren Ausfällen kommt. Lustiger weise waren die &lt;strong&gt;Suchmaschinenbots&lt;/strong&gt; mit die letzen die meine neue IP bekommen haben, denn z.B. Google und Yahoo waren teilweise bis zu 6 Stunden, nachdem ich hier die Domain schon wieder auf dem neuen Server erreichen konnte, auf dem alten unterwegs und haben ein paar Foren und Seiten gespidert.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=7pian-XcXyU:5cnI4cYescE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=7pian-XcXyU:5cnI4cYescE:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=7pian-XcXyU:5cnI4cYescE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=7pian-XcXyU:5cnI4cYescE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=7pian-XcXyU:5cnI4cYescE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=7pian-XcXyU:5cnI4cYescE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=7pian-XcXyU:5cnI4cYescE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Vhost via 301 - Moved Permanently Header weiterleiten]]></title>
      <link>http://www.robo47.net/text/7-Vhost-via-301-Moved-Permanently-Header-weiterleiten</link>
      <guid>http://www.robo47.net/text/7-Vhost-via-301-Moved-Permanently-Header-weiterleiten</guid>
      <description>&lt;p&gt;
	Mit diesem Code direkt in der Konfiguration des Apache-Webservers, kann man einen Vhost via &lt;strong&gt;301 - Moved Permanently&lt;/strong&gt; an eine andere Adresse (Domain, Subdomain) Weiterleitung unter Beibehaltung der Pfade:&lt;/p&gt;
&lt;pre class="block brush: plain"&gt;&amp;lt;VirtualHost *:80&amp;gt;
    ServerName subdomain.domain.tld
    RedirectMatch 301 (.*) http://www.domain2.tld$1
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
	Dabei wird aus &lt;code&gt;subdomain.domain.tld/asdf/&lt;/code&gt; dann &lt;code&gt;www.domain2.tld/asdf/&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
	S&amp;auml;mtliche Pfad, Datei und Parameter-Angaben bleiben erhalten&lt;/p&gt;
&lt;p&gt;
	Will man nur auf die Domain selbst weiterleiten ohne die Pfad und Dateiangaben, dann macht man das &amp;uuml;ber:&lt;/p&gt;
&lt;pre class="block brush: plain"&gt;&amp;lt;VirtualHost *:80&amp;gt;
    ServerName subdomain.domain.tld
    RedirectMatch 301 (.*) http://www.domain2.tld
&amp;lt;/VirtualHost&amp;gt;
&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=M2v89IzU3D0:BX4PKg4eDjM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=M2v89IzU3D0:BX4PKg4eDjM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=M2v89IzU3D0:BX4PKg4eDjM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=M2v89IzU3D0:BX4PKg4eDjM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=M2v89IzU3D0:BX4PKg4eDjM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=M2v89IzU3D0:BX4PKg4eDjM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=M2v89IzU3D0:BX4PKg4eDjM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[PHP Configure und Compile Fehler]]></title>
      <link>http://www.robo47.net/text/6-PHP-Configure-und-Compile-Fehler</link>
      <guid>http://www.robo47.net/text/6-PHP-Configure-und-Compile-Fehler</guid>
      <description>&lt;h1&gt;PHP Configure und Compile Fehler&lt;/h1&gt;
&lt;p&gt;
    Mögliche auftretenden Fehler beim selbstkompilieren von php und welche
    Pakete man unter Debian/Ubuntu dann installieren muss.
&lt;/p&gt;
&lt;h2&gt;Übersicht&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="#bzip2"&gt;configure: error: Please reinstall the BZip2 distribution&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#libcurl"&gt;configure: error: Please reinstall the libcurl distribution - easy.h should be in &amp;lt;curl-dir&amp;gt;/include/curl/&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#dba"&gt;configure: error: DBA: Could not find necessary header file(s)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#libjpeg"&gt;configure: error: libjpeg.(a|so) not found&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#libpng"&gt;configure: error: libpng.(a|so) not found&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#libxml"&gt;configure: error: xml2-config not found. Please check your libxml2 installation.&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#mcrypt"&gt;configure: error: mcrypt.h not found. Please reinstall libmcrypt.&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#mhash"&gt;configure: error: Please reinstall libmhash - I cannot find mhash.h&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#mysql"&gt;configure: error: Cannot find MySQL header files under yes.&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#readline"&gt;configure: error: Please reinstall readline - I cannot find readline.h&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#mm"&gt;configure: error: cannot find mm library&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#libtidy"&gt;configure: error: Cannot find libtidy&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#libxslt"&gt;configure: error: xslt-config not found. Please reinstall the libxslt &amp;gt;= 1.1.0 distribution&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Ein Problem das sehr oft auftritt wenn man frisch php kompiliert oder 
    eine neue Extension hinzufügen will ist das fehlen der -dev bzw -devel Paketen für die passende Extension.
    Die Angegeben Versionsnummer können natürlich abhängig von der Distribution und Version 
    abweichen, aber es sollte zumindest einen hinweis in die richtige Richtung geben
    was dem System noch fehlt, die Beispiele beziehen sich alle auf Debian ETCH.
&lt;/p&gt;
&lt;h2&gt;&lt;a name="bzip"&gt;configure: error: Please reinstall the BZip2 distribution&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libbz2&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libbz2-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="libcurl"&gt;configure: error: Please reinstall the libcurl distribution - easy.h should be in &amp;lt;curl-dir&amp;gt;/include/curl/&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libcurl&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libcurl3-dev&lt;/pre&gt;
    Debian Lenny:&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;libcurl4-openssl-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="mysql"&gt;configure: error: Cannot find MySQL header files under yes.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libmysql&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libmysqlclient15-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="dba"&gt;configure: error: DBA: Could not find necessary header file(s)&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libgdbm&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libgdbm-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="libjpeg"&gt;configure: error: libjpeg.(a|so) not found&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libjpeg&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libjpeg62 libjpeg62-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="libpng"&gt;configure: error: libpng.(a|so) not found&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libpng&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libpng12-0 libpng12-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="libxml"&gt;configure: error: xml2-config not found. Please check your libxml2 installation.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libxml2&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libxml2 libxml2-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="mcrypt"&gt;configure: error: mcrypt.h not found. Please reinstall libmcrypt.&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libmcrypt&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libmcrypt4 libmcrypt-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="mhash"&gt;configure: error: Please reinstall libmhash - I cannot find mhash.h&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libmhash&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libmhash2 libmhash-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="readline"&gt;configure: error: Please reinstall readline - I cannot find readline.h&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libreadline&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libreadline5-dev&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="mm"&gt;configure: error: cannot find mm library&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libmm&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libmm-dev libmm14&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="libtidy"&gt;configure: error: Cannot find libtidy&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libtidy&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libtidy-dev libtidy-0.99-0&lt;/pre&gt;
&lt;/p&gt;
&lt;h2&gt;&lt;a name="libxslt"&gt;configure: error: xslt-config not found. Please reinstall the libxslt &amp;gt;= 1.1.0 distribution&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libxslt&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libxslt1-dev libxslt1.1&lt;/pre&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jKWvldelAeA:MPduJR1MpLI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jKWvldelAeA:MPduJR1MpLI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jKWvldelAeA:MPduJR1MpLI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jKWvldelAeA:MPduJR1MpLI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jKWvldelAeA:MPduJR1MpLI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jKWvldelAeA:MPduJR1MpLI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jKWvldelAeA:MPduJR1MpLI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[SSH dynamisch nur für gewisse IPs erlauben dynamische IP-Whitelist]]></title>
      <link>http://www.robo47.net/text/10-SSH-dynamisch-nur-fuer-gewisse-IPs-erlauben-dynamische-IP-Whitelist</link>
      <guid>http://www.robo47.net/text/10-SSH-dynamisch-nur-fuer-gewisse-IPs-erlauben-dynamische-IP-Whitelist</guid>
      <description>&lt;p&gt;
Auf diesem Weg kann man in Kombination mit einem Cronjob und einem weiteren Script (sei es PHP oder eine Sprache) dynamisch verschiedenen IPs erlauben &lt;strong&gt;SSH&lt;/strong&gt; zu nutzen.&lt;br /&gt;
Der Cronjob ist auch nötig, weil PHP das unter dem Benutzer des Webservers (Modul) oder einem eigenen Benutzer (suexec) läuft, üblicherweise (und sinnvoller) Weise keinen Schreib-Zugriff auf das /etc/-Verzeichnis hat.
&lt;/p&gt;
&lt;p&gt;
&lt;span class="warningMessage"&gt;Anmerkung: &lt;/span&gt; Das ist hier alles quick and dirty ausgeführt, nur um zu zeigen was für Möglichkeiten man hat.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
Mein Problem war es einer Usergruppe (Angemeldeten Benutzern eines Forums) Zugriff auf einen &lt;strong&gt;SFTP/SSH-Account&lt;/strong&gt; zu geben und diesen Usern einen möglichst einfachen Zugriff bei gleichzeitigem Schutz vor den üblichen 
Bruteforce-Attacken. Dazu habe ich dann folgendes kleines Script benutzt (es ist für das &lt;strong&gt;Simple Maschines Forum (SMF)&lt;/strong&gt; geschrieben, sollte allerdings sehr einfach an ein anderes Forum angepasst werden können.)
&lt;/p&gt;
&lt;pre class="block brush: php"&gt;
&amp;lt;?php
error_reporting(E_ALL);
$res = mysql_connect('host','user','pw') or die(mysql_error());
mysql_select_db('databasename',$res) or die(mysql_error());
$query = mysql_query("SELECT memberIP,memberIP2 from smf_members") 
              or die(mysql_error());
if (mysql_num_rows($query) &amp;gt; 0)
{
    while($data = mysql_fetch_assoc($query))
    {
        $global[] = $data['memberIP'];
        $global[] = $data['memberIP2'];
    }
}
file_put_contents('./hosts.allow','sshd: '.implode("\n".'sshd: ', $new));
&lt;/pre&gt;
&lt;p&gt;
Der Cronjob muss jetzt folgendes machen, er muss das PHP-Script aufrufen (entweder über die shell oder über wenn es via URL erreichbarbar ist über wget/lynx/curl) und dann die vom PHP-Script erzeugte Datei an den richtigen Platz kopieren:
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
wget --output-document=/dev/null  http://www.domain.tld/allowscript/allowscript.php
cp /pfad/zum/allowscript/hosts.allow  /etc/hosts.allow
&lt;/pre&gt;
&lt;p&gt;
Dadurch dass der Cronjob nur alle Minute ausgeführt wird, kommt es zwar zu einer kurzen Wartezeit von bis zu einer Minute bis man nach dem einloggen im Forum Zugang zum SFTP/SSH bekommt, aber das sollte akzeptabel sein.
&lt;/p&gt;
&lt;p&gt;
Ein Nachteil der besteht, ist dass man bei einem normalen DSL-Anbieter, üblicherweise alle 24 Stunden einen Disconnect hat raus und muss danach erst wieder aufs Forum, auch wenn man gerade vor fünf Minute auf dem Forum war. Wer ne feste IP hat, hat damit kein Problem, es lässt sich allerdings auch noch erweitern indem man nur die IPs der Leute einträgt die innerhalb der letzen XX Stunden z.b. auf dem Forum waren, einen Post gemacht haben .... ist also auch weiter ausbaufähig.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=b6Zu3d5IK6Y:_KIalubZ5Ys:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=b6Zu3d5IK6Y:_KIalubZ5Ys:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=b6Zu3d5IK6Y:_KIalubZ5Ys:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=b6Zu3d5IK6Y:_KIalubZ5Ys:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=b6Zu3d5IK6Y:_KIalubZ5Ys:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=b6Zu3d5IK6Y:_KIalubZ5Ys:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=b6Zu3d5IK6Y:_KIalubZ5Ys:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[PHP PECL Extensions Fehler]]></title>
      <link>http://www.robo47.net/text/11-PHP-PECL-Extensions-Fehler</link>
      <guid>http://www.robo47.net/text/11-PHP-PECL-Extensions-Fehler</guid>
      <description>&lt;h1&gt;PHP Configure und Compile Fehler&lt;/h1&gt;
&lt;p&gt;
    Mögliche auftretenden Fehler die beim Installieren von PECL-Extensions beim Fehlen von Bibliothkenen oder deren dev(el)-Paketen auftreten können und welche Pakete man unter Debian/Ubuntu dann installieren muss.
&lt;/p&gt;
&lt;h2&gt;Übersicht&lt;/h2&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="#pecl-ssh2"&gt;PECL ssh2-Extensions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&lt;a name="pecl-ssh2"&gt;configure: error: The required libssh2 library was not found.  You can obtain that package from http://sourceforge.net/projects/libssh2/&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;
    Fehlende Bibliothek: libssh2&lt;br /&gt;
    &lt;pre class="block brush: bash"&gt;apt-get install libssh2-1 libssh2-1-dev&lt;/pre&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=QNpgcqJZcgo:IA9dw2Nauzw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=QNpgcqJZcgo:IA9dw2Nauzw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=QNpgcqJZcgo:IA9dw2Nauzw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=QNpgcqJZcgo:IA9dw2Nauzw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=QNpgcqJZcgo:IA9dw2Nauzw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=QNpgcqJZcgo:IA9dw2Nauzw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=QNpgcqJZcgo:IA9dw2Nauzw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Datenbank-Fehlerbehandlung in PHP - verschiedene Wege und Möglichkeiten]]></title>
      <link>http://www.robo47.net/text/13-Datenbank-Fehlerbehandlung-in-PHP-verschiedene-Wege-und-Moeglichkeiten</link>
      <guid>http://www.robo47.net/text/13-Datenbank-Fehlerbehandlung-in-PHP-verschiedene-Wege-und-Moeglichkeiten</guid>
      <description>&lt;p&gt;
    Dieser kleine Artikel soll sich mit Thema der Fehlerbehandlung in PHP, speziell
    beim Arbeiten mit Datenbanken auseinandersetzen, dabei werden verschiedene
    Wege und Möglichkeiten aufgezeigt und verglichen. Er zeigt dabei auch etwas
    meine eigene &lt;em&gt;Weiterentwicklung&lt;/em&gt; über die Jahre die ich mich schon mit
    PHP und anderen Programmiersprachen beschäftige.
&lt;/p&gt;
&lt;h2&gt;1) Fehlerbehandlung via die()&lt;/h2&gt;
&lt;p&gt;
    Der wohl am meisten verbreitete und bekannteste Weg zur &lt;em&gt;&amp;quot;Fehlerbehandlung&amp;quot;&lt;/em&gt;
    in PHP bei der Benutzung von Datenbanken dürfte wohl die benutzung von &lt;em&gt;die()&lt;/em&gt; sein.
    Man findet sie in Foren, Code-Beispielen in vielen Blogs und Büchern und Tutorials.
&lt;/p&gt;
&lt;h3&gt;Einfaches Beispiele:&lt;/h3&gt;
&lt;pre class="block brush: php"&gt;
&amp;lt;?php

$connection = mysql_connect('localhost', 'baa', 'foo')  or die(mysql_error());
$selected   = mysql_select_db('baa', $connection)       or die(mysql_error());
$query      = mysql_query('SELECT baa FROM foo')        or die(mysql_error());

?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
    Einen wirklichen Vorteil dieser Methode ausser der Simplizität mit der sie
    sich im Code einbinden lässt gibt es eigentlich nicht.
    Aber dafür einige Nachteile: Das Script bricht
    an dieser Stelle komplett ab und der Kunde bzw. User der Seite
    bekommt einerseits eine unschöne Fehlermeldung undabhängig vom Fehler und der
    Meldung auch Informationen darüber was in dem Script gerade passiert / abläuft (Sicherheit)
    Desweiteren ist es nicht wirklich gleich ersichtlich WO genau der Fehler
    aufgetreten ist, da keinerlei Angaben über die betroffene Datei und Zeilennummer
    gemacht wird und keine Informationen zum Query und verwendeten Parametern bekannt sind.
    Ein weiteres Problem bei der Verwendung von die() ist, dass wenn der Fehler
    nicht gerade im Entwicklungsbetrieb einem Entwickler auffällt er sehr
    wahrscheinlich nie gemeldet wird.
&lt;/p&gt;
&lt;p&gt;
    Wenn auch am weitesten verbreitet sollte man von dieser Methode möglichst schnell
    Abstand nehmen, weil sie keine wirkliche Fehlerbehandlung ermöglicht, sondern
    nur eine möglicherweise sicherheitsbedenkliche Fehlermeldung ausgibt und
    dann den kompletten Script-Ablauf stoppt. Gerade mit der dann meistens
    nicht vorhandenen Trennung von Code und Layout ist eine zerhackte und
    unschöne Ausgabe schon vorprogrammiert.
&lt;/p&gt;
&lt;h2&gt;2) Erweiterte Fehlerbehandlung mit Logging/Mailing via einfacher Wrapper-Funktion&lt;/h2&gt;
&lt;p&gt;
    Einen einfachen Weg stellt die Verwendung von Wrapper-Funktionen für die gängigen Befehle:
    Datenbank-Verbindung aufbauen, Datenbank auswählen und die Datenbankabfragen selbst dar.
    Hier kann man sehr einfach und projektübergreifend zumindest ein Logging
    (z.b. mit &lt;a href="http://pear.php.net/package/Log"&gt;PEAR Log&lt;/a&gt; oder &lt;a href="http://framework.zend.com/manual/de/zend.log.html"&gt;Zend_Log&lt;/a&gt;) oder Email versenden
    (z.b. mit &lt;a href="http://www.swiftmailer.org"&gt;Swiftmailer&lt;/a&gt;, &lt;a href="http://phpmailer.codeworxtech.com/"&gt;phpmailer&lt;/a&gt;, &lt;a href="http://pear.php.net/package/Mail/"&gt;PEAR Mail&lt;/a&gt; oder &lt;a href="http://framework.zend.com/manual/de/zend.mail.html"&gt;Zend_Mail&lt;/a&gt;)
    für Fehler implementieren und neben dem Query auch Informationen z.b. Über die Url ($_SERVER),
    in welcher Datei + Zeile der Fehler aufgetreten ist (debug_backtrace()) und weitere Informationen
    die den Request betreffen ($_POST, $_GET, $_COOKIE, $_SESSION ... etc) mitgespeichert werden können.
&lt;/p&gt;
&lt;h3&gt;Einfaches Beispiele:&lt;/h3&gt;
&lt;pre class="block brush: php"&gt;
&amp;lt;?php

function logError($message)
{
    $error = PHP_EOL . $message . PHP_EOL .
             PHP_EOL . print_r(debug_backtrace(), true);
    file_put_contents('error.log', $error);
    mail('admin@project.tld', 'Fehler in Project XYZ', $error);
}

function connectToDatabase($host, $username, $password, $database)
{
    $connection = mysql_connect($host, $username, $password);
    if ($connection === false) {
        echo 'Es ist ein unerwarteter Fehler aufgetreten, der Administrator wurde informiert';
        logError("Fehler beim Aufbau der Verbindung zur Datenbank: " . mysql_error());
        exit();
    }
    $selected = mysql_select_db($database);
    if ($selected === false) {
        echo 'Es ist ein unerwarteter Fehler aufgetreten, der Administrator wurde informiert';
        logError("Fehler bei der Auswahl der Datenbank" . mysql_error());
        exit();
    }
}

function queryDatabase($query)
{
    $query = mysql_query($query);
    if ($query === false) {
        echo 'Es ist ein unerwarteter Fehler aufgetreten, der Administrator wurde informiert';
        logError("Fehler im Query: " . $query . PHP_EOL . PHP_EOL . "Fehler: " . mysql_error());
        exit();
    }
}

?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
    Dieses Methode erlaubt schon eine deutlich bessere Behandlung von Fehlern,
    der User bekommt keine kryptische sondern eine möglichst neutrale Fehlermeldung,
    der Verantwortliche des System wird informatiert und kann sich um das Problem
    kümmern. Nachteil ist auch hier weiterhin, dass es zu einem kompletten Abbruch
    des Scriptes kommt und der Fehler in keiner Form behandelt wird.
&lt;/p&gt;
&lt;h2&gt;3) Richtige Fehlerbehandlung mit Exceptions&lt;/h2&gt;
&lt;p&gt;
    Eine weitere Methode der Behandlung von Fehler (nicht nur beim arbeiten mit
    Datenbanken) ist das Arbeiten mit Exceptions. Hier wird in einem try-Block der
    eigentliche Code geschrieben und in Catch-Blöcken kann man die auftretenden Exceptions
    auffangen und dann passend behandeln. Auch die Fehlerbehandlung über mehrere Ebenen
    ist möglich indem man verschachtelten try/catch-Blöcke nutzt und z.b. in
    einem catch-Block nach der hier möglichen Behandlung die Exceptions
    "weiterwirft" um sie weiter oben weiter zu behandeln
&lt;/p&gt;
&lt;p&gt;
    Im Bezug auf Datenbanken kan man zu diesem Zwecke entweder das Rad neu erfinden, wenn man darauf
    steht und sich einen eigenen Wrapper um die mysql_*, mysqli_* Funktionen oder
    pg_sql (oder auch die Funktionen einer anderen Datenbank) basteln oder man
    setzt auf eine der schon existierenden Datenbank-(Abstraktions)Klasse die von
    sich aus Exceptions bei Fehlern werfen. Möglichkeiten gibt es hier viele,
    die seit PHP 5.1 standardmäßig vorhandene 
    &lt;a href="http://de3.php.net/manual/en/book.pdo.php"&gt;Extensions PDO&lt;/a&gt; (vor 5.1 als &lt;a href="http://pecl.php.net/package/PDO"&gt;PECL-Extensions&lt;/a&gt;) oder auch komplexere
    (teilweise auf PDO aufbauende) Systeme und Komponenten von Frameworks die zum
    Teil noch um einiges mehr bieten als nur einen einfachen Wrapper um eine
    Datenbank-API (z.b. ORM-Systeme):
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;&lt;a href="http://adodb.sourceforge.net/"&gt;ADOdb (Wrapper um diverse Schnittstellen unter anderem pdo, mysql, mysqlim, ..)&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://www.doctrine-project.org/"&gt;Doctrine (nutzt PDO)&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://propel.phpdb.org/trac/"&gt;Propel (nutzt PDO)&lt;/a&gt;&lt;/li&gt;
   &lt;li&gt;&lt;a href="http://framework.zend.com/manual/en/zend.db.html"&gt;Zend_Db (nutzt PDO, mysqli und weitere)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://www.ezpdo.net/"&gt;ezPDO (nutzt PDO)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    Weitere Möglichkeiten findet man via &lt;a href="http://www.google.de"&gt;Google&lt;/a&gt;
    oder auch bei &lt;a href="http://www.phpclasses.org"&gt;PHP Classes&lt;/a&gt;
&lt;/p&gt;
&lt;h3&gt;Einfaches Beispiele:&lt;/h3&gt;
&lt;pre class="block brush: php"&gt;
&amp;lt;?php

function PrintErrorMessage($message)
{
    /* Ausgabe einer Fehlerseite */
}

function LogException($e)
{
    /* Logging der Exception zusammen mit Umgebungsvariablen und co */
    /* Senden einer Email */
}

/* ... */

$dir = BASE_DIR . '/foo';

try {

    mkdir($dir);
    touch($dir . 'File1');
    touch($dir . 'File2');
    $db-&gt;query("INSERT INTO table (id, field1, field2) VALUES (4, 'Baa', 'Foo')");

} catch (DBException $e) {
    // Gemachte Dinge rückgängig machen
    unlink($dir . 'File1');
    unlink($dir . 'File2');
    rmdir($dir);

    LogException($e);
    PrintErrorMessage('Beim anlegen eines Datensatzes ist ein Problem aufgetreten');    
}

?&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;Zusammenfassung / persönlicher Fazit&lt;/h2&gt;
&lt;p&gt;
    Der Weg der mir mittlerweile am besten zusagt ist die Benutzung von Exceptions, da ich
    hier in Kombination mit strikter Trennung von Code und Layout und 
    Ausgabenpufferung nicht nur die Möglichkeit
    habe Fehler zu loggen und dem User eine ordentliche Fehlerseite auszugeben,
    sondern auch die Möglichkeit habe im catch-Block direkt auf Fehler zu reagieren,
    Dinge rückgängig zu machen wie erstellte Datensätze, Ordner, Dateien
    (Stichwort Transaktionen).
&lt;/p&gt;
&lt;table class="DatenbankBehandlungZusammenfassung"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;Methode&lt;/th&gt;
            &lt;th&gt;Vorteile&lt;/th&gt;
            &lt;th&gt;Nachteile&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;Methode 1&lt;/td&gt;
            &lt;td class="DatenbankBehandlungVorteil"&gt;
                &lt;ul&gt;
                    &lt;li&gt;Einfach und schnell in der Anwendung&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
            &lt;td class="DatenbankBehandlungNachteil"&gt;
                &lt;ul&gt;
                    &lt;li&gt;Keinerlei Fehlerbehandlung&lt;/li&gt;
                    &lt;li&gt;Keinerlei Logging&lt;/li&gt;
                    &lt;li&gt;Abbruch des Scripts&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Methode 2&lt;/td&gt;
            &lt;td class="DatenbankBehandlungVorteil"&gt;
                &lt;ul&gt;
                    &lt;li&gt;Einfacher in der Anwendung als Methode 1&lt;/li&gt;
                    &lt;li&gt;Möglichkeit des Loggings&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
            &lt;td class="DatenbankBehandlungNachteil"&gt;
                &lt;ul&gt;
                    &lt;li&gt;Abbruch des Scripts&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Methode 3&lt;/td&gt;
            &lt;td class="DatenbankBehandlungVorteil"&gt;
                &lt;ul&gt;
                    &lt;li&gt;Möglichkeit des Loggings&lt;/li&gt;
                    &lt;li&gt;Möglichkeit der Fehlerbehandlung&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
            &lt;td class="DatenbankBehandlungNachteil"&gt;
                &lt;ul&gt;
                    &lt;li&gt;Höhere Komplexität und teilweise mehr Aufwand&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=g87WJ2Ktr7E:TCKM_MszGq0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=g87WJ2Ktr7E:TCKM_MszGq0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=g87WJ2Ktr7E:TCKM_MszGq0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=g87WJ2Ktr7E:TCKM_MszGq0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=g87WJ2Ktr7E:TCKM_MszGq0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=g87WJ2Ktr7E:TCKM_MszGq0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=g87WJ2Ktr7E:TCKM_MszGq0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[SSL Zertifikat Informationen auslesen]]></title>
      <link>http://www.robo47.net/tool/2-SSL-Zertifikat-Informationen-auslesen</link>
      <guid>http://www.robo47.net/tool/2-SSL-Zertifikat-Informationen-auslesen</guid>
      <description>Zertifikat Informationen eines SSL-Zertifikats auslesen&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Dni0W1kbtHo:KY71FQsgX3o:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Dni0W1kbtHo:KY71FQsgX3o:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Dni0W1kbtHo:KY71FQsgX3o:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Dni0W1kbtHo:KY71FQsgX3o:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Dni0W1kbtHo:KY71FQsgX3o:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Dni0W1kbtHo:KY71FQsgX3o:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Dni0W1kbtHo:KY71FQsgX3o:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Html-E-Mail über SMTP via Swiftmailer 3.3 versenden]]></title>
      <link>http://www.robo47.net/codeschnipsel/5-Html-E-Mail-ueber-SMTP-via-Swiftmailer-3.3-versenden</link>
      <guid>http://www.robo47.net/codeschnipsel/5-Html-E-Mail-ueber-SMTP-via-Swiftmailer-3.3-versenden</guid>
      <description>&lt;p&gt;
  Beispiel-Code zum versenden einer E-Mail über SMTP mit dem Swiftmailer. Verwendet wurde die Version 3.3.3 für php5.
&lt;/p&gt;
&lt;h3&gt;Download:&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.swiftmailer.org/"&gt;Swiftmailer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="warningMessage"&gt;
Dieser Eintrag ist veraltet und funktioniert nur mit dem 3.3-Zweig von Swiftmailer, für den aktuellen 4.0er Zweig gibt es eine hier eine Anleitung:
&lt;a href="/codeschnipsel/13-Html-E-Mail-ueber-SMTP-via-Swiftmailer-4.0-versenden"&gt;Html-E-Mail über SMTP via Swiftmailer 4.0 versenden&lt;/a&gt;
&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$data = array();
$data['smtp'] = array();
$data['smtp']['host'] = 'mail.example.com';
$data['smtp']['port'] = '25';
$data['smtp']['username'] = 'username';
$data['smtp']['password'] = 'password';

$data['from'] = array('name' =&gt; 'Absender', 'email' =&gt; 'absender@example.com');
$data['to'] = array('name' =&gt; 'Empfänger', 'email' =&gt; 'empfaenger@example.com');
$data['charset'] = 'utf-8';
$data['subject'] = 'Html Mail';

$data['html'] = '
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;'.$data['subject'].'&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;h1&gt;Meine Html-Mail&lt;/h1&gt;
            &lt;p&gt;
                Lorem ipsum dolor sit amet.
            &lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;';

$data['text'] = 'Meine Html-Mail

Lorem ipsum dolor sit amet.';

require_once 'Swift.php';
require_once 'Swift/Connection/SMTP.php';

// Verbindung erstellen
$smtp = new Swift_Connection_SMTP($data['smtp']['host'], $data['smtp']['port']);
$smtp-&gt;setUsername($data['smtp']['username']);
$smtp-&gt;setPassword($data['smtp']['password']);

// Mail erstellen
$mail = new Swift_Message($data['subject']);
$mail-&gt;setBody($data['html']);
$mail-&gt;setCharset($data['charset']);
$mail-&gt;setContentType("text/html");

// Absender angeben
$mail-&gt;setFrom(new Swift_Address($data['from']['email'],
                                 $data['from']['name']));

$recipient = new Swift_Address($data['to']['email'],
                               $data['to']['name']);
// Mail versenden
$swift = new Swift($smtp);
$swift-&gt;send($mail,$recipient , $data['from']['email']);&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=uGBpUhDtO8o:twzoLT3S2jg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=uGBpUhDtO8o:twzoLT3S2jg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=uGBpUhDtO8o:twzoLT3S2jg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=uGBpUhDtO8o:twzoLT3S2jg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=uGBpUhDtO8o:twzoLT3S2jg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=uGBpUhDtO8o:twzoLT3S2jg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=uGBpUhDtO8o:twzoLT3S2jg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Auslösungen auslesen FAQ]]></title>
      <link>http://www.robo47.net/text/5-Ausloesungen-auslesen-FAQ</link>
      <guid>http://www.robo47.net/text/5-Ausloesungen-auslesen-FAQ</guid>
      <description>&lt;p&gt;
    Ich freue mich jederzeit über Fragen, Ergänzungen, Vorschläge und Tipps
    dieser Seite und die FAQ betreffend! Dafür könnt ihr das das
    &lt;a href="/kontakt"&gt;Kontaktformular&lt;/a&gt; dieser Seite benutzen.&lt;br /&gt;
    Das Tool zum Auslösungen auslesen finden sie hier:
    &lt;a href="/tool/8-Ausloesungen-auslesen-Shutter-Count" title="Auslösungen für Canon, Nikon, Pentax auslesen"&gt;Auslösungen auslesen&lt;/a&gt;
&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;&lt;a href="#faq-welche-kameras-werden-unterstuetzt"&gt;Welche Kameras werden unterstützt ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-wie-viele-ausloesungen-schafft-meine-Kamera"&gt;Wie viele Auslösungen schafft meine Kamera ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;Was kann ich machen wenn meine Kamera nicht unterstützt wird ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-wie-funktioniert-das-alles"&gt;Wie funktioniert das ganze ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-sind-die-zahlen-zuverlaessig"&gt;Sind die Zahlen zuverlässig ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-warum-wird-meine-kamera-nicht-unterstuetzt"&gt;Warum wird meine Kamera nicht unterstützt ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-meine-kamera-steht-nicht-in-der-liste-aber-es-werden-trotzdem-ausloesungen-angezeigt"&gt;Meine Kamera steht nicht in der Liste aber es werden trotzdem Auslösungen ausgelesen&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-meine-kamera-steht-in-der-liste-aber-es-koennen-keine-ausloesungen-ausgelesen-werden"&gt;Meine Kamera steht in der Liste aber es können keine Auslösungen ausgelesen werden&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-ich-habe-eine-neue-kamera-gekauft-und-der-zaehler-fing-nicht-bei-0-an"&gt;Ich habe eine neue Kamera gekauft und der Zähler fing nicht bei 0 an&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-welche-datei-formate-werden-unterstuetzt"&gt;Welche Datei-Formate werden unterstützt ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-meine-bilder-sind-groesser-als-das-uploadlimit-was-kann-ich-tun"&gt;Meine Bilder sind größer als das Uploadlimit, was kann ich tun ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-kann-ich-die-ausloesungen-auch-offline-auslesen"&gt;Kann ich die Auslösungen auch offline auslesen ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-unter-welchem-betriebsystem-funktioniert-diese-seite"&gt;Unter welchem Betriebsystem funktioniert diese Seite ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-unter-welchem-browser-funktioniert-diese-seite"&gt;Unter welchem Browser funktioniert diese Seite ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-welche-version-von-exiftool-wird-verwendet"&gt;Welche Version von Exiftool wird verwendet ?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="#faq-meine-frage-wird-nicht-von-der-faq-beantwortet"&gt;Meine Frage wird nicht von der FAQ beantwortet&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-welche-kameras-werden-unterstuetzt" href="#faq-welche-kameras-werden-unterstuetzt" id="faq-welche-kameras-werden-unterstuetzt"&gt;Welche Kameras werden unterstützt ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Unterstützt werden nur Kameras bei denen die Anzahl der Auslösungen in den
    Exifs des Bildes gespeichert werden und bei denen bekannt ist wie und wo
    in den Exifs diese Informationen gespeichert werden, damit Exiftool sie
    auslesen kann.
&lt;/p&gt;
&lt;table summary="Tabelle unterstützter und nicht unterstützer Kameras beim Auslesen der Auslösungen"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;Unterstützt Kameras&lt;/th&gt;
            &lt;th&gt;Nicht unterstützte Kameras&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;
                &lt;ul class="unterstuetzteKameras"&gt;
                    &lt;li&gt;Canon EOS 1D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 1D Mark II&lt;/li&gt;
                    &lt;li&gt;Canon EOS 1D Mark II N&lt;/li&gt;
                    &lt;li&gt;Canon EOS 1Ds Mark II&lt;/li&gt;
                    &lt;li&gt;Canon EOS 1Ds (teilweise)&lt;/li&gt;
                    &lt;li&gt;Nikon D2xs&lt;/li&gt;
                    &lt;li&gt;Nikon D2hs&lt;/li&gt;
                    &lt;li&gt;Nikon D200&lt;/li&gt;
                    &lt;li&gt;Nikon D3&lt;/li&gt;
                    &lt;li&gt;Nikon D300&lt;/li&gt;
                    &lt;li&gt;Nikon D40&lt;/li&gt;
                    &lt;li&gt;Nikon D40x&lt;/li&gt;
                    &lt;li&gt;Nikon D50&lt;/li&gt;
                    &lt;li&gt;Nikon D60&lt;/li&gt;
                    &lt;li&gt;Nikon D70&lt;/li&gt;
                    &lt;li&gt;Nikon D70s&lt;/li&gt;
                    &lt;li&gt;Nikon D700&lt;/li&gt;
                    &lt;li&gt;Nikon D5000&lt;/li&gt;
                    &lt;li&gt;Nikon D80&lt;/li&gt;
                    &lt;li&gt;Nikon D90&lt;/li&gt;
                    &lt;li&gt;Pentax istDL2&lt;/li&gt;
                    &lt;li&gt;Pentax istDL&lt;/li&gt;
                    &lt;li&gt;Pentax istDS2&lt;/li&gt;
                    &lt;li&gt;Pentax K10D&lt;/li&gt;
                    &lt;li&gt;Pentax K100D&lt;/li&gt;
                    &lt;li&gt;Pentax K200D&lt;/li&gt;
                    &lt;li&gt;Samsung GX10&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
            &lt;td&gt;
                &lt;ul class="nichtUnterstuetzteKameras"&gt;
                    &lt;li&gt;Canon EOS 1D Mark IV&lt;/li&gt;
                    &lt;li&gt;Canon EOS 1D Mark III&lt;/li&gt;
                    &lt;li&gt;Canon EOS 1Ds Mark III&lt;/li&gt;
                    &lt;li&gt;Canon EOS 300D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 350D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 400D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 450D &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Canon EOS 500D &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Canon EOS 1000D &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Canon EOS 5D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 5D Mark II&lt;/li&gt;
                    &lt;li&gt;Canon EOS 10D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 20D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 30D&lt;/li&gt;
                    &lt;li&gt;Canon EOS 40D &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Canon EOS 50D &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Canon EOS D30&lt;/li&gt;
                    &lt;li&gt;Canon EOS D60&lt;/li&gt;
                    &lt;li&gt;Fuji S1 Pro&lt;/li&gt;
                    &lt;li&gt;Fuji S2 Pro&lt;/li&gt;
                    &lt;li&gt;Fuji S3 Pro&lt;/li&gt;
                    &lt;li&gt;Fuji S5 Pro&lt;/li&gt;
                    &lt;li&gt;Kodak DCS 14n&lt;/li&gt;
                    &lt;li&gt;Kodak DCS Pro&lt;/li&gt;
                    &lt;li&gt;Konica Minolta 7D&lt;/li&gt;
                    &lt;li&gt;Nikon D1&lt;/li&gt;
                    &lt;li&gt;Nikon D1h&lt;/li&gt;
                    &lt;li&gt;Nikon D1x&lt;/li&gt;
                    &lt;li&gt;Olympus E-1&lt;/li&gt;
                    &lt;li&gt;Olympus E-3 &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Olympus E-10&lt;/li&gt;
                    &lt;li&gt;Olympus E-20&lt;/li&gt;
                    &lt;li&gt;Olympus E-300 &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Olympus E-330 &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Olympus E-400 &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Olympus E-410 &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Olympus E-500 &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Olympus E-510 &lt;a class="elementMarker" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;*&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;Sigma SD-10&lt;/li&gt;
                    &lt;li&gt;Sony Alpha 900&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
    &lt;span class="elementMarker"&gt;*&lt;/span&gt; Im Absatz &lt;a href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;Was machen wenn die Kamera nicht unterstützt wird ?&lt;/a&gt; wird eine alternative Möglichkeit zum Bestimmen der Auslösungen beschrieben.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-wie-viele-ausloesungen-schafft-meine-Kamera" href="#faq-wie-viele-ausloesungen-schafft-meine-Kamera" id="faq-wie-viele-ausloesungen-schafft-meine-Kamera"&gt;Wie viele Auslösungen schafft meine Kamera&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Es gibt keine allgemeingültige Regel wie lange der Verschluss einer Kamera
    hält, das ist abhängig vom Modell, dem Glück, Temperatur und wohl auch etwas
    wie man mit seiner Kamera umgeht. Es gibt für einige Modelle ungefähre
    Richtwerte, die aber auch nur eine
    &lt;a href="http://de.wikipedia.org/wiki/Mean_Time_Between_Failures"&gt;MTBF
    (Mean Time between Failures)&lt;/a&gt; darstellen und KEINE garantierte Anzahl an
    Auslösung (was immer wieder gerne von Leute in Foren behauptet wird)
    darstellen. Hier habe ich ein paar MTBF-Werte gesammelt, teilweise Werte die
    der Hersteller selbst angibt (gekennzeichnet durch einen roten
    &lt;strong class="elementMarker2"&gt;*&lt;/strong&gt; und verlinkt auf die Hersteller-Seite,
    woher die Information stammt), teilweise Werte die man öfters in
    (Test)Berichten, Foren und im Rest des Internets findet.
&lt;/p&gt;
&lt;table summary="Tabelle mit Kameras und deren MTBF"&gt;
    &lt;thead&gt;
        &lt;tr&gt;
            &lt;th&gt;Kamera&lt;/th&gt;
            &lt;th&gt;Auslösungen&lt;/th&gt;
        &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 300/350D/400D&lt;/td&gt;
            &lt;td&gt;50.000&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 10D/20D&lt;/td&gt;
            &lt;td&gt;50.000&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 30D&lt;/td&gt;
            &lt;td&gt;100.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=12929#featureLink3"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 40D&lt;/td&gt;
            &lt;td&gt;100.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=15653#featureLink2"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 5D&lt;/td&gt;
            &lt;td&gt;100.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=15653"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 1Ds&lt;/td&gt;
            &lt;td&gt;150.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.canon.com/camera-museum/tech/report/200211/report.html"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 1D Mark II&lt;/td&gt;
            &lt;td&gt;200.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=9808#ModelFeaturesAct"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 1D Mark II-N&lt;/td&gt;
            &lt;td&gt;200.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=12012"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 1Ds Mark II&lt;/td&gt;
            &lt;td&gt;200.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=10598"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 1D Mark III&lt;/td&gt;
            &lt;td&gt;300.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=14999"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon 1Ds Mark III&lt;/td&gt;
            &lt;td&gt;300.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.usa.canon.com/consumer/controller?act=ModelInfoAct&amp;amp;tabact=ModelFeaturesTabAct&amp;amp;fcategoryid=139&amp;amp;modelid=15710"&gt;Link (canon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Nikon D3&lt;/td&gt;
            &lt;td&gt;300.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.nikon.de/press_room/news.html?locale=de_DE&amp;amp;bandwidth=broad&amp;amp;id=1059&amp;amp;type_index=2"&gt;Link (nikon.de)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Canon D300&lt;/td&gt;
            &lt;td&gt;150.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.nikon.de/press_room/news.html?locale=de_DE&amp;amp;bandwidth=broad&amp;amp;id=1058&amp;amp;type_index=2"&gt;Link (nikon.de)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Nikon D700&lt;/td&gt;
            &lt;td&gt;150.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://www.nikon.com/about/news/2008/0701_d700_01.htm"&gt;Link (nikon.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;Sony a900&lt;/td&gt;
            &lt;td&gt;100.000 &lt;span class="elementMarker2"&gt;* &lt;a href="http://news.sel.sony.com/en/press_room/consumer/digital_imaging/digital_cameras/dslr/release/37187.html"&gt;Link (sony.com)&lt;/a&gt;&lt;/span&gt;&lt;/td&gt;
        &lt;/tr&gt;
    &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
    Unter &lt;a href="http://www.olegkikin.com/shutterlife/"&gt;www.olegkikin.com/shutterlife&lt;/a&gt;
    findet sich eine von Usern gepflegte Liste, wie viele Auslösungen ihre
    Kameras haben und ob sie noch funktionieren, aber wie vieles im Internet
    wohl nicht unbedingt so zuverlässig, aber vielleicht für den ein oder
    anderen ein netter Anhaltspunkt.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird" href="#faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird" id="faq-was-machen-wenn-kamera-nicht-unterstuetzt-wird"&gt;Was kann ich machen wenn meine Kamera nicht unterstützt wird ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Wenn man Besitzer einer DSLR von Olympus ist (&lt;strong&gt;E-3 / E-300 / E-330 /
    E-400 / E-410 / E-500 / E-510&lt;/strong&gt;) dann kann man sich die Informationen
    direkt an der Kamera selbst anzeigen lassen. Mehr Informationen dazu findet
    man bei &lt;a href="http://www.olypedia.de/Tastenkombination#versteckte_Informationen_abfragen"&gt;Olypedia.de/Tastenkombination&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
    Für einige Canon Kameras mit dem DIGIC III-Prozessor (&lt;strong&gt;40D / 50D / 450D / 1000D&lt;/strong&gt;)
    gibt es für Windows und MAC-User ein Program namens 40D Shutter Count,
    das ein installiertes Canon EOS Utility vorraussetzt und darüber die
    Anzahl der Auslösungen direkt aus der Kamera auslesen kann (nicht aus
    den Exifs eines Bildes).
    &lt;a href="http://astrojargon.net/40dshuttercount.aspx"&gt;40D Shutter Count&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
    Bei anderen Kameras bleibt dann noch der Gang zum Hersteller oder einer
    Vertragswerkstatt des Händlers, die können das meistens als einzige genau
    und zuverlässig.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-wie-funktioniert-das-alles" href="#faq-wie-funktioniert-das-alles" id="faq-wie-funktioniert-das-alles"&gt;Wie funktioniert das ganze ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Hinter der Fassade hier passiert nicht viel, das ausgewählte Bild wird in
    einen temporären Ordner hochgeladen. Über &lt;a href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;ExifTool (v&lt;var&gt;exiftoolversion&lt;/var&gt;)&lt;/a&gt;
    wird versucht die Auslösungen auszulesen. Dann wird das Bild gelöscht und
    das Script gibt die Seite mit den ausgelesen Auslösungen aus.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-sind-die-zahlen-zuverlaessig" href="#faq-sind-die-zahlen-zuverlaessig" id="faq-sind-die-zahlen-zuverlaessig"&gt;Sind die Zahlen zuverlässig ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Die ausgegebene Anzahl der Auslösungen ist nicht zuverlässig.&lt;br /&gt;
    &lt;strong&gt;Ich übernehme keinerlei Garantie für ihre Richtigkeit!&lt;/strong&gt;&lt;br /&gt;
    Das liegt daran, dass es einige Methoden gibt die Zähler der Kameras
    zurückzusetzen, zu manipulieren und einige Wege, wie diese Werte
    unwissentlich verändert werden können.&lt;br /&gt;
    Ein paar mir bekannte Möglichkeiten:
&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Bei einigen Kameras kann das einspielen einer neuen Firmware reichen um den Zähler zurückzusetzen.&lt;/li&gt;
    &lt;li&gt;Bei einigen Kameras (manche Modelle der 1er-Serie von Canon) besteht die Möglichkeit die Kamera-Einstellungen der Kamera auf eine
        Speicherkarte zu speichern und später wieder zu laden, dabei wird der aktuelle Zählerstand mit gespeichert und beim Laden der Einstellungen
        wieder mit dem alten Wert überschrieben.&lt;/li&gt;
    &lt;li&gt;Bei einigen Kameras wird durch das entfernen der Pufferbatterie (oder wenn diese leer ist) der Zählerstand zurückgesetzt werden.&lt;/li&gt;
    &lt;li&gt;Bei einigen Herstellern kamen Kameras aus dem Service (Reperatur, Überprüfung oder ähnliches) zurück und waren auch zurückgesetzt.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;&lt;a name="faq-warum-wird-meine-kamera-nicht-unterstuetzt" href="#faq-warum-wird-meine-kamera-nicht-unterstuetzt" id="faq-warum-wird-meine-kamera-nicht-unterstuetzt"&gt;Warum wird meine Kamera nicht unterstützt ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Das kann verschiedene Gründe haben, entweder den Entwicklern von exiftool
    ist nicht bekannt wie und wo in den Exifs die Informationen stehen (Wenn du
    es herausgefunden hast, freuen Sie sich sicher über die Information) oder
    der Hersteller der Kamera hat aus irgendeinem Grund beschlossen diese
    Informationen nicht in den Exifs der Bilder zu speichern.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-meine-kamera-steht-nicht-in-der-liste-aber-es-werden-trotzdem-ausloesungen-angezeigt" href="#faq-meine-kamera-steht-nicht-in-der-liste-aber-es-werden-trotzdem-ausloesungen-angezeigt" id="faq-meine-kamera-steht-nicht-in-der-liste-aber-es-werden-trotzdem-ausloesungen-angezeigt"&gt;Meine Kamera steht nicht in der Liste aber es werden trotzdem Auslösungen ausgelesen&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Dann würde ich mich freuen wenn du mich über mein
    &lt;a href="/kontakt"&gt;Kontaktformular&lt;/a&gt;
    kontaktierst und mir mitteilen um welches Model es sich handelt, super
    wäre auch wenn du mir 1-2 Bilder zur Verfügung stellen kannst zum testen.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-meine-kamera-steht-in-der-liste-aber-es-koennen-keine-ausloesungen-ausgelesen-werden" href="#faq-meine-kamera-steht-in-der-liste-aber-es-koennen-keine-ausloesungen-ausgelesen-werden" id="faq-meine-kamera-steht-in-der-liste-aber-es-koennen-keine-ausloesungen-ausgelesen-werden"&gt;Meine Kamera steht in der Liste aber es können keine Auslösungen ausgelesen werden&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Als erstes solltest du überprüfen, ob du auch wirklich ein unbearbeitetes
    JPEG/RAW-Bild direkt aus der Kamera genommen hast. Durch das erneute
    Speicher, verändern oder verkleinern mit einigen Programmen
    (beispielsweise: Photoshops für Web speichern), werden teilweise alle oder
    auch nur manche Informationen in den Exifs verändert, verschoben, umbenannt
    oder gelöscht, dann können die Informationen natürlich nicht mehr ausgelesen
    werden.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-ich-habe-eine-neue-kamera-gekauft-und-der-zaehler-fing-nicht-bei-0-an" href="#faq-ich-habe-eine-neue-kamera-gekauft-und-der-zaehler-fing-nicht-bei-0-an" id="faq-ich-habe-eine-neue-kamera-gekauft-und-der-zaehler-fing-nicht-bei-0-an"&gt;Ich habe eine neue Kamera gekauft und der Zähler fing nicht bei 0 an&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Bei einigen Herstellern ist es wohl üblich, dass die Kameras vor dem Verkauf
    getestet werden und so schon teilweise ein paar 100 Auslösungen vorhanden
    sind, auch kann der Verkäufer selbst vielleicht die Kamera schon mal
    getestet haben um nicht ein defektes Gerät zu verkaufen.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-welche-datei-formate-werden-unterstuetzt" href="#faq-welche-datei-formate-werden-unterstuetzt" id="faq-welche-datei-formate-werden-unterstuetzt"&gt;Welche Datei-Formate werden unterstützt ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Primär funktioniert JPEG,ie gängigen RAW-Formate der Kamera-Hersteller sollten
    wohl auch alle funktionieren, wurdem aber nicht getestet. Aufgrund der
    kleineren Größe (und der Möglichkeit sie noch weiter zu verkleinern vor dem
    Hochladen) sollten JPEGs daher bevorzugt werden, da sie meist kleiner sind und sich
    daher schneller hochladen lassen.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-meine-bilder-sind-groesser-als-das-uploadlimit-was-kann-ich-tun" href="#faq-meine-bilder-sind-groesser-als-das-uploadlimit-was-kann-ich-tun" id="faq-meine-bilder-sind-groesser-als-das-uploadlimit-was-kann-ich-tun"&gt;Meine Bilder sind größer als das Uploadlimit, was kann ich tun ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Sollte das Bild größer als &lt;var&gt;uploadLimit&lt;/var&gt;
    sein, musst es mit einem passenden Programm verkleinert werden das die Exifs
    nicht verändert oder löscht, unter Windows wäre das beispielsweise mit dem
    kostenlosen Bildbetrachter &lt;a href="http://www.irfanview.com/"&gt;irfanview&lt;/a&gt;
    möglich. &lt;br /&gt;
    Alternativ kann man auch Exiftool selbst runterladen und damit selbst die
    Auslösungen auslesen, wie das funktioniert wird unter:
    &lt;a href="#faq-kann-ich-die-ausloesungen-auch-offline-auslesen"&gt;Kann ich die Auslösungen auch offline auslesen ?&lt;/a&gt;
    beschrieben
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-kann-ich-die-ausloesungen-auch-offline-auslesen" href="#faq-kann-ich-die-ausloesungen-auch-offline-auslesen" id="faq-kann-ich-die-ausloesungen-auch-offline-auslesen"&gt;Kann ich die Auslösungen auch offline auslesen ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Exiftool kann auch Offline, direkt auf dem Rechner genutzt werden (Windows,
    Linux und Mac). Dazu müsst ihr euch nur auf der
    &lt;a href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;Homepage von exiftool&lt;/a&gt;
    die für euer Betriebssystem passende Version herunterladen und installieren.
&lt;/p&gt;
&lt;p&gt;
    Exiftool selbst besitzt keine graphische Oberfläche, das heißt es muss über
    die Kommandozeile/Shell des Betriebsystems ausgeführt werden.
&lt;/p&gt;
&lt;pre class="block brush: bash"&gt;
cd /pfad/zum/bild/
exiftool -shuttercount bild.jpg
&lt;/pre&gt;
&lt;p&gt;
    Wenn es dabei keine Ausgabe gibt, konnten keine Informationen ausgelesen
    werden.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-unter-welchem-betriebsystem-funktioniert-diese-seite" href="#faq-unter-welchem-betriebsystem-funktioniert-diese-seite" id="faq-unter-welchem-betriebsystem-funktioniert-diese-seite"&gt;Unter welchem Betriebsystem funktioniert diese Seite ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Diese Seite sollte unabhängig vom verwendeten Betriebsystem funktionieren.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-unter-welchem-browser-funktioniert-diese-seite" href="#faq-unter-welchem-browser-funktioniert-diese-seite" id="faq-unter-welchem-browser-funktioniert-diese-seite"&gt;Unter welchem Browser funktioniert diese Seite ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Diese Seite sollte mit jedem aktuellen Browser funktionieren der Dateiuploads
    unterstützt. JAVA oder Flash /werden nicht benötigt. Und Javascript nur ergänzend verwendet.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-welche-version-von-exiftool-wird-verwendet" href="#faq-welche-version-von-exiftool-wird-verwendet" id="faq-welche-version-von-exiftool-wird-verwendet"&gt;Welche Version von Exiftool wird verwendet ?&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Aktuell wird Version &lt;var&gt;exiftoolversion&lt;/var&gt; von exiftool verwendet.
&lt;/p&gt;
&lt;h3&gt;&lt;a name="faq-meine-frage-wird-nicht-von-der-faq-beantwortet" href="#faq-meine-frage-wird-nicht-von-der-faq-beantwortet" id="faq-meine-frage-wird-nicht-von-der-faq-beantwortet"&gt;Meine Frage wird nicht von der FAQ beantwortet&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;
    Wenn eure Fragen in der FAQ nicht beantwortet wird oder Kritik, Ideen,
    Vorschläge, habt, könnt ihr gerne das &lt;a href="/kontakt"&gt;Kontaktformular&lt;/a&gt;
    verwenden um mir eine Nachricht zukommen zu lassen.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sTIK_mzPhBY:fz4apHIWMp8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sTIK_mzPhBY:fz4apHIWMp8:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sTIK_mzPhBY:fz4apHIWMp8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=sTIK_mzPhBY:fz4apHIWMp8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sTIK_mzPhBY:fz4apHIWMp8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=sTIK_mzPhBY:fz4apHIWMp8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sTIK_mzPhBY:fz4apHIWMp8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Ordnergröße, Anzahl Dateien, Ordner und Symlinks mit PHP und der RecursiveDirectoryIterator auszulesen]]></title>
      <link>http://www.robo47.net/codeschnipsel/15-Ordnergroese-Anzahl-Dateien-Ordner-und-Symlinks-mit-PHP-und-der-RecursiveDirectoryIterator-auszulesen</link>
      <guid>http://www.robo47.net/codeschnipsel/15-Ordnergroese-Anzahl-Dateien-Ordner-und-Symlinks-mit-PHP-und-der-RecursiveDirectoryIterator-auszulesen</guid>
      <description>&lt;p&gt;
Script um mit RecursiveDirectoryIterator und SplFileInfo die Ordnergröße, Anzahl Dateien, Ordner und Symlinks auszulesen.&lt;br /&gt;
Beispielausgabe: 
&lt;/p&gt;
&lt;pre&gt;
Anzahl Elemente:      1822
Anzahl Dateien:       1439
Anzahl Ordner:        376
Anzahl Symlinks:      7
Größe der Dateien:    19709595
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
error_reporting(E_ALL | E_STRICT);
$dirIter = new RecursiveDirectoryIterator('./');
$recursiveIterator = new RecursiveIteratorIterator($dirIter, 
                                    RecursiveIteratorIterator::SELF_FIRST,
                                    RecursiveIteratorIterator::CATCH_GET_CHILD);

$counts = array();
$counts['files']        = 0;
$counts['links']        = 0;
$counts['directorys']   = 0;
$counts['all']          = 0;
$counts['size']         = 0;

foreach($recursiveIterator as $element)
{
    /* @var $element SplFileInfo */
    switch($element-&gt;getType())
    {
        case 'file':
            $counts['files']++;
            $counts['size'] += $element-&gt;getSize();
            break;
        case 'link':
            $counts['links']++;
            break;
        case 'dir':
            $counts['directorys']++;
            break;
    }
    $counts['all']++;
}

echo 'Anzahl Elemente:      ' . $counts['all'] . PHP_EOL;
echo 'Anzahl Dateien:       ' . $counts['files'] . PHP_EOL;
echo 'Anzahl Ordner:        ' . $counts['directorys'] . PHP_EOL;
echo 'Anzahl Symlinks:      ' . $counts['links'] . PHP_EOL;
echo 'Größe der Dateien:    ' . $counts['size'] . PHP_EOL;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Nn86BBVPqPM:2IaHsFWVTYU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Nn86BBVPqPM:2IaHsFWVTYU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Nn86BBVPqPM:2IaHsFWVTYU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Nn86BBVPqPM:2IaHsFWVTYU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Nn86BBVPqPM:2IaHsFWVTYU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=Nn86BBVPqPM:2IaHsFWVTYU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=Nn86BBVPqPM:2IaHsFWVTYU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Einfacher Dateiupload mit PHP und Zend_Http_Client]]></title>
      <link>http://www.robo47.net/codeschnipsel/11-Einfacher-Dateiupload-mit-PHP-und-Zend_Http_Client</link>
      <guid>http://www.robo47.net/codeschnipsel/11-Einfacher-Dateiupload-mit-PHP-und-Zend_Http_Client</guid>
      <description>&lt;p&gt;
    Dieses kleine Beispiel soll zeigen wie man mit Zend_Http_Client einen einfachen Datei-Upload an ein Formular realisiert.
&lt;/p&gt;
&lt;p&gt;
    Alternativ stehen auch noch Code-Schnipsel mit cURL und Snoopy zur zur Verfügung.
&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();

$url = 'http://www.domain.tld/pfad/zum/formular.php';

// Instanz
$client = new Zend_Http_Client($url);
// Datei angeben die man hochladen will
$client-&gt;setFileUpload('./bla.pdf', 'userfile');
// Ein weiteres Feld
$client-&gt;setParameterPost('name', 'Zend');

// Anfrage abschicken
$response = $client-&gt;request(Zend_Http_Client::POST);

$body     = $response-&gt;getBody();

// Jetzt muss man nur noch $body auswerten und schauen ob der Upload
// erfolgreich war, das lässt sich je nach Ausgabe auf viele verschiedene Arten
// lösen strpos(), Regulären Ausdrücken (preg_match), DOM und Xpath oder
// ähnlichem.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZfTwzwnl_XA:AdNexxCQ7pQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZfTwzwnl_XA:AdNexxCQ7pQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZfTwzwnl_XA:AdNexxCQ7pQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ZfTwzwnl_XA:AdNexxCQ7pQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZfTwzwnl_XA:AdNexxCQ7pQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ZfTwzwnl_XA:AdNexxCQ7pQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZfTwzwnl_XA:AdNexxCQ7pQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Einfacher Dateiupload mit PHP und Curl]]></title>
      <link>http://www.robo47.net/codeschnipsel/10-Einfacher-Dateiupload-mit-PHP-und-Curl</link>
      <guid>http://www.robo47.net/codeschnipsel/10-Einfacher-Dateiupload-mit-PHP-und-Curl</guid>
      <description>&lt;p&gt;
    Dieses kleine Beispiel soll zeigen wie man mit cURL einen einfachen Datei-Upload an ein Formular realisiert.
&lt;/p&gt;
&lt;p&gt;
    Alternativ stehen auch noch Code-Schnipsel mit Zend_Http_Client und Snoopy zur Verfügung.
&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$url = 'http://www.domain.tld/pfad/zum/formular.php';

// Array mit den Feldern des Formulars und den zu sendenden Werten
$form = array();
// Pfad zur hochzuladenden Datei mit einem @ davor
$form['userfile'] = '@./bla.pdf';
// Weiteres Felder das im Formular vorkommt
$form['name'] = 'cURL';

// cURL Instanz erstellen
$curl = curl_init($url);

// Angeben dass es ein POST-Request ist
curl_setopt($curl, CURLOPT_POST, 1);
// Die zu übermittelnden Felder angeben
curl_setopt($curl, CURLOPT_POSTFIELDS, $form);

// Anfrage abschicken und antwort in $response speichern
$response = curl_exec($curl);

// cURL Instanz beenden
curl_close($curl);

// Jetzt muss man nur noch $response auswerten und schauen ob der Upload
// erfolgreich war, das lässt sich je nach Ausgabe auf viele verschiedene Arten
// lösen strpos(), Regulären Ausdrücken (preg_match), DOM und Xpath oder
// ähnlichem.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iA64wZ6N7UA:gZNRTOWDU60:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iA64wZ6N7UA:gZNRTOWDU60:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iA64wZ6N7UA:gZNRTOWDU60:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=iA64wZ6N7UA:gZNRTOWDU60:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iA64wZ6N7UA:gZNRTOWDU60:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=iA64wZ6N7UA:gZNRTOWDU60:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=iA64wZ6N7UA:gZNRTOWDU60:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Zip-Archiv von einem Ordner mit PHP erstellen und entpacken]]></title>
      <link>http://www.robo47.net/codeschnipsel/9-Zip-Archiv-von-einem-Ordner-mit-PHP-erstellen-und-entpacken</link>
      <guid>http://www.robo47.net/codeschnipsel/9-Zip-Archiv-von-einem-Ordner-mit-PHP-erstellen-und-entpacken</guid>
      <description>&lt;p&gt;
Das Beispiel zeigt wie einfach man mit Hilfe des RecursiveDirectoryIterator und ZipArchiv ein Backup von einem Ordner erstellt und wieder entpackt.
&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$sourcePath = realpath('../../');

$archiv = new ZipArchive();
$archiv-&gt;open('archiv.zip', ZipArchive::CREATE);
$dirIter = new RecursiveDirectoryIterator($sourcePath);
$iter = new RecursiveIteratorIterator($dirIter);

foreach($iter as $element) {
    /* @var $element SplFileInfo */
    $dir = str_replace($sourcePath, '', $element-&gt;getPath()) . '/';
    if ($element-&gt;isDir()) {
        // Ordner erstellen (damit werden auch leere Ordner hinzugefügt
        $archiv-&gt;addEmptyDir($dir);
    } elseif ($element-&gt;isFile()) {
        $file         = $element-&gt;getPath() .
                        '/' . $element-&gt;getFilename();
        $fileInArchiv = $dir . $element-&gt;getFilename();
        // Datei dem Archiv hinzufügen
        $archiv-&gt;addFile($file, $fileInArchiv);
    }
}

// Einen Kommenatr mitspeichern
$archiv-&gt;setArchiveComment('Backup von ' . $absolutePath);
// Archiv schließen und damit speichern
$archiv-&gt;close();

// Und zum entpacken:

$destinationPath = realpath('tmp/');
$archiv = new ZipArchive();
$archiv-&gt;open('archiv.zip');
// In Ordner entpacken
$archiv-&gt;extractTo($destinationPath);&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=cO7K2LHDSH4:gQSQfYylZe4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=cO7K2LHDSH4:gQSQfYylZe4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=cO7K2LHDSH4:gQSQfYylZe4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=cO7K2LHDSH4:gQSQfYylZe4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=cO7K2LHDSH4:gQSQfYylZe4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=cO7K2LHDSH4:gQSQfYylZe4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=cO7K2LHDSH4:gQSQfYylZe4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Einfacher Dateiupload mit PHP und Snoopy]]></title>
      <link>http://www.robo47.net/codeschnipsel/12-Einfacher-Dateiupload-mit-PHP-und-Snoopy</link>
      <guid>http://www.robo47.net/codeschnipsel/12-Einfacher-Dateiupload-mit-PHP-und-Snoopy</guid>
      <description>&lt;p&gt;
    Dieses kleine Beispiel soll zeigen wie man mit Snoopy einen einfachen Datei-Upload an ein Formular realisiert.
&lt;/p&gt;
&lt;p&gt;
    Alternativ stehen auch noch Code-Schnipsel mit Zend_Http_Client und cURL zur zur Verfügung.
&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$url = "http://www.domain.tld/pfad/zum/formular.php";

include "Snoopy.class.php";
$snoopy = new Snoopy();
// Multi-Part aktivieren, sonst können keine Dateien übertragen werden
$snoopy-&gt;set_submit_multipart();

$postVars = array();
$postVars['name'] = 'Snoopy';

$postFiles = array();
$postFiles['userfile'] = dirname(__FILE__) . '/bla.pdf';

$snoopy-&gt;submit($url, $postVars, $postFiles);

$body = $snoopy-&gt;results;

// Jetzt muss man nur noch $body auswerten und schauen ob der Upload
// erfolgreich war, das lässt sich je nach Ausgabe auf viele verschiedene Arten
// lösen strpos(), Regulären Ausdrücken (preg_match), DOM und Xpath oder
// ähnlichem.&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=dwA-pYYb2dw:zZgazfccRjk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=dwA-pYYb2dw:zZgazfccRjk:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=dwA-pYYb2dw:zZgazfccRjk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=dwA-pYYb2dw:zZgazfccRjk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=dwA-pYYb2dw:zZgazfccRjk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=dwA-pYYb2dw:zZgazfccRjk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=dwA-pYYb2dw:zZgazfccRjk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Html-E-Mail über SMTP via Swiftmailer 4.0 versenden]]></title>
      <link>http://www.robo47.net/codeschnipsel/13-Html-E-Mail-ueber-SMTP-via-Swiftmailer-4.0-versenden</link>
      <guid>http://www.robo47.net/codeschnipsel/13-Html-E-Mail-ueber-SMTP-via-Swiftmailer-4.0-versenden</guid>
      <description>&lt;p&gt;
  Beispiel-Code zum versenden einer E-Mail über SMTP mit dem Swiftmailer. Verwendet wurde die Version 4.0.3 für php5.
&lt;/p&gt;
&lt;h3&gt;Download:&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.swiftmailer.org/"&gt;Swiftmailer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$data = array();
$data['smtp'] = array();
$data['smtp']['host'] = 'mail.example.com';
$data['smtp']['port'] = '25';
$data['smtp']['username'] = 'username';
$data['smtp']['password'] = 'password';

$data['from'] = array('name' =&gt; 'Absender', 'email' =&gt; 'absender@example.com');
$data['to'] = array('name' =&gt; 'Empfänger', 'email' =&gt; 'empfaenger@example.com');
$data['charset'] = 'utf-8';
$data['subject'] = 'Html Mail';

$data['html'] = '
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;'.$data['subject'].'&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;h1&gt;Meine Html-Mail&lt;/h1&gt;
            &lt;p&gt;
                Lorem ipsum dolor sit amet.
            &lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;';

$data['text'] = 'Meine Html-Mail

Lorem ipsum dolor sit amet.';

// Swiftmailer Basis-Datei mit Autoloader
require_once 'swift_required.php';

// Verbindung erstellen
$smtp = new Swift_SmtpTransport($data['smtp']['host'], $data['smtp']['port']);
$smtp-&gt;setUsername($data['smtp']['username']);
$smtp-&gt;setPassword($data['smtp']['password']);

// Mail erstellen
$mail = new Swift_Message($data['subject']);
$mail-&gt;setBody($data['html'])
     -&gt;setCharset($data['charset'])
     -&gt;setContentType("text/html")
     // Absender angeben
     -&gt;setFrom($data['from']['email'], $data['from']['name'])
     // Empfänger angeben
     -&gt;setTo($data['to']['email'], $data['to']['name']);      

// Mail versenden
$swift = new Swift_Mailer($smtp);
$swift-&gt;send($mail,$recipient);&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WtfEG_mKibM:Q0cvTEmCuUs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WtfEG_mKibM:Q0cvTEmCuUs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WtfEG_mKibM:Q0cvTEmCuUs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=WtfEG_mKibM:Q0cvTEmCuUs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WtfEG_mKibM:Q0cvTEmCuUs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=WtfEG_mKibM:Q0cvTEmCuUs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WtfEG_mKibM:Q0cvTEmCuUs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Html-E-Mail über SMTP via phpmailer 5.0 versenden]]></title>
      <link>http://www.robo47.net/codeschnipsel/14-Html-E-Mail-ueber-SMTP-via-phpmailer-5.0-versenden</link>
      <guid>http://www.robo47.net/codeschnipsel/14-Html-E-Mail-ueber-SMTP-via-phpmailer-5.0-versenden</guid>
      <description>&lt;p&gt;
Beispiel-Code zum versenden einer E-Mail über SMTP mit der Klasse phpmailer. Verwendet wurde Version 5.0 des phpmailers.
&lt;/p&gt;
&lt;h3&gt;Downloads:&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://phpmailer.codeworxtech.com/"&gt;phpMailer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;?php
$data = array();
$data['smtp'] = array();
$data['smtp']['host'] = 'mail.example.com';
$data['smtp']['port'] = '25';
$data['smtp']['username'] = 'username';
$data['smtp']['password'] = 'password';

$data['from'] = array('name' =&gt; 'Absender', 'email' =&gt; 'absender@example.com');
$data['to'] = array('name' =&gt; 'Empfänger', 'email' =&gt; 'empfaenger@example.com');
$data['charset'] = 'utf-8';
$data['subject'] = 'Html Mail';
$data['html'] = '
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;'.$data['subject'].'&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;h1&gt;Meine Html-Mail&lt;/h1&gt;
            &lt;p&gt;
                Lorem ipsum dolor sit amet.
            &lt;/p&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;';

$data['text'] = 'Meine Html-Mail

Lorem ipsum dolor sit amet.';

require_once 'class.phpmailer.php';

$mail = new PHPMailer();

// Server-Zugangsdaten setzen
$mail-&gt;IsSMTP();
$mail-&gt;SMTPAuth = true;
$mail-&gt;Host     = $data['smtp']['host'];
$mail-&gt;Username = $data['smtp']['username'];
$mail-&gt;Password = $data['smtp']['password'];
$mail-&gt;Port     = $data['smtp']['port'];

$mail-&gt;From     = $data['from']['email'];      // Absender setzen
$mail-&gt;FromName = $data['from']['name'];
$mail-&gt;CharSet =  $data['charset'];            // Charset festlegen
$mail-&gt;Subject  = $data['subject'];            // Betreff setzen
$mail-&gt;IsHTML(true);                           // Als HTML-Mail senden
$mail-&gt;Body     = $data['html'];               // HTML Nachricht setzen
$mail-&gt;AddAddress($data['to']['email'],
                  $data['to']['name']);         // Empfänger hinzufügen

// Email absenden
$mail-&gt;Send();&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=x7cwHVY-XdM:HuXJpmb4G-4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=x7cwHVY-XdM:HuXJpmb4G-4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=x7cwHVY-XdM:HuXJpmb4G-4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=x7cwHVY-XdM:HuXJpmb4G-4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=x7cwHVY-XdM:HuXJpmb4G-4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=x7cwHVY-XdM:HuXJpmb4G-4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=x7cwHVY-XdM:HuXJpmb4G-4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Datenbank-Backups mit git (mysql, postgresql, etc)]]></title>
      <link>http://www.robo47.net/text/12-Datenbank-Backups-mit-git-mysql-postgresql-etc</link>
      <guid>http://www.robo47.net/text/12-Datenbank-Backups-mit-git-mysql-postgresql-etc</guid>
      <description>&lt;h1&gt;Datenbank-Backups mit git (mysql, postgresql, etc)&lt;/h1&gt;
&lt;p&gt;
    Ein Problem auf das man früher oder später stößt wenn man Backups von seinen
    Datenbanken macht, ist dass die Backups immer größer werden, und abhängig davon
    wie viele man speichern will (und wie oft man welche macht)
&lt;/p&gt;
&lt;p&gt;
    &lt;a href="http://svenschmalle.de/"&gt;Sven&lt;/a&gt; hatte mich vor langer Zeit schon einmal
    auf die Möglichkeit aufmerksam gemacht, doch ein &lt;a href="http://de.wikipedia.org/wiki/Versionsverwaltung"&gt;Versionsverwaltungs&lt;/a&gt;-Tool wie
    &lt;a href="http://de.wikipedia.org/wiki/Subversion_(Software)"&gt;Subversion&lt;/a&gt; für die Speicherung der Backups zu nutzen. Da Versionsverwaltungstools
    idealerweise ASCII-Dateien nicht jedes mal neu speichern, sondern über Diffs nur
    die Änderungen speichert, spart man dabei eine ganze Menge Platz. Bei &lt;a href="http://de.wikipedia.org/wiki/Git"&gt;GIT&lt;/a&gt; kommt
    hier jetzt noch eine sehr gute Kompression hinzu. Um nicht nur Online ein Backup
    zu haben (kann ja auch mal sein dass die ganze Kiste abraucht), kann man sich
    dann das Git-Repro über ein Protokol seiner Wahl (ssh, git, https) einfach clonen
    und mit &lt;code&gt;git pull&lt;/code&gt; up2date halten. Auch hier entsteht nur sehr wenig
    Traffic, da nur die Änderungen übertragen werden.
&lt;/p&gt;

&lt;p&gt;
Einfaches Beispiel für ein mysql backup + Datei adden + Commiten der Daten + Aufräumen und komprimieren
&lt;/p&gt;
&lt;code&gt;
DATE=`date '+%Y-%m-%d__%H-%M-%S'`

mysqldump -uUsername -pPassword databasename &gt; /path/to/gitrepro/dump.sql
cd /path/to/gitrepro/
git add dump.sql
git commit -am "Backup from ${DATE}"
git gc
&lt;/code&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-QJEHn2ukFY:dpIzs4Q3j6w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-QJEHn2ukFY:dpIzs4Q3j6w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-QJEHn2ukFY:dpIzs4Q3j6w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=-QJEHn2ukFY:dpIzs4Q3j6w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-QJEHn2ukFY:dpIzs4Q3j6w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=-QJEHn2ukFY:dpIzs4Q3j6w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-QJEHn2ukFY:dpIzs4Q3j6w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 16 Jul 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[HTTP Conditional Get Test]]></title>
      <link>http://www.robo47.net/tool/11-HTTP-Conditional-Get-Test</link>
      <guid>http://www.robo47.net/tool/11-HTTP-Conditional-Get-Test</guid>
      <description>HTTP Conditional Get Test Tool&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SQDKvWg9PV0:TUH26aRGNXM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SQDKvWg9PV0:TUH26aRGNXM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SQDKvWg9PV0:TUH26aRGNXM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=SQDKvWg9PV0:TUH26aRGNXM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SQDKvWg9PV0:TUH26aRGNXM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=SQDKvWg9PV0:TUH26aRGNXM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SQDKvWg9PV0:TUH26aRGNXM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 19 May 2009 12:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[HTTP Compression Test Tool]]></title>
      <link>http://www.robo47.net/tool/12-HTTP-Compression-Test-Tool</link>
      <guid>http://www.robo47.net/tool/12-HTTP-Compression-Test-Tool</guid>
      <description>HTTP Compression Test Tool für Gzip und Deflate&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8LDchx53Wuo:TDLk4vP-0nM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8LDchx53Wuo:TDLk4vP-0nM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8LDchx53Wuo:TDLk4vP-0nM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=8LDchx53Wuo:TDLk4vP-0nM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8LDchx53Wuo:TDLk4vP-0nM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=8LDchx53Wuo:TDLk4vP-0nM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=8LDchx53Wuo:TDLk4vP-0nM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 17 May 2009 10:00:00 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[ich mag irreal cool]]></title>
      <link>http://www.robo47.net/blog/166-ich-mag-irreal-cool</link>
      <guid>http://www.robo47.net/blog/166-ich-mag-irreal-cool</guid>
      <description>ich mag irreal cool&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9ckl3NOqCDg:NDsL7JGzvFM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9ckl3NOqCDg:NDsL7JGzvFM:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9ckl3NOqCDg:NDsL7JGzvFM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=9ckl3NOqCDg:NDsL7JGzvFM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9ckl3NOqCDg:NDsL7JGzvFM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=9ckl3NOqCDg:NDsL7JGzvFM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=9ckl3NOqCDg:NDsL7JGzvFM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 01 Aug 2008 21:37:13 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Soundition im JUZ in Hemsbach]]></title>
      <link>http://www.robo47.net/blog/165-Soundition-im-JUZ-in-Hemsbach</link>
      <guid>http://www.robo47.net/blog/165-Soundition-im-JUZ-in-Hemsbach</guid>
      <description>&lt;p&gt;
Jow, die Bilder von &lt;a href="http://www.myspace.com/soundition"&gt;Soundition&lt;/a&gt; vom letzten Wochenende aus dem JUZ in Hemsbach sind endlich online, leider war das Licht vor Ort sehr bescheiden, daher alle Bilder 1 Blende (teilweise auch mehr [ISO 3200+ @350D :P]) gepusht.
&lt;/p&gt;&lt;p&gt;
Aber nachdem ich diese Band gehört hab, war mir das Licht fast egal, allein dafür hatte es sich schon gelohnt da zu sein. Jedem der auf Reggae und Ska steht und aus der Region kommt kann ich nur wärmsten empfehlen der Band auf einem ihrer nächsten Gigs (Wo das ist, findet ihr auf myspace) mal nen Besuch abzustatten. Es lohnt sich auf jeden Fall. Und ich werde mich sicher mal wieder blicken lassen.&lt;br /&gt;&lt;br /&gt;
Und hier gibt es die Bilder:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Soundition-JUZ-Hemsbach/"&gt;Soundition im JUZ in Hemsbach&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ReVQiT3F6wo:mts9JbvN-0w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ReVQiT3F6wo:mts9JbvN-0w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ReVQiT3F6wo:mts9JbvN-0w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ReVQiT3F6wo:mts9JbvN-0w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ReVQiT3F6wo:mts9JbvN-0w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ReVQiT3F6wo:mts9JbvN-0w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ReVQiT3F6wo:mts9JbvN-0w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 23 Apr 2008 22:19:54 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Freundschaftssingen in Trösel]]></title>
      <link>http://www.robo47.net/blog/164-Freundschaftssingen-in-Troesel</link>
      <guid>http://www.robo47.net/blog/164-Freundschaftssingen-in-Troesel</guid>
      <description>&lt;p&gt;
Bilder vom Sängerbund Oberflockenbach und der MGV Union Wald-Michelbach vom Wochenende sind jetzt online:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Freundschaftssingen-Troesel/Saengerbund-Oberflockenbach/"&gt;Sängerbund Oberflockenbach&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Freundschaftssingen-Troesel/MGV-Union-Wald-Michelbach/"&gt;Bilder von der MGV Union Wald-Michelbach&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SHEd2AiW1bI:GOQpt_O0x9w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SHEd2AiW1bI:GOQpt_O0x9w:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SHEd2AiW1bI:GOQpt_O0x9w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=SHEd2AiW1bI:GOQpt_O0x9w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SHEd2AiW1bI:GOQpt_O0x9w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=SHEd2AiW1bI:GOQpt_O0x9w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=SHEd2AiW1bI:GOQpt_O0x9w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 15 Apr 2008 16:10:46 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Photos vom Noisepollution Festival 2008 Online]]></title>
      <link>http://www.robo47.net/blog/163-Photos-vom-Noisepollution-Festival-2008-Online</link>
      <guid>http://www.robo47.net/blog/163-Photos-vom-Noisepollution-Festival-2008-Online</guid>
      <description>&lt;p&gt;So, es hat etwas gedauert, aber jetzt ist der Kram online.&lt;br /&gt;&lt;br /&gt;
Aufgrund technischer Probleme vorort, sind es leider bei einigen Bands nur ein Bilder geworden.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Antitainment/"&gt;Antitainment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Blackdust/"&gt;Blackdust&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Dioramic/"&gt;Dioramic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Hesslers/"&gt;Hesslers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Soapbox/"&gt;Soapbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Kommando-Kommando/"&gt;Kommando Kommando&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Long-Distance-Calling/"&gt;Long Distance Calling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Replico/"&gt;Replico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Festival-2008/Malm/"&gt;Malm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=bcol7moPtDs:pB_tHs75G9c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=bcol7moPtDs:pB_tHs75G9c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=bcol7moPtDs:pB_tHs75G9c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=bcol7moPtDs:pB_tHs75G9c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=bcol7moPtDs:pB_tHs75G9c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=bcol7moPtDs:pB_tHs75G9c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=bcol7moPtDs:pB_tHs75G9c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 15 Apr 2008 08:58:41 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[1. Tag vom Noisepollution vorbei]]></title>
      <link>http://www.robo47.net/blog/162-1.-Tag-vom-Noisepollution-vorbei</link>
      <guid>http://www.robo47.net/blog/162-1.-Tag-vom-Noisepollution-vorbei</guid>
      <description>&lt;p&gt;
Der erste Tag war schon wieder sehr geil und ich freue mich auch schon sehr auf heute abend. &lt;br /&gt;
Ein paar erste Bilder gibt es auch schon, aber richtig dransetzen werde ich mich frühestens Sonntag, vielleicht auch erst nächste Woche.
&lt;/p&gt;
&lt;img src="http://bilder.robo47.net/img/blog/162/malm.jpg" style="border: 1px solid white;" alt=" Malm" /&gt;&lt;br /&gt;
&lt;img src="http://bilder.robo47.net/img/blog/162/dioramic.jpg"  style="border: 1px solid white;" alt="Dioramic"/&gt;&lt;br /&gt;
&lt;img src="http://bilder.robo47.net/img/blog/162/hesslers.jpg"  style="border: 1px solid white;" alt="Hesslers" /&gt;&lt;br /&gt;
&lt;img src="http://bilder.robo47.net/img/blog/162/blackdust.jpg"  style="border: 1px solid white;" alt="Black Dust" /&gt;&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=EYYbos98gDc:qrK_H6_wVho:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=EYYbos98gDc:qrK_H6_wVho:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=EYYbos98gDc:qrK_H6_wVho:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=EYYbos98gDc:qrK_H6_wVho:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=EYYbos98gDc:qrK_H6_wVho:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=EYYbos98gDc:qrK_H6_wVho:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=EYYbos98gDc:qrK_H6_wVho:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sat, 05 Apr 2008 13:41:34 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[7. Noisepollution Festival 2008 in Wald-Michelbach]]></title>
      <link>http://www.robo47.net/blog/161-7.-Noisepollution-Festival-2008-in-Wald-Michelbach</link>
      <guid>http://www.robo47.net/blog/161-7.-Noisepollution-Festival-2008-in-Wald-Michelbach</guid>
      <description>&lt;a href="http://bilder.robo47.net/img/blog/161/noise-pollution-festival-8.jpg"&gt;&lt;img class="imageFloatRight" src="http://bilder.robo47.net/img/blog/161/noise-pollution-festival-8-klein.jpg" alt="Noisepollution Festival 2008 Plakat" /&gt;&lt;/a&gt;
&lt;p&gt;
Am 4. und 5. April 2008 ist es wieder soweit, das &lt;strong&gt;7. Noisepollution Festival&lt;/strong&gt; öffnet seine Pforten wieder, mit dabei sind dieses Jahr folgende Bands:
&lt;/p&gt;
&lt;p&gt;
Freitags:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.merkedirmalm.de/"&gt;Malm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dioramic.de/"&gt;Dioramic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hesslers.net/"&gt;Hesslers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blackdust.de/"&gt;Blackdust&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Samstags:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.soapbox-online.de/"&gt;Soapbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&amp;amp;friendid=321667658"&gt;Kommando, Kommando&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&amp;amp;friendid=65292669"&gt;Replico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.antitainment.org/"&gt;Antitainment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.longdistancecalling.de/"&gt;Long Distance Calling &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Einlass: je 19:30 Uhr&lt;br /&gt;
Eintritt: je 6 €&lt;br /&gt;
Location: Juz/Lokschuppen in Wald-Michelbach
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;&lt;br /&gt;
Ich freue mich schon wieder richtig drauf und hoffe dass es wieder 2 ausverkaufte Festival-Tage werden mit tollen Bands und tollen Leuten werden.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=GmdbI9dkaIo:pWIkumaKj-0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=GmdbI9dkaIo:pWIkumaKj-0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=GmdbI9dkaIo:pWIkumaKj-0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=GmdbI9dkaIo:pWIkumaKj-0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=GmdbI9dkaIo:pWIkumaKj-0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=GmdbI9dkaIo:pWIkumaKj-0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=GmdbI9dkaIo:pWIkumaKj-0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Thu, 28 Feb 2008 14:08:40 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Bilder Plaid in Affolterbach]]></title>
      <link>http://www.robo47.net/blog/160-Bilder-Plaid-in-Affolterbach</link>
      <guid>http://www.robo47.net/blog/160-Bilder-Plaid-in-Affolterbach</guid>
      <description>&lt;p&gt;
Jow, hinausgeschoben, aufgeschoben und vergessen, aber jetzt dann auch online&lt;br /&gt;
&lt;a href="http://bilder.robo47.net/Bilder/Plaid-Affolterbach-22-12-2007/"&gt;Bilder von Plaid in Affolterbach am 22.12.2007&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WbrY1kKP7OA:Yi9THDm5gr4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WbrY1kKP7OA:Yi9THDm5gr4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WbrY1kKP7OA:Yi9THDm5gr4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=WbrY1kKP7OA:Yi9THDm5gr4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WbrY1kKP7OA:Yi9THDm5gr4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=WbrY1kKP7OA:Yi9THDm5gr4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=WbrY1kKP7OA:Yi9THDm5gr4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 02 Jan 2008 20:01:57 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Exiftool Homepage offline]]></title>
      <link>http://www.robo47.net/blog/159-Exiftool-Homepage-offline</link>
      <guid>http://www.robo47.net/blog/159-Exiftool-Homepage-offline</guid>
      <description>&lt;p&gt;
Noch letztes Jahr (2007 :) ) wollte ich gerade mal wieder nach Updates von &lt;a href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;exiftool&lt;/a&gt; schauen, um exiftool das meine Seite zum &lt;a href="http://public.robo47.net/kamera-ausloesungen-aus-original-bild-auslesen.php"&gt;Auslösungen aus Bildern auslesen&lt;/a&gt; nutzt, aktuell zu halten, als mir aufgefallen ist, dass die Homepage offline ist und sie ist es immernoch, eine etwas lang Downtime, weis jemand was ?
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jd-7jWY1Ops:PoaOHphI82c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jd-7jWY1Ops:PoaOHphI82c:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jd-7jWY1Ops:PoaOHphI82c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jd-7jWY1Ops:PoaOHphI82c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jd-7jWY1Ops:PoaOHphI82c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jd-7jWY1Ops:PoaOHphI82c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jd-7jWY1Ops:PoaOHphI82c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 02 Jan 2008 02:42:10 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[20 Minuten Stromausfall]]></title>
      <link>http://www.robo47.net/blog/158-20-Minuten-Stromausfall</link>
      <guid>http://www.robo47.net/blog/158-20-Minuten-Stromausfall</guid>
      <description>&lt;p&gt;Hier (69509 Weiher) kam es gerade zu einem ca 20 minütigen Stromausfall, erst flackerte noch das Licht und dann zack, alles aus ... nur mein treues Notebook ist schön brav weitergelaufen. Es war sehr faszinierend mal auf die Straße zu gehen und zu sehen, dass ein Ort keinen Strom mehr hat und wirklich alles dunkel ist.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3fGKKTqGaEw:pQuuXNdKmok:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3fGKKTqGaEw:pQuuXNdKmok:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3fGKKTqGaEw:pQuuXNdKmok:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=3fGKKTqGaEw:pQuuXNdKmok:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3fGKKTqGaEw:pQuuXNdKmok:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=3fGKKTqGaEw:pQuuXNdKmok:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=3fGKKTqGaEw:pQuuXNdKmok:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 19 Dec 2007 01:15:32 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[X-MAS Festival III in der Musichall in Weiher]]></title>
      <link>http://www.robo47.net/blog/157-X-MAS-Festival-III-in-der-Musichall-in-Weiher</link>
      <guid>http://www.robo47.net/blog/157-X-MAS-Festival-III-in-der-Musichall-in-Weiher</guid>
      <description>&lt;p&gt;
Joa, ich war heute in der &lt;a href="http://www.musichall-weiher.com/"&gt;Musichall in Weiher&lt;/a&gt; auf dem &lt;strong&gt;X-MAS Festival III&lt;/strong&gt; um Photos von der Band eines früheren Mitschülers zu machen, &lt;a href="http://profile.myspace.com/index.cfm?fuseaction=user.viewprofile&amp;amp;friendID=264448680"&gt;Funky Clan Project 9&lt;/a&gt;. Bei der Gelegenheit habe ich dann auch noch ein paar Bilder von der ersten Band, Frozen Throne, gemacht.
&lt;/p&gt;&lt;p&gt;
Leider wars für mich ne Nummer zu wenig Licht an den richtigen Stellen, insbesondere von vorne wäre etwas mehr Licht praktisch gewesen, daher nur ein paar Bilder, bei den meisten die RAWs schon ziemlich gepusht (~2+ Blenden), daher auch größtenteils in Schwarz/Weiß, nicht sonderlich scharf und verrauscht.&lt;br /&gt;
Bei der 3ten Band hab ich dann die Lust verloren mit so wenig Licht, weil der Ausschuss einfach enorm ist und hab meinen Kram gepackt und bin Heim, damit der Kram noch Online kommt bevor ich ins Bett gehe und mich morgen wieder der Uni widme.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/X-MAS-Festival-III-Musichall-Weiher-2007/Funky-Clan-Project-9/"&gt;Funky Clan Project 9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/X-MAS-Festival-III-Musichall-Weiher-2007/Frozen-Throne/"&gt;Frozen Throne&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-sS-54ZKCms:LBM_Jdapj14:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-sS-54ZKCms:LBM_Jdapj14:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-sS-54ZKCms:LBM_Jdapj14:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=-sS-54ZKCms:LBM_Jdapj14:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-sS-54ZKCms:LBM_Jdapj14:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=-sS-54ZKCms:LBM_Jdapj14:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=-sS-54ZKCms:LBM_Jdapj14:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 16 Dec 2007 01:06:43 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Brennweiten, Blenden, Objektiv, Lichtempfindlichkeits und Belichtungszeiten Statistik]]></title>
      <link>http://www.robo47.net/blog/156-Brennweiten-Blenden-Objektiv-Lichtempfindlichkeits-und-Belichtungszeiten-Statistik</link>
      <guid>http://www.robo47.net/blog/156-Brennweiten-Blenden-Objektiv-Lichtempfindlichkeits-und-Belichtungszeiten-Statistik</guid>
      <description>&lt;p&gt;
Vorhin habe ich mir mal wieder die Mühe gemacht und mir ein paar Statistiken zu meinen Photos erstellen lassen.&lt;br /&gt;
Die Statistiken bezieht sich auf die letzen ~ 40.000 von mir als &lt;a href="http://http://de.wikipedia.org/wiki/Rohdatenformat_29"&gt;RAW&lt;/a&gt; gemachten Aufnahmen, mit meiner 350D.
&lt;/p&gt;&lt;p&gt;
Erstellt habe ich das ganze mit dem tollen &lt;a href="http://www.thezeal.com/blog/?p=145" title="Exifs Stats Tool by thezeal.com"&gt;Exifs Stats Tool&lt;/a&gt; das wiederrum für das Auslesen der Exifs &lt;a href="http://www.sno.phy.queensu.ca/~phil/exiftool/" title="Exiftool by Phil Harvey"&gt;exiftool&lt;/a&gt; verwendet.
Die Ausgabe der Ergebnisse habe ich dann etwas angepasst( z.b. 0.0mm in 8.0mm umgeändert, da das manuelle Peleng von meiner Kamera natürlich nicht ausgelesen werden kann), gekürzt und anschließend die Werte in OpenOffice Calc übertragen um mir die % ausrechnen zu lassen.&lt;br /&gt;
Das ist das Ergebnis: 
&lt;/p&gt;
Verwendete Brennweiten / Objektive (5 meist verwendete): 
&lt;pre&gt;
150.0mm   Sigma 150/2.8 EX Makro    30,66%
300.0mm   Canon 300/4.0 L IS        28,30%
 50.0mm   Canon 50/1.8 MK I         24,07%
 20.0mm   Sigma 20/1.8 EX           10,94%
  8.0mm   Peleng 8mm Fischauge       3,03%
&lt;/pre&gt;
&lt;p&gt;
Verwendete Lichtempfindlichkeit:
&lt;/p&gt;
&lt;pre&gt;
ISO 1600    61,83%
ISO 400     19,10%
ISO 800      9,15%
ISO 100      5,66%
ISO 200      4,22%
&lt;/pre&gt;
&lt;p&gt;
Belichtungszeiten ( 15 meist verwendeten )
&lt;/p&gt;
&lt;pre&gt;
1/200    8,97%
1/125    8,20%
1/100    8,15%
1/60     6,77%
1/250    6,66%
1/400    5,54%
1/160    5,53%
1/500    4,87%
1/80     4,82%
1/50     4,67%
1/320    4,64%
1/800    3,30%
1/30     3,01%
1/1000   2,56%
1/640    2,44%
&lt;/pre&gt;
&lt;p&gt;
Blenden ( 10 meist verwendeten )
&lt;/p&gt;
&lt;pre&gt;
2.8       26,81%
4.0       18,75%
1.8        7,99%
5.0        6,84%
5.6        5,71%
3.5        4,34%
3.2        4,24%
2.2        3,89%
2.5        3,18%
1.8        3,03%
&lt;/pre&gt;
&lt;p&gt;
Auf bunte Graphen habe ich dann verzichtet, weil ich vergessen hab vor dem Schließen von OpenOffice den Kram zu speichern und jetzt zu faul bin das nochmal in Calc zu übertragen.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=m3kU3LDn-8w:gkbOqTImoQ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=m3kU3LDn-8w:gkbOqTImoQ0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=m3kU3LDn-8w:gkbOqTImoQ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=m3kU3LDn-8w:gkbOqTImoQ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=m3kU3LDn-8w:gkbOqTImoQ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=m3kU3LDn-8w:gkbOqTImoQ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=m3kU3LDn-8w:gkbOqTImoQ0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Mon, 10 Dec 2007 00:20:18 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Domain vor Domainumzug auf neuem Server testen]]></title>
      <link>http://www.robo47.net/text/31-Domain-vor-Domainumzug-auf-neuem-Server-testen</link>
      <guid>http://www.robo47.net/text/31-Domain-vor-Domainumzug-auf-neuem-Server-testen</guid>
      <description>&lt;p&gt;
    Ein Problem für viele ist es, wenn man ein System, sei es ein Shop, ein Forum, ein Blog oder eine dynamische Seite, zu einem neuen Provider oder auf einen anderen Server &lt;strong&gt;umziehen&lt;/strong&gt; will. Eine Ideen wie man das sauber machen kann ist folgende:
&lt;/p&gt;
&lt;p&gt;

Als erstes sollte man sich um die Datenbank kümmern. Irgendwann zu der Zeit die laut Logdateien die am wenigsten frequentierte ist, schaltet man das System in den hoffentlich vorhandenen &lt;strong&gt;Wartungsmodus&lt;/strong&gt;. Dann erstellt man einen aktuellen &lt;strong&gt;Dump der Datenbank&lt;/strong&gt;, diesen spielt man auf dem neuen Server ein und ändert anschließend die Datenbankdaten im System auf die IP, Benutzername, Passwort und Datenbankname des neuen Servers. Dann kann man den &lt;strong&gt;Wartungsmodus&lt;/strong&gt; erstmal beenden. (Wichtig ist hierbei, dass das System keine Daten ins Dateisystem speichert, bei Foren sollte man z.b. während der Umzugsphase Datei-Anhänge und ähnliche Features deaktivieren.)
Dann kann man fortfahren und die kompletten Inhalte vom FTP des alten Servers auf den neuen Server umziehen.
&lt;/p&gt;
&lt;p&gt;
Hat man jetzt einen eigenen Server, sollte man den passenden vhost für die Domain schon anlegen, andernfalls sollte man seinen Provider darum bitten dies zu tun (Wenn man nur Webspace bei dem Provider hat).
Jetzt kann man indem man in der hosts-Datei von Windows (Im Normalfall  hier zu finden: C:\WINDOWS\system32\drivers\etc\hosts)
einen Eintrag für die Domain macht:
&lt;/p&gt;
&lt;code&gt;
IP.DES.NEUEN.SERVERS       www.domain.tld&lt;br /&gt;
IP.DES.NEUEN.SERVERS       domain.tld
&lt;/code&gt;

&lt;p&gt;
schon das System auf dem neuen Server einrichten und testen. Dieser Eintrag macht nichts anderes, als die IP für diese Domain nicht mehr vom DNS-Server des Providers zu beziehen, sondern fest einzustellen, damit man schon auf dem neuen System landet.
&lt;/p&gt;
&lt;p&gt;
Nachdem man das komplette System jetzt auf dem neuen Server eingerichtet hat, kann man dann den Domainumzug starten. (&lt;strong&gt;Wichtig ist, jetzt die Einträge in der Hosts-Datei wieder zu löschen, damit man auch mitbekommt, wann die Domain beim eigenen Provider als umgezogen gilt.&lt;/strong&gt;)
&lt;/p&gt;
&lt;p&gt;
Ein paar Sachen die man aber auf jeden Fall noch beachten sollte ist, wenn man die Domain umzieht, werden irgendwann die DNS-Einträge geändert (sobald diese geändert sind, ist die Domain auf dem neuen Server erreichbar, theoretisch), bis diese Änderung auf allen DNS-Servern bei allen Providern angekommen ist, sagt man, vergehen ca 24 Stunden um. Heißt, es kann sein, dass man selbst zwar schon wenn man die Domain eingibt auch auf den neuen Server kommt, andere Leute aber nicht (selbst wenn sie beim gleichen Internet Provider sind). Daher sollte man jetzt keinesfalls schon alle Features wie Dateiuploads aktivieren, sonst kann es passieren, dass die Leute die noch auf dem alten Server sind, dort eine Datei hochladen, die dann nicht auf dem neuen Server liegt. Um so ein Problem zu umgehen kann man einfach, nach z.B. 24 Stunden, wenn man meint, dass genug Zeit vergangen ist, auf dem alten Server das Forum/den Shop (oder was auch immer) durch eine Informationsseite ersetzen, dass das Projekt gerade umzieht und bald wieder erreichbar sein sollte, dann kann man auch wieder die ganzen Features auf dem neuen Server aktivieren und muss keine Angst haben, dass es zu verschwundenen Dateianhängen oder ähnlichem kommt.
&lt;/p&gt;
&lt;p&gt;
Da ich im Oktober 2006 selbst ein paar Umzüge machen musste haben sich diese Tricks als sehr praktisch erwiesen, weil man zuverlässig vorher schon seine Systeme testen kann, ohne dass es zu längeren Ausfällen kommt. Lustiger weise waren die &lt;strong&gt;Suchmaschinenbots&lt;/strong&gt; mit die letzen die meine neue IP bekommen haben, denn z.B. Google und Yahoo waren teilweise bis zu 6 Stunden, nachdem ich hier die Domain schon wieder auf dem neuen Server erreichen konnte, auf dem alten unterwegs und haben ein paar Foren und Seiten gespidert.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DJ4s-d6ElXU:Oow1-bhccjw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DJ4s-d6ElXU:Oow1-bhccjw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DJ4s-d6ElXU:Oow1-bhccjw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=DJ4s-d6ElXU:Oow1-bhccjw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DJ4s-d6ElXU:Oow1-bhccjw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=DJ4s-d6ElXU:Oow1-bhccjw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DJ4s-d6ElXU:Oow1-bhccjw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 09 Dec 2007 12:00:00 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[1111 mal schon die Auslösungen ausgelesen]]></title>
      <link>http://www.robo47.net/blog/155-1111-mal-schon-die-Ausloesungen-ausgelesen</link>
      <guid>http://www.robo47.net/blog/155-1111-mal-schon-die-Ausloesungen-ausgelesen</guid>
      <description>&lt;p&gt;
Gerade hab ich gesehen, dass mein Interface für &lt;a href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;Exiftool&lt;/a&gt; zum &lt;a href="http://public.robo47.net/kamera-ausloesungen-aus-original-bild-auslesen.php"&gt;Auslesen der Auslösungen von DLSRs&lt;/a&gt; schon ganze 1111 überprüfte Bilder hat seit der Counter mitläuft, freut mich, dass das Tool so rege genutzt wird. Ein paar Fake-Einträge gab es auch schon.
&lt;/p&gt;
&lt;p&gt;
Hier noch eine kleine Statistik zur Anzahl der geprüften Kameras (Top 10)
&lt;/p&gt;
&lt;pre&gt;
1)  PENTAX K10D                  40
2)  Canon EOS-1D Mark II         30
3)  Canon EOS-1D Mark II N       23
4)  NIKON D70                    21
5)  NIKON D200                   20
6)  PENTAX K100D                 14
7)  NIKON D80                    12
8)  Canon EOS-1D                 12
9)  PENTAX *ist DS               11
10) Canon EOS-1DS               10
&lt;/pre&gt;
&lt;p&gt;
Ausserdem habe ich gerade Exiftool auf Version 7.04 geupdatet
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=n3zo8rWcW48:Ohi2mh822Ak:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=n3zo8rWcW48:Ohi2mh822Ak:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=n3zo8rWcW48:Ohi2mh822Ak:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=n3zo8rWcW48:Ohi2mh822Ak:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=n3zo8rWcW48:Ohi2mh822Ak:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=n3zo8rWcW48:Ohi2mh822Ak:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=n3zo8rWcW48:Ohi2mh822Ak:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 04 Dec 2007 20:49:38 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[assolo mortale - tödliches Solo - Ein Chorkrimi]]></title>
      <link>http://www.robo47.net/blog/154-assolo-mortale-toedliches-Solo-Ein-Chorkrimi</link>
      <guid>http://www.robo47.net/blog/154-assolo-mortale-toedliches-Solo-Ein-Chorkrimi</guid>
      <description>&lt;p&gt;
Die Bilder vom Chorkrimi &amp;quot;&lt;strong&gt;assolo mortale - tödliches Solo&lt;/strong&gt;&amp;quot; stehen jetzt online.
&lt;br /&gt;
Der Chorkrimi war ein Gemeinschaftsprojekt der Kriminalautorin &lt;a href="http://www.simonejoest.de/"&gt;Simone Jöst&lt;/a&gt; und des Männergesangsverein &lt;a href="http://www.mgv-union.de/"&gt;MGV Union 1873 Wald-Michelbach&lt;/a&gt; unter Leitung von Hans-Joachim Karl.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Chorkrimi-assolo-mortale-toedliches-Solo/"&gt; Zu den Bildern&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jf7cEvuMRGI:O35pHVc2PrU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jf7cEvuMRGI:O35pHVc2PrU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jf7cEvuMRGI:O35pHVc2PrU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jf7cEvuMRGI:O35pHVc2PrU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jf7cEvuMRGI:O35pHVc2PrU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=jf7cEvuMRGI:O35pHVc2PrU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=jf7cEvuMRGI:O35pHVc2PrU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 02 Dec 2007 13:22:45 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Bilder vom Noisepollution Special 2007]]></title>
      <link>http://www.robo47.net/blog/153-Bilder-vom-Noisepollution-Special-2007</link>
      <guid>http://www.robo47.net/blog/153-Bilder-vom-Noisepollution-Special-2007</guid>
      <description>&lt;p&gt;
Jow hat diesmal etwas gedauert, mich hat Sonntag noch die Grippe erfasst und die hat sich auch noch nicht ganz vertreiben lassen, dazu noch bissel was für die Uni zu tun hab deshalb auch nur grob über die Bilder drüber geschaut paar ausgewählt und online gestellt, bei Zeit, Lust und Gesundheit werde ich das wahrscheinlich nochmal erweitern.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Special-2007/Monday-Freak-Show/"&gt;Monday Freak Show&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Special-2007/The-Ordinary-Me/"&gt;The Ordinary Me&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Special-2007/Trustgame/"&gt;Trustgame&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Special-2007/Thorn-Eleven/"&gt;Thorn Eleven&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Special-2007/My-Baby-Wants-To-Eat-Your-Pussy/"&gt;My Baby Wants To Eat Your Pussy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Noise-Pollution-Special-2007/Monotekktoni/"&gt;Monotekktoni&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YvT3aPNT8k4:KkOVUPPJq4E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YvT3aPNT8k4:KkOVUPPJq4E:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YvT3aPNT8k4:KkOVUPPJq4E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=YvT3aPNT8k4:KkOVUPPJq4E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YvT3aPNT8k4:KkOVUPPJq4E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=YvT3aPNT8k4:KkOVUPPJq4E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=YvT3aPNT8k4:KkOVUPPJq4E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 13 Nov 2007 23:16:42 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Klangkörper - Körperklang - Galakonzert zum 15jährigen des Frauenchor Sängerbund Oberflockenbach]]></title>
      <link>http://www.robo47.net/blog/152-Klangkoerper-Koerperklang-Galakonzert-zum-15jaehrigen-des-Frauenchor-Saengerbund-Oberflockenbach</link>
      <guid>http://www.robo47.net/blog/152-Klangkoerper-Koerperklang-Galakonzert-zum-15jaehrigen-des-Frauenchor-Saengerbund-Oberflockenbach</guid>
      <description>&lt;p&gt;
Am Samstag (3.11.2007) waren &lt;a href="http://www.roterhesse.de"&gt;Julius&lt;/a&gt; und ich in der Weinheimer Stadthalle bei &lt;strong&gt;Klangkörper - Körperklang&lt;/strong&gt; um dort ein paar Bilder während der Veranstaltung zu machen. Stattgefunden hat das ganze anlässlich des 15jährigen Jubiläums des &lt;a href="http://www.saengerbund-oberflockenbach.de"&gt;Frauenchor Sängerbund Oberflockenbach&lt;/a&gt; und zu sehen und hören gab es dort wirklich viel. Tagsüber verschiedene Workshops und Vorträge und abends ein Konzert des &lt;a href="http://www.saengerbund-oberflockenbach.de"&gt;Frauenchor Sängerbund Oberflockenbach&lt;/a&gt; und des &lt;strong&gt;Vassil Arnaudov Sofia Chamber Choir&lt;/strong&gt;.
&lt;/p&gt;
&lt;h3&gt;Workshops / Vorträge:&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Markus Detterbeck&lt;/strong&gt; - Chor in Bewegung - Bewegung im Chor&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Theodora Pavlovitch&lt;/strong&gt; - Frauenchormusik in Bulgarien&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Wolfram Graf&lt;/strong&gt; - Komponinstenpoträt Uraufführung&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Jürgen Faßbender&lt;/strong&gt; - Zeitgenössische Chormusik für Frauenstimmen&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Theodora Pavlovitch&lt;/strong&gt; - Stimmbildung im Frauenchor&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Galakonzert: &lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;Frauenchor Sängerbund Oberflockenbach&lt;/strong&gt; (Chorleiter: &lt;strong&gt;Hans-Joachim Karl&lt;/strong&gt;)&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;Vassil Arnaudov Chamber Choir Sofia/Bulgarien&lt;/strong&gt; aus Sofia / Bulgarien (Chorleiterin &lt;strong&gt;Theodora Pavlovitch&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Photos&lt;/h3&gt;
&lt;p&gt;
Die Photos sind hierOnline: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/"&gt;Photos vom Klangkörper-Körperklang Konzert in Weinheim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
Hier eine kleine Auswahl: 
&lt;/p&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/showimage/1_IMG_7330-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/thumbnails/tn_1_IMG_7330-01.jpg" alt="Jürgen Faßbender - Workshop - Zeitgenössische Chormusik für Frauenstimmen" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Jürgen Faßbender - Workshop -  Zeitgenössische Chormusik für Frauenstimmen&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/showimage/IMG_7245-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/thumbnails/tn_IMG_7245-01.jpg" alt="Markus Detterbeck - Chor in Bewegung - Bewegung im Chor" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Markus Detterbeck - Chor in Bewegung - Bewegung im Chor&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/showimage/IMG_7499-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/thumbnails/tn_IMG_7499-01.jpg" alt="Vassil Arnaudov Chamber Choir Sofia/Bulgarien (Chorleiterin Theodora Pavlovitch)" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Vassil Arnaudov Chamber Choir Sofia/Bulgarien (Chorleiterin Theodora Pavlovitch)&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/showimage/IMG_7676-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/thumbnails/tn_IMG_7676-01.jpg" alt="Klavierspielerin" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Klavierspielerin&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/showimage/IMG_7758-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/thumbnails/tn_IMG_7758-01.jpg" alt="Hans-Joachim Karl - Chorleiter" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Hans-Joachim Karl - Chorleiter des Frauenchor Sängerbund Oberflockenbach&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/showimage/IMG_7454-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/thumbnails/tn_IMG_7454-01.jpg" alt="Frauenchor Sängerbund Oberflockenbach (Chorleiter: Hans-Joachim Karl)" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Frauenchor Sängerbund Oberflockenbach (Chorleiter: Hans-Joachim Karl)&lt;/dd&gt;
&lt;/dl&gt;

&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/showimage/IMG_7629-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/thumbnails/tn_IMG_7629-01.jpg" alt="Theodora Pavlovitch - Chorleiterin des Vassil Arnaudov Chamber Choir Sofia/Bulgarien" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Theodora Pavlovitch - Chorleiterin des Vassil Arnaudov Chamber Choir Sofia/Bulgarien&lt;/dd&gt;
&lt;/dl&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bilder.robo47.net/Bilder/Klangkoerper-Koerperklang-Galakonzert-2007-Weinheim/"&gt;Photos vom Klangkörper-Körperklang Konzert in Weinheim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eMrl_2YvqYw:3peo5o7XmVU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eMrl_2YvqYw:3peo5o7XmVU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eMrl_2YvqYw:3peo5o7XmVU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=eMrl_2YvqYw:3peo5o7XmVU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eMrl_2YvqYw:3peo5o7XmVU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=eMrl_2YvqYw:3peo5o7XmVU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=eMrl_2YvqYw:3peo5o7XmVU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sun, 04 Nov 2007 18:32:24 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Meine Palette Rhinos Energiedrink ist angekommen]]></title>
      <link>http://www.robo47.net/blog/151-Meine-Palette-Rhinos-Energiedrink-ist-angekommen</link>
      <guid>http://www.robo47.net/blog/151-Meine-Palette-Rhinos-Energiedrink-ist-angekommen</guid>
      <description>&lt;p&gt;
Gerade war der DHL-Mensch da und hat mir ein Paket gegeben, darin war meine Palette Rhino's Energiedrinks :P&lt;br /&gt;
Find ich echt geil :) 24 Dosen Rhino's, Coffein pur, perfekt für das weitere Arbeiten an meinem &lt;strong&gt;Programmieren II Praktika&lt;/strong&gt;
&lt;a href="http://bilder.robo47.net/img/blog/151/Rhinos-palette-gross.jpg"&gt;&lt;img src="http://bilder.robo47.net/img/blog/151/Rhinos-palette-klein.jpg" alt="Meine Palette Rhinos" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=H3eTlqQpPWo:6whWoBvpLH0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=H3eTlqQpPWo:6whWoBvpLH0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=H3eTlqQpPWo:6whWoBvpLH0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=H3eTlqQpPWo:6whWoBvpLH0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=H3eTlqQpPWo:6whWoBvpLH0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=H3eTlqQpPWo:6whWoBvpLH0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=H3eTlqQpPWo:6whWoBvpLH0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 31 Oct 2007 12:28:57 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Canon Digital Photo Professional (DPP) 3.2.0 veröffentlicht]]></title>
      <link>http://www.robo47.net/blog/150-Canon-Digital-Photo-Professional-DPP-3.2.0-veroeffentlicht</link>
      <guid>http://www.robo47.net/blog/150-Canon-Digital-Photo-Professional-DPP-3.2.0-veroeffentlicht</guid>
      <description>&lt;p&gt;
Gerade hab ich im &lt;a href="http://www.dforum.net/showthread.php?p=1028875"&gt;Dforum.net&lt;/a&gt; erfahren, dass &lt;strong&gt;Digital Photo Professional&lt;/strong&gt; (DPP) jetzt in Version 3.2.0 erhältlich ist.&lt;br /&gt;
Neuestes Feature ist die Objektivabhängige Korrektur von verschiedenen Abbildungsfehlern, &lt;a href="http://de.wikipedia.org/wiki/Chromatische_Aberration"&gt;CAs&lt;/a&gt; und &lt;a href="http://de.wikipedia.org/wiki/Verzeichnung"&gt;Verzeichnung&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;
Unterstützt werden folgende Objektive:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;EF 14mm 1:2.8L USM&lt;/li&gt;
&lt;li&gt;EF 14mm 1:2.8 II USM&lt;/li&gt;
&lt;li&gt;EF 20mm 1:2.8 USM&lt;/li&gt;
&lt;li&gt;EF 24mm 1:1.4L USM&lt;/li&gt;
&lt;li&gt;EF 28mm 1:1.8 USM&lt;/li&gt;
&lt;li&gt;EF 35mm 1:1.4L USM&lt;/li&gt;
&lt;li&gt;EF 50mm 1:1.2L USM&lt;/li&gt;
&lt;li&gt;EF 50mm 1:1.4 USM&lt;/li&gt;
&lt;li&gt;EF 85mm 1:1.2L USM&lt;/li&gt;
&lt;li&gt;EF 85mm 1:1.2L II USM&lt;/li&gt;
&lt;li&gt;EF 100mm 1:2.8 Macro USM&lt;/li&gt;
&lt;li&gt;EF 16-35mm 1:2.8L USM&lt;/li&gt;
&lt;li&gt;EF 16-35mm 1:2.8L II USM&lt;/li&gt;
&lt;li&gt;EF 17-35mm 1:2.8L&lt;/li&gt;
&lt;li&gt;EF 17-40mm 1:4L USM&lt;/li&gt;
&lt;li&gt;EF 24-70mm 1:2.8L USM&lt;/li&gt;
&lt;li&gt;EF 24-105mm 1:4L IS USM&lt;/li&gt;
&lt;li&gt;EF 28-70mm 1:2.8L&lt;/li&gt;
&lt;li&gt;EF 28-135mm 1:3.5-5.6 IS USM&lt;/li&gt;
&lt;li&gt;EF 28-200mm 1:3.5-5.6 USM&lt;/li&gt;
&lt;li&gt;EF 28-300mm 1:3.5-5.6L IS USM&lt;/li&gt;
&lt;li&gt;EF 100-400mm 1:4.5-5.6L IS USM&lt;/li&gt;
&lt;li&gt;EF-S 55-250mm 1:4-5.6 IS&lt;/li&gt;
&lt;li&gt;EF-S 60mm 1:2.8 Macro USM&lt;/li&gt;
&lt;li&gt;EF-S 17-55mm 1:2.8 IS USM&lt;/li&gt;
&lt;li&gt;EF-S 10-22mm 1:3.5-4.5 USM&lt;/li&gt;
&lt;li&gt;EF-S 18-55mm 1:3.5-5.6 USM&lt;/li&gt;
&lt;li&gt;EF-S 18-55mm 1:3.5-5.6 II USM&lt;/li&gt;
&lt;li&gt;EF-S 18-55mm 1:3.5-5.6 IS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Der Download scheint aktuell allerdings recht träge zu sein.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CoWn4H2ioeI:idg0MoJbwmw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CoWn4H2ioeI:idg0MoJbwmw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CoWn4H2ioeI:idg0MoJbwmw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=CoWn4H2ioeI:idg0MoJbwmw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CoWn4H2ioeI:idg0MoJbwmw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=CoWn4H2ioeI:idg0MoJbwmw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=CoWn4H2ioeI:idg0MoJbwmw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 31 Oct 2007 12:08:26 +0100</pubDate>
    </item>
    <item>
      <title><![CDATA[Noisepollution Festival Blog online]]></title>
      <link>http://www.robo47.net/blog/149-Noisepollution-Festival-Blog-online</link>
      <guid>http://www.robo47.net/blog/149-Noisepollution-Festival-Blog-online</guid>
      <description>&lt;p&gt;
Vor ein paar Minuten habe ich den &lt;a href="http://blog.noisepollution.de/archives/2-Der-Noisepollution-Blog-ist-online.html"&gt;Noisepollution-Festival-Blog&lt;/a&gt; installiert und online gestellt, dort wird es in der nächsten Zeit immer die aktuellen News zu den Noisepollution-Events geben.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MupgbBML1yk:DUR42C0T2A0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MupgbBML1yk:DUR42C0T2A0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MupgbBML1yk:DUR42C0T2A0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=MupgbBML1yk:DUR42C0T2A0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MupgbBML1yk:DUR42C0T2A0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=MupgbBML1yk:DUR42C0T2A0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=MupgbBML1yk:DUR42C0T2A0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Sat, 27 Oct 2007 17:06:40 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Version 0.7 von Mozilla Lightning / Sunbird  und Enigmail 0.95.4 erschienen]]></title>
      <link>http://www.robo47.net/blog/148-Version-0.7-von-Mozilla-Lightning-Sunbird-und-Enigmail-0.95.4-erschienen</link>
      <guid>http://www.robo47.net/blog/148-Version-0.7-von-Mozilla-Lightning-Sunbird-und-Enigmail-0.95.4-erschienen</guid>
      <description>&lt;p&gt;
Gerade mal wieder meinen Thunderbird Portable auf den neuesten Stand gebracht und Mozilla Lightning und Enigmail geupdatet.
&lt;/p&gt;
&lt;p&gt;Während es bei &lt;a href="http://enigform.mozdev.org/"&gt;Enigmail&lt;/a&gt; wohl nur ein paar Kleinigkeiten waren, wurde bei &lt;a href="http://www.mozilla.org/projects/calendar/lightning/"&gt;Lightning&lt;/a&gt; einiges geändert. Die Integration ist etwas neu gemacht muss ich mich aber wohl erst noch dran gewöhnen :)&lt;br /&gt;
Schlimmer war, dass am Anfang nach dem Update meine Termine alle wie verschwunden schienen, aber es war nur das Häckchen für die Gruppe das ich wieder setzen musste.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=49KB0vPEed0:bNsUJST7cyU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=49KB0vPEed0:bNsUJST7cyU:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=49KB0vPEed0:bNsUJST7cyU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=49KB0vPEed0:bNsUJST7cyU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=49KB0vPEed0:bNsUJST7cyU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=49KB0vPEed0:bNsUJST7cyU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=49KB0vPEed0:bNsUJST7cyU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 26 Oct 2007 23:50:49 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Das Phantomklingeln oder auch Phantomvibrationen]]></title>
      <link>http://www.robo47.net/blog/147-Das-Phantomklingeln-oder-auch-Phantomvibrationen</link>
      <guid>http://www.robo47.net/blog/147-Das-Phantomklingeln-oder-auch-Phantomvibrationen</guid>
      <description>&lt;p&gt;
Gerade hab ich im Blog auf &lt;a href="http://www.stereopoly.de/schlagzeile-phantomvibration/"&gt;Stereopoly.de&lt;/a&gt; einen Eintrag über Phantomvibrationen bzw. Phantomklingel gelesen. Quelle des Eintrags ist ein Artikel vom &lt;a href="http://www.stern.de/computer-technik/telefon/:Eingebildete-Anrufe-Wenn-Handy/600757.html"&gt;Stern&lt;/a&gt;.
&lt;br /&gt;Es handelt sich dabei um Menschen die denken ihr Handy klingelt oder vibriert, obwohl dem nicht so ist.
&lt;/p&gt;
&lt;p&gt;
Ganz ehrlich, es wundert mich nicht, sowas konnte man doch schon vor Jahren beobachten, wenn ich an die ersten Jahre zurückdenke, wo die Handys in Mode kamen, jeder (ich natürlich auch, auch wenn es ein langer Kampf war bis ich eins hatte) eins haben musste und dann immer erreichbar sein musste und wollte und immer könnte einen jemand erreichen können wollen :P ... Horror :P Allein in der Schulzeit wie oft Leute auf ihr Handy geschaut haben, dachten sie hätten eine SMS bekommen oder einen Anruf verpasst und das zu einer Zeit wo es noch nichtmal Vibrationsalarm gab, sondern man nur &lt;strong&gt;ordinäre monophone Klingeltöne&lt;/strong&gt; hatte. Mich hat das ganze zum Glück nie wirklich angesteckt, mich haben die Dinger meist mehr genervt als sie mir gebracht haben, sei es weil die Dinger im falschen Moment geklingelt haben oder wil man mal wieder vergessen hatte das Teil auf lautlos zu stellen. Und aktuell hab ich zwar ein uraltes reanimiert, aber dank bescheidener Akkuleistung und dass mich das Teil eh mehr nervt als es bringt, liegt es auch wieder nur zuhause und ich hab es mit etwas Glück 2 mal im Monat einstecken, weil man darauf schneller die Uhrzeit lesen kann wie wenn man sein Notebook auspacken und booten muss :P
&lt;/p&gt;
&lt;p&gt;
Bei mir gibt es dafür aber andere Ausfallerscheinungen, wie zum Beispiel dass ich denke mich hätte jemand via Messenger angeschrieben oder ich hätte ne neue Email, weil ich irgendwas rechts unten in der Symbolleiste flackern sehe, meistens ist das allerdings nur der Bandbreitengraph der Sunbelt Personal Firewall
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=kyV8vZhX4-E:IiotXNLdl_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=kyV8vZhX4-E:IiotXNLdl_A:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=kyV8vZhX4-E:IiotXNLdl_A:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=kyV8vZhX4-E:IiotXNLdl_A:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=kyV8vZhX4-E:IiotXNLdl_A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=kyV8vZhX4-E:IiotXNLdl_A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=kyV8vZhX4-E:IiotXNLdl_A:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Fri, 26 Oct 2007 13:57:41 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Das Ende der bezahlten Textlinks ?]]></title>
      <link>http://www.robo47.net/blog/146-Das-Ende-der-bezahlten-Textlinks</link>
      <guid>http://www.robo47.net/blog/146-Das-Ende-der-bezahlten-Textlinks</guid>
      <description>&lt;p&gt;
Gerade lese ich bei &lt;a href="http://www.fixmbr.de/linkverkaeufe-sind-keine-gute-idee-liebe-seos-lest-das/"&gt;fixmbr.de&lt;/a&gt;, dass Google wohl einige größere Seiten wegen dem Verkauf von Textlinks abgestraft hat, darunter zeit.de, golem.de, netzeitung.de Telepolis (von heise.de) und viele andere deutsch und englischsprachige Seiten die wohl durch den Linkverkauf ein paar Euro dazuverdienen wollten. Die Abstrafung fand dadurch statt, dass der Pagerank dieser Seiten um 1-3 Punkte gefallen ist.
&lt;/p&gt;
&lt;p&gt;
Eigentlich find ich das ganze nett und lustig, sollten doch eigentlich Rankings bei Google nicht (nur?) davon beeinflußt werden, wer am meisten Geld für externe starke Backlinks hat, sondern auch etwas davon, wie interessiert Leute wirklich an der Seite sind und freiwillig ihre Links setzen.
&lt;/p&gt;
&lt;p&gt;
Die Frage die sich nun stellt ist, ob die betroffenen Seiten versuchen werden die ihnen jetzt abgehenden Einnahmen durch die jetzt wohl weniger gefragten Links durch mehr Werbung oder auf anderem Wege wieder an Land zu ziehen.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=UvS73PDg9HA:05fEdN9uogg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=UvS73PDg9HA:05fEdN9uogg:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=UvS73PDg9HA:05fEdN9uogg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=UvS73PDg9HA:05fEdN9uogg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=UvS73PDg9HA:05fEdN9uogg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=UvS73PDg9HA:05fEdN9uogg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=UvS73PDg9HA:05fEdN9uogg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Wed, 24 Oct 2007 22:21:23 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Rhinos Energiedrink]]></title>
      <link>http://www.robo47.net/blog/145-Rhinos-Energiedrink</link>
      <guid>http://www.robo47.net/blog/145-Rhinos-Energiedrink</guid>
      <description>&lt;p&gt;
So, jetzt versuch ich es auch mal kostenlos ne Palette Rhinos Energy Drink abzustauben. Man muss nicht mehr tun als auf seiner Seite den Banner einzubinden den ihr oben seht und dann auf der &lt;a href="http://www.rhinos-energy.com/content/hpbanner.php"&gt;Homepage von Rhinos&lt;/a&gt; seine Daten hinterlassen.
&lt;/p&gt;&lt;p&gt;
&lt;a href="http://www.rhinos-energy.com"&gt;&lt;img src="http://www.rhinos-energy.com/gfx/banner/rhinos-400x60.gif" alt="Rhinos Energie Drink" /&gt;&lt;/a&gt;
&lt;br /&gt;
Gestoßen bin ich darauf übrigends bei einigen Blogs in den letzten Tagen: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.thekenmeister.de/archives/464-rhinos-energy-drink-Energize-Your-Homepage.html"&gt;thekenmeister.de&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hallomeinnameistblog.de/blog/post-70"&gt;hallomeinnameistblog.de&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Hat sich wirklich wie ein Lauffeuer verbreitet, wenn es klappt find ich es cool :P
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tzkqbU1WreI:6PhH_LMus08:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tzkqbU1WreI:6PhH_LMus08:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tzkqbU1WreI:6PhH_LMus08:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=tzkqbU1WreI:6PhH_LMus08:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tzkqbU1WreI:6PhH_LMus08:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=tzkqbU1WreI:6PhH_LMus08:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=tzkqbU1WreI:6PhH_LMus08:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 20:54:55 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Stöhn meine IP]]></title>
      <link>http://www.robo47.net/blog/144-Stoehn-meine-IP</link>
      <guid>http://www.robo47.net/blog/144-Stoehn-meine-IP</guid>
      <description>&lt;p&gt;
Es gibt Sachen, die braucht das Internet nicht und es gibt Sachen die braucht es. Was das Internet definitiv gebraucht hat ist folgende Seite:
&lt;br /&gt;
&lt;a href="http://www.stoehn-meine-ip.de/"&gt;Stöhn meine IP&lt;/a&gt;
&lt;br /&gt;
Der Name sagt schon alles und ich finds geil :P &lt;br /&gt;
&lt;br /&gt;
Bin darüber zufällig beim surfen im Blog von &lt;a href="http://martin.netwg.de/blog/index.php?/archives/661-Geile-Nummer.html"&gt;Martin Rothenberger&lt;/a&gt; darüber gestolpert.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZUaMqGr4QHI:nYcmbJTljnw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZUaMqGr4QHI:nYcmbJTljnw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZUaMqGr4QHI:nYcmbJTljnw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ZUaMqGr4QHI:nYcmbJTljnw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZUaMqGr4QHI:nYcmbJTljnw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=ZUaMqGr4QHI:nYcmbJTljnw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=ZUaMqGr4QHI:nYcmbJTljnw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 19:43:26 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Phototrip mit Julius]]></title>
      <link>http://www.robo47.net/blog/143-Phototrip-mit-Julius</link>
      <guid>http://www.robo47.net/blog/143-Phototrip-mit-Julius</guid>
      <description>&lt;p&gt;Vor 3 Wochen (Sonntag 7.10.2007) war ich mittags mit dem &lt;a href="http://www.roterhesse.de"&gt;Julius&lt;/a&gt; ein bißchen unterwegs photographieren, erst bei ihm hinterm Haus und dann hat uns seine Mutter aufgelesen und wir sind irgendwo hinter Ober-Schönmattenwag hingefahren (Brombbach oder sowas ?) und haben dort ein bißchen photographiert, hier ein paar der Bilder :
&lt;/p&gt;&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/img/blog/143/IMG_7086-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/img/blog/143/tn_IMG_7086-01.jpg" alt="Canon 350D, Sigma 20/1.8, ISO400, 1/200@f13 freihand" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Pilze - 350D, 20/1.8, ISO400, 1/200@f13 freihand&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/img/blog/143/IMG_7093-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/img/blog/143/tn_IMG_7093-01.jpg" alt="Canon 350D, Sigma 20/1.8, ISO100, 1/4000@f2.8 freihand" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Pilze - 350D, 20/1.8, ISO100, 1/4000@f2.8 freihand. Tjoa weiter die Blende öffnen war bei dem schönen Wetter leider nicht drin :)&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl&gt;
	&lt;dt&gt;&lt;a href="http://bilder.robo47.net/img/blog/143/IMG_7109-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/img/blog/143/tn_IMG_7109-01.jpg" alt="Canon 350D, Sigma 20/1.8, ISO100, 1/200@f13 freihand" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;Pilze - 350D, 20/1.8, ISO100, 1/200@f13 freihand&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
Und weil es noch auf der Speicherkarte rumflog, hier eine Spielerei von vor ein paar Wochen, entstanden mit Sternfilter extremem Gegenlicht und manuellem Fokus:
&lt;/p&gt;
&lt;dl&gt;
	&lt;dt&gt;
&lt;a href="http://bilder.robo47.net/img/blog/143/IMG_7198-01.jpg"&gt;&lt;img src="http://bilder.robo47.net/img/blog/143/tn_IMG_7198-01.jpg" alt="Canon 350D, Canon 50/1.8, ISO100, 1/4000@f7.1" /&gt;&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;350D, 20/1.8, ISO100, 1/4000@f7.1&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;
Die vielen Reflexe sind Regentropfen auf dem Fenster durch das ich photographiert habe&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=pNvFTBKXbDo:bRf7fQNFPbw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=pNvFTBKXbDo:bRf7fQNFPbw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=pNvFTBKXbDo:bRf7fQNFPbw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=pNvFTBKXbDo:bRf7fQNFPbw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=pNvFTBKXbDo:bRf7fQNFPbw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=pNvFTBKXbDo:bRf7fQNFPbw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=pNvFTBKXbDo:bRf7fQNFPbw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 04:23:23 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Noisepollution Special im Herbst]]></title>
      <link>http://www.robo47.net/blog/142-Noisepollution-Special-im-Herbst</link>
      <guid>http://www.robo47.net/blog/142-Noisepollution-Special-im-Herbst</guid>
      <description>&lt;a href="http://bilder.robo47.net/img/blog/np_special_07_front.jpg"&gt;&lt;img class="imageFloatRight" src="http://bilder.robo47.net/img/blog/np_special_07_front_sml.jpg" alt="Noisepollution Herbst Spezial Plakat 2007 Front" /&gt;&lt;/a&gt;
&lt;p&gt;
Am 10.11.2007 ist es mal wieder so weit, Noisepollution rockt mit einem Special in Gras-Ellenbach/Wahlen am Sportplatz das Haus. Am Start sind: 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.mbwteyp.de"&gt;My Baby Wants To Eat You Pussy&lt;/a&gt; (Glam-Crossover/Mannheim)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.thorn-eleven.de"&gt;Thorn.eleven&lt;/a&gt; (Brachial-Rock/Heidelberg)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.trustgame.de"&gt;Trustgame&lt;/a&gt; (Duisburg)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.theordinaryme.de"&gt;The Ordinary Me&lt;/a&gt; (Emo-Core/Frankfurt)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.monday-freak-show.de"&gt;Monday Freak Show&lt;/a&gt; (Rock/Fürth)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
und bei der Aftershow-Party wird es dann bis in die Morgenstunden elektronisch mit 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.monotekktoni.de"&gt;Monotekktoni&lt;/a&gt; (Electro-Liveact/Berlin)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Mehr Informationen gibts wie immer auf der Seite von &lt;a href="http://www.noisepollution.de/"&gt;Noisepollution&lt;/a&gt; und ich hoffe man sieht sich dann dort. Auch wenn ich wohl den größten Teil des abends mit photographieren beschäftigt sein werde, hoffe ich spätestens beim letzten Act die Kamera dann auch mal zur Seite legen zu können und noch ein bißchen Spass zu haben.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=88PzbpLxLY8:uWs0Gg5rZg4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=88PzbpLxLY8:uWs0Gg5rZg4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=88PzbpLxLY8:uWs0Gg5rZg4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=88PzbpLxLY8:uWs0Gg5rZg4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=88PzbpLxLY8:uWs0Gg5rZg4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=88PzbpLxLY8:uWs0Gg5rZg4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=88PzbpLxLY8:uWs0Gg5rZg4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 03:16:19 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[elektronische Musik-Streams]]></title>
      <link>http://www.robo47.net/blog/141-elektronische-Musik-Streams</link>
      <guid>http://www.robo47.net/blog/141-elektronische-Musik-Streams</guid>
      <description>&lt;p&gt;
Ich schreibe mal bewußt "Musikstreams" und nicht Radiostreams oder ähnliches, weil das was ich so höre eigentlich meistens keine Radiostreams in dem Sinne sind. Für einen Radiostream gehören ausser der Musik zumindest noch Nachrichten zum Programm, das ist bei den Streams die ich höre anders. Was ich eigentlich wollte, ist mal &lt;a href="http://www.di.fm"&gt;Digitally Imported&lt;/a&gt; zu erwähnen, meine aktuelle Musikquelle Nr 1 wenn es um den täglichen Musikkonsum zuhause geht.
&lt;/p&gt;
&lt;p&gt;
Bei &lt;a href="http://www.di.fm/"&gt;Digitally Imported&lt;/a&gt; gibt es Streams für die unterschiedlichsten elektronischen Stilrichtung, darunter: Trance, Vocal Trance, Future Synthpop, Chillout, Euro Dance, House, Soulful House, Hard Dance, Techno, Progressiv, Goa-Psy Trance, Hard Core, Lounge, Drum'n'Bass, Ambient, Gabber und noch einige mehr. Ab und an kommt auch etwas Werbung, aber das fällt zumindest mir kaum auf.
&lt;br /&gt;
Bei mir läuft wohl meistens Trance, Vocal Trance, House, Hard Core, Chillout oder Ambient, je nach Laune, Motivation und was mich sonst gerade beeinflußt.
&lt;br /&gt;
Gerade wenn der Nachbar mal wieder am Hämmern und kloppen auf seinem Balkon oder vor seiner Garage, ist Hard Core oftmals genau das richtige, weil man von dem ganzen absolut nichts mehr mitkommt und sich auf das was man gerade macht konzentrieren kann.
&lt;br /&gt;
Nach der Uni und nach dem Aufstehen läuft dann meistens Chillout um ein bißchen wach zu werden.
&lt;/p&gt;
&lt;p&gt;
Und was hört ihr so für Streams ?
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DNGyZgd23Qc:h9R1t5g6xzs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DNGyZgd23Qc:h9R1t5g6xzs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DNGyZgd23Qc:h9R1t5g6xzs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=DNGyZgd23Qc:h9R1t5g6xzs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DNGyZgd23Qc:h9R1t5g6xzs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=DNGyZgd23Qc:h9R1t5g6xzs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=DNGyZgd23Qc:h9R1t5g6xzs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 03:04:52 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Kostenloses Ruby on Rails Ebook bei Sitepoint]]></title>
      <link>http://www.robo47.net/blog/140-Kostenloses-Ruby-on-Rails-Ebook-bei-Sitepoint</link>
      <guid>http://www.robo47.net/blog/140-Kostenloses-Ruby-on-Rails-Ebook-bei-Sitepoint</guid>
      <description>&lt;p&gt;
Bei &lt;a href="http://www.sitepoint.com/"&gt;Sitepoint&lt;/a&gt; gibt es momentan ein &lt;a href="http://www.sitepoint.com/books/rails1/freebook.php"&gt;kostenloses Ebook über Ruby on Rails&lt;/a&gt; zum Download, das ganze geht noch 39 Tage. Es handelt sich um das Buch &lt;strong&gt;Patrick Lenz - Build Your Own Ruby On Rails Web Applications&lt;/strong&gt;. Nach der Eingabe seiner Emailadresse, bekommt man an diese eine Email mit dem Downloadlink zu der Datei und wer sich entschließt das Buch tatsächlich zu kaufen, hat gleich noch einen 10 $ Gutschein für das Buch beim Sitepoint-Shop dabei.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=v43n7c4ryc8:wDM_NmA6T_s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=v43n7c4ryc8:wDM_NmA6T_s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=v43n7c4ryc8:wDM_NmA6T_s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=v43n7c4ryc8:wDM_NmA6T_s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=v43n7c4ryc8:wDM_NmA6T_s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=v43n7c4ryc8:wDM_NmA6T_s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=v43n7c4ryc8:wDM_NmA6T_s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 02:48:54 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[Jamendo - Kostenlose Musik]]></title>
      <link>http://www.robo47.net/blog/139-Jamendo-Kostenlose-Musik</link>
      <guid>http://www.robo47.net/blog/139-Jamendo-Kostenlose-Musik</guid>
      <description>&lt;img class="imageFloatRight" src="http://bilder.robo47.net/img/blog/tryad_listen_cover.jpg" alt="Cover Tryad - Listen" /&gt;&lt;p&gt;
Nachdem ich am Sonntag Sebsns Eintrag &lt;a href="http://www.sebsn.de/2007/10/21/a-vision-of-students-today/"&gt;A vision of a students today&lt;/a&gt; gesehen habe und mir das Video angeschaut habe, ist mir eins extrem aufgefallen, die Musik, sofort habe ich im Abspann rausgefunden, dass die Musik von &lt;a href="http://tryad.org/"&gt;t r y ^ d (tryad)&lt;/a&gt; ist und hab mich dort gleich mal umgeschaut, sehr gemischte Musik und besonders gefallen haben mir die Sachen mit Gesang und Klavier, ganz besonders: &lt;strong&gt;t r y ^ d - Listen&lt;/strong&gt; ... Ich steh voll auf sowas.
&lt;/p&gt;
&lt;img class="imageFloatLeft" alt="Jamendo Logo" src="http://bilder.robo47.net/img/blog/jamendo.png" /&gt;
&lt;p&gt;
Aber wir sind noch nicht am Ende des Blogeintrags, nachdem ich festgestellt habe, dass es dort sämtliche Musik kostenlos gibt, habe ich mich auf der Seite etwas weiter umgeschaut und bin dann auf &lt;a href="http://www.jamendo.com/de/"&gt;Jamendo&lt;/a&gt; getoßen, eine Seite auf der es nur kostenlose (legale) Musik von verschiedenen ansonsten eher unbekannten Künstlern gibt.
&lt;br /&gt;
Ich kann jedem nur empfehlen sich dort mal etwas umzuhören, auch wenn der seiteninterne Player mit dem man den ganzen Kram streamen kann nicht gerade das Non-Plus-Ultra ist. Besonders im Bereich der elektronischen Musik gibt es einiges zu beschnuppern. &lt;br /&gt; Ein großer Teil der dort vorhanden Musik steht unter &lt;a href="http://www.creativecommons.org/"&gt;CC (Creative Commons)&lt;/a&gt; Lizenzen, ein Thema mit dem ich mich momentan auch auseinandersetzte, weil ich vorhabe meine kompletten hier momenten hier auf der Seite veröffentlichten Bilder unter eine CC-Lizenz zu stellen, aber mehr dazu gibt es irgendwann.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sA9FlNsQDbM:FcmQo5puK-s:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sA9FlNsQDbM:FcmQo5puK-s:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sA9FlNsQDbM:FcmQo5puK-s:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=sA9FlNsQDbM:FcmQo5puK-s:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sA9FlNsQDbM:FcmQo5puK-s:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=sA9FlNsQDbM:FcmQo5puK-s:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=sA9FlNsQDbM:FcmQo5puK-s:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 02:28:27 +0200</pubDate>
    </item>
    <item>
      <title><![CDATA[DSLR - Auslösungen auslesen]]></title>
      <link>http://www.robo47.net/blog/138-DSLR-Ausloesungen-auslesen</link>
      <guid>http://www.robo47.net/blog/138-DSLR-Ausloesungen-auslesen</guid>
      <description>&lt;p&gt;
Die oft wiederkehrende Frage wie viele &lt;strong&gt;Auslösungen&lt;/strong&gt; die eigene Kamera hat, hat mich vor ein paar Wochen dazu bewogen ein kleines Interface für &lt;a href="http://www.sno.phy.queensu.ca/~phil/exiftool/"&gt;ExifTool by Phil Harvey&lt;/a&gt; zu basteln. Exiftool ist ein in PERL geschriebenes Tool mit dem man Exif-Informationen aus Bildern auslesen kann.&lt;br /&gt;
Manche Hersteller betten nun in die Exif-Informationen auch ein, wie viele Bilder die Kamera schon gemacht hat, darunter Canon, Nikon und Pentax. Allerdings gilt das nicht für alle Modelle der Hersteller.
Unter &amp;quot;&lt;a href="http://public.robo47.net/kamera-ausloesungen-aus-original-bild-auslesen.php"&gt;DSLR - Auslösungen auslesen&lt;/a&gt;&amp;quot; findet ihr das Interface, inklusive einer Liste aller momentan unterstützen Kameras und seit neuestem auch einer kleinen Topliste der bisher getesten Bilder.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=rezVzJBV71A:pC_qH3n2ar4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=rezVzJBV71A:pC_qH3n2ar4:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=rezVzJBV71A:pC_qH3n2ar4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=rezVzJBV71A:pC_qH3n2ar4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=rezVzJBV71A:pC_qH3n2ar4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?i=rezVzJBV71A:pC_qH3n2ar4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Robo47?a=rezVzJBV71A:pC_qH3n2ar4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Robo47?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <pubDate>Tue, 23 Oct 2007 02:00:50 +0200</pubDate>
    </item>
  </channel>
</rss>
