<?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>Tobis Blog</title>
	<atom:link href="http://blog.aditu.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.aditu.de</link>
	<description>Alles rund um Webentwicklung, Fotografie, PHP und das Zend Framework</description>
	<lastBuildDate>Tue, 24 Aug 2010 15:26:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Automatisiertes Priorisieren von RSS Feed Beiträgen mittels maschinellem Lernen</title>
		<link>http://blog.aditu.de/2010/07/30/automatisiertes-priorisieren-von-rss-feed-beitragen-mittels-maschinellem-lernen/</link>
		<comments>http://blog.aditu.de/2010/07/30/automatisiertes-priorisieren-von-rss-feed-beitragen-mittels-maschinellem-lernen/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 18:05:18 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[rsslounge]]></category>
		<category><![CDATA[Information Retrieval]]></category>
		<category><![CDATA[k-nächste-Nachbarn]]></category>
		<category><![CDATA[Klassifikation]]></category>
		<category><![CDATA[maschinelles lernen]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[support vektor maschinen]]></category>
		<category><![CDATA[svm]]></category>
		<category><![CDATA[Text Klassifikation]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=534</guid>
		<description><![CDATA[Ich hatte ja bereits in einem früheren Beitrag erwähnt, dass ich mich daran versucht habe den RSS Reader rsslounge lernfähig zu machen. Dazu sollte der Benutzer neue Beiträge als interessant oder uninteressant klassifizieren können. Ausgehend von der Bewertung dieser bestehenden Einträgen durch den Benutzer, sollten dann neue Feed-Beiträge automatisch weiter nach oben (Interessantes) oder nach unten [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte ja bereits in einem früheren Beitrag erwähnt, dass ich mich daran versucht habe den RSS Reader <a title="rsslounge aggregator" href="http://rsslounge.aditu.de">rsslounge</a> lernfähig zu machen. Dazu sollte der Benutzer neue Beiträge als interessant oder uninteressant klassifizieren können. Ausgehend von der Bewertung dieser bestehenden Einträgen durch den Benutzer, sollten dann neue Feed-Beiträge automatisch weiter nach oben (Interessantes) oder nach unten (Uninteressantes) einsortiert werden.</p>
<p>Hierfür habe ich verschiedene Verfahren der Test-Klassifikation aus dem Information Retrieval in Betracht gezogen und hinsichtlich ihrer Eignung bezüglich des Problems untersucht. Anschließend habe ich als Referenz die Lernfähigkeit mittels dem naiven Bayes-Klassifikators implementiert. Als zweite Lösung habe ich das k-nächste-Nachbarn Verfahren, basierend auf dem simulierten Abkühlen implementiert und untersucht, ob eine der beiden Lösungen für dieses Problem in Frage kommt. Das Ergebnis ist ist leider sehr ernüchternd.</p>
<p>Trotzdem möchte ich hierzu das Paper, das ich dazu verfasst habe, veröffentlichen. Zum einen gibt es einen guten Überblick und eine gute Einführung in die gängigen Verfahren der Text-Klassifikation, zum anderen halte ich das optimierte k-nächste-Nachbarn Verfahren für sehr leistungsfähig. Für passende Problemstellungen ist das ein praxistauglicher Lösungsweg.</p>
<p>Nachdem ich die gesamte Entwicklung von rsslounge offen gelegt habe, halte ich es für sinnvoll auch diesen Versuch (und das damit verbundene Paper) zu veröffentlichen. Vielleicht inspiriere ich jemanden, oder liefere für weitere Arbeiten eine Grundlage bzw. Informationen.</p>
<p>Das Paper als PDF zum Download (1.5MB): <a href="http://blog.aditu.de/wp-content/uploads/2010/07/Automatisiertes-Priorisieren-von-RSS-Feed-Beiträgen-mittels-maschinellem-Lernen.pdf">Automatisiertes Priorisieren von RSS Feed Beiträgen mittels maschinellem Lernen</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/07/30/automatisiertes-priorisieren-von-rss-feed-beitragen-mittels-maschinellem-lernen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>500px.com</title>
		<link>http://blog.aditu.de/2010/07/29/500px-com/</link>
		<comments>http://blog.aditu.de/2010/07/29/500px-com/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 16:35:06 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Fotografie]]></category>
		<category><![CDATA[500px.com]]></category>
		<category><![CDATA[Foto Community]]></category>
		<category><![CDATA[Fotos]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=502</guid>
		<description><![CDATA[Vor einiger Zeit bin ich auf die Fotografie Plattform 500px.com gestoßen, die eine tolle Auswahl an Fotografien enthält und ein absoluter Tipp ist. Einer der Gründer der Seite ist aus Russland und somit sind auch sehr viele Fotografen aus dieser Region auf 500px.com zu finden. Gegenüber Seiten wie deviantart.com oder deutschsprachigen Fotografie Communitys findet man [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit bin ich auf die Fotografie Plattform <a title="500px.com" href="http://500px.com/">500px.com</a> gestoßen, die eine tolle Auswahl an Fotografien enthält und ein absoluter Tipp ist. Einer der Gründer der Seite ist aus Russland und somit sind auch sehr viele Fotografen aus dieser Region auf 500px.com zu finden. Gegenüber Seiten wie deviantart.com oder deutschsprachigen Fotografie Communitys findet man auf 500px.com also ein ganz anderes Klientel. Ein Blick in die Galerie unter <a title="500px.com Popular" href="http://500px.com/popular">Popular</a> und <a title="500px.com Editors Choice" href="http://500px.com/editors">Editors Choice</a> zeigt aber sehr schnell, dass die Qualität extrem gut ist. Jeden (Hobby-) Fotografen kann ich einen Besuch nur nahelegen.</p>
<p>Folgend meine Top Favoriten von 500px.com:</p>
<p><a href="http://500px.com/photo/104316"><img class="alignnone size-thumbnail wp-image-529" title="watercourse" src="http://blog.aditu.de/wp-content/uploads/2010/07/watercourse-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/87149"><img class="alignnone size-thumbnail wp-image-528" title="walls_of_wine" src="http://blog.aditu.de/wp-content/uploads/2010/07/walls_of_wine-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/110039"><img class="alignnone size-thumbnail wp-image-527" title="suleymaniye mosque" src="http://blog.aditu.de/wp-content/uploads/2010/07/suleymaniye_mosque-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/16181"><img class="alignnone size-thumbnail wp-image-526" title="reverie" src="http://blog.aditu.de/wp-content/uploads/2010/07/reverie-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/112373"><img class="alignnone size-thumbnail wp-image-525" title="red line" src="http://blog.aditu.de/wp-content/uploads/2010/07/red_line-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/10638"><img class="alignnone size-thumbnail wp-image-524" title="o" src="http://blog.aditu.de/wp-content/uploads/2010/07/o-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/109380"><img class="alignnone size-thumbnail wp-image-523" title="misty lake" src="http://blog.aditu.de/wp-content/uploads/2010/07/misty_lake-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/2675"><img class="alignnone size-thumbnail wp-image-521" title="ctapnk n mope" src="http://blog.aditu.de/wp-content/uploads/2010/07/ctapnk_n_mope-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/86778"><img class="alignnone size-thumbnail wp-image-520" title="at sunset" src="http://blog.aditu.de/wp-content/uploads/2010/07/at_sunset-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/116968"><img class="alignnone size-thumbnail wp-image-519" title="ann" src="http://blog.aditu.de/wp-content/uploads/2010/07/ann-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/44519"><img class="alignnone size-thumbnail wp-image-518" title="about... cat" src="http://blog.aditu.de/wp-content/uploads/2010/07/about-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/30252"><img class="alignnone size-thumbnail wp-image-517" title="!" src="http://blog.aditu.de/wp-content/uploads/2010/07/a-100x100.jpg" alt="" width="100" height="100" /></a> <a href="http://500px.com/photo/27631"><img title="justify my love" src="http://blog.aditu.de/wp-content/uploads/2010/07/justify_my_love-100x100.jpg" alt="" width="100" height="100" /></a></p>
<p><a title="SSilence 500px.com" href="http://500px.com/ssilence">Mich</a> gibt es auf 500px.com natürlich auch.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/07/29/500px-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Neues Forum für rsslounge</title>
		<link>http://blog.aditu.de/2010/07/02/neues-forum-fur-rsslounge/</link>
		<comments>http://blog.aditu.de/2010/07/02/neues-forum-fur-rsslounge/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 18:20:38 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[rsslounge]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=496</guid>
		<description><![CDATA[Nachdem sich Supportanfragen mittlerweile häufen und immer wieder die gleichen Fragen aufkommen, habe ich nun ein Forum eingerichtet. Dort können Fragen gestellt und Probleme diskutiert werden. Vielleicht reagiert ja jemand schneller, zudem ist so ein Forum immer ein ganz gutes Informationsarchiv. http://rsslounge.aditu.de/forum]]></description>
			<content:encoded><![CDATA[<p>Nachdem sich Supportanfragen mittlerweile häufen und immer wieder die gleichen Fragen aufkommen, habe ich nun ein <a title="rsslounge support forum" href="http://rsslounge.aditu.de/forum/">Forum</a> eingerichtet. Dort können Fragen gestellt und Probleme diskutiert werden. Vielleicht reagiert ja jemand schneller, zudem ist so ein Forum immer ein ganz gutes Informationsarchiv.</p>
<p><a title="rsslounge support forum" href="http://rsslounge.aditu.de/forum/">http://rsslounge.aditu.de/forum</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/07/02/neues-forum-fur-rsslounge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue Version rsslounge 1.4</title>
		<link>http://blog.aditu.de/2010/06/29/neue-version-rsslounge-1-4/</link>
		<comments>http://blog.aditu.de/2010/06/29/neue-version-rsslounge-1-4/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 18:04:50 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[rsslounge]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=488</guid>
		<description><![CDATA[Nun ist es soweit: die neueste Version von rsslounge ist online. Zahlreiche neue Features sind mit an Bord und können sicherlich den ein oder anderen Skeptiker überzeugen, der bisher noch gezögert hat. Ich will nun nicht groß werben oder rumtexten und so gibt es hier einfach die wichtigsten Änderungen im Überblick: Verbesserte Oberfläche (neue Menüs für [...]]]></description>
			<content:encoded><![CDATA[<p>Nun ist es soweit: <a title="rsslounge homepage" href="http://rsslounge.aditu.de">die neueste Version von rsslounge ist online</a>. Zahlreiche neue Features sind mit an Bord und können sicherlich den ein oder anderen Skeptiker überzeugen, der bisher noch gezögert hat. Ich will nun nicht groß werben oder rumtexten und so gibt es hier einfach die wichtigsten Änderungen im Überblick:</p>
<ul>
<li>Verbesserte Oberfläche (neue Menüs für Filtereinstellungen)</li>
<li>Neue Sortiermöglichkeit nach Priorität</li>
<li>rsslounge arbeitet nun auch auf dem Internet Explorer 7+</li>
<li>rsslounge arbeitet nun auch auf dem iPad</li>
<li>Neuer öffentlicher Modus für einen Gastzugriff. Alle Einträge werden auch nicht authentifizierten Benutzern schreibgeschützt angezeigt</li>
<li>alle Änderungen gibt es im <a title="rsslounge changelog" href="http://code.google.com/p/rsslounge/wiki/Changelog">Changelog</a></li>
</ul>
<p>Wenn etwas bei euch nicht klappt, ihr Probleme beim Aktualisieren habt oder einfach so etwas los werden wollt, dann schreibt mir eine Email oder nutzt einfach das Kontaktformular auf <a title="rsslounge homepage" href="http://rsslounge.aditu.de">http://rsslounge.aditu.de</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/06/29/neue-version-rsslounge-1-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zwischenstand rsslounge</title>
		<link>http://blog.aditu.de/2010/06/20/zwischenstand-rsslounge/</link>
		<comments>http://blog.aditu.de/2010/06/20/zwischenstand-rsslounge/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 09:47:19 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[rsslounge]]></category>
		<category><![CDATA[textklassifikation]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=482</guid>
		<description><![CDATA[Nun liegt das letzte Release von rsslounge auch schon einige Monate zurück. Die Entwicklung daran ist aber nicht eingeschlafen, auch wenn die fehlenden Commits im Repository das vermuten lassen. Die letzten Monate habe ich mich daran versucht rsslounge lernfähig zu machen. Anhand von Vorgaben des Benutzers (ob bestehende Artikel interessant oder langweilig sind), sollten neue [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Nun liegt das letzte Release von rsslounge auch schon einige Monate zurück. Die Entwicklung daran ist aber nicht eingeschlafen, auch wenn die fehlenden Commits im Repository das vermuten lassen. Die letzten Monate habe ich mich daran versucht rsslounge lernfähig zu machen. Anhand von Vorgaben des Benutzers (ob bestehende Artikel interessant oder langweilig sind), sollten neue Beiträge automatisch einsortiert und interessante weiter oben eingruppiert werden. Eine Problemstellung aus der Textklassifikation, die nicht ganz trivial ist. Leider habe ich keine praxistaugliche Lösung gefunden. Zu diesem Thema und den Verfahren, die ich hierfür getestet habe, werde ich die nächsten Wochen ein Paper veröffentlichen. Vielleicht schaffe ich es ja jemanden zu inspirieren oder vermittle zumindest ein paar Erkenntnisse, die ich in diesen Zusammenhang hatte.</p>
<p>Trotzdem geht die Entwicklung weiter und so wird die neue Version neben einer Menge Fehlerbereinigungen auch neue Features haben. So wird rsslounge nun auf mit dem Internet Explorer 7+ kompatibel sein. Darüber hinaus gibt es einen öffentlichen, schreibgeschützten Modus, so dass die eigene Feeds öffentlich gemacht werden können, ohne das ein Besucher etwas verändern kann. Auf meiner ToDo Liste steht nur noch &#8220;rsslounge fit für das ipad machen&#8221; und dann wird die nächste Version online gehen. Ich bitte also nur noch um ein wenig Geduld <img src='http://blog.aditu.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/06/20/zwischenstand-rsslounge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1x.com top 100 photos</title>
		<link>http://blog.aditu.de/2010/06/12/1x-com-top-100-photos/</link>
		<comments>http://blog.aditu.de/2010/06/12/1x-com-top-100-photos/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 12:13:14 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Fotografie]]></category>
		<category><![CDATA[1x.com]]></category>
		<category><![CDATA[feature]]></category>
		<category><![CDATA[photography]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=462</guid>
		<description><![CDATA[My favorite top 100 photos of the webpage 1x.com (no special order)]]></description>
			<content:encoded><![CDATA[<p>My favorite top 100 photos of the webpage <a title="1x.com" href="http://1x.com">1x.com</a> (no special order)</p>
<p><a href="http://1x.com/photo/12945/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/12945.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/14491/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/14491.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/15556/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/15556.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/16127/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/16127.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/18186/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/18186.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/18373/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/18373.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/18398/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/18398.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/19800/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/19800.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/19851/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/19851.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/20003/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/20003.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/22392/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/22392.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/22810/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/22810.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/22853/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/22853.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/23153/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/23153.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/23731/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/23731.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33588/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33588.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/25965/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/25965.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/32942/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32942.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/26775/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/26775.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/27155/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/27155.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/27288/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/27288.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/27337/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/27337.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/27399/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/27399.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/27593/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/27593.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/27882/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/27882.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33576/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33576.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/28091/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28091.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/28214/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28214.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/28314/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28314.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33833/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33833.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/28621/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28621.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/28737/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28737.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/28901/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28901.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/28969/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28969.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/28987/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28987.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/28999/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28999.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/29053/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29053.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/29094/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29094.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/29279/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29279.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/9208/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/9208.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/29420/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29420.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/29475/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29475.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/29613/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29613.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/29722/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29722.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/29862/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29862.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/9946/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/9946.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/29895/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29895.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/29960/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29960.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/29991/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29991.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30002/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30002.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30043/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30043.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30058/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30058.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30063/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30063.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30099/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30099.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30124/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30124.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30137/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30137.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30341/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30341.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30403/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30403.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30404/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30404.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30609/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30609.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30630/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30630.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30749/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30749.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30836/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30836.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/30952/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30952.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/30964/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/30964.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/31092/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31092.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/31129/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31129.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/31192/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31192.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/31270/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31270.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/32067/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32067.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/31376/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31376.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/31657/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31657.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/31731/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31731.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/31789/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31789.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/31837/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31837.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/31861/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31861.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/31939/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31939.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/31951/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31951.jpg" alt="1x.com image" /></a></p>
<p><a href="http://1x.com/photo/32279/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32279.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33575/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33575.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/32306/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32306.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/32430/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32430.jpg" alt="1x.com image" /></a></p>
<p><a href="http://1x.com/photo/33000/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33000.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33100/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33100.jpg" alt="1x.com image" /></a><br />
<a href="http://1x.com/photo/33379/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33379.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33380/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33380.jpg" alt="1x.com image" /></a></p>
<p><a href="http://1x.com/photo/33380/"></a><a href="http://1x.com/photo/28386/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28386.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/28067/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/28067.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/32223/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32223.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/25679/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/25679.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/34101/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/34101.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/34155/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/34155.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33865/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33865.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/33687/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/33687.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/32928/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32928.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/31196/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/31196.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/29840/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29840.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/26624/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/26624.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/32028/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/32028.jpg" alt="1x.com image" /></a><a href="http://1x.com/photo/29161/"><img src="http://blog.aditu.de/wp-content/uploads/2010/06/1x.com/29161.jpg" alt="1x.com image" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/06/12/1x-com-top-100-photos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>blog.aditu.de auch für iPhone &amp; Co.</title>
		<link>http://blog.aditu.de/2010/05/23/blog-aditu-de-auch-fur-iphone-co/</link>
		<comments>http://blog.aditu.de/2010/05/23/blog-aditu-de-auch-fur-iphone-co/#comments</comments>
		<pubDate>Sun, 23 May 2010 13:59:19 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Theme]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=449</guid>
		<description><![CDATA[Bei dem iPhone und iPad und iWasweißichwas-Hype kommt man ja als Webentwickler nicht mehr darum herum auch aufzurüsten und seinen Content auch auf Briefmarkengröße anzubieten. Bei WordPress ist das glücklicherweise sehr einfach. Das Plugin WPtouch erweitert den Blog und stellt auf iPhones ein passendes und optimiertes Theme zur Verfügung. Das habe ich für diesen Blog [...]]]></description>
			<content:encoded><![CDATA[<p>Bei dem iPhone und iPad und iWasweißichwas-Hype kommt man ja als Webentwickler nicht mehr darum herum auch aufzurüsten und seinen Content auch auf Briefmarkengröße anzubieten. Bei WordPress ist das glücklicherweise sehr einfach. Das Plugin <a title="WPtouch" href="http://www.bravenewcode.com/products/wptouch/">WPtouch</a> erweitert den Blog und stellt auf iPhones ein passendes und optimiertes Theme zur Verfügung. Das habe ich für diesen Blog mal gemacht und bin mit dem Ergebnis ganz zufrieden. Also: wer jetzt mobil auf blog.aditu.de surfen will kann das jetzt problemlos machen <img src='http://blog.aditu.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/05/23/blog-aditu-de-auch-fur-iphone-co/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>deviantArt update auf Version 7</title>
		<link>http://blog.aditu.de/2010/05/22/deviantart-update-auf-version-7/</link>
		<comments>http://blog.aditu.de/2010/05/22/deviantart-update-auf-version-7/#comments</comments>
		<pubDate>Sat, 22 May 2010 17:26:16 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[deviantArt]]></category>
		<category><![CDATA[Version 7]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=442</guid>
		<description><![CDATA[Die Nachricht ist zwar schon ein paar Tage alt, aber ich will dennoch nicht darauf verzichten darüber zu bloggen: deviantArt hat eine neue Version seiner Seite online gestellt. Den offiziellen Newsbeitrag mit den Neuerungen und weiteren Informationen findet ihr hier: &#8220;deviantArt Launches Version 7&#8220;. Seit einiger Zeit ist die neue Version schon als Beta online [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><a title="deviantart" href="http://www.deviantart.com"><img class="alignnone size-full wp-image-443" title="deviantart Version 7" src="http://blog.aditu.de/wp-content/uploads/2010/05/deviantartv7.jpg" alt="" width="300" height="97" /></a></p>
<p>Die Nachricht ist zwar schon ein paar Tage alt, aber ich will dennoch nicht darauf verzichten darüber zu bloggen: <a title="deviantart" href="http://www.deviantart.com">deviantArt</a> hat eine neue Version seiner Seite online gestellt. Den offiziellen Newsbeitrag mit den Neuerungen und weiteren Informationen findet ihr hier: &#8220;<a href="http://news.deviantart.com/article/117787/">deviantArt Launches Version 7</a>&#8220;.</p>
<p>Seit einiger Zeit ist die neue Version schon als Beta online gewesen, so habe ich also alles schon einige Wochen austesten können. Die herausragendste Neuerung ist das erleichterte Navigieren durch die Galerien. Die Anzeigebereiche wurden vergrößert, das Wählen des Zeitfensters wurde durch ein komfortables Dropdown Menü ersetzt (das ich in einer ähnlichen Form auch in der nächsten Version von <a title="rsslounge" href="http://rsslounge.aditu.de">rsslounge</a> einführen werde) und das Anzeigen der Bilder geht flüssiger und benötigt keinen kompletten Seitenreload, was einen angenehmen und schnellen Eindruck hinterlässt. Auch das neue, schlichtere Design kann überzeugen.</p>
<p>Ich kann nur jedem Empfehlen einen Blick darauf zu werden. Man bekommt echt Lust sich durch zu klicken. Für mich als langjährigen deviantArt-Fan steht das sowieso immer mal wieder auf dem Plan <img src='http://blog.aditu.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/05/22/deviantart-update-auf-version-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ServerBridge zwischen PHP und C/C++</title>
		<link>http://blog.aditu.de/2010/05/15/serverbridge-zwischen-php-und-cc/</link>
		<comments>http://blog.aditu.de/2010/05/15/serverbridge-zwischen-php-und-cc/#comments</comments>
		<pubDate>Sat, 15 May 2010 11:11:14 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[mongoose]]></category>
		<category><![CDATA[Zend Server]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=428</guid>
		<description><![CDATA[Jetzt ist es schon wieder einige Zeit her, dass ich hier etwas geschrieben habe und ich denke ich gebe mal ein Lebenszeichen von mir. Natürlich gibt es zahlreiche interessante Themen in meiner Queue zum bloggen, aber wie immer findet man nicht die Zeit oder nötige Ruhe dazu. Die Problemstellung Nun aber zum Thema: für ein [...]]]></description>
			<content:encoded><![CDATA[<p>Jetzt ist es schon wieder einige Zeit her, dass ich hier etwas geschrieben habe und ich denke ich gebe mal ein Lebenszeichen von mir. Natürlich gibt es zahlreiche interessante Themen in meiner Queue zum bloggen, aber wie immer findet man nicht die Zeit oder nötige Ruhe dazu.</p>
<h2>Die Problemstellung</h2>
<p>Nun aber zum Thema: für ein aktuelles Projekt benötige ich, von meiner PHP Webapplikation heraus, den Zugriff auf einige Hardwarekomponenten. Zudem will ich einige Fremdbibliotheken verwenden, die sehr rechenintensive Aufgaben übernehmen und auch nur in C++ zur Verfügung stehen. Die Frage ist also: wie kann ich diese Komponenten an mein PHP Programm ankoppeln?</p>
<p>Für Java gibt es eine ganz gute <a title="PHP Java Bridge" href="http://php-java-bridge.sourceforge.net/pjb/">Server Bridge</a>, die innerhalb der Java Virtual Machine einfach einen kleinen Server startet, der XML Anfragen entgegen nimmt, stellvertretend ausführt und das Ergebnis, auch wieder über eine XML Kommunikationsschnittstelle, zur Verfügung stellt. Die nötige PHP Klasse wird ebenfalls durch den Java Server direkt zur Verfügung gestellt. Eine ähnliche Bridge Lösung bringt auch der <a title="Zend Server Community Edition" href="http://www.zend.com/de/products/server-ce/">Zend Server</a> bereits out of the box mit.</p>
<p>Für C++ habe ich so eine Lösung nicht gefunden und als weiteren Ansatz überlegt, eine PHP Extension zu entwickeln. Sowohl für Linux, als auch für Windows, gibt es hier Tutorials (siehe &#8220;<a title="Extension-Entwicklung unter WAP" href="http://www.phpforum.de/forum/showthread.php?t=244096">Extension-Entwicklung unter WAP</a>&#8220;, &#8220;<a title="Wrapping C++ Classes in a PHP Extension" href="http://devzone.zend.com/article/4486-Wrapping-C-Classes-in-a-PHP-Extension">Wrapping C++ Classes in a PHP Extension</a>&#8221; oder &#8220;<a title="Extension Writing Part I: Introduction to PHP and Zend" href="http://devzone.zend.com/article/1021">Extension Writing Part I: Introduction to PHP and Zend</a>&#8220;). Allerdings ist, neben den Tutorials, der ganze Vorgang nicht gut dokumentiert und scheinbar muss das Kompilat der Extension exakt dem des verwendeten PHP Kompilats entsprechen. Insgesamt also eher eine wackelige Angelegenheit.</p>
<h2>Lösungsansatz</h2>
<p>Meine Lösung ist hingegen pragmatisch und verfolgt eine eher losere Kopplung: Meine C++ Komponenten werden in ein eigenständiges Programm ausgelagert, das selbst, über einen gewöhnlichen HTTP Server, die benötigten Dienste zur Verfügung stellt. Dabei orientiere ich mich an dem REST Architektur Prinzip und binde jeweils eine Teil-Funktionalität an eine feste URL. Die Parameter und Rückgabewerte werden mittels JSON kodiert. Von PHP Seite aus, wird der Aufruf der C++ Komponenten sauber gekapselt, so dass für das PHP Programm der Eindruck entsteht, dass eine gewöhnliche Funktion aufgerufen wird.</p>
<p>Welche Vor- und Nachteile hat das Vorgehen? Zum einen ist die in C++ implementierte Funktionalität sauber gekapselt und von der Webapplikation getrennt. Dadurch wird die Software leichter wartbar. Durch eine saubere Schnittstellendefinition, kann die C++ Serverkomponente auch unabhängig vom Wissen über die PHP Applikation gepflegt werden. Zum anderen entsteht aber ein zusätzlicher Aufwand (mit zusätzlichen Fehlerquellen). Die Schnittstelle muss definiert und implementiert werden, ein Fehlerhandling muss durchgeführt werden und eine zusätzliche Serverapplikation muss gestartet werden, was hinsichtlich der Sicherheit berücksichtigt werden muss. Dennoch halte ich die Lösung für die eleganteste, denn sie nutzt genau die Vorteile der Vernetzung und der losen Kopplung aus. So könnte die C++ Komponente bei höherer Last auch leicht auf einen eigenen Server umgezogen oder unabhängig von der Webapplikation betrieben werden.</p>
<h2>Implementierung</h2>
<p>In der Theorie hört sich natürlich immer alles ganz nett an, aber wie sieht das mit dem HTTP Server aus? Hier gibt es eine hervorragende C++ Bibliothek, mit der sich ohne großen Aufwand eine solcher HTTP Server realisieren lässt. <a title="mongoose" href="http://code.google.com/p/mongoose/">mongoose</a> heißt das Wunderding, steht unter der MIT Lizenz unter <a title="mongoose" href="http://code.google.com/p/mongoose/">Google Code</a> zur Verfügung. Es unterstützt Windows, Linux und Mac OS X, bietet eine CGI Schnittstelle, SSL Verschlüsselung, ACL, eine saubere API und ist nicht größer als 60 kB. Die Dokumentation ist zwar recht knapp, aber dank Beispiele findet man sich schnell zurecht und auch die API Beschreibung ist vollkommen ausreichend.</p>
<p>Will man einen eigenen Server starten, so muss zuerst ein neuer Context erzeugt werden:</p>
<pre class="brush: cpp;">
struct mg_context* ctx;
ctx = mg_start();
</pre>
<p>Mit <em>mg_set_options</em>, werden die Servereinstellungen geändert. Folgende zwei Zeilen deaktivieren das Directory Listing und setzten 8080 als Port.</p>
<pre class="brush: cpp;">
mg_set_option(ctx, &quot;dir_list&quot;, &quot;no&quot;);
mg_set_option(ctx, &quot;ports&quot;, &quot;8080&quot;);
</pre>
<p>Aus Sicherheitsgründen erlaube ich nur einen Zugriff vom selben Rechner aus, also erlaube nur die IP Adresse 127.0.0.1:</p>
<pre class="brush: cpp;">
mg_set_option(ctx, &quot;acl&quot;, &quot;-0.0.0.0,+127.0.0.1&quot;);
</pre>
<p>Mit <em>mg_set_uri_callback</em> kann ein Pointer auf eine eigene Funktion an eine URL gebunden werden. Diese wird aufgerufen, wenn der Client die URL aufruft, wobei die URL auch Wildcards enthalten kann.</p>
<pre class="brush: cpp;">
mg_set_uri_callback(ctx, 'dosomething', &amp;Server::dosomething, NULL);
</pre>
<p>Als dritter Parameter darf ein Pointer (<em>void*</em>) auf ein beliebiges Objekt übergeben werden. Die Callback Methode bekommt dazu alle notwendigen Parameter, wie die aktuelle Verbindung, den aktuellen Request und das zuvor übergebene Objekt (hier <em>NULL</em>) übergeben.</p>
<pre class="brush: cpp;">
void Server::capture(struct mg_connection *conn,
 const struct mg_request_info *request_info,
 void *user_data) {
char* param = mg_get_var(conn, &quot;param&quot;);
mg_printf(conn, &quot;%s&quot;, &quot;HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n&quot;);
}
</pre>
<p>Mit <em>mg_printf</em> kann dann eine Antwort an den Client gesendet werden. Hier als einfaches Beispiel einfach nur ein OK (HTTP 200). In meinem Szenario wird hier der generierte JSON Text zurück gegeben. Mit mg_get_var können übergebene Parameter (POST, GET) ausgelesen werden. Wichtig: um memory leaks zu vermeiden, müssen diese mit <em>mg_free</em> wieder freigegeben werden.</p>
<p>Natürlich ist das nur die eine Hälfte. PHP muss jetzt auch Funktionen, auf dem Server, aufrufen können. Dazu kommt der Zend_Http_Client zum Einsatz. Dieser ist im Zend Framework enthalten, mit etwas Frickelei kann er aber auch aus dem Gesamtpaket heraus gepickt werden. Da ich aber das Zend Framework für die ganze Anwendung nutze, ist das Aufrufen der URL und das Decodieren des JSON Strings in einen Action Helper ausgelagert, der gleichzeitig eine einfache Fehlerbehandlung durchführt:</p>
<pre class="brush: php;">
class JsonHttpHelper extends Zend_Controller_Action_Helper_Abstract {
   public function get($url, $params = array()) {
      try {
         $client = new Zend_Http_Client($url);
         foreach($params as $param=&gt;$value)
            $client-&gt;setParameterPost($param, $value);
            $response = $client-&gt;request('POST');
            $res = Zend_Json::decode($response-&gt;getBody());
            if($response-&gt;isSuccessful()) {
               return $res;
            } else {
               return array(&quot;error&quot; =&gt; &quot;request not successfully: &quot;.$res[&quot;error&quot;]);
            }
      } catch(Exception $e) {
         return array(&quot;error&quot; =&gt; $e-&gt;getMessage());
      }
 }
}
</pre>
<p>Bisher bin ich mit der Lösung sehr zufrieden. Besonders mongoose kann ich nur wärmstens empfehlen. Auch von der Verarbeitungsgeschwindigkeit ist das Ergebnis zufriedenstellend und kann sich sehen lassen. Um den Rahmen nicht zu sprengen, habe ich die serverseitige Generierung und Verarbeitung von JSON außen vor gelassen. Hier gibt es aber auch zahlreiche Bibliotheken, so dass die Suche nicht schwer fallen dürfte.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/05/15/serverbridge-zwischen-php-und-cc/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mit Hilfe von phpQuery fremde Seiten verarbeiten</title>
		<link>http://blog.aditu.de/2010/03/18/mit-hilfe-von-phpquery-fremde-seiten-verarbeiten/</link>
		<comments>http://blog.aditu.de/2010/03/18/mit-hilfe-von-phpquery-fremde-seiten-verarbeiten/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 18:21:19 +0000</pubDate>
		<dc:creator>Tobi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webentwicklung]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[phpquery]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.aditu.de/?p=415</guid>
		<description><![CDATA[Ich habe in diesem Blog ja bereits einmal darüber geschrieben, wie man mit Hilfe des Zend Frameworks fremde Seiten verarbeiten kann. Einen zweiten, sehr eleganten Weg, wie man fremde HTML Seiten verarbeiten kann, bietet die Bibliothek phpQuery. Diese greift zwar auch auf das Zend Framework zurück, bringt davon aber nur zwei Teilkomponenten mit und ist [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe in diesem Blog ja bereits einmal darüber geschrieben, <a title=" Mit Hilfe des Zend Frameworks fremde Seiten verarbeiten" href="http://blog.aditu.de/2008/12/02/mit-hilfe-des-zend-frameworks-fremde-seiten-verarbeiten/">wie man mit Hilfe des Zend Frameworks fremde Seiten verarbeiten kann</a>. Einen zweiten, sehr eleganten Weg, wie man fremde HTML Seiten verarbeiten kann, bietet die Bibliothek <a title="phpQuery" href="http://code.google.com/p/phpquery/">phpQuery</a>. Diese greift zwar auch auf das Zend Framework zurück, bringt davon aber nur zwei Teilkomponenten mit und ist dadurch viel schlanker.</p>
<p>phpQuery greift die Vorgehensweise von <a title="jQuery" href="http://www.jquery.com">jQuery</a> auf und bietet eine zentrale Funktion an, mit deren Hilfe DOM Elemente in einem Dokument selektiert werden können. Beispielsweise liefert die folgende Funktion alle &#8216;ul&#8217; Elemente.</p>
<pre class="brush: php;">
$uls = pq('ul');
</pre>
<p>Mit phpQuery hat man natürlich auch die Möglichkeit, wie bei jQuery auch DOM Elemente zu manipulieren, zu löschen oder neue einzufügen.</p>
<p>Will man also beispielsweise alle Suchergebnisse von Google abgreifen, so reicht folgender Code aus, der dann alle gefundenen URLs ausgibt:</p>
<pre class="brush: php;">
require('phpQuery/phpQuery.php');
$q = &quot;phpquery&quot;;
$doc = phpQuery::newDocument(
	file_get_contents('http://www.google.com/search?q='.urlencode($q))
);
foreach(pq('.g', $doc) as $entry) {
	$url = pq($entry)-&gt;find('.r a')-&gt;attr('href');
	$title = pq($entry)-&gt;find('.r a')-&gt;html();
	echo '&lt;a href=&quot;'.$url.'&quot;&gt;'.$title.'&lt;/a&gt;&lt;br /&gt;';
}
</pre>
<p>Mir gefällt der Ansatz, die Funktionalität von jQuery teilweise in die Welt von PHP zu übertragen. Jeder, der in irgendeiner Form HTML in PHP verarbeiten muss, sollte sich diese Bibliothek auf jeden Fall genauer ansehen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aditu.de/2010/03/18/mit-hilfe-von-phpquery-fremde-seiten-verarbeiten/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
