Die Firma Mayflower ist mir ja schon länger ein Begriff, da sie sehr im Open Source Bereich um PHP tätig ist. Um die Verbreitung des Zend Frameworks zu fördern, verschenkt Mayflower Poster mit den wichtigsten Methodenaufrufen, Argumenten und Beispielaufrufen. Einfach das Kontaktformular ausfüllen und das Poster wird einem versandkostenfrei zugeschickt.
Eine feine Sache, mein Poster ist heute angekommen und echt top:

Ein PHP Web Security Poster soll in Arbeit sein. Ich bin gespannt und werd jetzt einen passenden Platz für mein Poster suchen…
Frameworks und Bibliotheken zu verwenden hat viele Vorteile. Vor allem spart es aber Zeit, weil viele Funktionen so schon out of the box zur Verfügung stehen und wozu auch für jedes Projekt das Rad neu erfinden. In diesem Blogeintrag will ich alle Bibliotheken und Frameworks vorstellen, die ich für meinen aktuellen Feed Reader rsslounge verwendet habe. Die Liste ist als kleine Empfehlung zu verstehen und soll gleichzeitig einen kleinen Einblick in rsslounge geben.
Zend Framework
Das Zend Framework ist ein objektorientiertes PHP Framework, das auf dem MVC Pattern basiert und viele viele Funktionen bietet. Das Zend Framework ist in diesem Blog ja ohnehin ein Thema und deshalb will ich an dieser Stelle dazu nicht schreiben. Einen ersten Überblick gebe ich hier, wobei natürlich innerhalb des letzten Jahres einiges hinzu gekommen ist.
jQuery
Auch jQuery ist mittlerweile kein Geheimtipp mehr und wie eine Umfrage des Webstandard Blogs zeigt, auch das beliebteste JavaScript Framework. Ich kann das gut verstehen, nachdem ich bisher auf prototype und script.aculo.us gesetzt habe, hat mich jQuery sofort überzeugt.
Alle weiteren JavaScript Bibliotheken basieren auf jQuery. Die Auswahl an Plugins ist schier unendlich und es gibt eine große Zahl an hervorragenden Projekten, die auf jQuery aufsetzen.
jQuery UI
Aufbauend auf jQuery gibt es jQuery UI, eine Bibliothek, die verschiedene Widgets und Funktionen bietet. Neben Widgets deckt jQuery UI das ab, was bei prototype durch script.aculo.us ergänzt wird: Drag n Drop, sortierbare Listen und animierte Effekte. In rsslounge basiert der Slider für die Priorität, das Drag n Drop der Feeds und Kategorien, sowie die Processbar für den ajaxbasierten Update auf dieser Bibliothek.
Impromptu
Es gibt ja eine ganze Reihe guter Lightbox Skripte. Für rsslounge habe ich aber ein LightBox Skript gesucht, das sich besonders gut für Dialoge eignet. Impromptu bietet hier eine einfache Möglichkeit Buttons zu setzen und eigene Funktionen an die verschiedenen Aktionen der Popup-Box zu binden. Lediglich bei der Positionierung der Box, die pauschal auf top:15% gesetzt ist, war ich nicht zufrieden. Allerdings hat man hier vollen Einfluss auf das CSS, so dass auch das kein echtes Problem ist. Eine sehr gute Alternative wäre die ModalBox gewesen. Diese basiert allerdings auf prototype.
Date Picker
Ein hervorragendes Skript für die Auswahl eines Datumbereichs ist der Date Picker von Stefan Petre. Date Picker für die Auswahl eines einzelnen Datums gibt es ja viele, so bietet jQuery UI hier auch ein grundsolides Widget. Aber wenn es darum geht einen Bereich zu wählen, wird die Auswahl plötzlich sehr klein. Der Date Picker hat ein schickes Design und kann sehr genau konfiguriert und mittels CSS gestaltet werden.
jgrowl
jgrowl orientiert sich an dem Benachrichtigungssystem von Growl, welches für Mac OS X verfügbar ist. Es zeigt Benachrichtigungen in einer kleinen Box am Bildschirmrand an. rsslounge nutzt dieses Skript nur recht selten, für Fehlermeldungen und wichtige Informationen ist es aber hervorragend geeignet.
Ajax Upload
Mit Hilfe dieses jQuery Plugins können bei rsslounge OPML Dateien importiert werden. So lässt sich der Dateiupload mit einem Klick auf den entsprechenden Menüpunkt starten, ohne das explizit ein neu Laden der Seite oder das Datei Eingabefeld nötig ist.
Tipsy
Das Plugin Tipsy ermöglicht beliebige ToolTipps zu erstellen. Diese verwende ich für den Eingabedialog von neuen Feeds. Manchmal bleiben die ToolTipps noch hängen, hier muss ich also nochmal genauer testen. Der erste Eindruck ist aber sehr gut und die zusätzlichen Informationen sind für Neulinge dann doch eine gute Hilfe.
SimplePie
Das Herzstück von rsslounge ist die Bibliothek SimplePie. Diese PHP Bibliothek ermöglicht es sehr einfach RSS Feeds zu lesen und zu verarbeiten. Ich habe mich für SimplePie und nicht für Zend_Feed entschlossen, da es um einiges ausgereifter ist, mit keinem Feed Probleme hat und sich bereits in vielen Applikationen bewährt hat. Ein erster Test hat dann auch gleich gezeigt das SimplePie schwer zu toppen ist. rsslounge selbst ist so aufgebaut, dass sich problemlos SimplePie durch eine andere Bibliothek ersetzen lässt (oder eine zweite Bibliothek optional gewählt werden kann), bisher gab es aber keinen Grund dafür. SimplePie besteht lediglich aus einer Datei und einer Hand voll Klassen.
WideImage
Für das Erzeugen der Thumbnails verwende ich die Bibliothek WideImage, welche sich zwar noch in Beta befindet, aber im Test super funktioniert. WideImage basiert auf der GD2 Erweiterung und kapselt alle Funktionen in eine Klasse und erlaubt es komfortabel Bilder zu laden, zu verkleinern oder anderweitig zu verändern. Ein Beispiel wie das dann aussehen kann:
wiImage::load('image.png')->resize(50, 30)->saveToFile('new-image.jpg');
Icons
An der Stelle will ich auch nicht die Icons vergessen. Diese stammen von DryIcons, welche die Sticker Icons unter einer Free Lizenz anbieten, sowie vom Smashing Magazine. Letztere erlauben eine freie Verwendung der Icons (auch für kommerzielle Zwecke, ohne Einschränkungen).
Die Liste ist ganz schön lange, aber bestätigt mich darin laufend gute Skripte zu sammeln. Besonders Funktionalitäten, die sich gut kapseln lassen, oder kompliziert zu entwickeln sind, sind für eigene Projekte eine wahre Bereicherung.
Wie bereits angekündigt, ist rsslounge jetzt für alle öffentlich verfügbar. Für alle die nicht wissen worums überhaupt geht, hier ein kleiner Überblick:
rsslounge ist ein kostenloser, webbasierter RSS Feed Reader. Der Reader ist kein gehosteter Service und muss auf dem eigenen Webserver installiert werden.
Features:
- Vollständiger RSS Reader
- Unterstützt Bilder und Fotoblogs
- Setze Prioritäten und filtere Feeds und Einträge
- Einfache ajaxbasierte Oberfläche
- Unterstützt auf Ajax basierende, sowie Cronjob Updates
- Offenes Pluginsystem zum Hinzufügen eigener Datenquellen
Also keine falsche Scheu, einfach saugen und austesten. Über Feedback, egal welcher Art, bin ich dankbar und freue mich über eure Meinungen, Gedanken, Ideen und Probleme.
Downloaden könnt ihr rsslounge hier.
Wer sich für den Quellcode interessiert, der kann sich auf der Google Code Seite informieren. Dort findet ihr ein Wiki, das SVN Repository und weitere Infos. Die Seite werde ich nach und nach mit weiteren Infos befüllen.
Die letzten Tage ist mir eine Verhaltensweise des Zend Frameworks aufgefallen, die doch sehr zweifelhaft ist. Es kam unerwartet zu der Exception
Could not determine temp directory,
please specify a cache_dir manually
Der Fehler war schnell gefunden: das temporäre Verzeichnis auf dem Server war nicht gesetzt bzw. war schreibgeschützt. Wie im Zend Framework Issue Tracker nachzulesen ist, wird bei der Verwendung von Zend_Locale und Zend_Translate automatisch ein Cache Objekt erzeugt, welches das temporäre Verzeichnis des Webservers verwendet. Ein aus meiner Sicht sehr zweifelhaftes Verhalten bzw. eine Vorgehensweise, die vielen Kritikern Recht gibt: ohne Caching geht es scheinbar nicht mehr. Laut Thomas Weidner ist das auch nicht mehr erwähnenswert:
Using a false cache will also decrease performance or negotate it completly… but I don’t think that this should be mentioned into this chapter [of the Zend Manual]. Anyone with default knowledge should know this already.
(siehe Issue Tracker ZF-6668, Thomas Weidner)
Ich sehe das an dieser Stelle etwas anders. Caching ist zwar ein wichtiges Mittel und muss hinsichtlich der Performance unbedingt im Auge behalten werden, es aber stillschweigend zu aktivieren, geht aus meiner Sicht doch etwas zu weit.
Um das Problem zu lösen, gibt es mehrere Möglichkeiten:
1. Man setzt die Umgebungsvariable für das temporäre Verzeichnis neu
Das Zend Framework durchsucht die Umgebungsvariablen ‘TMPDIR’, ‘TEMP’, ‘TMP’, ‘windir’, ‘SystemRoot’ (die letzten beiden für Unterverzeichnis ‘/temp’) und übernimmt diese, falls diese gesetzt sind. Abhilfe schafft es also, in der .htaccess
SetEnv TMPDIR data/cache
zu setzen.
2. Man deaktiviert das Caching (was gemäß Thomas Weidner nicht empfehlenswert ist und ich an dieser Stelle auch nicht empfehlen will).
Das Deaktivieren geht sehr einfach mit:
Zend_Translate::removeCache() Zend_Locale::removeCache()
3. Die beste Methode ist es, ein eigenes Cache Objekt zu setzen und darin einen eigenen Pfad zu definieren. Dazu muss das Frontend Zend_Cache_Core verwendet werden. Dabei wird auf eine statische Methode setCache zurückgegriffen, das heißt die Einstellung gilt dann für alle Zend_Locale oder Zend_Translate Objekte.
$path = APPLICATION_PATH . '/data/cache';
$cache = Zend_Cache::factory(
'Core',
'File',
array(),
array(
cache_dir => $path
));
Zend_Locale::setCache($cache);
Zend_Translate::setCache($cache);
Jetzt habe ich schon lange nicht mehr gebloggt und hoffe ich bin noch nicht bei allen aus der RSS Reader Liste geflogen. Aber in diesem Fall habe ich eine ganz gute Ausrede. Momentan programmiere ich fleißig an einem neuen webbasierten RSS Reader.
Auch nach vielen Stunden Suche habe ich keinen guten RSS Reader gefunden, den man auch auf dem eigenen Webspace installieren kann und der dabei einfach und praktisch zu bedienen ist. Bisher nutze ich Gregarius, der leider nicht mehr weiter entwickelt wird. Der Google Reader konnte auch überzeugen, aber hier mache ich mir aus Sicht des Datenschutzes sorgen, da die eigene Feedauswahl doch so einige Rückschlüsse auf Interessen und Hobbys zulässt. Ein weiterer interessanter Reader ist Fever, dieser kostet aber $30. Das wäre ich schon bereit zu zahlen, wenn die Software dann auch gut ist. Aber mit einer domainbezogenen Lizenz wollte ich mich dann einfach nicht herumschlagen. tiny tiny RSS scheint auch solide zu funktionieren, ist mir aber zu überladen und irgendwie unpraktisch.
Da Meckern nicht hilft habe ich mich also selbst ans Werk gemacht. Dazu habe ich mir aus bestehenden Reader die Features herausgepickt, die mir besonders gefallen, oder die ich bereits in Gregarius regelmäßig benutze.
Mein Wunsch-RSS-Reader muss darüber hinaus folgende Features haben (und hat sie auch schon):
- Neben normalen Feeds soll der Reader auch Medien lesen können. Ich verfolge viele Fotoblogs und Communitys und die sollen komfortabel als Thumbnailübersicht angezeigt werden (und nicht wie gewöhnliche Textnachrichten).
- Der Reader soll Prioritäten unterstützen. Jedes Feed soll dabei eine Priorität bekommen und je nach gewählten Prioritätsbereich wird nur eine Teilmenge (oder alle) Feeds angezeigt. In stressigen Lebensphasen lassen sich so gezielt Feeds ausblenden und man kann sich auf das Wesentliche konzentrieren. Am Wochenende kann dann der Prioritätsbereich erhöht und der Rest gelesen werden.
- Es soll ein offenes Pluginsystem für die Datenquellen vorhanden sein. Neben gewöhnlichen RSS Feeds soll man auch die Möglichkeit haben später neue Quellen zu definieren. So kann z.B. dann eine Seite manuell geparsed, verarbeitet und verfolgt werden, auch wenn diese kein RSS Feed anbietet (hierzu braucht man dann natürlich Programmierkenntnisse).
- Eine komfortable ajaxbasierte Oberfläche, die schlicht und übersichtlich sein soll. Zudem soll sich alles intuitiv mit Drag n Drop bedienen lassen (z.B. die Feeds zwischen den Kategorien verschieben, oder die Reihenfolge der Kategorien verändern).
- Es soll die Möglichkeit bestehen einen bestimmten Zeitraum vorzugeben, um nur Einträge dieser Periode zu sehen.
- Feeds sollen wahlweise mit Cronjob oder ohne (also via Ajax Aufruf) aktualisiert werden können.
Als Namen habe ich rsslounge aggregator gewählt. Ich finde das ziemlich passend, denn ich lese immer abends oder morgens ganz gechillt, bei einer Tasse Tee meine Feeds. Zudem soll das Prioritätsfeature dabei helfen Stress zu vermeiden und immer nur die Menge an Feeds zu zeigen, für die man auch Zeit hat. Der Rest kann ruhig bis zum Wochenende warten (oder wird nur grob überflogen).
Was nun auf der Agenda steht, ist ein ausführlicher Test. Dazu werde ich den Reader erst selbst einige Monate testen und anschließend einen geschlossenen Betatest unterziehen. Erst dann werde ich den Reader unter GPL in Deutsch und Englisch jedem frei zur Verfügung stellen. Hinzu kommt dann natürlich auch eine Anleitung, wie man selbst Plugins schreiben kann.
Als ersten Einblick gibts erst einmal ein paar Screenshots. Ich hoffe, dass ich bei einigen Interesse wecken kann. Mal sehen was daraus wird.
Nun ist es soweit, endlich ist das Zend Framework in der Version 1.8.0 verfügbar. Ein erster Blick zeigt super Neuerungen, wie z.B. Zend_Tool, einem Command Line Skript zum Erstellen eines Programmrahmens. Zudem gibt es jetzt eine Zend_Application Komponente, die das Bootstrap File ablösen soll und zukünftig alle Programmkomponenten aufnehmen kann. Weiterführend unterstützt die neue Version auch den Cloud Computing Service Amazon S3. Darüber hinaus gibt es noch viele weitere neue Komponenten. Bin gespannt, werde aber so schnell keine Zeit zum Testen haben. Mal sehen, Erfahrungsberichte werden früher oder später aber sicher folgen.
Weitere Informationen gibt es hier.
Seit ein paar Tagen habe ich nun endlich Ralfs neue Buch über das Zend Framework. Nach einem ersten Durchblättern habe ich einen sehr positiven Eindruck. Besonders das Kapitel über “Testgetriebene Entwicklung” scheint wirklich alle Informationen zu enthalten um hier praktisch loslegen zu können. Auch über das Kapitel zu Dojo und JavaScript freue ich mich besonders. Leider werde ich erst im Sommer dazu kommen es durchzuarbeiten. Deshalb dieser Post mit einem ersten Eindruck. Eine detailierte Buchbeschreibung werde ich also noch nachliefern.
(siehe auch: Buch auf Amazon, Blog zum Buch, Ralfs Blog)














