<?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>Funzis chaotische Welt &#187; Coding</title>
	<atom:link href="http://www.funzi.org/category/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.funzi.org</link>
	<description>yet another outdated weblog</description>
	<lastBuildDate>Tue, 02 Mar 2010 11:42:12 +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>freie Torten für alle</title>
		<link>http://www.funzi.org/2008/11/23/freie-torten-fuer-alle/</link>
		<comments>http://www.funzi.org/2008/11/23/freie-torten-fuer-alle/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 20:59:01 +0000</pubDate>
		<dc:creator>Funzi</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[dieses Internet...]]></category>

		<guid isPermaLink="false">http://www.funzi.org/?p=97</guid>
		<description><![CDATA[Da die Schnellstraße, die ich normalerweise benutze um an die Uni zu kommen, mit Baustellen vollgepflastert ist und auch so langsam aber sicher der Winter hier Einzug erhält, greife ich wieder verstärkt auf den ÖPNV zurück. Ich bin einfach sehr viel entspannter, als wenn ich morgens nicht im Stau stehe. Ein weiterer Vorteil ist, dass [...]]]></description>
			<content:encoded><![CDATA[<p>Da die Schnellstraße, die ich normalerweise benutze um an die Uni zu kommen, mit Baustellen vollgepflastert ist und auch so langsam aber sicher der Winter hier Einzug erhält, greife ich wieder verstärkt auf den ÖPNV zurück. Ich bin einfach sehr viel entspannter, als wenn ich morgens nicht im Stau stehe. Ein weiterer Vorteil ist, dass ich während der Zugfahrt lesen kann.<span id="more-97"></span></p>
<p>Ich habe einen interessanten Artikel über die <a title="Developer's Guide - Google Chart API" href="http://code.google.com/apis/chart/" target="_blank">Google Chart API</a> gelesen. Es ist eine ziemlich coole Sache, wenn man Diagramme aller Art einfach über die URL generieren kann. Natürlich war meine erste Frage, ob es nicht auch eine freie Alternative dazu gibt. Und ja, die gibt es: <a title="Eastwood Charts" href="http://www.jfree.org/eastwood/" target="_blank">Eastwood Charts</a>.</p>
<p>Es handelt sich bei Eastwood Charts um eine freie Implementation der Google Chart API, die auf JFreeChart zurückgreift. Auf der <a href="http://www.jfree.org/eastwood/samples.html" target="_blank">Beispielseite</a> von Eastwood Charts sieht man beide im direkten Vergleich. Das hervorstechendste Feature von Eastwood Charts ist, dass die Breite variabel gehandhabt wird, was im Vergleich zu Google ziemlich cool ist, da man da Breiten durchprobieren muss, wenn man mal längere Beschriftungen hat.</p>
<p>Leider gibt es keinen öffentlich erreichbaren Eastwood Charts Server, so wie Google einen hat. Aber das hat eigentlich nur dafür gesorgt, dass wir nun unter <strong>http://charts.gathered-geeks.org</strong> einen eigenen hosten. Ich hatte mich erst an Tomcat5 versucht. Da der für nur ein Servlet allerdings zu viel Konfigurationsaufwand bedeutete, hat <a href="http://www.xenoworld.de/" target="_blank">Xeno</a> mir <a title="Jetty WebServer" href="http://www.mortbay.org/jetty/" target="_blank">Jetty</a> empfohlen. Dadurch hatte ich einen vollen Webserver für Servlets mit sehr geringem Konfigurationsaufwand. Nach ein bisschen .htaccess-Magie läuft das ganze nun unter der o.g. URL.</p>
<p>Vielleicht zum Abschluss noch das obligatorische (live generierte) Hello-World-Chart, mit dem auch Google auf seiner Seite aufwartet:</p>
<p style="text-align: center;"><img title="Eastwood Charts" src="http://chart.gathered-geeks.org/chart?cht=p3&amp;chd=t:60,40&amp;chs=250x100&amp;chl=Hello|World" alt="" width="250" height="100" /></p>
<p>Bis zum nächsten mal.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.funzi.org/2008/11/23/freie-torten-fuer-alle/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>von Schuhen, Reinigungsmitteln, Verliesen und gebirgigen Zentren&#8230;</title>
		<link>http://www.funzi.org/2008/11/17/von-schuhen-reinigern-und-gebirgigen-zentren/</link>
		<comments>http://www.funzi.org/2008/11/17/von-schuhen-reinigern-und-gebirgigen-zentren/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 21:57:19 +0000</pubDate>
		<dc:creator>Funzi</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Informatik]]></category>
		<category><![CDATA[Synchronkartei]]></category>

		<guid isPermaLink="false">http://www.funzi.org/?p=91</guid>
		<description><![CDATA[Ich habe mich die letzten zwei Tage etwas intensiver mit JQuery beschäftigt.Es wurden zwar noch keine Schuhe nach mir benannt, aber ich muss sagen, dass JQuery einfach das genialste AJAX-Framework ist, was man da draußen so findet. Natürlich haben diese Tests mit der Synchronkartei zu tun, allerdings handelte es sich um Adminfunktionen &#8211; Sorry an [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe mich die letzten zwei Tage etwas intensiver mit JQuery beschäftigt.<span id="more-91"></span>Es wurden zwar noch keine Schuhe nach mir benannt, aber ich muss sagen, dass JQuery einfach das genialste AJAX-Framework ist, was man da draußen so findet. Natürlich haben diese Tests mit der Synchronkartei zu tun, allerdings handelte es sich um Adminfunktionen &#8211; Sorry an dieser Stelle <img src='http://www.funzi.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Letztes Wochenende war ich auf einem Munchkin-Spieleabend. Delo, der das ganze veranstaltete hat sein Munchkin mit ein paar selbstkreirten Karten erweitert. Ich war sehr froh, als ich sein &#8220;Vicodin&#8221; (+6 Bonus, kein, +666 wenn der Nachname House ist) im Dungeon gefunden habe. Durch eine Karte, die es erlaubt von einem anderen Mitspieler eine Karte zu stehlen (unter der Voraussetzung, dass sie zu diesem Zeitpunkt den Unterschied zwischen Sieg und Niederlage gegen das Monster ausmacht) entwendete mir Johannes mein Vicodin. Aus Wut verstärkte ich dann das Monster, das gegen ihn kämpfte, so dass ich ihn letztendlich dazu &#8220;überreden&#8221; könnte ihm zu helfen, wenn ich mein Vicodin wiederbekomme. Kaum war ich im Kampf, verwandelte ich das Monster, so dass es keine Stufen gab, nahm mir mein Vicodin wieder und hatte bis zum Ende dieses Spiels einen neuen Feind&#8230; <img src='http://www.funzi.org/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Das nächste Wochenende ist mit ein paar Arbeitskollegen wieder ein Ausflug nach Bottrop geplant. Ich hoffe, dass ich dieses mal ein paar blaue Flecken weniger mit nach Hause bringe&#8230;</p>
<p>Zum Abschluss kann ich noch sagen, dass ich nun sage und schreibe 23 Kanji beherrsche. Mühsam ernährt sich das Eichhörnchen&#8230;</p>
<p>またらしゅ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.funzi.org/2008/11/17/von-schuhen-reinigern-und-gebirgigen-zentren/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress 2.6</title>
		<link>http://www.funzi.org/2008/07/16/wordpress-26/</link>
		<comments>http://www.funzi.org/2008/07/16/wordpress-26/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 11:25:35 +0000</pubDate>
		<dc:creator>Funzi</dc:creator>
				<category><![CDATA[Allgemeines]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.funzi.org/?p=32</guid>
		<description><![CDATA[Hey guys, guess what!
What?
I just uploaded the new version of the WordPress software.
No way!
Yes, it&#8217;s true and I am so totaly excited about it.
Sweet&#8230;
Yes, I now can do some pretty intense versioning things!
What was wrong with WordPress 2.5?
Nothing, but they immediately stopped supporting the &#8220;old&#8221; version.
No way!
]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Hey guys, guess what!</p>
<p style="text-align: right;">What?</p>
<p style="text-align: left;">I just uploaded the new version of the WordPress software.</p>
<p style="text-align: right;">No way!</p>
<p style="text-align: left;">Yes, it&#8217;s true and I am so totaly excited about it.</p>
<p style="text-align: right;">Sweet&#8230;</p>
<p style="text-align: left;">Yes, I now can do some pretty intense versioning things!</p>
<p style="text-align: right;">What was wrong with WordPress 2.5?</p>
<p style="text-align: left;">Nothing, but they immediately stopped supporting the &#8220;old&#8221; version.</p>
<p style="text-align: right;">No way!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.funzi.org/2008/07/16/wordpress-26/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Piwik</title>
		<link>http://www.funzi.org/2008/06/19/piwik/</link>
		<comments>http://www.funzi.org/2008/06/19/piwik/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 18:09:42 +0000</pubDate>
		<dc:creator>Funzi</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.funzi.org/?p=29</guid>
		<description><![CDATA[Ein Arbeitskollege hat mich heute auf Piwik aufmerksam gemacht. Es scheint wohl ein noch sehr frisches Web Analytics Tool zu sein, allerdings hat es gegenüber GoogleAnalytics drei entscheidende Vorteile:

es ist Open-Source-Software
die Daten landen auf dem eigenen Server und nicht bei Google
es verfügt über eine API, über die man alle Statistiken abfragen kann

Ich werde selbstverständlich im [...]]]></description>
			<content:encoded><![CDATA[<p>Ein Arbeitskollege hat mich heute auf <a title="Piwik - Web analytics - Open Source" href="http://piwik.org/" target="_blank">Piwik</a> aufmerksam gemacht. Es scheint wohl ein noch sehr frisches Web Analytics Tool zu sein, allerdings hat es gegenüber GoogleAnalytics drei entscheidende Vorteile:</p>
<ol>
<li>es ist Open-Source-Software</li>
<li>die Daten landen auf dem eigenen Server und nicht bei Google</li>
<li>es verfügt über eine API, über die man alle Statistiken abfragen kann</li>
</ol>
<p>Ich werde selbstverständlich im Laufe des Abends GoogleAnalytics auf meiner Seite durch Piwik ersetzen. Bei der Synchronkartei wird das gleiche passieren.</p>
<p>バイバイ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.funzi.org/2008/06/19/piwik/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Land zu IP-Adresse ermitteln</title>
		<link>http://www.funzi.org/2008/04/14/land-zu-ip-adresse-ermitteln/</link>
		<comments>http://www.funzi.org/2008/04/14/land-zu-ip-adresse-ermitteln/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 22:01:41 +0000</pubDate>
		<dc:creator>Funzi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.funzi.org/?p=8</guid>
		<description><![CDATA[In diesem Artikel zeige ich, wie man effizient das zugehörige Land einer IP-Adresse ermitteln kann.
Als erstes brauche ich eine kostenlose Datenbasis. Nach einiger Zeit des Suchens halte ich IP-to-Country.com für die beste Quelle. Ich lade mir die IP-to-Country Database herunter und entpacke sie.
Da ich nicht jedes mal die gesamte CSV-Datei durchsuchen möchte, erstelle ich eine [...]]]></description>
			<content:encoded><![CDATA[<p>In diesem Artikel zeige ich, wie man effizient das zugehörige Land einer IP-Adresse ermitteln kann.<span id="more-8"></span></p>
<p>Als erstes brauche ich eine kostenlose Datenbasis. Nach einiger Zeit des Suchens halte ich <a href="http://ip-to-country.webhosting.info/">IP-to-Country.com</a> für die beste Quelle. Ich lade mir die <i>IP-to-Country Database</i> herunter und entpacke sie.<br />
Da ich nicht jedes mal die gesamte CSV-Datei durchsuchen möchte, erstelle ich eine MySQL-Tabelle <i>ip_locations</i>:</p>
<pre><code>CREATE TABLE `ip_locations` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `from` int(10) unsigned NOT NULL,
  `to` int(10) unsigned NOT NULL,
  `country` char(2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `from` (`from`,`to`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;</code></pre>
<p>Die Felder <i>from</i> und <i>to</i> beinhalten die IP-Adresse als long integer (also kein dotted quad) und werden gemeinsam indiziert. Im Feld <i>country</i> wird der Ländercode im ISO3166-Format gespeichert.<br />
Mit einer kleinen PHP-Funktion lese ich die CSV-Datei in die Datenbank ein:</p>
<pre><code>function ip2country_csv($filename)
{
  $array = file($filename);
  foreach ($array as $row)
  {
    if (preg_match('/^"([0-9]{1,10})","([0-9]{1,10})",'
                 . '"([A-Z]{2})".+$/', $row, $tmp))
    {
      mysql_query("INSERT INTO
                     `ip_locations`
                   SET
                     `from` = '{$tmp[1]}',
                     `to` = '{$tmp[2]}',
                     `country` = '{$tmp[3]}'");
    }
  }
}</code></pre>
<p>Jetzt kann ich mit einer einfachen MySQL-Anfrage das Land ermitteln:</p>
<pre><code>SELECT
  `country`
FROM
  `ip_locations`
WHERE
  &lt;IP&gt; BETWEEN `from` AND `to`;</code></pre>
<p>Natürlich muss man <i>&lt;IP&gt;</i> vorher durch die gesuchte IP-Adresse ersetzen. Diese kann man mit der PHP-Funktion ip2long() leicht von dottet quad in long integer umwandeln.</p>
<p>Angenommen ich hätte eine Session-Tabelle, die die IP-Adresse als long integer beinhaltet. Dann könnte ich wie folgt effizient das Land ermitteln:</p>
<pre><code>SELECT
  `sessions`.*
FROM
  `sessions` LEFT OUTER JOIN `ip_locations` ON  `sessions`.`ip`
     BETWEEN `ip_locations`.`from` AND `ip_locations`.`to`;</code></pre>
<p>Das sollte für&#8217;s Erste reichen. Man kann diese Angaben dann mit einer Flaggen-Bild-Bibliothek noch schön erweitern, so dass man in einer Tabelle die Landesflagge ausgeben kann.</p>
<p><strong>PS:</strong> Mir geht an WordPress ziemlich auf die Nerven, dass es meine Leerzeichen in den Code-Abschnitten beim Speichern verschluckt. Wenn jemand ein praktisches Plugin kennt, was mir bei dieser Sache hilft, wäre ich sehr froh.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.funzi.org/2008/04/14/land-zu-ip-adresse-ermitteln/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
