Best practices in papayaCMS 5 – oder: Sinnvolle Aufteilung der Modulklassen.

Vor wenigen Tagen wurde papayaCMS 5.0 veröffentlicht. Da eventuell der ein oder andere mit dem System nun herumexperimentiert, wird man als Entwickler auch schnell Module entwickeln wollen. Vor allem bei grĂ¶ĂŸeren Modulen (bestehend aus vielen Ausgabe-Klassen) empfiehlt sich eine weit granulĂ€rere Aufteilung als zwingend vorgeschrieben ist.

Ich erspare mir die ErklĂ€rung der Basispapayasystems, dafĂŒr möge man bitte die entsprechenden Dokumentionen (PDF) konsultieren. Nur so viel sei gesagt: Um die Daten von der Datenbank auf den Bildschirm zu bekommen, braucht man grundsĂ€tzlich nur eine Ausgabeklasse (Seite, Box, usw.) und ein entsprechendes XSL-Template. Aber, aber..

Ineffiziente Strukturierung der Klassen
Ineffiziente Strukturierung der Klassen

Prinzipiell gilt: MVC-Kenner werden einen sehr leichten Einstieg haben, die anderen sollten bei Fragen zunÀchst diese Thematik verinnerlichen.

Damit eine Klasse Zugriff auf die Datenbank hat, muss es von base_db (sys_base_db.php) abgeleitet werden. Vor allem bei kleinen Seitenmodulen passiert es hĂ€ufig, dass der Entwickler die Kurzversion nimmt: Generalisierung der Datenbankklasse, 1-2 Queries und XML-Ausgabe. SpĂ€testens, wenn man die gleiche FunktionalitĂ€t – etwa „last blog post titles“ – nicht nur als Seiten- sondern auch als Boxmodul benötigt, entsteht doppelte Code. Doppelter und redundanter Code. Schlecht. Ein guter Ansatz, um die ZustĂ€ndigkeiten zu prĂŒfen und zu ermitteln, ob Operationen sich nicht generalisieren und delegieren lassen können. Und ja, wir kommen dem Ziel MVC damit praktisch sehr nahe.

Alleine aus diesem praktische Grunde (und selbstverstĂ€ndlich ist die Verwendung von Delegation grundsĂ€tzlich in Modulsystem zu befĂŒrworten) empfiehlt sich der Einsatz einer Datenbasisklasse. Diese Klasse erweitert die o.g. Datenbankklasse, die Ausgabemodule instanziieren nur noch diese Basisklasse. Und fĂŒr unsere Freunde der notorischen Delegationsverweigerer: Mit „Seitenklasse erweitert Datenbankklasse“ kommt ihr nicht weiter… und das gilt selbstverstĂ€ndlich auch fĂŒr alle anderen Arten von Modulen. TatsĂ€chlich ist hier Delegation unbedingt notwendig.

Ein weiterer Vorteil ist die bessere Wartbarkeit und Übersichtlichkeit (vgl. MVC). SelbststĂ€ndlich werden auch schreibene Operationen in dieser Klasse implementiert. Der Einsatz von Interfaces oder mehrerer Datenbasisklassen steht jedem frei. Man sollte aber nicht mit Kanonen auf Spatzen schießen, ein komplexes System wird durch mehr KomplexitĂ€t nicht wirklich einfacher.

Beispiel mit Kompetenzen: Delegation
Beispiel mit Kompetenzen: Delegation

Die weitere Aufgabe des Ausgabemoduls (vgl. Controller) ist natĂŒrlich auch die Ausgabe.. ja, kein Witz 😉 Auch hier gibt es eine Ă€hnliche Konstellation wie bei den Datenbankabfragen, aber in der umgekehrten Sicht: Es gibt in grĂ¶ĂŸeren System hĂ€ufig gleiche oder Ă€hnliche Ausgaben. Auch hier kann die Faulheit einen schnell dazu verleiten, den XML-Code im Controller selbst zu schreiben – ist ja praktisch. Aber auch hier gilt: SpĂ€testens wenn man selber [beim Refactoring] anfĂ€ngt, und klasseninterne Helpermethoden zur Sub-XML-Generierung zu bauen oder gleichen XML-Code an mehr als 1-2 Stellen verwendet.. richtig: Delegation! Hier empfiehlt sich der Einsatz einer Ausgabebasisklasse. Jene Klasse hat im Wesentlichen nur eine Aufgabe: FĂŒr einen oder mehrere Parameter (idR eine Datenarraystruktur) ein geschĂ€ftsklassenabhĂ€ngiges XML zu bauen. Es gibt weder eine Verbindung zur Datenbank noch zu anderen Ausgabemodulen.

Ebenfalls fĂŒr diese Klassen gilt: Eine weitere strukturelle Aufteilung der Ausgabebasisklassen kann, muss aber nicht vorteilhaft sein.

SelbstverstĂ€ndlich lassen sich beide Klasse auch in Nicht-Ausgabemodulen verwenden, etwa einem Connectormodul. Das ist vor allem fĂŒr Module interessant, die bestimmte Daten und/oder XML (aus welchen GrĂŒnden auch immer) weitergeben mĂŒssen.

Tipp 1: Vor allem bei mehreren Seiten- oder Boxmodulen kann es durchaus sinnvoll sein, eine gemeinsame Oberklasse (base_myplugin_content) zu erstellen. Hier lassen sich auch direkt die notwendigen Basisklassen korrekt instanziieren.

Komplexes Beispiel mit Oberklassen fĂŒr Module
Komplexes Beispiel mit Oberklassen fĂŒr Module

Tipp 2: Die Verwendung des Singleton-Pattern steht einem frei: In der Regel hat es aber wenig Sinn, die Datenbasisklasse mehrfach zu erstellen (kann vorkommen, wenn Boxen in Seiten des gleichen Modules auftauchen). Daher: getInstance().

In der Zusammenfassung:

  • Trennung der ZustĂ€ndigkeiten und Verwendung von Delegation, aber: Generalisierung geht auch
  • Verwendung von Datenbasisklassen, bspw. base_myplugin_data extends base_db
  • Verwendung von Ausgabebasisklassen, bspw. base_myplugin_output extends base_object
  • delegierte Verwendung der o.g. Klassen in Seiten- und Boxmodulen

papaya CMS 5 released, neue Homepage

Die papaya Software GmbH, die das kostenlose (GPL) PHP-CMS und -Framework papaya CMS entwickeln, hat nun endlich(!) die neue Version veröffentlicht – und gleichzeitig auch einen komplett neuen Homepage-Relaunch vollbracht.

Mal im Ernst Jungs, wurde auch Zeit. Haut rein! *zwinker*

papayaCMS 5 lohnt sich definitiv, vor allem fĂŒr Anwender der 4er-Version. Kann ich aus lĂ€ngerer praktischer Erfahrung daher nur empfehlen.

In diesem Sinne: Happy Birthday, alles Gute & weiter so an die ehemaligen Kollegen 🙂

Ja, das schöne Bild ist von Euch geklaut. Sieht halt so schön aus 🙂

Die Sache mit meinem Blog und Google…

… einerseits verirrt sich kein Schwein auf meinen Blog, dann aber taucht mein Blog auf 10. Position auf, wenn man nach „fusion charts extjs“ sucht. Ohne entsprechenden Content!!

Nun gut, ich habe mir erlaubt, letzte Woche ein paar Links zur Integration von Fusion Charts in ExtJS zu bookmarken (und Delicious hÀngt ja rechts im Kasten). Aber das Google das so ernst nimmt, also ne..

Die Sache mit den Kurzdomains…

… kann ja nicht so ganz sauber gelaufen sein. Anders kann ich es mir ja nicht erklĂ€ren, wieso da die meisten Domains unter wenigen Personen / Firmen aufgeteilt sind. Die Grafiken zeigen die akkumulierten Werte je Person und Firma – Werte mit Domains mit 5 oder weniger habe ich aus GrĂŒnden der Darstellung aus der Wertung genommen. Verzerrt natĂŒrlich das Bild und die Statistik..

Thawte Personal E-mail Certificates discontinued

Gerade eben, trudelte per Mail ein:

Important ThawteÂź Personal E-mail Certificate Holder Notice
Thawte Personal E-mail Certificates and Web of Trust are being discontinued

Over the past several years, security compliance requirements have become more restrictive, while the technology infrastructure necessary to meet these requirements has expanded greatly. Despite our strong desire to continue providing the Thawte Personal E-mail Certificate and Web of Trust services, the ever-expanding standards and technology requirements will outpace our ability to maintain these services at the high level of quality we require. As a result, Thawte Personal E-Mail Certificates and the Web of Trust will be discontinued on November 16, 2009 and will no longer be available after that date.

Deciding to conclude these services was a difficult decision for us to bear, specifically because of the community that has been built around these products over the years.

To express our gratitude and sincere appreciation for being a part of our Thawte community, we would like to offer you up to $100.00 off the purchase price of our SSL and/or code signing certificates.

If you would like to take advantage of our offer, please forward this email to our sales department. Their contact details are listed at the foot of this message. Please note that this offer expires on November 16, 2009.

We have also made a special arrangement with VeriSign regarding replacing your personal email certificate. VeriSign’s exclusive offer to you is for a FREE 1-year replacement personal email certificate – a $19.95 value. This offer will be open for 2 months after the service is discontinued and will no longer be available after January 16, 2010.

Wir machen die Welle, wir sind die Welle.

Jetzt ist es schon ein paar Monate her, als Google mit „Google Wave“ eine neue Art der Kollaboration fĂŒr Teams vorstellte. Eigentlich ist das ganze auch nicht viel neues, nur eben wie bei GoogleMail – einfach(?), andersneu, google. Seit Anfang Oktober verschickt nun Google in Schritten Einladungen an Interessierte (Googleaccount-Inhaber), und obwohl ich mich bereits vor Wochen in die Voranmeldung eintrug, hatte ich bis gestern keinen Erfolg. Ob nun durch Google oder durch eine freundliche Einladung seitens eines Bekannten, wie auch immer: Die Einladung trudelte schließlich heute frĂŒh morgen endlich ein.

Ersteindruck

ZunĂ€chst sticht natĂŒrlich das neue Design hervor; was man auch bereits aus den Videos kennt, könnte das Interface durchaus Potenzial auch fĂŒr die anderen Anwendungen haben.

Da leider nur ein Kontakt (nĂ€mlich mein mutmaßlicher Werber) ebenfalls einen Wave-Account hat (man erhĂ€lt ĂŒbrigens eine zusĂ€tzliche, meines Erachtens derzeit ĂŒberflĂŒssige Adresse: deingoogleaccount at googlewave.com), war das Ausprobieren relativ unspektakulĂ€r. Wenig los, langweilig. Viele Features sind sicherlich auch nicht freigeschaltet, so gibt es im Moment funktional quasi nur den Echtzeitchat mit ĂŒblichen Formatierungen, allerdings mit Video und Bild. Spiele sind derzeit noch nicht zu sehen. (Update, siehe unten)

Feldtest? 🙂

Erst als YuccaTree zu einem Test einlud, konnte man sich einen ernsthafteren Eindruck machen: Bei ĂŒber 40 anwesenden und geschĂ€tzten 10 aktiven Personen immerhin etwas.

Zusammengefasst lÀsst sich sagen:

  • Echtzeitchat ist auf jeden Fall „nice“ und interessant – ob er auch produktiv interessant ist, muss man sehen. Es funktioniert genauso wie im Video: Man sieht (Label mit Namen), wer gerade wo schreibt.. man kann nicht nur Texte (Formatierungen fett, kursiv, Hintergrundfarbe, Vordergrundfarbe, …), sondern auch GoogleMaps, Bilder und (Youtube)-Videos verlinkenintegrieren (werden in der Wave angezeigt und sind dort abspielbar).
  • Auf dem Safari4 (OSX 10.6) und einem technisch gesehen nicht ganz 3 Jahre alten MacbookPro (Intel, C2D) lief die Anwendung sehr schnell. Andere Nutzer mit Firefox bestĂ€tigten das, andere Nutzer wiederum klagten ĂŒber eine langsame Anwendung (bemerkbar am verzögerten Tippen).
  • Synchronisationsprobleme: In der großen Wave hatte ich persönlich kaum Probleme; eine eigene Testwave musste ich jedoch ganze fĂŒnf Mal bearbeiten, um einen simplen Plaintext reinzuschieben.
  • Interface-Probleme: Vor allem Popups scheinen nicht fertig zu sein, manchmal fehlt Abbrechen/Schließen (Escape hilft aber immer, Pluspunkt hinsichtlich MCI)
  • Inhalte wie Videos landen bei mir nicht im Editor = kann ich nicht posten. Andere haben es aber erfolgreich geschafft.

Spontane VerbesserungensvorschlÀge

  • Besseren Feedback ĂŒber den Lade- und Synchronisationszustand geben. Beim Laden hat man teilweise den Eindruck, als wĂŒrde gar nichts passieren (nirgendswo ein Spinner zu sehen) – das geht besser.
  • Sehr wohl gibt es einen besonderen Status links oben (ĂŒbrigens schon nettes Detail, diese Welle ist auch noch animiert).. aber dieser Zustand ist nur nach einem Speichern einer Wave fĂŒr kurze (oder auch nicht) Zeit sichtbar.

Nachtrag (08.10.09, 14:25)

Doch, es gibt sie: Wave Extensions.