Skip to content

PHPUnit für die Entwicklung von Serendipity-Plugins

Geben wir es ruhig zu, der PHP-Code von Serendipity ist nicht mehr State of the Art, sondern zum großen Teil noch auf dem Stand von PHP 4. Dass dieser Code immer noch sehr zuverlässig funktioniert, und ob und wie mit dem aktuellen Stand umzugehen ist, soll hier nicht das Thema sein. Ich möchte hier auf die Entwicklung von Serendipity-Plugins eingehen, die nicht umsonst in einem eigenen Repository leben. Deren Qualität lässt sich mithilfe von Unit Tests sicherstellen.

PHPUnit für Plugins

Auch wenn die Grundfunktionalität von Serendipity durch Unit Tests abgedeckt ist: Die Plugin-Entwicklung ist bisher nicht so einfach zu testen. In meinen letzten Projekten waren Unit Tests mit PHPUnit ein zunehmend zentraler Bestandteil der Entwicklung. Entweder damit ich nachträglich sicherstellen konnte, dass Klassen und Methoden bei Veränderungen und Refactoring noch taten, was sie tun sollten; oder weil ich testgetrieben entwickelte, das heißt zuerst die Unit Tests und dann erst den zu testenden Code schrieb. Dieses Vorgehen möchte ich nicht mehr missen, und es hat mich gestört, dass es bei der Entwicklung von Serendipity-Plugins nicht ohne Weiteres möglich war.

Screenshot einer Konsole mit erfolgreich durchlaufenen Unit Tests

Daher habe ich mich hingesetzt und PHPUnit so in meine lokale Serendipity-Installation, die ich zum Entwickeln verwende, integriert, dass ich einzelne (Event-)Plugins separat testen kann. Die spezifischen Herausforderungen ließen sich recht schnell überwinden:

  • In Serendipity werden Plugins stark getrennt vom Core über Event-Hooks ausgeführt. Diese Hooks müssen natürlich einzeln getestet werden können.
  • Viele Variablen sind als global deklariert oder werden per Referenz "herumgereicht". Das erfordert einige Workarounds, die heute dank Dependency Injection und ähnlichen Entwurfsmustern zum Glück überflüssig sind.
  • Data Fixtures: Um Serendipity für die Tests "hochzufahren", wird eine Datenbankverbindung benötigt. Mir ist es bisher nicht gelungen, eine der unter Database Testing aufgeführten Methoden umzusetzen. Besser gesagt: Ich war einfach zu faul und habe die nötigen Daten in einer SQLite-Datenbank hinterlegt.
"PHPUnit für die Entwicklung von Serendipity-Plugins" vollständig lesen

Mediacenter on a Stick: OpenElec, XBMC, Spotimc

Als Follow-Up auf meinen Blogpost "Spotify unter Ubuntu mit Android fernsteuern" möchte ich wie angekündigt im Folgenden aufschreiben, wie mein aktuelles "Wohnzimmer-Setup" aussieht. Damit kann ich Musik und Filme nicht nur von meinem lokalen Home-Server streamen, sondern Musik eben auch über Spotify, und ich kann alles mit meinem Android-Handy bequem von der Couch aus fernsteuern. Zwar ist die Bedienung wahrscheinlich weniger elegant als bei mancher kommerziellen Lösung, dafür sind aber die Möglichkeiten dank Open Source weitaus weniger eingeschränkt.

Meine Voraussetzungen: Ich besitze ein Netbook - ein Medion Akoya E1210 von Aldi, nahezu baugleich mit dem MSI Wind U100 - und hatte es schon häufig neben den großen Fernseher im Wohnzimmer gestellt, um darauf Filme aus der Mediathek oder von Platte anzusehen. Auf dem Netbook läuft ein aktuelles Ubuntu, allerdings boote ich dieses in letzter Zeit kaum noch. Deshalb habe ich mich nach einer passenden Media-Lösung umgesehen. Da das Netbook nur einen VGA-Ausgang besitzt, habe ich den TV über ein VGA-zu-VGA-Kabel angeschlossen.

XBMC

Screenshot XBMC

Um die Wiedergabe von Medieninhalten auf dem großen TV zu vereinfachen, habe ich irgendwann das Paket xbmc (und xbmc-standalone) installiert. XBMC hieß früher Xbox Media Center und entstand als Open Source-Projekt genau für diesen Anwendungsfall: ein Mediacenter für eine (ausrangierte) Microsoft Xbox der ersten Generation.

Mittlerweile lässt sich XBMC auf einer Vielzahl von Hardware-Plattformen einsetzen, auf dem letzten LinuxTag konnte ich sogar eine Variante für den Raspberry Pi-Minicomputer bewundern. Die Hardware-Anforderungen sind also erfüllbar, mein Netbook mit einem 1,6 GHz Intel Atom-Prozessor, integriertem Intel GMA 950-Grafikchip und nur 1 GB RAM reicht für die meisten Anwendungsfälle aus. Mag sein, das sehr anspruchsvolle HD-Filme mein Setup in die Knie zwingen - in diese Verlegenheit kam ich aber bislang nicht.

Für XBMC existieren recht hübsche grafische Oberflächen, wie man sie von Mediacentern kennt. Im eigenen WLAN lässt sich XBMC sogar über einen anderen PC via Browser oder übers (Android-)Smartphone bequem von der Couch aus fernbedienen. Dazu später mehr.

Von meinem Ubuntu-Desktop aus ließ sich XBMC ganz einfach als Programm starten und erkannte die Auflösung des Fernsehers automatisch korrekt. Meinen Heimserver mit Videos und Musik konnte ich ebenso wie andere Add-Ons (YouTube, Mediathek, Soundcloud) einfach verbinden und nutzen. Die Standalone-Variante von XBMC, die ohne Ubuntu-Desktop als Unterbau auskommt, lief ebenso - allerdings wurde hier die HD-Auflösung des Fernsehers nicht richtig erkannt. Auch dazu weiter unten mehr.

"Mediacenter on a Stick: OpenElec, XBMC, Spotimc" vollständig lesen

Spotify unter Ubuntu mit Android fernsteuern

Weil ich danach gefragt wurde, wie ich denn bitteschön Spotify unter Linux über mein Android-Smartphone fernsteuere, beschreibe ich das hier mal. Es gibt natürlich kommerzielle Lösungen, etwa von Sonos, die schon ziemlich komfortabel sind. Habe ich selbst noch nicht ausprobiert, kostet halt schlappe ca. 500 Euro (und hat jetzt nichts mit Linux zu tun). Es gibt aber auch Apps wie Spotify Controller, die sogar ganz gut im Zusammenspiel mit Ubuntu funktioniert, daher gehe ich kurz darauf ein. Meine eigentliche Lösung (feat. OpenElec, XBMC und Spotimc) stelle ich dann demnächst in einem gesonderten Blogpost vor.

Spotify Controller

Screenshot der Spotify Controller AppUm Spotify auf eurem Ubuntu-Rechner mit Hilfe der Android-App Spotify Controller fernsteuern zu können, braucht ihr zum einen den nativen Spotify-Client für Linux. Die aktuellste Version bekommt ihr am einfachsten über das Repository deb http://repository.spotify.com stable non-free. Auch wenn da "Preview" obendrüber steht - bei mir läuft die seit Monaten stabil, nur ein, zwei interne Spotify-Apps laufen nicht (z.B. die von Blue Note).

In der Beschreibung der App ist der Link zum zugehörigen Server versteckt, den ihr bei euch lokal auf dem Rechner installieren müsst, auf dem ihr auch den Spotify-Client installiert habt. Entpackt das Archiv, wechselt ins eben entpackte Verzeichnis und führt ./install aus. Nach Eingabe des root-Passworts ist der Server in der Regel startklar und kann mit SpotifyController und dann Klick auf "Start" gestartet werden.

Jetzt könnt ihr mit der Spotify Controller-App rudimentär euren Spotify-Client fernsteuern. Natürlich funktioniert das nur innerhalb des gleichen WLANs. Die offizielle Android-Spotify-App ermöglicht das Auswählen von Tracks und Playlisten über die Fernbedienung. Den Rest findet ihr selbst raus ;-)

GUI zu Steuerung des Spotify Controller Server unter Ubuntu
GUI zu Steuerung des Spotify Controller Server unter Ubuntu

Freelancer Rhein-Main: Neue Webseite für Freiberufler und Selbständige

Florian Brandel hat gestern die öffentliche Beta-Version seiner Plattform für Freelancer im Rhein-Main-Gebiet freigeschaltet. Unter freelancer-rheinmain.de können sich Freelancer, Freiberufler und Selbständige hauptsächlich aus dem IT- und Kreativ-Umfeld eintragen und von potentiellen Kunden gefunden werden. Jeder Freelancer kann sich mit einem Kurzprofil im Visitenkarten-Format präsentieren und für mehr Informationen auf seine Webseite und etliche Soziale Netzwerke verweisen.

Clever (und erfreulich nerdig *g*) gelöst ist die Art und Weise, wie sich Freelancer ins Verzeichnis eintragen können. Dafür wird auf ein paar Zeilen im JSON-Format zurückgegriffen, die beim populären Software-Hostingdienst Github verwaltet werden. Wer technisch versiert genug ist, kann sein Profil also einfach über die Versionsverwaltung und einen Pull-Request pflegen. Eine Anleitung gibt es hier. Wer keinen Account bei Github hat oder sich nicht mit dem technischen Kram auseinandersetzen möchte, kann seine Daten auch einfach per E-Mail einsenden.

Profil von Florian Brandel bei Freelancer Rhein-Main

Ich habe Florian ein paar Fragen zu der neu gestarteten Plattform gestellt, um das Projekt noch besser kennenzulernen:

"Freelancer Rhein-Main: Neue Webseite für Freiberufler und Selbständige" vollständig lesen

21. Treffen der PHP User Group Rheinhessen

Ich dachte, ich berichte mal wieder kurz von einem UG-Treffen in Mainz, dem einundzwanzigsten, wenn ich richtig mitgezählt habe. Inzwischen haben wir (die PHP User Group Rheinhessen) zwei Locations, sprich zwei Agenturen, bei denen wir uns im Wechsel treffen: netz98 und NIDAG. Diesmal waren wir wieder bei letzteren im Mainzer Zollhafen zu Gast (siehe Foto von Thomas).

Nils Adermann, einer der Entwickler von Composer, momentan dem Dependency Management-Tool für PHP schlechthin, stellte uns das Tool vor und beschrieb anschaulich, was man damit alles machen kann. Und das ist deutlich mehr, als es auf den ersten Blick scheint. Vielen Dank an Nils für diesen höchst interessanten Vortrag.

Im Anschluss gab's dann wie immer noch einen intensiven Erfahrungsaustausch über Composer und diverse andere Themen, die den Teilnehmern unter den Nägeln brannten. Dafür sind wir nach nebenan ins Schröder's umgezogen, wo es auch lecker zu essen und trinken gab. Vielen Dank an die NIDAG für die Räume, Nils für seinen Vortrag, und alle Teilnehmer fürs teilnehmen und mitmachen! Bis zum nächsten Mal!