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

<channel>
	<title>TigerApps</title>
	<atom:link href="http://www.tigerapps.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tigerapps.de</link>
	<description>Tiger&#039;s Blog</description>
	<lastBuildDate>Wed, 17 Feb 2010 13:45:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Mails importieren über IMAP</title>
		<link>http://www.tigerapps.de/2009/12/31/mails-importieren-uber-imap/</link>
		<comments>http://www.tigerapps.de/2009/12/31/mails-importieren-uber-imap/#comments</comments>
		<pubDate>Thu, 31 Dec 2009 16:22:33 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Client]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=307</guid>
		<description><![CDATA[Viele Leute haben ihre Mails lieber auf ihrem Computer gespeichert und nutzen deshalb POP3 statt IMAP. Doch daraus kann sich ein kleines Problem ergeben: Möchte man auf einen anderen Mail-Clienten umsteigen, gibt es oftmals Probleme beim verlustfreien Ex-/Import der Mails.
So erging es auch mir, als ich vor Kurzem die Outlook 2010 Beta getestet habe und [...]]]></description>
			<content:encoded><![CDATA[<p>Viele Leute haben ihre Mails lieber auf ihrem Computer gespeichert und nutzen deshalb <abbr title="Post Office Protocol 3"><acronym title="Post Office Protocol 3">POP3</acronym></abbr> statt <abbr title="Internet Message Access Protocol"><acronym title="Internet Message Access Protocol">IMAP</acronym></abbr>. Doch daraus kann sich ein kleines Problem ergeben: Möchte man auf einen anderen Mail-Clienten umsteigen, gibt es oftmals Probleme beim verlustfreien Ex-/Import der Mails.</p>
<p>So erging es auch mir, als ich vor Kurzem die <em>Outlook 2010 Beta</em> getestet habe und dazu meine Mails aus <em>Thunderbird 2</em> importieren wollte. Zwar gibt es Anleitungen und Programme zum Konvertieren der Speicherformate, jedoch gehen dabei oftmals wichtige Daten wie Teile der Betreffzeilen oder Anhänge verloren. Mit diesem Problem konfrontiert kam mir eine einfache Idee, die den Import erleichtern kann.<span id="more-307"></span></p>
<p>Statt die Exportfunktion des Mail-Clients zu nutzen, kann man auch auf ein <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konto zurückgreifen. Da über <acronym title="Internet Message Access Protocol">IMAP</acronym> die Mails zwischen Server und Client synchronisiert werden, kann man auf diesem Weg auch Mails und ganze Ordnerhierarchien auf den Server laden und selbstverständlich auch wieder vom Server herunterladen.</p>
<h2>Einrichtung des Mail-Servers</h2>
<p>Da es relativ lange dauert, (besonders große Mengen) auf einen Mail-Server im Web zu laden, empfehle ich die Einrichtung eines lokalen Mail-Servers für diesen Zweck. Ich habe bereits erfolgreich mit <a href="http://www.hmailserver.com/">hMailServer</a> gearbeitet und kann dieses Programm aufgrund der einfachen Konfiguration auch allen Windows-Nutern empfehlen. Ein <a href="http://www.hmailserver.com/documentation/latest/?page=basic_configuration">Konfigurations-Tutorial</a> ist ebenfalls auf der Webseite zu finden.</p>
<h2>Konfiguration der Mail-Clients</h2>
<p>Nachdem der Mail-Server konfiguriert und ein Mail-Konto darauf eingerichtet ist, muss man dieses Mail-Konto selbstverständlich noch in beiden Mail-Clients als <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konto hinzufügen. Als Server-Adresse kann man in diesem Fall einfach <code>localhost</code> angeben.</p>
<p>Einige Mail-Clients scheinen jedoch ein Problem mit diesem Hostname zu haben und können keine Verbindung zum Mail-Server herstellen. In diesem Fall reicht es, in der <code>hosts</code>-Konfigurationsdatei eine beliebige Domain auf die lokale <acronym title="Internet Protocol">IP</acronym>-Adresse umzuleiten. Unter Windows ist diese Datei unter <code>%SystemRoot%\System32\drivers\etc</code> zu finden. Man kann sie mit dem Editor öffnen und beispielweise folgende Zeile anfügen:<br />
<code>127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;localnetwork.net</code><br />
Dadurch wird der gesamte Netzwerk-Verkehr an die Domain <code>localnetwork.net</code> auf den lokalen Computer umgeleitet. Die verwendete Domain muss dann entsprechend als Server-Adresse im Mail-Client eingegeben werden.</p>
<h2>Export der Mails</h2>
<p>Sind beide Mail-Clients konfiguriert, kann man in dem Mail-Client, aus dem man seine Mails <strong>exportieren</strong> möchte, seine gesamte Ordnerhierarchie aus den lokalen Ordnern der <acronym title="Post Office Protocol 3">POP3</acronym>-Konten in die Ordnerstruktur des <acronym title="Internet Message Access Protocol">IMAP</acronym>-Kontos kopieren (<em>Drag &#038; Drop</em> oder <em>Kopieren &#038; Einfügen</em>). Manche Mail-Clients wie <em>Thunderbird 2</em> unterstützen Kopieren kompletter Ordnerstrukturen nicht, weswegen man die Ordnerstruktur im <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konto eventuell manuell anlegen und anschließend die Mails in der verschiedenen Ordner einzeln kopieren muss. Anschließend muss man möglicherweise noch eine Syncronisierung mit dem <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konto starten. Alle Mails werden dann auf den Mail-Server kopiert. Je nach Menge der gespeicherten Mails kann dieser Vorgang etwas Zeit in Anspruch nehmen.</p>
<h2>Import der Mails</h2>
<p>Sind alle Mails kopiert, kann man im Mail-Client, in den man seine Mails <strong>importieren</strong> möchte, die Synchronisierung mit dem <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konto starten, wodurch die vorhin kopierte Ordnerstruktur und alle Mails schonmal im <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konto erscheinen sollten. Anschließend kann man diese wiederrum in die lokalen Ordner kopieren. Dabei sollte man darauf achten, dass man Systemordner wie z.B. den Posteingang nicht überschreibt, sondern die Mails aus dem <acronym title="Internet Message Access Protocol">IMAP</acronym>-Posteingang gesondert in den lokalen Posteingang kopiert.</p>
<h2>Aufräumen</h2>
<p>Nun sollten alle Mails erfolgreich importiert sein und die &#8220;Arbeitsumgebung&#8221; kann wieder abgebaut werden: Die <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konten in den Mail-Clients können wieder gelöscht werden, der Eintrag in der <code>hosts</code>-Konfigurationsdatei (falls vorgenommen) sollte wieder entfernt werden und auch der Mail-Server sollte wieder deinstalliert werden, da die meisten Mail-Server bei Systemstart automatisch gestartet werden und so auch einige Ressourcen verbrauchen.</p>
<h2>Aktuelle Entwicklung</h2>
<p>In <a href="http://www.mozillamessaging.com/thunderbird/">Thunderbird 3</a> ist eine Funktion integriert, die es ermöglicht, die gesamte Ordnerhierarchie von <acronym title="Internet Message Access Protocol">IMAP</acronym>-Konten auch lokal abzuspeichern. Das könnte vielleicht ein Grund sein, von <acronym title="Post Office Protocol 3">POP3</acronym> auf <acronym title="Internet Message Access Protocol">IMAP</acronym> umzusteigen und das Problem des Im-/Exports zu umgehen.</p>
<p>Für alle, die jedoch weiterhin <acronym title="Post Office Protocol 3">POP3</acronym> nutzen, hoffe ich jedoch, dass dieses Tutorial sich als hilfreich erweist. Mir hat die Idee jedenfalls sehr geholfen und das hat mir als Grund gereicht, sie hier zu posten.</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/12/31/mails-importieren-uber-imap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Die Sache mit der Anonymität</title>
		<link>http://www.tigerapps.de/2009/09/18/die-sache-mit-der-anonymitat/</link>
		<comments>http://www.tigerapps.de/2009/09/18/die-sache-mit-der-anonymitat/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 13:40:13 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Kommentar]]></category>
		<category><![CDATA[Lustiges]]></category>
		<category><![CDATA[Fail]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=277</guid>
		<description><![CDATA[Anonymität bei Presseberichten über Straftaten o.Ä. wird in Deutschland groß geschrieben. Meist werden Namen abgekürzt oder nur Nachnamen genannt, sprich: Statt Hans Müller würde man Hans M. oder (Herr) Müller schreiben. Das klappt meistens auch recht gut, doch wenn man beide Formen im selben Artikel benutzt, kann das die Wirkung leicht verfehlen &#8230;
Genau so ein [...]]]></description>
			<content:encoded><![CDATA[<p>Anonymität bei Presseberichten über Straftaten o.Ä. wird in Deutschland groß geschrieben. Meist werden Namen abgekürzt oder nur Nachnamen genannt, sprich: Statt <em>Hans Müller</em> würde man <em>Hans M.</em> oder <em>(Herr) Müller</em> schreiben. Das klappt meistens auch recht gut, doch wenn man beide Formen im selben Artikel benutzt, kann das die Wirkung leicht verfehlen &#8230;<span id="more-277"></span></p>
<div id="attachment_278" class="wp-caption alignleft" style="width: 204px"><a href="http://www.tigerapps.de/wp-content/uploads/anonymity_fbthief.png" rel="lightbox[278]" title="Der Artikel bei Spiegel Online"><img src="http://www.tigerapps.de/wp-content/uploads/anonymity_fbthief-194x300.png" alt="Der Artikel bei Spiegel Online" title="Der Artikel bei Spiegel Online" width="194" height="300" class="size-medium wp-image-278" /></a><p class="wp-caption-text">Der Artikel bei Spiegel Online</p></div>
<p>Genau so ein Fall begegnete mir heute auf <a href="http://www.spiegel.de/">Spiegel Online</a>, wo ich den Artikel <a href="http://www.spiegel.de/netzwelt/web/0,1518,649900,00.html"><em>Überführt: Einbrecher loggt sich am Tatort bei Facebook ein</em></a> las. Dort war nämlich genau dieser Fehler passiert: Im gesamten Artikel war von <em>Jonathan P.</em> die Rede, nur in einer Zeile ging es um <em>Parkers Freund</em>.</p>
<p>Jeder, der nicht völlig erkenntnisresistent ist, sollte aufgrund dieses Fehlers in der Lage sein, den vollen Namen des Täters zu &#8220;erraten&#8221; und somit haben die Anonymisierunsversuche ihren Zweck eindeutig verfehlt. Manchmal schadet es eben doch nicht, den Artikel durchzulesen, bevor man ihn veröffentlicht <img src='http://www.tigerapps.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .</p>
<p><strong>Update:</strong> Inzwischen wurde der Fehler korrigiert, aber der Screenshot ist ja noch da.</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/09/18/die-sache-mit-der-anonymitat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ethiklehrer und das „Hummel-Paradoxon“</title>
		<link>http://www.tigerapps.de/2009/09/03/ethiklehrer-und-das-hummel-paradoxon/</link>
		<comments>http://www.tigerapps.de/2009/09/03/ethiklehrer-und-das-hummel-paradoxon/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 18:02:20 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Kommentar]]></category>
		<category><![CDATA[Lustiges]]></category>
		<category><![CDATA[Schule]]></category>
		<category><![CDATA[Fail]]></category>
		<category><![CDATA[Lehrer]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=246</guid>
		<description><![CDATA[Schon aus anderen Ethik-Kursen hatten wir es gehört und diesen Mittwoch ereilte es uns dann auch: Unsere (stellvertretende) Ethiklehrerin begann die Stunde, indem sie eine Folie mit einem hübschen Bild einer Hummel und folgender Aufschrift auf den Polylux legte:
Die Hummel hat 0,7 cm2 Flügelfläche und wiegt 1,2 Gramm. Nach den Gesetzen der Aerodynamik ist es [...]]]></description>
			<content:encoded><![CDATA[<p>Schon aus anderen Ethik-Kursen hatten wir es gehört und diesen Mittwoch ereilte es uns dann auch: Unsere (stellvertretende) Ethiklehrerin begann die Stunde, indem sie eine Folie mit einem hübschen Bild einer Hummel und folgender Aufschrift auf den Polylux legte:</p>
<blockquote><p>Die Hummel hat 0,7 cm<sup>2</sup> Flügelfläche und wiegt 1,2 Gramm. Nach den Gesetzen der Aerodynamik ist es unmöglich, bei diesem Verhältnis zu fliegen. Da die Hummel die Gesetze der Aerodynamik nicht kennt, fliegt sie dennoch.</p></blockquote>
<p><span id="more-246"></span></p>
<p>Die folgenden zehn Minuten verbrachte sie damit, uns Mut für das bevorstehende Abitur zu machen, indem sie uns einredete, es wäre ganz einfach, wenn man sich nur ein Beispiel an der Hummel nähme. Dabei erzählte sie unter anderem auch, man habe Versuche im Windkanal gemacht, die nicht erfolgreich verlaufen seien und es sei niemand in der Lage, zu erklären, warum die Hummel fliegen kann. Dieser Erfolg sei darum auf ihren unerschütterlichen Willen zurückzuführen, der ihr das Unmögliche möglich machte.</p>
<p>Als Naturwissenschaftler, der ich nunmal bin, konnte ich das jedoch nicht so richtig glauben und durchsuchte heute das Internet nach diesem „Paradoxon“. Das Ergebnis: Bei der Behauptung, die Hummel könne nicht fliegen, handelt es sich um einen Studentenscherz aus den 1930ern! Tatsächlich ist die scheinbar geringe Flügelfläche aufgrund der Flügelform und der durch den Flügelschlag entstehenden Wirbel völlig ausreichend und es ist alles andere als ein Wunder, dass die Hummel fliegen kann. Der experimentelle Nachweis dazu wurde übrigens schon 1996 von Charles Ellington erbracht. In der Wikipedia heißt es dazu:</p>
<blockquote><p>Die Unsinnigkeit der Hummel-Legende ist auch ohne besondere Aerodynamikkenntnisse erkennbar: 1,2 g Masse bei 0,7 cm<sup>2</sup> Flügelfläche ergibt eine Flächenbelastung von rund 17 kg/m<sup>2</sup>. Demgegenüber haben aber schon moderne Segelflugzeuge eine Flächenbelastung von 30–50 kg/m<sup>2</sup>, bei Passagierflugzeugen liegt sie bei 300 kg/m<sup>2</sup> und darüber.</p></blockquote>
<p>Dieses erschreckende Beispiel zeigt, was für ein <strong>Unsinn</strong> den Weg in deutsche Schulen findet und dort voller Überzeugung weiterhin gelehrt wird, obwohl schon seit über zehn Jahren ein Gegenbeweis existiert. Das Ganze hat jedoch auch etwas Gutes: Erstens verstehen wir die Ergebnisse der <abbr title="Schulleistungsuntersuchungen">PISA-Studien</abbr> nun wieder etwas besser, zweitens haben wir Schüler endlich eine gute Begründung, warum wir im Unterricht nicht (immer) aufpassen.</p>
<p><span style="color: #666666;">Hinweis: Der Titel des Artikels soll keinesfalls bedeuten, dass Ethiklehrer generell so sind. Vielmehr scheint es sich dabei um einen Ausnahmefall zu handeln. Bisher hatte ich eigentlich nur gute Ethiklehrer.</span></p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/09/03/ethiklehrer-und-das-hummel-paradoxon/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Latest tweets script</title>
		<link>http://www.tigerapps.de/2009/08/30/latest-tweets-script/</link>
		<comments>http://www.tigerapps.de/2009/08/30/latest-tweets-script/#comments</comments>
		<pubDate>Sun, 30 Aug 2009 17:30:31 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=230</guid>
		<description><![CDATA[Syrup hat ein kleines Script geschrieben, welches eure letzten Tweets auf einer Webseite anzeigen kann. Allerdings hat er dabei vergessen, dass Twitter die API calls limitiert, weshalb ich das Script noch um einen einfachen Cache erweitert habe:
Syrup wrote a tiny script displaying your latest tweets on a website. Unfortunately he forgot the Twitter API call [...]]]></description>
			<content:encoded><![CDATA[<p>Syrup hat <a href="http://iv-cms.de/forum/index.php?page=Thread&#038;postID=7586#post7586">ein kleines Script</a> geschrieben, welches eure letzten Tweets auf einer Webseite anzeigen kann. Allerdings hat er dabei vergessen, dass Twitter die <a href="http://apiwiki.twitter.com/Rate-limiting"><acronym title="Application Programming Interface">API</acronym> calls limitiert</a>, weshalb ich das Script noch um einen einfachen Cache erweitert habe:</p>
<p><span style="color: #666666;">Syrup wrote <a href="http://iv-cms.de/forum/index.php?page=Thread&#038;postID=7586#post7586">a tiny script</a> displaying your latest tweets on a website. Unfortunately he forgot the <a href="http://apiwiki.twitter.com/Rate-limiting">Twitter <acronym title="Application Programming Interface">API</acronym> call limits</a>, so I added a simple cache:</span></p>
<pre name="code" class="php">$name = "Tiger255";
$tweets = 5;

if(filemtime('cache.html') < time() - 60)
{
    ob_start();
    $data = simplexml_load_file( "http://twitter.com/statuses/user_timeline/" . urlencode($name) . ".xml?count=$tweets" );
    foreach( $data->status as $s )
        echo '&lt;p&gt;' . date( "[d.m.Y H:i] ", strtotime( $s->created_at ))  . $s->text . '&lt;/p&gt;';
    file_put_contents('cache.html', ob_get_flush());
}
else
    readfile('cache.html');</pre>
<p>Damit das Script funktioniert, müsst ihr eine <em>cache.html</em>-Datei mit Schreibrechten im selben Verzeichnis erstellen. Wenn euch der Dateiname nicht gefällt, könnt ihr natürlich auch die entsprechenden Stellen im Script ändern und einen anderen benutzen.</p>
<p><span style="color: #666666;">To get the script working create a <em>cache.html</em>-file with writing permissions within the same directory. If you don&#8217;t like the name you can change it in the script and use another one of course.</span></p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/08/30/latest-tweets-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iBEC und iBSS für 3GS Jailbreak sichern (Windows)</title>
		<link>http://www.tigerapps.de/2009/07/03/ibec-und-ibss-fur-3gs-jailbreak-sichern-windows/</link>
		<comments>http://www.tigerapps.de/2009/07/03/ibec-und-ibss-fur-3gs-jailbreak-sichern-windows/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 09:25:25 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone 3GS]]></category>
		<category><![CDATA[Jailbreak]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=204</guid>
		<description><![CDATA[Wie das iPhone Dev Team bekanntgegeben hat, benötigt man zum Jailbreak des iPhone 3GS die iBEC- und iBSS-Informationen. Glücklicher Weise werden diese während einer Wiederherstellung des iPhones im Temporären Ordner des Computers frei zugänglich zwischengespeichert und man kann sie einfach von dort kopieren.
Das Problem liegt jedoch darin, dass die wichtigen Dateien nur sehr kurz im [...]]]></description>
			<content:encoded><![CDATA[<p>Wie das iPhone Dev Team <a href="http://blog.iphone-dev.org/post/133799347/your-3gs-temporary-solution">bekanntgegeben</a> hat, benötigt man zum Jailbreak des iPhone 3GS die iBEC- und iBSS-Informationen. Glücklicher Weise werden diese während einer Wiederherstellung des iPhones im Temporären Ordner des Computers frei zugänglich zwischengespeichert und man kann sie einfach von dort kopieren.</p>
<p>Das Problem liegt jedoch darin, dass die wichtigen Dateien nur sehr kurz im Temporären Ordner verfügbar sind und man unter Umständen mehrfach wiederherstellen muss, wenn man zu langsam beim Kopieren ist. Ich habe heute zwar ein Programm gefunden, dass einem diese Arbeit abnehmen soll, doch leider hängt es sich bei mir im entscheidenden Moment auf und ist darum für mich unbrauchbar (falls sich jemand trotzdem daran versuchen möchte, findet er <a href="http://touch-mania.com/2009/07/02/tutorial-ibec-und-ibss-fur-iphone-3gs-jailbreak-sichern-windows/">hier</a> das Tutorial inkl. Programm-Download).</p>
<p>Aus diesem Grund habe ich mir selbst ein Bash-Script geschrieben, welches auf jeden Fall funktioniert und interessanter Weise muss man bei dieser Variante auch nur ein statt zwei Mal wiederherstellen.<span id="more-204"></span></p>
<h3>Schritt 1 &#8211; Downloads</h3>
<p>Lade folgende Dateien herunter <span style="color:#666666; font-size:0.8em;">(Rechtsklick ›› Ziel speichern unter &#8230;)</span>:<br />
<a href="http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-6582.20090617.LlI87/iPhone2,1_3.0_7A341_Restore.ipsw">iPhone 3GS 3.0 Firmware (iPhone2,1_3.0_7A341_Restore.ipsw)</a><br />
<a href="http://download.tigerapps.de/fetch.bat">Batch-Script (fetch.bat)</a></p>
<h3>Schritt 2 &#8211; fetch.bat starten</h3>
<p>Geh mit dem Explorer in den Ordner, in den du die Dateien heruntergeladen hast und starte die fetch.bat mit einem Doppelklick. Es sollte ein Konsolenfenster erscheinen, in dem ziemlich schnell ziemlich viel Text durchläuft &#8211; das muss so sein! Das bedeutet nichts anderes, dass andauernd dein Temporäres Verzeichnis auf die entsprechenden Dateien überprüft wird.</p>
<h3>Schritt 3 &#8211; DFU Mode</h3>
<p>Bring dein iPhone in den DFU Mode. Eine Anleitung dazu findest du <a href="http://touch-mania.com/2008/11/06/basic-wie-komme-ich-in-den-dfu-mode/">hier</a>. Wenn alles geklappt hat, sollte das Display deines iPhone schwarz sein und in iTunes sollte eine Meldung erscheinen, dass dein iPhone 3GS wiederhergestellt werden muss.</p>
<h3>Schritt 4 &#8211; Wiederherstellung</h3>
<p>Klicke nun bei gedrückter SHIFT-Taste auf <em>Wiederherstellen</em> und wähle im erscheinenden Fenster die Firmware-Datei aus, die du vorhin runtergeladen hast und starte danach die Wiederherstellung. <strong>Warte anschließend, bis die Wiederherstellung beendet ist.</strong></p>
<h3>Schritt 5 &#8211; Dateien holen</h3>
<p>Beende das Batch-Script indem du das Konsolenfenster einfach mit einem Klick auf das rote Kreuz rechts oben schließt. Gehe nun mit dem Explorer auf deine <em>Festplatte C</em>. Dort solltest du nun einen Ordner namens <code>iBEC_iBSS</code> vorfinden, in dem die iBEC- und iBSS-Dateien enthalten sind. Du kannst diesen Ordner nun irgendwo hin verschieben, wo du ihn später gut wiederfindest, wenn du dein iPhone jailbreaken willst.</p>
<p>Das war&#8217;s eigentlich schon &#8211; falls es Probleme gibt, schreib sie einfach in einen Kommentar.</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/07/03/ibec-und-ibss-fur-3gs-jailbreak-sichern-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beamer an, Hirn aus &#8211; Das PowerPoint-Desaster</title>
		<link>http://www.tigerapps.de/2009/06/18/beamer-an-hirn-aus-das-powerpoint-desaster/</link>
		<comments>http://www.tigerapps.de/2009/06/18/beamer-an-hirn-aus-das-powerpoint-desaster/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 18:37:51 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Computer]]></category>
		<category><![CDATA[Essay]]></category>
		<category><![CDATA[PowerPoint]]></category>
		<category><![CDATA[Präsentation]]></category>
		<category><![CDATA[Vortrag]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=172</guid>
		<description><![CDATA[Kaum beginnt der Referent damit, die projizierte Powerpoint-Folie vorzulesen, fallen wir in eine Vollstasis: Das Denken gefriert, der Körper geht in eine Art Winterschlaf-Modus über, sieht nur noch wach aus. Das ist kein subjektives Gefühl: Studien zeigen, dass Powerpoint das Verständnis lähmt.
So steht es im Teaser des Artikels &#8220;Im Powerpoint-Nirvana: Beamer an, Hirn aus&#8221; auf [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Kaum beginnt der Referent damit, die projizierte Powerpoint-Folie vorzulesen, fallen wir in eine Vollstasis: Das Denken gefriert, der Körper geht in eine Art Winterschlaf-Modus über, sieht nur noch wach aus. Das ist kein subjektives Gefühl: Studien zeigen, dass Powerpoint das Verständnis lähmt.</p></blockquote>
<p>So steht es im Teaser des Artikels <a href="http://www.spiegel.de/netzwelt/tech/0,1518,630918,00.html">&#8220;Im Powerpoint-Nirvana: Beamer an, Hirn aus&#8221;</a> auf Spiegel.de und wenngleich PowerPoint-Präsentationen gerade an Schulen eine beliebtes Extra und an modernen Unis schon fast Standard geworden sind, ist die beschriebene Szene keine Seltenheit.<span id="more-172"></span></p>
<h2>Wenig Arbeit, großer Effekt</h2>
<p>Doch wo liegt eigentlich das Problem? PowerPoint ist doch ein ideales Werkzeug, um eindrucksvolle, inhaltlich wertvolle Präsentationen zu erstellen und dem Zuhörer viele Informationen anschaulich und kompakt zu vermitteln. Der Aufwand und die Kosten begrenzen sich &#8211; sofern man einen Computer hat &#8211; auf ein Minimum: Man muss kein Geld für Folien und Tinte ausgeben, es geht keine Vortragszeit beim Anschreiben von Tafelbildern verloren und man kann mit einem Tastendruck völlig neue Informationen an die Wand werfen. Alle Folien klickt man sich vorher am Computer zusammen und dank Animationen und Effekten kann man die Darstellung Schritt für Schritt entwickeln und so eine maximale Anschaulichkeit erreichen. Als netter Nebeneffekt sehen die Effekte auch noch gut aus und beeindrucken Zuhörer und eventuelle Vorgesetzte oder Lehrer.</p>
<h2>Wie man PowerPoint nicht nutzt</h2>
<p>Wenn das Programm also wirklich in Ordnung ist, scheint das Problem ja in der gebräuchlichen Form der Benutzung zu liegen: PowerPoint erscheint vielen als gute Möglichkeit, dem Zuhörer die Informationen, die verbal vermittelt werden, auch schriftlich zu präsentieren, sodass er mitlesen und so besser folgen kann. Und wenn es das Programm schon unterstützt kann man ja auch noch das ein oder andere Bild und ein paar schöne Statistiken irgendwie mit unterbringen. Die PowerPoint <em>ist</em> also der Vortrag und der Redner präsentiert lediglich die Folien, die durch den Beamer gejagt werden. Aber Moment mal: Ist das nicht etwas verkehrte Welt? Der Computer präsentiert und der Redner unterstützt ihn dabei. Der Zuhörer wird zum &#8220;Mitleser&#8221; und das Lesen wird akustisch etwas untermalt. Aber ist das der Sinn der Sache?</p>
<p>Tatsächlich tendieren viele dazu, den gesamten Inhalt ihres Vortrages in Stichpunkt- oder sogar Satzform in der Präsentation unterzubringen und es quasi nur vorzulesen. Da wir aber im Normalfall nicht in der Lage sind, gleichzeitig zuzuhören und mitzulesen, blenden wir meist eine Komponente aus und leider ist das oft der Redner, denn Schrift macht keine Versprecher und wartet auch auf uns, wenn wir etwas nicht direkt verstehen.<br />
So ist es aber nicht gedacht, denn PowerPoint ist das Hilfsmittel und der <em>Zuhörer</em> soll immer noch <em>zuhören</em>. PowerPoint soll genauso wie eine Folie oder ein Tafelbild das Wichtigste kurz und knapp darstellen und mit einigen Grafiken oder Statistiken veranschaulichen. Kein Mensch würde bei einem Vortrag alles, was er sagt, an die Tafel schreiben!</p>
<h2>Grundlegende PowerPoint-Fehler</h2>
<p>Doch das ist bei weitem nicht alles, was man falsch machen kann. Ich habe dazu eine Liste der häufigsten und schlimmsten Fehler in PowerPoint-Präsentationen zusammengetragen:</p>
<ol>
<li><strong>Ganze Sätze auf Folien</strong> sind grundsätzlich zu vermeiden. Der Vortrag ist schließlich kein Buch mit beigelegter Hörbuch-<acronym title="Compact Disc">CD</acronym>. Sätze sind nur für lange Definitionen erlaubt, bei denen der Zuhörer sich bei reinem Vorlesen am Ende nicht mehr an den Anfang erinnern könnte.</li>
<li><strong>Viele und/oder lange Stichpunkte</strong> sind auch nicht besser als Sätze. Es wurden lediglich einige möglicherweise unbedeutende Wörter und Satzzeichen entfernt. Wer auf einer Folie viele Stichpunkte hat, zeigt, dass er keine Lust hatte, sich extra mit den Folien zu beschäftigen und seine Notizen kopiert hat oder dass er vom Thema keine Ahnung hat nicht in der Lage ist, das Wichtigste eines Abschnittes zusammenzufassen.</li>
<li><strong>Übermäßig viel Text und wenige Grafiken</strong> sind auch nicht Sinn der Power-Point. Es soll schließlich anschaulich sein. Viel Text macht die Präsentation hingegen schnell langweilig und verleitet zum Abschalten: Das Gesagte erscheint ja sowieso zusammengefasst auf der nächsten Folie.</li>
<li><strong>Kleine Bilder</strong> sind sowieso sinnlos, da es besonders aus den hinteren Reihen  schon bei großen Bildern manchmal schwer sein kann, wichtige Details zu erfassen. Besonders Statistiken und Diagramme mit kleineren Beschriftungen gehören auf eine eigene Folie.</li>
<li><strong>Viele Effekte und übermäßige Formatierung</strong> zeigen zwar, dass man sich mit den Funktionen des Programms bestens auskennt, aber das hilft dem Vortrag nicht, denn es verwirrt nur und erschwert schlimmstenfalls Verständnis und Leserlichkeit (Man kann einen Text wesentlich besser lesen, wenn er nicht wirr über die Folie flattert).</li>
<li><strong>Zu kleine Schrift</strong> ist ebenfalls ein gern gemachter Fehler. Wenn man vor seinem Monitor sitzt und die Folien erstellt, mag einem die Schriftgröße etwas groß, vielleicht sogar blindengerecht erscheinen, aber trotz der starken Vergrößerung durch den Beamer ist diese Schriftgröße notwendig, damit man auch aus den hinteren Reihen etwas lesen kann. Einige Leute ignorieren das jedoch komplett und verkleinern die Schrift mit dem Erfolg, dass es einerseits schwerer lesbar wird und andererseits noch mehr Text auf eine Folie passt (siehe Punkt 2). Die Standardeinstellungen haben Sinn und sollten auch im Normalfall nicht verändert werden.</li>
</ol>
<p>Ich denke, dieses Video verdeutlicht den Sinn des einen oder anderen Punktes noch einmal:</p>
<p style="text-align: center;"><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/cagxPlVqrtM&#038;hl=de&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/cagxPlVqrtM&#038;hl=de&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<h2>Eine hilfreiche Präsentation</h2>
<p>Will man PowerPoint also wirklich effektiv nutzen, sollte man sich darüber im Klaren sein, dass man selbst als Redner im Mittelpunkt steht und die PowerPoint lediglich dazu dient, das ein oder andere für besseres Verständnis zu veranschaulichen und dem Zuhörer am Ende eines Abschnittes eine <em>kurze</em> Zusammenfassung über das Gesagte zu geben, damit er es sich besser merken kann. Große Texte zu zeigen ist nicht der Sinn von PowerPoint.</p>
<p>Viel hilfreicher ist es hingegen, wenn man die aufeinanderfolgenden Folien (oder auch Effekte, aber in Maßen!) dazu nutzen kann, Schemata und Diagramme Stück für Stück entstehen zu lassen und auf diese Weise einen Prozess anschaulich darzustellen. Dabei ist aber auch wichtig, dass man mit der Präsentation arbeitet, also Dinge an den Folien zeigt statt sie nur im Hintergrund durchlaufen zu lassen. Genauso verhält es sich natürlich mit Bildern, auf die man auch während des Vortrags eingehen sollte.</p>
<p>Das Ganze ist auch gar nicht so schwer, wenn man nur zwei wichtige Regeln beachtet:</p>
<ol>
<li>Der Redner steht im Mittelpunkt und der Zuhörer soll ihm zuhören und nicht durch etwas anderes abgelenkt werden. Die Aufmerksamkeit seiner Zuhörer zu verlieren ist das Schlimmste, was einem Redner passieren kann. In die Präsentation gehört darum möglichst wenig Text.</li>
<li>Die Präsentation sollte dem Redner nie voraus sein. Mehrere Stichpunkte oder komplexere Darstellungen sollten immer stückchenweise eingeblendet werden, damit der Zuhörer nicht dazu verleitet wird, weiterzulesen, obwohl man noch zu einem anderen Punkt etwas erklärt.</li>
</ol>
<h2>Chicken Chicken Chicken: Chicken Chicken</h2>
<p>Wer das immer noch zu kompliziert findet, kann eine Präsentation im gewohnten Stil erstellen und sich darüber freuen, dass es nicht auffällt, wenn er Müll erzählt &#8211; es hört nach den ersten zwei Folien eh keiner mehr zu. Trotzdem gibt es natürlich noch eine etwas andere Möglichkeit, die Aufmerksamkeit der Leser für sich zu gewinnen:</p>
<p style="text-align: center;"><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/yL_-1d9OSdk&#038;hl=de&#038;fs=1&#038;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/yL_-1d9OSdk&#038;hl=de&#038;fs=1&#038;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br />
<span style="color: #666666;">Das Skript zur Präsentation ist übrigens <a href="http://isotropic.org/papers/chicken.pdf">hier</a> zu finden!</span></p>
<p>Dass dabei der Inhalt auf der Strecke bleibt, ist verständlich, aber es ist ja wenigstens eine schöne Power-Point!</p>
<p>Vielleicht hat der ein oder andere jetzt seine eigenen Präsentationen in den oben aufgelisteten Fehlern erkannt und weiß nun, wieso ihm nach den ersten drei Folien nicht mehr unbedingt alle zugehört haben. Vielleicht erkennt man aber auch genau diese Fehler nun in anderen PowerPoint-Desastern und denkt dabei an diesen Artikel, wenn es immer schwerer wird, die Augen offen zu halten und dem Redner zu &#8230;</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/06/18/beamer-an-hirn-aus-das-powerpoint-desaster/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Umstrukturierung</title>
		<link>http://www.tigerapps.de/2009/06/03/umstrukturierung/</link>
		<comments>http://www.tigerapps.de/2009/06/03/umstrukturierung/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 15:14:42 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[TigerApps]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=161</guid>
		<description><![CDATA[Seit der Neueröffnung der Seite gab es noch (fast) keine Nachfragen und Ideen und die Besucherzahlen-Statistik nähert sich nem Nulllevel.
Da das Interesse an Web-Lösungen offenbar so gering ist, werde ich die Seite erneut umstrukturieren müssen und wahrscheinlich etwas verallgemeinern. Genaue Themen und Versprechungen kann ich noch nicht machen &#8211; ich denke mal, das wird sich [...]]]></description>
			<content:encoded><![CDATA[<p>Seit der Neueröffnung der Seite gab es noch (fast) keine Nachfragen und Ideen und die Besucherzahlen-Statistik nähert sich nem Nulllevel.</p>
<p>Da das Interesse an Web-Lösungen offenbar so gering ist, werde ich die Seite erneut umstrukturieren müssen und wahrscheinlich etwas verallgemeinern. Genaue Themen und Versprechungen kann ich noch nicht machen &#8211; ich denke mal, das wird sich dann mit den ersten neuen Artikeln ergeben.</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/06/03/umstrukturierung/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dynamische Avatare fürs Habbo</title>
		<link>http://www.tigerapps.de/2009/04/25/dynamische-avatare-furs-habbo/</link>
		<comments>http://www.tigerapps.de/2009/04/25/dynamische-avatare-furs-habbo/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 21:59:41 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Avatar]]></category>
		<category><![CDATA[Habbo]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=124</guid>
		<description><![CDATA[Wie schon angekündigt und von einigen Seiten auch erwünscht, veröffentliche ich nun (endlich) den Source der dynamischen Avatare. Bitte beachtet, dass es ziemlich lange her ist, dass ich sie programmiert habe und einige Probleme vielleicht etwas umständlich gelöst sind. Da die Avatare für mich keine Bedeutung mehr haben, habe ich mir jedoch nicht die Mühe [...]]]></description>
			<content:encoded><![CDATA[<p>Wie schon angekündigt und von einigen Seiten auch erwünscht, veröffentliche ich nun (endlich) den Source der dynamischen Avatare. Bitte beachtet, dass es ziemlich lange her ist, dass ich sie programmiert habe und einige Probleme vielleicht etwas umständlich gelöst sind. Da die Avatare für mich keine Bedeutung mehr haben, habe ich mir jedoch nicht die Mühe gemacht, sie nochmal zu verbessern. Ich liefere euch stattdessen eine Erklärung dazu, weil ich die Hoffnung habe, dass wenigstens einige von euch den Code nicht einfach blind übernehmen, sondern ihn verbessern und bessere Avatare damit erstellen werden.<span id="more-124"></span></p>
<p>Alle, die es ganz eilig haben und sich nicht für die Erklärung interessieren, können sich das Script direkt <a href="#124-download">downloaden</a> oder sich die <a href="#124-demo">Demo</a> ansehen.</p>
<h2>Vorwissen: Habbo-Imager</h2>
<p>Um an das Bild des gewünschten Habbos in verschiedenen Haltungen und Positionen zu kommen, bedient sich das Script dem Habbo-Imager &#8211; dem Generator der Hotels für Grafiken der Habbofiguren:</p>
<p><strong><acronym title="Uniform Resource Locator">URL</acronym></strong> <em>(Habbo.de)</em>: <code>http://www.habbo.de/habbo-imaging/avatarimage</code></p>
<h3>Parameter <code>action</code></h3>
<p><code>wlk</code> = laufen<br />
<code>wav</code> = winken<br />
<code>sit</code> = sitzen<br />
<code>lay</code> = liegen<br />
<code>drk</code> = trinken/essen<br />
<code>crr</code> = tragen<br />
<em>Hinweis: <code>drk</code> und <code>crr</code> beziehen sich auf Hand-Items wie Getränke. Man kann dem Habbo verschiedene Gegenstände in die Hand geben, indem man die ID eines Items hinzufügt, z.B. würde <code>drk=2</code> den Habbo eine Karotte essen lassen.</em></p>
<h3>Parameter <code>direction</code> und <code>head_direction</code></h3>
<p>Diese Parameter können Zahlen von 1-8 sein. Diese entsprechen jeweils einer der acht Drehmöglichkeiten des Habbos. Die 1 entspricht rechts, die weiteren Zahlen folgen dem Uhrzeigersinn.<br />
<em>Hinweis: Durch sinnlose Kombinationen von Kopf- und Körperrichtungen wie 8 und 4 kann es zu unerwarteten Ergebnissen kommen, da der Generator teilweise verhindert, dass Kopf und Körper des Habbos unmögliche Positionen annehmen &#8211; Habbos sind schließlich keine Eulen.</em></p>
<h3>Parameter <code>gesture</code></h3>
<p><code>sad</code> = traurig<br />
<code>sml</code> = fröhlich<br />
<code>agr</code> = wütend<br />
<code>spk</code> = sprechen<br />
<code>srp</code> = erstaunt</p>
<h3>Parameter <code>img_format</code></h3>
<p>Man kann sich das Bild des Habbos in verschiedenen Formaten ausgeben lassen. Beispielwerte: <code>png</code>, <code>gif</code></p>
<h3>Parameter <code>size</code></h3>
<p>Dieser Parameter ermöglicht es, zwischen Hotelraum- und Gästeraum-Größe zu wählen:<br />
<code>s</code> = klein<br />
<code>*</code> <em>(jeder andere Wert)</em> = groß</p>
<h2>Vorgaben des Scripts</h2>
<p>Das dynamische Avatar ist so konzipiert, dass es als eigenständige Grafik aufgerufen wird und alle relevanten Details über die <acronym title="Uniform Resource Locator">URL</acronym>-Parameter mitgeliefert bekommt.</p>
<h3>Notwendige Parameter</h3>
<p><code>user</code> &#8211; HabboNick<br />
<code>loc</code> &#8211; <abbr title="Top-Level-Domain"><acronym title="Top Level Domain">TLD</acronym></abbr> des Hotels (z.B. <code>de</code> oder <code>co.uk</code>)</p>
<h3>Optionale Parameter</h3>
<p><code>act</code> &#8211; entspr. <code>action</code> des Habbo-Imagers<br />
<code>body</code> &#8211; entspr. <code>direction</code> des Habbo-Imagers<br />
<code>head</code> &#8211; entspr. <code>head_direction</code> des Habbo-Imagers<br />
<code>gest</code> &#8211; entspr. <code>gesture</code> des Habbo-Imagers<br />
<em><code>img_format</code> und <code>size</code> können verständlicher Weise nicht beeinflusst werden, da wir ein großes Bild des Habbos nutzen wollen und das Script auf ein gewisses Grafikformat ausgelegt ist.</em></p>
<h3>Zusätzliche Dateien</h3>
<p>In einem Verzeichnis <code>data</code> liegen folgende Dateien:<br />
<code>bg1.gif</code> &#8211; der Hintergrund des Avatars<br />
<code>habbo_offline.gif</code> &#8211; die offline-Grafik des Hotels<br />
<code>habbo_online.gif</code> &#8211; die online-Grafik des Hotels<br />
<code>v.ttf</code> &#8211; die Volter (Goldfish) TrueType Font<br />
<code>vb.ttf</code> &#8211; die Volter-Bold (Goldfish) TrueType Font</p>
<h2>Code I &#8211; Daten sammeln</h2>
<pre name="code" class="php">$data['homeurl'] = 'http://www.habbo.'.$_GET['loc'].'/home/'.$_GET['user'];
$data['home'] = file_get_contents($data['homeurl']);
if (empty($data['home']) || !eregi("&lt;title&gt;Habbo: ", $data['home']))
	die("Hotel offline");</pre>
<p>Wir holen uns zuerst die Habbo Home des Users &#8211; die Grundlage für alles Folgende. Gibt <code>file_get_contents</code> aus irgendeinem Grund <code>false</code> oder einen leeren String zurück oder enthält die Seite nicht den typischen <code>title</code> einer Habbo Seite, gehen wir davon aus, dass das Hotel offline ist und beenden das Script mit einer entsprechenden Meldung.</p>
<pre name="code" class="php">if (!eregi('&lt;img alt="offline" src="', $data['home']) &#038;&#038; !eregi('&lt;img alt="online" src="', $data['home']))
	die("User hat keine Habbo Home");</pre>
<p>Wenn der User tatsächlich existiert und seine Habbo Home auch für alle sichtbar ist, sollte das Bild vom Onlinestatus zu finden sein.</p>
<pre name="code" class="php">preg_match('%&lt;span class="name-text"&gt;(.*)&lt;/span&gt;%U', $data['home'], $treffer);
$data['habbonick'] = $treffer[1];</pre>
<p>Dann holen wir uns erstmal den HabboNick in korrekter Groß- und Kleinschreibung. Wir wollen ja alles korrekt anzeigen.</p>
<pre name="code" class="php">if(preg_match('%&lt;div class="profile-info"&gt;(.*)&lt;div id="profile-tags-panel"&gt;%Us', $data['home'], $treffer))
	$data['home'] = $treffer[1];
else
	die("User hat keine Habbo Home");</pre>
<p><code>preg_match</code> hat den Nachteil, dass es umso mehr Rechenzeit benötigt, je länger der String ist, in dem es suchen soll. Da alle für uns interessanten Informationen in der Profilbox zu finden sind, nehmen wir uns nur diesen Ausschnitt heraus und suchen ab sofort alles nur noch in diesem kleinen Code-Ausschnitt anstatt in der kompletten Seite. Wenn &#8211; warum auch immer &#8211; keine Profilbox vorhanden ist, wissen wir zwar auch nicht, was genau hier schief gelaufen ist, aber wir können ja wenigstens so tun, als ob und eine vielsagende Meldung ausgeben.</p>
<pre name="code" class="php">// Status
$data['status'] = (eregi('&lt;img alt="offline" src="', $data['home'])) ? 'data/habbo_offline.gif' : 'data/habbo_online.gif';

// Gruppen Badge
if(preg_match('%&lt;div class="birthday date"&gt;[\n\t ]*.*[\n\t ]*&lt;/div&gt;[\n\t ]*&lt;div&gt;[\n\t ]*&lt;a href="/groups/.*&gt;&lt;img src="/habbo-imaging/badge/(.*).gif" /&gt;&lt;/a&gt;%U', $data['home'], $treffer))
	$data['gbadge'] = 'http://www.habbo.'.$_GET['loc'].'/habbo-imaging/badge/'.$treffer[1].'.gif';
else
	$data['gbadge'] = false;

// Norm. Badge
if(preg_match('%&lt;img src="http://images.habbohotel.'.$_GET['loc'].'/c_images/album1584/(.*).gif" /&gt;%U', $data['home'], $treffer))
	$data['badge'] = 'http://images.habbohotel.'.$_GET['loc'].'/c_images/album1584/'.$treffer[1].'.gif';
else
	$data['badge'] = false;

// Mission
if (preg_match('%&lt;div class="profile-motto"&gt;[\n\t ]*([^\n\t]*)[\n\t ]*&lt;div class="clear"&gt;&lt;/div&gt;%U', $data['home'], $treffer))
$data['mission'] = html_entity_decode($treffer[1]);
else
	$data['mission'] = '';</pre>
<p>Dieses etwas längere Stückchen Code sollte selbsterklärend sein.</p>
<pre name="code" class="php">$data['habbo'] = 'http://www.habbo.'.$_GET['loc'].'/habbo-imaging/avatarimage?user='.$_GET['user'].'&#038;action='.$_GET['act'].'&#038;direction='.$_GET['body'].'&#038;head_direction='.$_GET['head'].'&#038;gesture='.$_GET['gest'].'&#038;img_format=gif';</pre>
<p>Nun basteln wir uns die <acronym title="Uniform Resource Locator">URL</acronym> zusammen, die wir gleich brauchen werden, um die Habbo-Grafik vom Habbo-Imager zu laden.</p>
<h2>Code II &#8211; Grafik zusammenstellen</h2>
<pre name="code" class="php">$im = imagecreatefromgif("data/bg1.gif");
$black = imagecolorallocate($im, 0, 0, 0);
$white = imagecolorallocate($im, 255, 255, 255);</pre>
<p>Wir erstellen uns eine <acronym title="Pre-Hypertext Processing">PHP</acronym> Image-Resource auf Basis unseres Hintergrundbildes und definieren die Farben Weiß und Schwarz, die wir später noch für Name und Mission brauchen werden.</p>
<pre name="code" class="php">// Habbo
$pic['habbo'] = imagecreatefromgif($data['habbo']);
imagecopy( $im, $pic['habbo'], 15, 9, 0, 0, imagesx($pic['habbo']), imagesy($pic['habbo']));
// Status
$pic['status'] = imagecreatefromgif($data['status']);
imagecopy($im, $pic['status'], 40, 121, 0, 0, imagesx($pic['status']), imagesy($pic['status']));</pre>
<p>Da wir uns ja vorhin so schön die <acronym title="Uniform Resource Locator">URL</acronym> für den Habbo-Imager zusammengesetzt haben, können wir nun die Grafik einladen und an die passende Stelle kopieren. Bei mir waren das zufällig die Koordinaten (15; 9) und ich würde empfehlen, dass ihr euch die <a href="http://de.php.net/manual/de/function.imagecopy.php">Beschreibung von <code>imagecopy</code> im Manual</a> anschaut, wenn ihr die Werte anpassen wollt. Das Gleiche machen wir dann natürlich noch mit der Status-Grafik.</p>
<pre name="code" class="php">$nick['size'] = imagettfbbox(7, 0, "data/vb.ttf", $data['habbonick']);
$nick['width'] = $nick['size'][2] - $nick['size'][0];
$nick['px'] = (imagesx($im)-$nick['width'])/2;
imagettftext($im, 7, 0, $nick['px'], 19, - $white, "data/vb.ttf", $data['habbonick']);</pre>
<p>Jetzt kommen die Scriftarten-Dateien ins Spiel: Mit <code>imagettfbbox</code> ermitteln wir die voraussichtlichen Maße des HabboNicks in der gewünschten Schriftart und Größe und rechnen die Koordinaten so aus, dass der HabboNick später in der Mitte der Grafik steht (nein, das erkläre ich nun nicht). Anschließend wird der HabboNick an der passenden Stelle platziert. Man beachte, dass noch eine vertikale Ausrichtung festgelegt werden muss, die in meinem Beispiel den Wert 19 hat.</p>
<pre name="code" class="php">if($data['badge']) {
	$pic['badge'] = imagecreatefromgif($data['badge']);
	imagecopy( $im, $pic['badge'], 78, 32, 0, 0, imagesx($pic['badge']), imagesy($pic['badge']));
}
if($data['gbadge']) {
	$pic['gbadge'] = imagecreatefromgif($data['gbadge']);
	imagecopy( $im, $pic['gbadge'], 75, 73, 0, 0, imagesx($pic['gbadge']), imagesy($pic['gbadge']));
}</pre>
<p>Sollte der User Badges haben und sie auch anzeigen, werden diese hier in das Avatar kopiert.</p>
<pre name="code" class="php">if (!empty($data['mission'])) {
	// Leerzeichen behandeln
    $data['mission'] = str_replace(' ',' ',$data['mission']);
	$data['mission'] = str_replace('&nbsp;',' ',$data['mission']);
	while(eregi('  ', $data['mission']))
		$data['mission'] = str_replace('  ',' ',$data['mission']);

    // Sonderzeichen umformen
	$data['mparts'] = str_split($data['mission'],1);
	$newm = '';
	foreach($data['mparts'] as $mpart) {
		$newm .= (ord($mpart)&lt;32 || ord($mpart)&gt;127) ? '&#'.ord($mpart).';' : $mpart;
	}
	$data['mission'] = $newm;

	if(preg_match_all('%&lt;img src="http://images.habbohotel.'.$_GET['loc'].'/(.*)/fonts/volter/([0-9]*).gif" class="vchar" /&gt;%U', $data['mission'], $ac_tref, PREG_SET_ORDER) != 0) {
		foreach($ac_tref as $tref) {
			$chr = (int) '0'.$tref[2];
			$data['mission'] = str_replace('&lt;img src="http://images.habbohotel.'.$_GET['loc'].'/'.$tref[1].'/fonts/volter/'.$tref[2].'.gif" class="vchar" /&gt;', '&#'.$chr.';', $data['mission']);
		}
	}

    // Längen durchprobieren und Zeilenumbrüche setzen
	$w[1] = 33;
	$missi['width'] = 800;
	while ($missi['width'] &gt; 112) {
		$w[1]--;
		$wmission = explode("[www]", wordwrap($data['mission'], $w[1], "[www]", 1));
		$missi['size'] = imagettfbbox (7, 0, "data/v.ttf", $wmission[0]);
		$missi['width'] = $missi['size'][2] - $missi['size'][0];
	}
	if(isset($wmission[1])) {
		$c = 1;
		$wmission4 = '';
		while(isset($wmission[$c])) {
			$wmission4 .= $wmission[$c]; $c++; }
		$w[2] = 33;
		$missi['width'] = 800;
		while ($missi['width'] &gt; 112) {
			$w[2]--;
			$wmission2 = explode("[www]", wordwrap($wmission4, $w[2], "[www]", 1));
			$missi['size'] = imagettfbbox (7, 0, "data/v.ttf", $wmission2[0]);
			$missi['width'] = $missi['size'][2] - $missi['size'][0];
		}
		if(isset($wmission2[1])) {
			$c = 1;
			$wmission5 = '';
			while(isset($wmission2[$c])) {
				$wmission5 .= $wmission2[$c]; $c++; }
			$w[3] = 33;
			$missi['width'] = 800;
			while ($missi['width'] &gt; 112) {
				$w[3]--;
				$wmission3 = explode("[www]", wordwrap($wmission5, $w[3], "[www]", 1));
				$missi['size'] = imagettfbbox (7, 0, "data/v.ttf", $wmission3[0]);
				$missi['width'] = $missi['size'][2] - $missi['size'][0];
			}
		}
	}

	$mission[1] = explode("[www]", wordwrap($data['mission'], $w[1], "[www]", 1));
	imagettftext ($im, 7, 0, 9, 150, - $white, "data/v.ttf", $mission[1][0]);
	if(isset($mission[1][1])) {
		$c = 1; $mission2[1] = '';
		while(isset($mission[1][$c])) {
			$mission2[1] .= $mission[1][$c]; $c++; }
		$mission[2] = explode("[www]", wordwrap($mission2[1], $w[2], "[www]", 1));
		imagettftext ($im, 7, 0, 9, 161, - $white, "data/v.ttf", $mission[2][0]);
		if(isset($mission[2][1])) {
			$c = 1; $mission2[2] = '';
			while(isset($mission[2][$c])) {
				$mission2[2] .= $mission[2][$c]; $c++; }
			$mission[3] = explode("[www]", wordwrap($mission2[2], $w[3], "[www]", 1));
			imagettftext ($im, 7, 0, 9, 172, - $white, "data/v.ttf", $mission[3][0]);
		}
	}
}</pre>
<p>Erschrocken? <img src='http://www.tigerapps.de/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Nunja, die Missionsbehandlung ist wohl etwas komplexer, darum Stück für Stück: Zuerst entfernen wir doppelte Leerzeichen und ähnliche Späße. <acronym title="HyperText Markup Language">HTML</acronym> ignoriert sowas und macht einfache Leerzeichen draus &#8211; <code>imagettftext</code> nimmt das jedoch ziemlich genau. Als nächstes behandeln wir normale Sonderzeichen so, dass <code>imagettftext</code> sie ohne Probleme verstehen kann. Wer sich die <a href="http://de.php.net/manual/de/function.imagettftext.php">Erläuterungen zur Funktion im Manual</a> ansieht, wird auch lesen, dass <code>imagettftext</code> ebenfalls die <abbr title="Umschreibungen für Sonderzeichen in HTML, wie z.B. &amp;auml; für ä"><acronym title="HyperText Markup Language">HTML</acronym>-Entities</abbr> für UTF-8-Zeichen versteht, wie z.B. <code>&amp;#123;</code>. Dies machen wir uns hier zu Nutze und vermeiden Fehler mit Sonderzeichen, indem wir alle durch eine entsprechende Entity ersetzen. Nun hat Habbo aber noch die unangenehme Angewohnheit, einige Volter-Sonderzeichen durch entsprechende Grafiken selbiger zu ersetzen. Das Unangenehme für uns ist daran, dass eine Mission mit einer solchen Grafik im Avatar als reiner <acronym title="HyperText Markup Language">HTML</acronym>-Code zu sehen wäre &#8211; <code>imagettftext</code> versteht nunmal kein <acronym title="HyperText Markup Language">HTML</acronym>. Da wir allerdings im Besitz der vollwertigen Volter-Schriftart sind, können wir die Grafiken wieder durch das entsprechende Sonderzeichen ersetzen. Glücklicherweise hat Habbo die Grafiken genau nach ihrer Sonderzeichen-Nummer benannt, die wir auch für die <acronym title="HyperText Markup Language">HTML</acronym>-Entities nutzen können und so können wir das relativ einfach ersetzen.<br />
Den größen nächsten Block werde ich jetzt nicht im Detail durchkauen. Seine Funktion ist es, durch Probieren herauszufinden, an welcher Stelle in der Mission am passendsten ein Zeilenumbruch gesetzt werden könnte, damit möglichst viel Text auf die Grafik passt, dieser jedoch eine Gewisse Länge nicht überschreitet. Da wir in meinem Beispiel 2 Zeilen ausgeben wollen, muss das ganze möglicherweise 2 mal durchgeführt werden. Ich glaube, dieses Problem könnte man wesentlich effizienter Lösen, als es hier gemacht wurde, allerdings war ich damals damit zufrieden, dass es funktionierte.</p>
<pre name="code" class="php">header("Content-type: image/png");
imagepng($im);</pre>
<p>Nahezu lachhaft nach dem Riesen-Block eben: Dem Browser mitteilen, dass es sich um eine Grafik handelt und diese auch entsprechend ausgeben &#8211; Geschafft!<a name="124-download"></a></p>
<h2>Download-Paket</h2>
<p>Damit ihr euch nicht alles zusammenkopieren müsst und auch die zusätzlichen Dateien gleich habt, gibts das Ganze auch noch zum Download als ZIP-Archiv: Note: There is a file embedded within this post, please visit this post to download the file.<a name="124-demo"></a></p>
<h2>Demo</h2>
<p>Quasi zum Beweis, dass das Ganze auch wirklich funktioniert, habe ich das Script mal hochgeladen:<br />
<code>http://ava.tigerapps.de/ava2.php</code><br />
Nur noch die Parameter anhängen und das Avatar wird geladen, z.B.:<br />
<a href="http://ava.tigerapps.de/ava2.php?user=kawu&#038;loc=de&#038;act=wav&#038;gest=sml">http://ava.tigerapps.de/ava2.php?user=tm&#038;loc=co.uk&#038;act=wav&#038;gest=sml</a></p>
<h2>Verbesserungsansätze</h2>
<p>Gegen Ende der Laufzeit der Avatare hatte ich diese mit einer Art Cache ausgestattet. Jedes Avatar hatte dabei nur noch eine ID, mit der ein Eintrag in einer Datenbank verknüpft war. In diesem Eintrag standen alle Informationen wie User, Hotel usw. sowie ein Timestamp des letzten Aufrufs des Avatars.<br />
Wurde das Avatar zum ersten mal aufgerufen, wurde die entstandene Grafik in einem Ordner unter ihrer ID abgespeichert. Bei den folgenden Aufrufen wurde dann überprüft, ob dieser Aufruf, bei dem das Avatar generiert wurde, länger als 10 Minuten her war. Wenn nicht, wurde lediglich die Datei aus dem Ordner ausgegeben, ansonsten das Avatar komplett neu generiert.<br />
Dies hatte den Vorteil, dass das Avatar nur bei einem Aufruf innerhalb von 10 Minuten langsam geladen wurde und ansonsten genauso schnell wie ein normales Bild.</p>
<p>Natürlich ist das nur ein möglicher Ansatz und es gibt sicher einige Stellen, an denen die Laufzeit des Scripts noch weiter verkürzt werden könnte. Ihr könnt eure Ideen gerne an mich Mailen oder in den Kommentaren schreiben und wenn sie gut sind, werde ich sie gern hier aufnehmen.</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/04/25/dynamische-avatare-furs-habbo/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Internet-Filter: Provider unterschreiben Vertrag</title>
		<link>http://www.tigerapps.de/2009/04/17/internet-filter-provider-unterschreiben-vertrag/</link>
		<comments>http://www.tigerapps.de/2009/04/17/internet-filter-provider-unterschreiben-vertrag/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 14:28:10 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Filter]]></category>
		<category><![CDATA[Recht]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=122</guid>
		<description><![CDATA[Seit einiger Zeit setzt sich die Familienministerin Ursula von der Leyen für einen Internet-Filter ein. Ziel dessen soll es sein, deutschen Internetnutzern den Aufruf kinderpornographischer Seiten zu erschweren. Nun unterzeichneten die ersten Provider einen Vertrag zur Umsetzung dieses Systems.]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit setzt sich die Familienministerin Ursula von der Leyen für einen Internet-Filter ein. Ziel dessen soll es sein, deutschen Internetnutzern den Aufruf kinderpornographischer Seiten zu erschweren. Nun unterzeichneten die ersten Provider einen Vertrag zur Umsetzung dieses Systems.<span id="more-122"></span></p>
<div id="attachment_104" class="wp-caption alignright" style="width: 160px"><a href="http://www.tigerapps.de/wp-content/uploads/219795534_d557651514.jpg" rel="lightbox[filter]"><img src="http://www.tigerapps.de/wp-content/uploads/219795534_d557651514-150x150.jpg" alt="Hinweisseite für gesperrte Seiten" title="Hinweisseite für gesperrte Seiten" width="150" height="150" class="size-thumbnail wp-image-104" /></a><p class="wp-caption-text">Hinweisseite für gesperrte Domains</p></div>
<h3>Funktionsweise</h3>
<p>Das <abbr title="Bundeskriminalamt">BKA</abbr> erstellt eine Liste aller zu sperrenden Domains und beim Aufruf einer Seite durch einen Kunden, bei der normalerweise die Domain per <abbr title="Domain Name System"><acronym title="Domain Name Server">DNS</acronym></abbr> zur <acronym title="Internet Protocol">IP</acronym>-Adresse aufgelöst wird, wird zuerst die Domain mit der Liste abgeglichen und gegebenenfalls auf die Hinweisseite des <abbr title="Bundeskriminalamt">BKA</abbr> umgeleitet.</p>
<h3>Aktuelle Vertragsunterzeichner</h3>
<p>Momentan haben folgende fünf deutsche Provider den Vertrag unterzeichnet: Die Deutsche Telekom, Vodafone/Arcor, Alice/HanseNet, Kabel Deutschland und Telefónica/O2. In den nächsten sechs Monaten soll die Technik zur Sperrung der Seiten nach oben erklärtem Prinzip implementiert sein.</p>
<h3>Kritik</h3>
<p>Kritiker befürchten, dass der Filter entgegen der aktuellen Aussage auch zur Sperrung anderer Inhalte verwendet werden könnte, da die Provider stets die aktuelle Liste vom <abbr title="Bundeskriminalamt">BKA</abbr> beziehen, wenngleich dies eine Verletzung des <a href="http://www.bundestag.de/Parlament/funktion/gesetze/grundgesetz/gg_01.html#005">Art. 5 GG</a> darstellen würde.<br />
Weiterhin wird bemängelt, dass der Filter leicht zu umgehen sei, da er lediglich auf <abbr title="Domain Name System"><acronym title="Domain Name Server">DNS</acronym></abbr>-Basis arbeite. Ruft ein Nutzer die Seite also nicht per Domain, sondern direkt per <acronym title="Internet Protocol">IP</acronym>-Adresse auf, könnte er weiterhin Zugang erlangen. Das wäre auch nicht sonderlich umständlich, da die meisten Webserver über statische <acronym title="Internet Protocol">IP</acronym>-Adressen verfügen und der Nutzer sich so ein dauerhaftes Lesezeichen mit der <acronym title="Internet Protocol">IP</acronym>-Adresse anlegen können. Eine weitere Möglichkeit bestände darin, einen Proxy während des Besuches besagter Seiten zu verwenden.</p>
<h3>Fazit</h3>
<p>Die durch den Filter entstehenden Zensurmöglichkeiten sind beunruhigend. Sein Nutzen ist eher fraglich, da fast jeder Internetnutzer einen Proxy zu nutzen weiß.</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/04/17/internet-filter-provider-unterschreiben-vertrag/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Die erste eigene Webseite</title>
		<link>http://www.tigerapps.de/2009/04/15/die-erste-eigene-webseite/</link>
		<comments>http://www.tigerapps.de/2009/04/15/die-erste-eigene-webseite/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 15:09:52 +0000</pubDate>
		<dc:creator>Tiger</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Baukasten]]></category>
		<category><![CDATA[Lernen]]></category>

		<guid isPermaLink="false">http://www.tigerapps.de/?p=88</guid>
		<description><![CDATA[Wenn du bisher noch keine eigene Webseite hast, aber dir gern eine erstellen möchtest, jedoch noch keine Ahnung hast, wie du das machen sollst, dann bekommst du hier ein paar Hinweise und einen kleinen Überblick über die Möglichkeiten.]]></description>
			<content:encoded><![CDATA[<p>Wenn du bisher noch keine eigene <strong>Webseite</strong> hast, aber dir gern eine <strong>erstellen</strong> möchtest, jedoch noch keine Ahnung hast, wie du das machen sollst, dann bekommst du <a href="/die-erste-eigene-webseite">hier</a> ein paar Hinweise und einen kleinen Überblick über die Möglichkeiten.</p>]]></content:encoded>
			<wfw:commentRss>http://www.tigerapps.de/2009/04/15/die-erste-eigene-webseite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
