Skip to content

Leistungsschutzrechtprotestplugin

Nachdem Ende letzter Woche das Leistungsschutzrecht für Presseverleger im Bundestag verabschiedet wurde, spülte meine Timeline das Wordpress-Plugin vom D64 Zentrum für Digitalen Fortschritt wieder in meine Aufmerksamkeit. Das Plugin lädt eine Blacklist aus dem Netz, in der die Domains von Verlagen gesammelt werden, die das LSR unterstützen. Mittels dieser Liste lenkt es Links zu den Verlagsseiten, die in Blogartikeln enthalten sind, auf eine Hinweisseite zum LSR um:

Coole Idee. Ein kurzer Blick auf GitHub sagte mir, dass es nicht schwer sein würde, das Plugin für Serendipity zu adaptieren. Gesagt, getan.

"Leistungsschutzrechtprotestplugin" vollständig lesen

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

FrOSCon 2012

Der August ist bei mir ganz offensichtlich der Monat der (Un)Konferenzen. Daher folgt ein kurzer Nachbericht zur diesjährigen FrOSCon, die am vergangenen Wochenende in Sankt Augustin stattgefunden hat. Wie in den vergangenen Jahren auch bin ich nur für einen Tag - den Samstag - hochgefahren und kann somit nur von einer "halben" Konferenz berichten ;-)

Wie immer kann ich nur von den Sessions berichten, die ich auch selbst besucht habe. Bei meiner Planung half mir übrigens die Giggity-App für Android, die das Programm der FrOSCon schon direkt mitliefert - sehr praktisch. Zum "Aufwärmen" nach der Begrüßung durch den Dekan setzte ich mich in Kristian Koehntopps spontanen Workshop über MySQL-Performance, der wir erwartet interessant und mit netten Anekdoten gespickt war.

Anschließend ließ ich mir von Tobias und Gordon über Sinn und Unsinn von Domain Specific Languages (Slides) erklären. In ihrer Präsentation findet sich auch folgender, nicht ganz erst gemeinter, dafür aber umso häufiger geretweeteter Satz:

Der ernsthafte Teil lieferte aber eine ganz praktische Einführung in die Verwendungsmöglichkeiten von DSLs. Die Keynote zu Wikidata dagegen enttäuschte mich einigermaßen. Das durchaus interessante und wichtige Thema wurde IMHO nur oberflächlich betrachtet und etwas umständlich vorgetragen. Vielleicht ist das Projekt einfach noch zu jung, oder fehlen wirklich die Visionen, was man mit den Daten über die Wikipedia-Infoboxen hinaus noch alles anstellen könnte?

"FrOSCon 2012" vollständig lesen

Die Befreiung des Serendipity-Buchs

Das deutschsprachige Serendipity Handbuch hat "unser" Lead Developer Garvin Hicking bereits 2008 im Verlag OpenSource Press veröffentlicht. Das ist also bereits vier Jahre her, und vier Jahre sind im Leben einer Software eine lange Zeit, in der sich vieles ändert. Im Falle von Serendipity sind neue Features hinzugekommen, aber die Kernfunktionalitäten waren damals schon so stabil, dass große Teile des Buchs für Anwender und Entwickler immer noch eine wichtige Referenz darstellen.

Dirk Deimeke kam daher auf die Idee, die Inhalte des Buchs durch die Community weiter aktualisieren zu lassen, und hat bei Garvin und vor allem beim Verlag angefragt. Da Serendipity nun bei weitem nicht so verbreitet ist wie z.B. Wordpress, "saß" OpenSource Press noch auf einem ganz ordentlichen Restbestand von 850 Büchern, erklärte sich aber bereit, das Buch freizugeben, wenn ihm die 850 Bücher zum Preis von 1 € pro Exemplar abgenommen würden.

Auf Dirks Blog fanden sich relativ schnell viele Interessenten, die auch zu einer Spende bereit waren. Innerhalb einiger Wochen bekamen wir denn auch tatsächlich die benötigten 909,50 € zusammen, und auch die Frage nach der Lagerung von 850 dicken Wälzern ließ sich lösen.

Seit Ende März stehen nun die LaTeX-Quellen in einem Quelltext-Repository auf Github unter einer Creative Commons-Lizenz (CC-BY-NC-SA) öffentlich zur Verfügung. Momentan überlegen die Community-Mitglieder, wie die Dokumentation aktualisiert und vor allem anderen Anwendern zur Verfügung gestellt werden soll. Garvin ruft dazu auf, sich an diesen Überlegungen zu beteiligen.

S9y InfoCamp-Podcast 12 über Plugin-Entwicklung

Logo des inoffiziellen S9y-PodcastsDiese Woche haben die beiden Serendipity-Podcaster Matthias Mees und Robert Lender das Dutzend voll gemacht und die zwölfte Ausgabe des Serendipity-Podcasts S9y InfoCamp aufgenommen. Als Gäste mit dabei waren Grischa Brockhaus und meine Wenigkeit. Wir haben uns zu viert beinahe zwei Stunden über Plugin-Entwicklung für Serendipity, git und [GitHub](http://www.s9y.org/ Serendipity-Plugins auf GitHub), oEmbed und Openstreetmap, mobile Blogging-Clients und vieles mehr unterhalten.

Als unmittelbar Beteiligter fand ich es sehr kurzweilig, aber ich denke, der Podcast ist auch für Außenstehende trotz seiner Länge interessant geworden. Mit hat es jedenfalls sehr viel Spaß gemacht, und ich habe mich auch sehr über die Einladung gefreut. Würde ich es wieder machen? Auf jeden Fall!

Podcasten macht - zumal mit den richtigen Leuten - einen Riesenspaß. Ich habe sowieso das Gefühl, dass Podcasts gerade eine kleine Renaissance erleben, und ich kann jetzt besser denn je verstehen, warum das so ist. Ihr könnt euch jetzt aber selbst davon überzeugen, dass auch vier Menschen gleichzeitig miteinander aufnehmen können, ohne dass allzu großes Chaos dabei entsteht:

S9y-Infocamp-Podcast-Ausgabe-012.mp3 (82,2 MB)
S9y-Infocamp-Podcast-Ausgabe-012.ogg (59,1 MB)

Feedback dürft ihr gern hier im Blog hinterlassen, noch besser wäre es in diesem Fall aber, ihr würdet direkt auf der Podcast-Seite kommentieren.