UNB Components (UNB2)
Neuentwicklung nach dem Vorbild des UNB mit dem Ziel, Foren universeller zu gestalten und einfacher in vorhandene Web-Anwendungen zu integrieren.
Archivierter Inhalt: Diese Anwendung ist derzeit inaktiv und möglicherweise veraltet, nicht mehr gewartet oder funktioniert nicht mehr.
Eine neue Art von Kommunikationsplattform
UNB2 („UNB Components“) ist ein Grundsystem, das Funktionen zum Umgang mit Mitteilungen und deren Klassifizierung bereitstellt, wie sie in Webforen, Wikis, CMS, Fotoalben, Weblogs oder Bug-Trackern angewendet werden. Darauf aufbauend kann eine Oberfläche entwickelt werden, die alle diese Fähigkeiten mehr oder weniger spezialisiert zur Verfügung stellt. Als erste Beispielanwendung entsteht ein hochgradig integrierbares Webforum. Es ist schon einiges an funktionsfähigem Code entstanden, aber es fehlen auch noch einige interessante und innovative Teile des Gesamtkonzepts.
Worum geht es?
Webforen sind heute weit verbreitet. Wikis und Weblogs sind dann oft nicht mehr weit. Kommt dann noch ein klassisches CMS oder ein Issue Tracker dazu, haben wir so ziemlich alle aktuell bekannten Formen von Kommunikationsplattformen beisammen. Doch das ergibt meist eine Sammlung mehr oder weniger friedlich nebeneinander existierender Programme, die in der Regel mit ihrer eigenen Bedienoberfläche, Benutzerverwaltung und vielleicht auch noch in unterschiedlichen Programmiersprachen verfasst daherkommen. Will man diese Systeme vollständig integrieren, hat man erstmal eine Menge Arbeit vor sich. Später muss man sich noch dazu fragen, ob es so praktisch ist, für jede Art von Informationsverwaltung oder Kommunikation eine spezielle Anwendung zu verwenden, ist das doch auch mit Einbußen in der Bedienbarkeit und Übersichtlichkeit verbunden.
Das ist die Ausgangssituation. Eine logische Lösung für diese Probleme ist meines Erachtens die Entwicklung eines Systems, das die Funktionen der anderen ersetzen kann, indem es Informationen aus unterschiedlichen Formaten vereint und Arbeitsabläufe durch Gemeinsamkeiten in der Bedienung vereinfacht. Wikis enthalten Artikel, die mit einem Schlüsselwort adressierbar sind und die versioniert sind. Webforen enthalten Beiträge, die einen Diskussionsverlauf darstellen und auf die man antworten kann. Weblogs sind im Prinzip ähnlich. Issue Tracker enthalten z. B. Fehlerberichte, die eine Reihe von Attributen haben und auf die man wieder antworten kann. All diese Ausprägungen von Software weisen vergleichbare Konzepte auf, die man ebensogut unter ein Dach packen kann. Ein, ich nenne es mal Wikiforum, das Beiträge enthält, die direkt adressierbar sind und so als eigenständige Webseiten verwendet werden können, die versioniert sind, um Änderungen zu verfolgen, die zu Diskussionen zusammengefasst sind und die ohne eine starre Einordnung in einzelne Unterforen frei attributiert werden können. Das wäre dann das Ziel.
Auf diesen Webseiten möchte ich Informationen, Konzepte und Erfahrungen zusammentragen, die in ihrer Gesamtheit eine solche Kommunikationsplattform beschreiben. Wenn ich alles soweit zusammengestellt habe, will ich im aktuellen UNB-Forum eine neue Kategorie zur Diskussion dieser Beschreibung einrichten. Bis dahin nehme ich gerne auch E-Mails mit Meinungen und Vorschlägen an.
Kompatibilität:
Download
unb2.20110222.7z852 KiBUNB2-Version vom 22. Februar 2011, siehe Anmerkungen unten
Vorherige Versionenunb2.20110206.7z791 KiBUNB2-Version vom 6. Februar 2011, siehe Anmerkungen unten
unb2.20100307.7z757 KiBErste Veröffentlichung vom 7. März 2010, siehe Anmerkungen unten
Änderungen
Über vier Jahre nach der ersten öffentlichen Ankündigung des Projekts und nach gelegentlichen Anfragen einzelner Interessierter habe ich mich nun dazu entschlossen, die aktuellen Arbeitsergebnisse zu veröffentlichen. Das System ist zwar bei weitem noch nicht fertig, aber die Dokumentation ist seit Anfang an dabei, um anderen die Hintergründe zu erklären, und am Beispiel meines Web-Fotoalbums kann man doch sehen, dass man durchaus schon was mit der aktuellen UNB2-Version anfangen kann. Im Folgenden ist die Verzeichnisstruktur des Archivs beschrieben:
-
demo_app/ – Beispielanwendung
- img/ – Bild-Ressourcen der Beispielanwendung
- _{foot,head}.inc.php – Kopf- und Fußzeile der Seiten. In _head.inc.php wird das UNB-Framework initialisiert.
- dynamic-complete.js – dynamic-lib-JavaScript-Bibliothek
- xml{form,server}.php – Demo der XML-Schnittstelle
-
doc/ – Dokumentation
- code_reference/ – Generierte Quelltextreferenz mit allen Klassen und Methoden (wird mit tools/codedoc.php erstellt)
- *.pdf – Entwicklerdokumentation, enthält eine ausführliche Projektbeschreibung, Modelldiagramme und Referenzen
- sql_setup/ – Installationsskripte zur Datenbankeinrichtung
- tools/ – Hilfsprogramme zum Generieren der Quelltextreferenz und zum Komprimieren der Klassendateien
-
unb_lib/ – UNB2-Klassendateien
- captcha_*.txt – Wortlisten zur Prüfbildgenerierung (CAPTCHA)
- unb_all.lib.php – Komprimierte UNB2-Bibliothek, enthält alle Klassen ohne Kommentare, Leerzeilen usw., für höhere Ausführungsgeschwindigkeit (wird mit tools/compress.php aus den anderen .php-Dateien erstellt)
- *.ttf – Schriftdateien zur Prüfbildgenerierung (CAPTCHA)
- unb2test.db – Leere SQLite-Datenbank mit eingerichtetem Schema
- unb_config.inc.php – Konfigurationsdatei, wird vom Setup und der Beispielanwendung verwendet
- unb_setup.php – Richtet Systembenutzer in einem leeren Datenbankschema ein, um die Verwendung der Anwendung zu ermöglichen
Die Projektsprache ist ausschließlich deutsch, d. h. jegliche Dokumentation ist in deutscher Sprache verfasst. Die Quelltextdokumentation ist dagegen in englischer Sprache verfasst, ebenso wie die Beispielanwendung. Es ist geplant, die Dokumentation zumindest teilweise auch ins Englische zu übersetzen. Eine Übersetzung der Beispielanwendung bietet ein Betätigungsfeld für die Implementierung von i18n.
Fortschritt der Implementierung:
Nach zeitweise langer Pause und sehr geringem Fortschritt der Arbeiten ging es in den letzten Wochen wieder bedeutend schneller voran. Die Basisklassen wurden teilweise überarbeitet und die Code-Architektur verbessert. Es sind außerdem neue Klassen dazugekommen, die HTML-Formulare automatisch verarbeiten und HTML-Formularelemente ausgeben. Dadurch beschränkt sich der Aufwand, eine UNB-basierte Anwendung zu schreiben, gemäß der ursprünglichen Zielsetzung auf wenige Aufrufe zum Einbinden der Bibliothek, Initialisieren und Verarbeiten der Eingaben. Die restliche Seite wird im HTML-Code erstellt und an den Stellen, an denen UNB-Elemente erscheinen sollen, genügt oft ein einziger Methodenaufruf der statischen UnbUi-Klasse. Etwas Logik ist natürlich auch hier noch erforderlich, um sinnvolle Inhalte anzuzeigen. Man muss sich an dieser Stelle aber nicht mehr um technische Details wie Feldnamen, Werterhaltung der Eingabefelder oder den gesamten Ablauf der Formularverarbeitung samt Datenprüfung kümmern. Außerdem ist die implizite Registrierung fertiggestellt. Damit kann man eine Mitteilung schreiben, ohne einen Account zu besitzen. Es ist nur die Angabe des Namens notwendig. Dabei wird automatisch ein Account angelegt und ein Authentifizierungs-Cookie im Browser abgelegt. Damit ist man ganz normal angemeldet und hat vollen Zugriff auf seine Mitteilungen und alle Benutzerfunktionen. Bei Bedarf können Anmeldename und -kennwort vergeben werden, um den neuen Account auch von anderen PCs/Browsern aus zu verwenden.
In diesem Rahmen ist auch eine neue Demo-Anwendung entstanden, die einem Webforum schon wesentlich näher kommt. Die aktuelle Entwicklung findet in dieser Oberfläche statt, die möglicherweise später auch als Beispiel-Anwendung veröffentlicht wird.
Momentan bin ich dabei, die neue UNB-Funktionalität in mein Web-Fotoalbum zu integrieren, um das Kommentieren von Fotos zu ermöglichen. Das Fotoalbum basiert bereits von Anfang an auf UNB2 und verwendet Attachments von Mitteilungen und (unsichtbare) Tags.
Der gesamte Code der UNB2-Klassen umfasst derzeit effektiv ca. 6 100 Codezeilen und (komprimiert) knapp 250 KiB. Das macht seit November 2007 fast eine Verdopplung des Code-Umfangs.
Der Kompatibilitätstest mit Oracle muss irgendwann wiederholt werden, da beim letzten Mal anscheinend etwas schief gelaufen ist. Das hat aber keine hohe Priorität, da ich nicht davon ausgehe, dass irgendjemand Oracle für Webanwendungen in dieser Größenordnung einsetzt.
Datenbankunterstützung:
Der Oracle-Datenbankserver wird voraussichtlich erstmal nicht unterstützt, da es damit nicht möglich ist, portablen Code zum Erzeugen von neuen Primärschlüsseln zu verwenden. Weder SELECT ... FOR UPDATE noch LOCK TABLE werden ausreichend unterstützt. Mit der angestrebten Datenbankkompatibilität auf ANSI-SQL-Ebene wird es also leider nichts, weil alle bekannten Systeme (IBM DB2 ist weiterhin ungetestet) nicht ausreichend kompatibel zueinander sind. Bleiben vorerst also nur MySQL und SQLite übrig. PostgreSQL erfordert eine separate Version großer Abfrageausdrücke, Oracle erfordert die Verwendung von Sequences, MSSQL erfordert die Umschreibung sämtlicher Tabellen-Joins (und möglicherweise weitere Anpassungen). Doppelter Code ist schwerer zu warten, Sequences erfordern eine deutliche Ausweitung der Datenbank-Abstraktionsschicht und das Umschreiben aller Joins kommt schlicht nicht infrage.
Dateiverwaltung:
Tags werden nun versioniert, alle dadurch entstehenden Probleme und Unannehmlichkeiten konnten gelöst werden. Die Methoden zur Verwaltung von angehängten Dateien im Dateisystem oder der Datenbank sind jetzt fertig. Die Datenbankkonfiguration wird aus einer Datei eingelesen. Der komprimierte Quelltext ist jetzt 146 KiB groß. Leider geht die Entwicklung derzeit sehr langsam voran, da ich nicht viel Zeit dafür übrig habe. Aber das wird sich auch wieder ändern.
Versionierte Tags?
Vor kurzem bin ich zur möglichen Vereinfachung des Konzepts auf eine wegweisende Frage gestoßen: Sollen die Tag-Zuordnungen von Beiträgen gemeinsam mit dem Inhalt versioniert werden? Das könnte die Dateiverwaltung deutlich vereinfachen, aber auch zu mehr Aufwand bei einer Suchanfrage führen. Alle Hintergründe und Details sind im Boardunity-Forum nachzulesen. Leider bislang ohne Reaktionen... Ich würde mich über etwas Feedback und neue Gedanken freuen.
Basis-Klassen implementiert
In den letzten Wochen habe ich angefangen, die Basis-Klassen zu implementieren, die den Umgang mit Mitteilungen, Revisionen, Tags und Benutzern ermöglichen und dafür auf die Datenbank zugreifen. Datenprüfung, Zugriffsschutz und Moderationsfunktionen sind bereits enthalten. Derzeit entsteht die Verwaltung hochgeladener Bilder und Dateien, anschließend kommt die Suchfunktion dran. Dies ist nur ein Status-Update, heute gibt’s nichts weiter anzuschauen. Diese Basis-Klassen enthalten keine „schöne“ Benutzeroberfläche, zum Testen verwende ich eine einfache Formularsammlung, die noch nicht annähernd an das geplante Zielsystem erinnert. Ein paar technische Daten der bisherigen Arbeit:
Erforderliche PHP-Version: | 5.1.2 mit PDO und Multibyte Strings |
Verwendete PHP-Features: | Klassen (keine globalen Funktionen), Methodensichtbarkeiten (z. B. Singletons und statische Klassen), Exceptions, Konstanten |
Erforderliche Datenbank: | MySQL 5.0.15 mit InnoDB, SQLite 3.2.3 (PostgreSQL 8.2 mit Einschränkungen, Oracle noch nicht getestet, SQL Server 2005 wird nicht unterstützt) |
Verwendete Datenbank-Features: | Prepared Statements, Transaktionen, referentielle Integrität (in SQLite durch Trigger umgesetzt), Subqueries, persistente Verbindungen |
Effektive Codezeilen: | knapp 3 500 |
Minimale Codegröße: | 130 KiB (ausführbar komprimiert auf ca. 55%) |
Zugangssteuerung und Moderation ausgetüftelt
Ich habe nun meine Gedanken zu den Themen Zugangssteuerung und Moderation geordnet und präzisiert und eine geeignete Datenstruktur entworfen. Herausgekommen ist eine schon recht konkrete Beschreibung des geplanten Systems.
Markup-Übersetzer implementiert
Mit leichten Änderungen der zuvor spezifizierten Syntax habe ich nun eine erste Version des Markup-Übersetzers fertiggestellt, der den Klartext der Beiträge wie vom Benutzer eingegeben in HTML übersetzt, um ihn formatiert im Browser anzuzeigen. Die größte Abweichung in der Syntax ist, dass nicht mehr // und ** für Kursiv- und Fettdruck der Schrift verwendet werden, sondern ähnlich der Wikipedia-Schreibweise zwei, drei oder mehr Apostrophe zur Hervorherbung von Text dienen. Der Text erscheint dann ''kursiv'', '''fett''' oder ''''kursiv und fett''''.
Im Demo-Formular kann man das gute Stück gleich ausprobieren.
Formulierte Ideen zur Benutzerschnittstelle
Feedback
Wenn du auch deine Meinung zum UNB2-Entwurf kundtun und den einen oder anderen Vorschlag einbringen möchtest, kannst du dich gerne an der Diskussion im bestehenden UNB-Forum beteiligen. Auch noch nicht registrierte Benutzer können dort Beiträge schreiben.
Referenzen
Lizenz und Nutzungsbedingungen
Diese Software wird unter den Bedingungen der GNU-GPL-Lizenz Version 3 veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download oder auf der GNU-Website.
Statistische Daten
- Erstellt am 2007-10-25, aktualisiert am 2011-10-15.
- Ca. 19 030 Codezeilen, geschätzte Entwicklungskosten: 19 000 - 76 000 €