<?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>PHP hates me - Der PHP Blog &#187; Ein Herz für Blogger</title>
	<atom:link href="http://www.phphatesme.com/archives/category/ein-herz-fur-blogger/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phphatesme.com</link>
	<description>PhpHatesMe, but that&#039;s ok!</description>
	<lastBuildDate>Sat, 11 Feb 2012 10:13:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tobias Zeisings Selfoss</title>
		<link>http://www.phphatesme.com/blog/tools/tobias-zeisings-selfoss/</link>
		<comments>http://www.phphatesme.com/blog/tools/tobias-zeisings-selfoss/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 06:00:09 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Ein Herz für Blogger]]></category>
		<category><![CDATA[Tools & Helferlein]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=11692</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><em>Früher hatte ich mal den Aufruf gestartet, dass jeder, der ein eigenes Projekt hat und regelmäßig phphatesme ließt doch gerne seine Produkte hier vorstellen darf. Tobias Zeising ist dem Aufruf bereits ein <a href="http://www.phphatesme.com/blog/ein-herz-fur-blogger/rsslounge-von-tobias-zeising/">zweites Mal</a> gefolgt und stellt heute sein selfoss vor. Viel Spaß damit.</em></p>
<p>Ob Facebook, Google+ oder Twitter: alle verwenden als zentrales Element einen Stream, eine Pinnwand oder einen Newsbereich mit den aktuellsten Meldungen. Egal wie man es nennt, es handelt sich dabei immer um die erste Anlaufstelle über die sich der Benutzer über aktuelle Themen informieren kann, einen Überblick bekommt und mit wenigen Blicken weiß, was los ist. Ein Konzept, das so simpel wie nützlich ist. Nur ist das immer begrenzt auf die jeweilige Plattform und am Ende muss man sich durch die verschiedenen Netzwerke und Anwendungen klicken. Das schöne Prinzip vom einzelnen Informationsstrom ist damit dahin.</p>
<p>Nachdem ich schon länger einige interessante Frameworks und Bibliotheken testen wollte, war das für mich Grund genug eine Webanwendung zu bauen, welche aus den verschiedensten Quellen Informationen abgreift und in einem einzelnen Stream präsentiert. Praktisch ein beständiger Fluss an Informationen, weshalb ich die Anwendung nach dem schönen isländischen Wasserfall Selfoss benannt habe. Ein Bild das sehr gut passt, denn der Selfoss besteht aus zahlreichen kleinen Wasserfällen, also sozusagen aus viele einzelnen Informationsströme, die zusammen doch in einem Fluss münden. Genau so sollte das Programm funktionieren: Beliebige Quellen können als Plugins (ich habe sie spouts getauft) eingehängt werden und den Informationsstrom so mit Meldungen aus beliebigen Quellen (RSS Feeds, Twitter, Log Files, usw.) befüllen.</p>
<p><img class="alignnone" src="http://blog.aditu.de/wp-content/uploads/2011/10/selfoss-screenshot-thumb.png" alt="" width="500" height="488" /></p>
<h1>Requirements &amp; Planung</h1>
<p>Ich habe schon einige Erfahrung mit meinem letzten Projekt, dem RSS Reader rsslounge sammeln können und somit eine ganze Reihe an Anforderungen:</p>
<ul>
<li>Der Aufbau des Programms sollte simpel sein. Keine riesigen generischen Schnittstellen, keine fetten Frameworks und auch nicht die Möglichkeit alles abdecken zu können. Eine schlichte Architektur und einfacher Code sollten im Zentrum stehen.</li>
<li>Ein einfaches Framework mit möglichst wenigen Dateien sollte verwendet werden. Bei rsslounge setze ich auf das Zend Framework und bin damit auch sehr zufrieden. Allerdings ist das ZF sehr umfangreich und somit wird ein Update auf eine neue Version sehr lästig, da sich sehr viele Dateien sich über FTP durch die Leitung quälen müssen.</li>
<li>Leichte Erweiterbarkeit durch zusätzliche Datenquellen (Spouts).</li>
<li>Selfoss sollte auf dem iPad und auf Android laufen.</li>
<li>Selfoss sollte von seinem Einsatzgebiet nicht zu sehr eingegrenzt werden. Man kann das Programm also als zentrale Sammelstelle für Informationen nutzen, aber auch als mashup Tool verwenden. So kann Selfoss Informationen sammeln und als RSS Feed wieder zur Verfügung stellen. Oder man setzt Selfoss als Livestream ein und präsentiert Meldungen, die man selbst auf verschiedene Plattformen veröffentlicht hat, an einer zentralen Stelle.</li>
</ul>
<p>Das MVC Pattern als Grundgerüst hat sich gut bewährt und ist mittlerweile auch zum letzten Entwickler durchgedrungen. Für das Anbinden der Spouts hatte ich bereits bei rsslounge einen ähnlichen Mechanismus entwickelt. Der sollte wieder recycelt und in abgewandelter Form eingesetzt werden.</p>
<h1>Fat Free PHP Framework</h1>
<p>Als Basis-Framework habe ich mich für das <a href="http://fatfree.sourceforge.net/">Fat Free PHP Framework</a> entschieden. Dabei handelt es sich um ein sehr schlankes Framework, das mit einer Größe von 55kb beworben wird, tatsächlich dann aber doch 223kb und 27 Dateien umfasst. Im Vergleich zum Zend Framework aber immernoch super schlank.</p>
<p>Das Fat Free PHP Framework (kurz F3) benötigt auch PHP 5.3, da es die neuen Möglichkeiten, wie beispielsweise Lambda Funktionen verwendet. Für mich perfekt, die Sprachfeatures von PHP 5.3 mal vol auszuschöpfen. F3 bringt dabei alle wichtigen Funktionen mit, die man so benötigt:</p>
<ul>
<li>Routing Mechanismus (sehr einfach auch im MVC Style realisierbar)</li>
<li>Datenbankzugriff (sogar mit einem mini ORM und einem MongoDB mapper)</li>
<li>Template Engine</li>
<li>Schnick Schnack wie: On-the-fly JavaScript/CSS compressor, CAPTCHA generator, OpenID, usw.</li>
</ul>
<p>Was mich neben der kompakten Größe überzeugt hat, sind die einfachen Programmkonstrukte, die sich damit ergeben. Am besten sieht man das an einem Beispiel:</p>
<pre>require __DIR__.'/libs/f3/base.php';

F3::set('AUTOLOAD','libs/f3/|libs/|libs/WideImage/|models/|libs/twitteroauth|libs/FeedWriter');

F3::route('GET /', 'controllers\Index-&gt;home');

F3::route('GET /mark/@item', 'controllers\Items-&gt;mark');

F3::route('POST /source', 'controllers\Sources-&gt;add');

F3::route('PUT /source/@id', 'controllers\Sources-&gt;write');

F3::run();</pre>
<p>Hier wird als erstes das F3 Framework eingebunden. Dann werden die Verzeichnisse für das Autoloading gesetzt. Anschließend werden die Routen definiert. Da das F3 Framework grundsätzlich den REST Ansatz unterstützt, wird mit F3::route die HTTP Methode und die Ziel URL festgelegt. In einem zweiten Parameter steht dann die Klasse und Methode, die aufgerufen wird (z.B. in der Klasse \controllers\Index die Methode home). Man könnte auch direkt eine Funktion übergeben:</p>
<pre>F3::route('GET /about',

function() {

echo 'No subliminal messages here...';

}

);</pre>
<p>Wie die gesamte Initialisierung von Selfoss und die Definition der Routen erfolgt, könnt ihr euch hier ansehen: <a href="https://github.com/SSilence/selfoss/blob/master/index.php">https://github.com/SSilence/selfoss/blob/master/index.php</a></p>
<h1>Das Backend im Überblick</h1>
<p>Was passiert noch im PHP Backend von Selfoss? Eine ganze Menge, aber dann doch mit erstaunlich wenig Code und eben simpel gestrickt.</p>
<p>Da mich die Templating Engine von F3 nicht überzeugen konnte und ich die PHP Programmierkonstrukte für ein Templating für ausreichend halte, habe ich mir selbst eine Hilfsklasse für das Rendern der PHP Templates erstellt: <a href="https://github.com/SSilence/selfoss/blob/master/helpers/View.php">helpers/View.php</a>. Die Klasse bietet die Methode render, welche einfach das übergebene Template einbindet, ausführt und als String zurück gibt. Es unterstützt auch eine JSON Ausgabe und bietet ein paar Hilfsfunktionen. Damit können Views wie im Zend Framework genutzt werden.</p>
<p>Ein ordentlicher Logger hat mir auch im F3 Framework gefehlt. Also habe ich einen ganz einfachen Logger erstellt: <a href="https://github.com/SSilence/selfoss/blob/master/helpers/Logger.php">helpers/Logger.php</a>, der ausschließlich in Dateien loggen kann.</p>
<p>Für den Datenbankzugriff wird die F3 Komponente verwendet. Die funktioniert auch sehr einfach. Hier ein Beispiel für einen MySQL Datenbankzugriff:</p>
<pre>F3::set('DB',

new DB(

'mysql:host=localhost;port=3306;dbname=mysqldb',

'admin',

'p455w0rD'

)

);

DB::sql('SELECT brandName FROM wherever');

foreach (F3::get('DB-&gt;result') as $row) {

// whatever you want to do with $row

}</pre>
<p>Neben MySQL wird aber auch Sqlite und MongoDB unterstützt. Zwei Modelklassen für die vom Benutzer definierte Quellen und eine für die Einträge kapseln sämtliche Datenbankzugriffe (siehe <a href="https://github.com/SSilence/selfoss/tree/master/models">models</a>).</p>
<h1>Bibliotheken Backend</h1>
<p>Ich bin nicht zimperlich, was den Einsatz von Bibliotheken angeht. Selber machen ist ganz nett, aber es gibt mittlerweile super OpenSource Libraries, die einfach hervorragend sind. Also habe ich auch hier wieder meine Bookmarks gewälzt und auf folgende Bibliotheken zurückgegriffen:</p>
<ul>
<li><a href="http://simplepie.org/">SimplePie</a>: Verwende ich zum Parsen von RSS Feeds. Eine spitzen Bibliothek, die auch mit fehlerhaften Feeds ganz gut umgehen kann.</li>
<li><a href="http://wideimage.sourceforge.net/">WideImage</a>: Verwende ich zum Erstellen der Vorschaubildchen.</li>
<li><a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/">htmLawed</a>: Damit bereinige ich die Feed Einträge von schädlichen HTML und JavaScript Code. Das ist nicht nur aus Sicherheitsaspekten sinnvoll, sondern häufig wird auch fehlerhafter HTML Code ausgeliefert.</li>
<li><a href="https://github.com/rgrove/jsmin-php/blob/master/jsmin.php">jsmin</a>: F3 besitzt zwar einen JavaScript Minifier. Der hat bei mir aber nicht funktioniert und somit setze ich auf diese Lib, die ich auch schon seit langem in rsslounge verwende</li>
<li><a href="http://code.google.com/p/cssmin/">cssmin</a>: das Gleiche wie jsmin für CSS Dateien</li>
<li><a href="http://www.ajaxray.com/blog/2008/03/08/php-universal-feed-generator-supports-rss-10-rss-20-and-atom/">PHP Universal Feed Generator</a>: Damit erzeuge ich ein neues RSS Feed aus den gesammelten Beiträgen.</li>
<li><a href="http://www.phpclasses.org/package/3906-PHP-Read-and-write-images-from-ICO-files.html">floIcon</a>: Damit werden ICO Dateien verarbeitet</li>
</ul>
<h1>Spouts</h1>
<p>Wie eigene Datenquellen ergänzt werden können, ist in der Dokumentation zu finden. Wer z.B. irgendeine Datenquelle (z.B. Logfiles, Email Account, Webseite ohne RSS) anzapfen will, muss dazu lediglich eine einzelne PHP Klasse implementieren. Eine Anleitung, wie das geht, findet ihr in meinem <a href="http://blog.aditu.de/2011/10/17/selfoss-eigene-datenquellen-erstellen/">Blog</a>.</p>
<p>Im Prinzip funktioniert die Anbindung wie folgt:</p>
<ul>
<li>Die Hilfsklasse <a href="https://github.com/SSilence/selfoss/blob/master/helpers/ContentLoader.php">ContentLoader.php</a> lädt alle abzurufenden Quellen, die der Benutzer konfiguriert hat, aus der Datenbank</li>
<li>Dann wird zu jeder einzelnen Quelle das dazugehörige Spout geladen (das macht die Hilfsklasse <a href="https://github.com/SSilence/selfoss/blob/master/helpers/SpoutLoader.php">SpoutLoader.php</a> mit Hilfe von <a href="http://php.net/manual/en/book.reflection.php">Reflection</a>). Einen solchen Spout könnt ihr einfach <a href="http://blog.aditu.de/2011/10/17/selfoss-eigene-datenquellen-erstellen/">implementieren</a>, ohne Selfoss genauer zu kennen.</li>
<li>Der <a href="https://github.com/SSilence/selfoss/blob/master/helpers/ContentLoader.php">ContentLoader</a> ruft die load Methode des jeweiligen Spouts auf, welche dann die Inhalte (z.B. via RSS) abruft.</li>
<li>Dann holt sich der <a href="https://github.com/SSilence/selfoss/blob/master/helpers/ContentLoader.php">ContentLoader</a> nacheinander alle abgerufenen Beiträge und speichert diese in der Datenbank ab (sofern noch nicht vorhanden).</li>
</ul>
<h1>Frontend</h1>
<p>Für das HTML Grundgerüst konnte ich endlich einmal die <a href="http://html5boilerplate.com/">HTML5 Boilerplate</a> Vorlage ausprobieren. HTML5 war für mich die Technik der Wahl, nachdem alles auch auf mobilen Plattformen laufen sollte. Im Grunde verwende ich nichts von den HTML5 Neuerungen, aber wer weiß, was die Zukunft bringt.</p>
<p>HTML5 Boilerplate enthält auch die JavaScript Bibliothek <a href="http://www.modernizr.com/">modernizr</a>. Diese prüft das vorhandene System und fügt zum html Tag CSS Klassen hinzu, welche unterstützte Features markieren. So kann sehr einfach geprüft werden, ob z.B. das aktuelle Device touch-Funktionen unterstützt:</p>
<pre>if($(‘html‘).hasClass(‘touch‘)) {

…</pre>
<h1>Frontend Bibliotheken</h1>
<p>Nein, ich bin ganz sicher nicht zimperlich was Bibliotheken angeht. Aber wieso das Rad neu erfinden? Hier die Liste mit Bibliotheken, die ich für das Frontend verwende und auch weiterempfehlen kann:</p>
<ul>
<li><a href="http://elasticss.com/">Elastic CSS Framework</a>: Mit Browserkompatibilität kann man Nächte verbringen. Gerade was mehrspalitge Layouts usw. angeht. Daher verwende ich Elastics, dass sehr viel out of the box mit bringt.</li>
<li><a href="http://cubiq.org/iscroll">iScroll</a>: Der Stream ist in einem div Element untergebracht. Um das via touch scrollbar zu machen (z.B. auf dem iPad), verwende ich die JavaScript Bibliothek iScroll. Ein echter Tipp, denn diesbezüglich scheint es keine weiteren Alternativen zu geben.</li>
<li><a href="http://jquery.com/">jQuery</a>: Muss ich noch was dazu sagen?</li>
<li><a href="http://www.openjs.com/scripts/events/keyboard_shortcuts/">Keyboard Shortcuts</a>: Ein sehr schönes Skript um ganz einfach mit Funktionen auf Keypress Aktionen zu reagieren.</li>
</ul>
<h1>Download</h1>
<p>Selfoss ist natürlich OpenSource (GPLv3) und kann frei heruntergeladen werden:</p>
<p><a href="http://selfoss.aditu.de/">http://selfoss.aditu.de/</a></p>
<p>Sämtliche Quellen können auch auf <a href="https://github.com/SSilence/selfoss">github</a> eingesehen werden.</p>
<p>Gerne könnt ihr mich für Fragen kontaktieren: tobias.zeising@aditu.de. Und wenn jemand eine eigene nützliche Datenquelle (Spout) entwickelt hat, freue ich mich sehr über Feedback und Sourcecode.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/tools/tobias-zeisings-selfoss/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ein Herz für Blogger: zfwiki.de</title>
		<link>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-zfwiki-de/</link>
		<comments>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-zfwiki-de/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 05:00:17 +0000</pubDate>
		<dc:creator>Christian Koncilia</dc:creator>
				<category><![CDATA[Ein Herz für Blogger]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=7131</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">
<p class="MsoNormal">Man sollte keine Hochzeitsreden halten, die länger als fünf Minuten dauern. Und man sollte keine Artikel schreiben, die gleich mit einer Aufforderung an alle Leser beginnen. Ich riskiere es trotzdem: Dies ist keine Werbung für ein Blog sondern vielmehr der Aufruf an einem deutschsprachigen Zend Framework Wiki (<a href="http://www.zfwiki.de/">http://www.zfwiki.de</a>) mitzuarbeiten.</p>
<p class="MsoNormal"><span lang="DE-AT">Gut, du liest noch immer weiter. Dann kommen wir mal zum Thema…</span></p>
<p class="MsoNormal"><span lang="DE-AT">Die Idee ein deutschsprachiges Zend Framework Wiki zu bauen kam uns (einigen aktiven ZF Nutzern) während einer Diskussion in einem deutschsprachigen Zend Framework Forum. Eigentlich naheliegend: bestimmte Fragen tauchen einfach immer wieder auf. Im Zend Framework Umfeld sind das zum Beispiel Fragen zum Thema Dekoratoren, Validatoren, Dispatcher-Prozess, etc. Warum also diese Fragen immer und immer wieder beantworten? Warum nicht gleich einen entsprechenden Wiki Eintrag schreiben und in Zukunft nur noch auf diesen Verweisen?</span></p>
<p class="MsoNormal"><span lang="DE-AT">Spricht eigentlich nicht wirklich etwas dagegen. Außer vielleicht, dass so ein Wiki zuerst einmal gefüllt werden muss. Dankenswerterweise waren einige erfahrene ZF User schon recht aktiv und haben bereits einiges an Material zusammengetragen. So findet ihr im Wiki bereits jetzt ein gelungenes Quickstart Tutorial, eine ausführliche Anleitung zum CLI Tool und andere interessante Artikel. </span></p>
<p class="MsoNormal"><span lang="DE-AT">Ein Wiki lebt aber vor allem von einer aktive „Wiki-Gemeinde“. Je mehr Leute mitschreiben und mitdiskutieren, umso höher die Qualität des Wikis. Deshalb würde es uns sehr freuen, wenn du ebenfalls mithilfst. Wie es sich für ein echtes Wiki gehört, kann <strong>jeder mitmachen</strong>, der etwas zum Thema zu sagen hat. Einfach auf <a href="http://www.zfwiki.de/">http://www.zfwiki.de</a> gehen, Artikel verbessern oder erweitern, sich an Diskussionen zum Wiki beteiligen, oder neue Seiten anlegen. Wenn ihr wollt, könnt ihr euch auch gerne registrieren. </span></p>
<p class="MsoNormal"><span lang="DE-AT">Spannend wären vor allem Beiträge zu weiterführenden ZF-Themen wie Performance-Optimierung, Anwendungen für Front-Controller-Plugins, Integration von Dojo, jQuery oder anderen JavaScript-Frameworks, generische Komponenten für z.B. User-Management, etc.</span></p>
<p class="MsoNormal"><span lang="DE-AT">Die Seite läuft zwar auf meinem Web Server, hinter den Inhalten stecken aber in erster Linie andere erfahrene ZF User (Meisii, KingCrunch, Bleistift, Kaiuwe, Florian, Tobias, und alle anderen, die ich jetzt gerade vergessen habe) bei denen ich mich an dieser Stelle recht herzlich bedanken möchte. </span></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-zfwiki-de/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ein Herz für Blogger &#8211; Functions Online</title>
		<link>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-functions-online/</link>
		<comments>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-functions-online/#comments</comments>
		<pubDate>Fri, 23 Jul 2010 05:00:24 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Ein Herz für Blogger]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6427</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Wir haben ja die Rubrik &#8220;Ein Herz für Blogger&#8221;. Jetzt wurde ich vor kurzem gefragt, ob jemand sein Projekt vorstellen darf, es hat auch was mit PHP zu tun. Na klar ist das möglich, ist auch nicht das erste mal, dass wir so was machen. Tja was soll ich sagen, außer Bühne frei für Jan Bogutzki.</p>
<p><span id="more-6427"></span>Aus einem kleinen Problem wurde eine Webseite. Als ich im August 2007  immer wieder die Funktionen md5 und base64_decode benötigt hatte um ein  Problem zu debuggen, war die Idee entstanden. Es muss ein Script her,  was mir schnell und einfach die jeweilige Funktion ausführt. Im Internet  gab es zwar schon einige Seiten, aber irgendwie waren die nicht  nutzerfreundlich genug, in meinen Augen. Aus dem kleinen Testscript  wurde so in kurzer Zeit eine komplette Webseite. <a href="http://www.functions-online.com/home.html" target="_blank">Functions-Online</a> war  geboren. Am Anfang noch in deutscher Sprache und mit sehr wenigen  Funktionen, entwickelte sich der Umfang an Funktionen und unterstützten  Sprachen schnell. Fast genau 2 Jahre nach dem Start wurde nach viel  Handarbeit ein CMS unter die Seite geschoben. Seither ist die Zahl der  Funktionen und Features stetig gewachsen.</p>
<p>Aktuell werden rund 100 Funktionen in den Kategorien Array,  Cryptography, Date and Time, Math, Regular Expression, String, URL und  General angeboten. Neben den gängigen PHP Funktionen gibt es noch die  Kategorie Custom. In der finden sich ein paar selbst erstellte Scripte.  Neben einem Passwort-Generator der viele Einstellungsmöglichkeiten  bietet, gibt es noch einen Google-Pagerank-Check sowie eine Funktion um  automatisch Wörter zu trennen.</p>
<p>Funktionen werden aber nicht nur stupide ausgeführt. Es findet sich auch  ein komplexes Error-Reporting hinter jeder Ausführung. Viele  Fatal-Error werden so schon vor der Ausführung entdeckt und dem Nutzer  angezeigt. Warnings und Infos von PHP sind da keine große  Herausforderung. Neben den PHP eigenen Fehlern werden auch eine Hand  voll eigene Fehlermeldungen eingebunden. So ist es bei den regulären  Ausdrücken zum Beispiel nicht erlaubt /e (eval) zu benutzen.</p>
<p>Unter jeder Funktion befindet sich auch eine obligatorische  Kommentarfunktion. Durch diese wurden schon einige Fehler in der  Programmierung aufgedeckt und behoben. Sofern Fehler auftreten, kann  jeder gern einen Kommentar hinterlassen.</p>
<p>Die Webseite ist komplett in englischer Sprache gehalten und bietet für  jede Funktion eine Übersetzung der Beschreibung in bis zu 4 weiteren  Sprachen.</p>
<h3>Über Jan Bogutzki</h3>
<p>Die Welt der Computer entdeckte ich im Jahr 1996. Anfangs durch einfache  DOS-Spiele fasziniert, weckte die AG Internet meiner Schule die Lust am  Webseiten entwickeln. Seither habe ich diverse Webseiten erschaffen und  einige auch wieder eingerissen. Nach reinen HTML-Experimenten und  meinen ersten Werbedollar musste hinter dem starren Geflecht doch noch  mehr stecken. Perl kam mir zu kryptisch vor und so ging der Weg in  Richtung PHP weiter. Inzwischen arbeite ich seit über 8 Jahren in der  Webentwicklung. Durch ein breites Spektrum an Aufgaben benötige ich auch  heute noch meine eigene Seite. Daher werden die Funktionen und Features  auch aus eigenem Interesse immer mehr.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-functions-online/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Ein Herz für Blogger &#8211; PHPMonkeys</title>
		<link>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-phpmonkeys/</link>
		<comments>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-phpmonkeys/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 05:00:13 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Ein Herz für Blogger]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6282</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>So langsam sollten sich alle guten deutschsprachigen PHP-Blogs hier vorgestellt haben. Trotzdem findet man immer wieder gute Seiten im Internet. Heute möchte Norbert Bartels sich und seinen <a href="http://www.phpmonkeys.de/">Blog</a> hier vorstellen. Da ich ihn vor kurzem noch geflattrt hab, darf es das natürlich auch gerne machen. Ich übergebe hiermit das Wort an Norbert.<span id="more-6282"></span></p>
<p>Heute möchte ich die Gelegenheit nutzen und das <a href="http://www.phpmonkeys.de/">PhpMonkeys-Blog</a> vorstellen. Die Domain registrierte ich vor weit mehr als einem Jahr und wollte zuerst eine Community Seite für PHP-Entwickler aufbauen. Bei genauerer Betrachtung fand ich die Idee dann doch nicht mehr so vielversprechend. Schließlich gibt es schon viele soziale Netze, in denen man sich als Entwickler austauschen kann; warum sollte ein eigenes für PHP notwendig sein?</p>
<p>Die Domäne behielt ich trotzdem. Eine befreundete Designerin entwarf mir ein Logo, damit ich nicht das typische „Hier entsteht eine neue Webpräsenz“ anzeigen musste. In diesem Zustand ruhte die Seite bis September 2009.</p>
<p>Bis zu diesem Datum lief ich immer wieder in ein Problem, das viele Entwickler kennen werden. Man löst ein Problem und stößt nach einer gewissen Zeit wieder auf das Problem und hat vergessen, wie die damals tolle Lösung aussah. Dann durchsucht man Sourcen, Mails und vergeudet wertvolle Zeit. Also wollte ich eine Seite für mich, die ich als externes Gedächtnis nutzen kann. Die Motivation ein Blog zu schreiben ergab sich dann aus der Annahme, dass die Lösung für ein Problem sicher auch einem zweiten Entwickler hilfreich sein kann.</p>
<p>Neben dieser Gedächtnis-Extension gibt es inzwischen auch informative Beiträge rund um die Themen objektorientierte Entwicklung mit PHP, Entwurfsmuster, Continuous Integration u.ä.</p>
<p>Inzwischen hat sich ein wöchentlicher Rhythmus eingestellt und der neue Beitrag wird von mir montags oder dienstags online gestellt.</p>
<p>Besonders spannend finde ich die Kommentare meiner Leser. Die Artikel werden durch diese aufgewertet. Mit der Zeit entwickelt man nämlich einen gewissen Tunnelblick und weitere Meinungen verbreitern die Sichtweise. Momentan wird jeder Artikel manuell freigeschaltet, da das Spamaufkommen nicht zu verachten ist und sich meine Leser nicht durch Spam im Lesefluss gestört fühlen sollen.</p>
<p>Zu meiner Person:</p>
<p>Meine ersten Programmiererfahrungen sammelte ich in Basic auf dem C64. Nach ein paar Abstechern in diverse Programmiersprachen bin ich vor ca. 10 Jahren bei PHP hängen geblieben. Seitdem entwickle ich PHP auch beruflich. Momentan bin ich als Softwareentwickler überwiegend in Java unterwegs, was ich als gute Chance sehe, eine alternative Sichtweise auf die PHP-Entwicklung zu bekommen. Von daher können sich meine Leser auf weitere spannende Beiträge freuen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-phpmonkeys/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ein Herz für Blogger &#8211; krsteski.de</title>
		<link>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-krsteski-de/</link>
		<comments>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-krsteski-de/#comments</comments>
		<pubDate>Tue, 18 May 2010 05:00:19 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Ein Herz für Blogger]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=6110</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><em>Wie ihr ja alle vielleicht noch wisst, haben wir die Aktion &#8220;Ein Herz für Blogger&#8221; vor einiger Zeit ins Leben gerufen, in der Leser unseres Blogs ihre eigenen Weblogs vorstellen dürfen. Die einziger Voraussetzung ist, dass der Blog auf deutsch ist und regelmäßig mit Themen rund um die Webentwicklung gefüllt wird. Heute hat Gjero Krsteski die Chance, etwas über sich zu erzählen, also viel Spaß!</em></p>
<p>Ich hatte im Gegensatz zu vielen anderen Programmierern nie ein  Interesse daran, einen Blog zu betreiben. Ich stellte es mir langweilig  vor, wollte lieber praktisch arbeiten. Das änderte sich, als ich das  Buch &#8220;Der leidenschaftliche Programmierer&#8221; von Chad Fowler las.  Tatsächlich habe ich es regelrecht verschlungen. Dabei bekam ich einen  großen Motivations- und Inspirationsschub. Auf einmal begeisterte mich  die Idee, mit meinen Erkenntnissen einen kleinen Beitrag zum großen  Wissenspool leisten zu können, der ja schließlich davon lebt, dass man  sich miteinander austauscht. Als ich dann vor drei Monaten mit meinem  Blog <a href="http://krsteski.de/" target="_blank">krsteski.de</a> anfing, stellte ich fest, dass es in der Tat ganz und gar nicht  langweilig war, meine Gedanken und Ideen  niederzuschreiben und der  Internetgemeinde zur Verfügung zu stellen, sondern dass es ganz im  Gegenteil großen Spaß macht, zu verfolgen wie die Leser meine Artikel  kommentieren und darüber diskutieren, etwas anzustoßen und zu bewirken.  Heute habe ich mehr denn je das Gefühl, ein Teil der großen  PHP-Community zu sein.</p>
<p>Hauptsächlich schreibe ich über meine Erfahrungen mit meiner  Leidenschaft &#8220;PHP und Co&#8221;, und über Dinge, die mich im Zusammenhang  damit inspirieren. Meine Themen sind: PHP Tricks und Tipps, PHP  Babykrankheiten, Software-Tests, Zend Framework, Projekterfahrung,  Lernbereitschaft, Motivation, Teamarbeit und Agile Softwareentwicklung.   Der Blog  ist letztendlich eine Art Sammlung von Lösungsansätzen und  Erkenntnissen aus meinem Programmiereralltag. Ich teile auf diese Weise  mein Wissen und meine Erfahrungen mit anderen Programmierern.  Gleichzeitig lasse ich mich auch gerne von anderen Bloggern inspirieren  und hole mir Anregungen für meine Arbeit.</p>
<p>Soviel zu meinem Blog. Jetzt möchte ich euch auch noch etwas über mich,  also den Mann hinter dem Blog, erzählen: Ich habe zwei Ausbildungen  absolviert, die erste als IT-Kaufmann und die zweite als  Fachinformatiker im Bereich Anwendungsentwicklung. Ich programmiere seit  ungefähr zehn Jahren und habe bisher verschiedene CMS, Frameworks und  Individualsoftware konzipiert und im Team mitentwickelt. Darüber hinaus  lese ich gerne Fachliteratur, beobachte die Entwickler- und  Programmiererszene, tausche mich mit Programmierern aus und ziehe daraus  Erkenntnisse für meine tägliche Arbeit.</p>
<p>Aktuell arbeite ich als Web-Programmierer und Consultant  bei der Firma  brainbits GmbH in Köln. Seit meinem Einstieg entwickle und betreue ich  als Teil eines Teams das CMS eines Großkunden, das sich auf mehrere  Systeme verteilt und mit sehr vielen Zugriffen am Tag umgehen muss.</p>
<p>Ich bin zwar leidenschaftlicher Programmierer, aber es gibt auch noch  andere Dinge in meinem Leben. In meiner Freizeit als Ausgleich zu der  vielen Zeit, die ich vor einem Computer sitzend verbringe, spiele ich  Bassgitarre in einer Rockband, gehe gerne Western-Reiten, besuche  Konzerte, halte mich mit BMX-Radfahren fit, liebe die Natur und gehe oft  mit der Familie oder Freunden wandern.</p>
<p>Soweit es meine Zeit zulässt, schreibe ich ein paar Artikel pro Woche  für meinen Blog. Ich hoffe, dass ich ein paar von euch mit meinen  Beiträgen inspirieren und einigen auch mit meinen Tipps weiterhelfen  kann. Ich wünsche euch auf jeden Fall viel Spaß beim Lesen und freue  mich über eure Kommentare!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogger-krsteski-de/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>rsslounge von Tobias Zeising</title>
		<link>http://www.phphatesme.com/blog/ein-herz-fur-blogger/rsslounge-von-tobias-zeising/</link>
		<comments>http://www.phphatesme.com/blog/ein-herz-fur-blogger/rsslounge-von-tobias-zeising/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 06:00:36 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Ein Herz für Blogger]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=5022</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Heute wollen wir mal wieder ein Projekt eines Lesers vorstellen. Normalerweise sind es zwar die Blogs die wie hier anpreisen, widmen uns aber heute mal einem kompletten Projekt, dass vielleicht auch für euch interessant sein könnte. Genug aber von mir, ich gebe das Wort an Tobias Zeising ab:<span id="more-5022"></span></p>
<p>Jeder kennt sie, die morgendliche Runde, mit der man sich im Netz informiert wie der Stand der Dinge ist. Meistens ist das ein fester Satz an Seiten, die man durchklickt und überfliegt. Daneben gibt es aber eine riesige Fülle an Blogs, Communitys, Portalen und Projekten, die einen interessiert, die man aber nur unregelmäßig abklopft. Gerade Entwickler entdecken dann früher oder später RSS, legen sich einen RSS Reader zu und behalten so alles im Auge. Um so überraschter war ich, als ich mich auf die Suche nach einem webbasierten RSS Reader begeben habe: die Auswahl ist überschaubar und klein.</p>
<p>Am verbreitesten ist der Google Reader, der für mich aus datenschutztechnischen Gründen nicht in Frage kommt (ich verfolge weit mehr als 100 Feeds der verschiedensten Themen, was neben meinem Leseverhalten umfangreiche Rückschlüsse auf mein Persönlichkeitsprofil zulässt). Die meisten Dienste, welche man im Netz findet, sind für eine größere Menge an RSS Feeds ungeeignet, unpraktisch in der Bedienung oder sind schlicht unübersichtlich. Die wenigen Programme, welche sich auf einen eigenen Server installieren lassen, werden entweder nicht weiter gepflegt (gregarius) oder konnten mich von der Bedienbarkeit nicht überzeugen (tiny tiny rss). Also habe ich mich entschlossen selbst  Reader zu entwickeln und all die Features einzubauen, die ich bisher bei keinem anderen Reader entdeckt habe:</p>
<ul>
<li>Er soll eine schlichte und übersichtliche Oberfläche haben.</li>
<li>Ich fotografiere gerne und verfolge viele Fotografen im Netz, also soll der Reader einfach und komfortabel Fotoblogs lesen können und neue Bilder übersichtlich darstellen.</li>
<li>Abhängig von meiner beruflichen Auslastung habe ich mal viel, mal wenig Zeit: der Reader soll also Prioritäten unterstützen und unwichtige Feeds bei Bedarf einfach ausblenden können (deren Einträge kann ich ja dann auch am Wochenende lesen).</li>
<li>Viele Seiten bieten kein RSS Feed. Solche will ich auch verfolgen können. Der Reader muss also ein flexibles Pluginsystem haben, über das ich z.B. auch Seiten parsen und verarbeiten kann.</li>
<li>Der Reader sollte möglichst auf jedem 0815 Webhosting Server lauffähig sein.</li>
</ul>
<p>Nachdem die Anforderungen klar waren, habe ich nach einer letzten verweifelten Suche nach so einem Reader dann angefangen zu programmieren. &#8216;rsslounge&#8217; heißt das Ergebnis, wobei der Name und das Logo an die morgendliche Runde erinnern soll, wo man bei einer Tasse Tee/Kaffeeentspannt seine News checkt.</p>
<p style="text-align: justify;"><a href="http://www.phphatesme.com/upload/2010/01/screenshot_1.png"><img class="size-full wp-image-5023 aligncenter" title="screenshot_1" src="http://www.phphatesme.com/upload/2010/01/screenshot_1.png" alt="screenshot_1" width="470" height="257" /></a>Einige Monate habe ich die Anwendung dann selbst benutzt und getestet und mich mittlerweile so daran gewöhnt, so dass ich mich garnicht daran erinnern kann, wie ich das vorher gemacht habe. rsslounge basiert natürlich auf PHP und baut auf dem Zend Framework auf. Eine kleine, eigene Pluginschnittstelle erlaubt es weitere &#8220;Datenquellen&#8221; an den Reader anzubinden und natürlich werden Bilderblogs unterstützt. Nachdem in den letzten Monaten einige Verbesserungen eingeflossen sind steht nun die Version 1 zum freien Download zur Verfügung. Das ganze Projekt steht unter GPLv3 Lizenz und kann unter Google Code genau verfolgt werden.</p>
<p style="text-align: justify;">An dieser Stelle will ich gerne alle Leser von phphatesme einladen rsslounge zu verwenden, sich anzusehen und wer will, kann das Programm auch zerpflücken und mir schreiben, was er alles anders machen würde. Denn neben dem Nutzen steht der Lerneffekt für mich bei dem Projekt ganz vorne. Und wer selbst programmiert, der weiß das die Quelle für Ideen nie versiegt und mir natürlich schon viele neue Features im Kopf herum schwirren. Das wichtigste Feature, das ich die nächsten Monate einbauen will: rsslounge soll lernfähig werden. Ähnlich einem Spam Filter eines Email Programms soll man Einträge als interessant oder langweilig markieren können. Basierend auf diesem Wissen werden neue, ungelesene Beiträge dann einsortiert und interessante Artikel erscheinen weiter oben als uninteressante.</p>
<p style="text-align: justify;">Projektseite rsslounge: <a href="http://rsslounge.aditu.de/" target="_blank">http://rsslounge.aditu.de</a><br />
Google Code Seite: <a href="http://code.google.com/p/rsslounge/" target="_blank">http://code.google.com/p/rsslounge/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/ein-herz-fur-blogger/rsslounge-von-tobias-zeising/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Ein Herz für Blogger: ITWS</title>
		<link>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogs-itws/</link>
		<comments>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogs-itws/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 05:00:35 +0000</pubDate>
		<dc:creator>Nils Langner</dc:creator>
				<category><![CDATA[Ein Herz für Blogger]]></category>

		<guid isPermaLink="false">http://www.phphatesme.com/?p=3606</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p>Da schon wieder ein wenig Zeit vergangen ist, dass wir unseren letzen Blog vorgestellt haben, oder besser das sich der letzte Blog vorgestellt hat, ist es heute wieder soweit. Benjamin Kammerl möchte heute seinen ITWS Blog an den Mann bringen, was wir natürlich unterstützen wollen. Los geht&#8217;s, Benjamin leg los!<span id="more-3606"></span></p>
<p>ITWS steht für IT-Workshop und genau das war die ursprüngliche Idee hinter dem Projekt: eine große Werkstatt zum Basteln und Ausprobieren. Da ich Euch aber nur sehr ungern verheimliche, was ich in meiner Werkstatt entdecke oder entwickle, habe ich vor einigen Monaten des ITWS Developer Blog gestartet. Ganz nebenbei hat der Blog auch für mich einen nützlichen Effekt: durch das Schreiben und Berichten, lerne ich effektiver und kann jederzeit auf die Beiträge zurückgreifen, wenn ich etwas suche. Auch Eure Kommentare sind oft eine große Hilfe. Seit wenigen Tagen haben ich nun auch das neue Layout für den Blog im Einsatz.</p>
<p>Der ITWS Developer Blog befasst sich hauptsächlich mit den Themen Webentwicklung, Webdesign, Linux und allgemeine theoretische und praktische Programmiertechniken. Behandelt werden Themen wie beispielsweise<br />
Codeigniter, Serendipity, Design Patterns, CSS-Techniken, Apache, SVN, Eclipse, uvm. Vorbeischauen lohnt sich auf jeden fall, da ich versuche viel Abwechslung in die Beiträge einzubringen, sodass ich nicht Tagelang auf dem ein und selben Thema herumkaue. Es ist also für jeden etwas dabei. Solltet Ihr trotzallem etwas vermissen oder Themen-Wünsche haben, dürft Ihr diese natürlich jederzeit gerne äußern, ich werde versuchen die Vorschläge dann aufzugreifen.</p>
<p>Außerdem stelle ich im Blog meine kleinen und großen Projekte vor und berichte hin und wieder von den Kuriositäten meines realen Lebens <img src='http://www.phphatesme.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>In unregelmäßigen Abständen führe ich die Artikel-Reihe &#8220;Design Patterns&#8221; fort, in der ich mit jedem Beitrag auf ein anderes Entwurfsmuster eingehe, da ich mich zur Zeit selbst intensiv mit diesem Thema befasse. Des weiteren plane ich demnächst einige praktische CSS und HTML Artikel, in denen ich kurz erkläre, wie man mit CSS schöne Menü-Strukturen aufbaut oder wie man eine bestimmte CSS-Definition richtig verwendet usw.</p>
<p>Ihr findet den Blog unter <a href="http://blog.itws.de" target="_blank">http://blog.itws.de</a>/. Für Kommentare, Kritik, Lob, Gast-Beiträge etc. bin ich immer offen und erfreut. Also scheut Euch nicht davor, mir eine Mail zu schreiben, wenn Ihr etwas auf dem Herzen<br />
habt.</p>
<p>Sollte Ihr Interesse haben, euch als Co-Autor am Blog zu beteiligen, dürft Ihr Euch natürlich auch gerne an mich wenden, ich bin generell gerne bereit Co-Autoren zu &#8220;beschäftigen&#8221; <img src='http://www.phphatesme.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  (<em>Anmerkung von Nils: Aber erstmal bei phphatesme melden</em>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/ein-herz-fur-blogger/ein-herz-fur-blogs-itws/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

