Donnerstag, 24. Januar 2008

Zope ist nicht simpel - und das ist auch gut so

Dr. Dewar und Dr. Schonberg haben in zwei Artikeln dargestellt, warum Softwareentwicklung mehr ist als "einfach mal was zusammenzustöpseln":
Beide Artikel bestärken meinen Eindruck in Bezug auf die handwerklichen Fähigkeiten, die ich von Software-Entwicklern erwarte und wie diese von Hochschulen durchgängig enttäuscht werden.

Auch die typische Argumentation gegen Zope, dass es nicht "einfach sei", halte ich nicht für ein Problem, sondern für einen Vorteil. Nur weil es nicht simpel ist können wir komplexe und anspruchsvolle Probleme lösen und mehr tun als "zufällig die richtigen Komponenten raussuchen".

Ich möchte damit nicht für sinnnlos komplizierte Systeme argumentieren. Einfachheit darf aber nicht mit Simplizismus verwechselt werden.

Donnerstag, 20. Dezember 2007

Datenbank-Generationen: Am besten immer initialisieren

Wir merken uns: wenn man in der Zukunft eventuell Datenbankgenerationen in seiner Zope-3-Anwendung/Bibliothek/... benutzen will, dann sofort eine leere Generation anlegen.

Der Grund: Wenn die Generations-Infrastruktur noch nicht initialisiert ist, dann wird, wenn vorhanden, immer die `install`-Methode ausgefuehrt. Diese versetzt die Datenbank aber direkt in die aktuellste Generation.

Hat man keine `install`-Methode und eine neue Datenbank wird die Datenbank ohne irgendetwas zu tun sofort in die aktuellste Generation gehievt.

Im optimalen Fall beginnt man also immer bei 0. Beginnt man aber bei `None`, dann muss man den ersten Migrationsschritt immer noch in der Installation abbilden, was man eigentlich nicht sollte.

Donnerstag, 8. November 2007

Security-Target für Zope 3

Die Common-Criteria-Zertifizierung von Zope 3 geht wieder voran und wir haben einen konkreten Zeitplan, der die Arbeit bis zur Zertifizierung abdeckt. Als Zertifizierungstermin zielen wir März 2008 an.

Als ersten Schritt habe ich heute eine überarbeitete Version des "Security Target" (ST) zum TÜV geschickt und bin mal gespannt ob wir mit unseren Überarbeitungen jetzt eine finale Version produziert haben. Im Dezember wird es dann mit den anderen Dokumenten wie im ST beschrieben weitergehen.

Freitag, 26. Oktober 2007

Buzzword-Compliance

Mir ist diese Woche bei technorati ein Blog-Eintrag aufgefallen, der einen Wikipedia-Artikel zitierte und das Beispiel des Buzzword-Compliance-Artikels aufführte. Ich will das Beispiel hier nicht selbst wiedergeben, habe aber endlich mal den Artikel bei der Wikipedia aufgeräumt. Die alte Version steht hier, und ich wundere mich immer noch wer das mal formuliert hat ...

Dienstag, 16. Oktober 2007

Zope auf der Systems 2007

Die DZUG wird auf einem Gemeinschaftsstand mit gocept und syslab Zope auf der Systems in München vertreten. Neben den Informationsständen gibt es auch 3 Vorträge im Programm.

Details gibt es auf zope.de.

Montag, 10. September 2007

Web-Formulare mit Zope 3

Wir bei gocept bereiten uns gerade auf einen Sprint vor. In diesem Sprint wollen wir die Probleme und Erfahrungen der letzten Projekte aufarbeiten, die sich um Web-Formulare drehen.

zope.formlib ist momentan das Standardpaket mit dem wir arbeiten und bietet eine prinzipiell solide Grundlage. Vor einer Weile ist z3c.form erschienen, was einige Probleme der formlib zu beseitigen scheint. In der Vorbereitung zum Sprint evaluieren wir z3c.form als Grundlage unserer weiteren Bemühungen; wir wolle auf jeden Fall ein existierendes Projekt weiterentwickeln und nicht noch eine Baustelle aufreißen. Neben Code werden wir als Ergebnis auch die Dokumentation gängiger Patterns anstreben.

Hier eine Liste der Probleme die uns momentan umtreiben:
  1. Interface-Invariants validieren nur gegen Felder, die der Benutzer gerade bearbeitet hat
    Der Kontext und Werte von Feldern die im Formular nicht enthalten waren stehen nicht zur Verfügung.

  2. Werte nach der Validierung aber vorm Schreiben auf Attribute zu verarbeiten ist nicht möglich (z.B. um Passwörter zu codieren)
    • Im gleichen Zusammenhang: Validatoren scheinen etwas merkwürdig zu sein da sie die Daten modifizieren können (sollen).
    • Properties können helfen, sind aber schwierig
    • Evt. müsste man Feldern einen Mutator mitgeben
    • Noch eine Option: getrennte Interfaces mit Adapter bereitstellen um solche Werte ins Schema einfliessen zu lassen und auf dem Adapter eine Property definieren

  3. Constraint-Validierungen haben ein komisches Interface
    • True oder Exception
    • Fehlermeldung steht auf der Exception
    • Einige Constraints melden nur "Value too long" ohne dem Benutzer ausreichend Information zu geben
      • Problem liegt in zope.app.form.interfaces.IWidgetInputError und der Implementierung in der zugehörigen Klasse.
      • Diese Implementierung hält nicht was sie verspricht und das Interface widerspricht der Benutzung in den Tests bzw. im View.
      • Aufgabe: WidgetInputError sauber machen, so dass über die doc()-Methode eine i18n-MessageID zurückgeliefert wird.

  4. Layout-Engine
    • Eine getrennte Komponente um Formulare im Stil unseres Produktes "Jucon" zu layouten/generieren

  5. Widget-Definitionen
    • Interfaces der Widgets aus zope.app.form sind nur intern und via Subclassing gemacht
    • Wie verhält sich z3c.form in dieser Hinsicht?
    • Anscheinend sind alle Widgets neu definiert.

  6. Formulare mit ergänzenden Inhalten sind unsauber/unflexibel
    • Z.B. beim Einbinden von Suchergebnissen
    • Hier können Content-Provider oder Viewlets helfen.
    • Viewlets sind aber aufwändig zu deklarieren.

  7. Abhängig definierte Felder
    • Das typische Master-Slave-Szenario: Wert in Feld A auswählen so dass Feld B mit davon abhängigen Optionen gefüllt wird, natürlich via JavaScript
    • z3c.form und z3c.formjs scheint dafür noch keine fertige Lösung zu haben

Freitag, 31. August 2007

Stabilisierung von Zope 3.4

Zope 3.4 befindet sich seit einiger Zeit in der Stabilisierungsphase, wobei unser halbjährlicher Zyklus für den "Big Tree" mal wieder nicht eingehalten werden kann.

Mit Zope 3.4 stehen alle Zope-Pakete jetzt als Python-Eggs zur Verfügung, so dass man sich für seine Anwendung genau die Elemente aussuchen kann, die man benötigt. Zope wurde in etwa 180 kleine Pakete zerteilt, die nun jeweils ihren eigenen kleinen Release-Zyklus erhalten. Dadurch kann bei Egg-basierter Entwicklung auf Fehler und neue Funktionen deutlich flexibler reagiert werden. Ich finde, dass dies ein exzellenter Schritt ist um die Flexibilität von Zope 3 auf einer weiteren Ebene zugänglich zu machen.

Bevor demnächst die Zope 3.4 Release Candidate veröffentlicht werden kann gibt es eine TODO-Liste die alle noch als stabil zu releasenden Eggs auflistet. Mit diesen Eggs wird dann das klassische Release erzeugt. Diskussion zur Stabilisierung findet auf zope3-dev, ungefähr hier statt.