15. Mai 2009 

Sind 80% erreicht, ist das eine gute Leistung, 98% sind bereits eine hervorragende Leistung. Die letzten 2% machen besonders viel Arbeit. Diese 2% sind manchesmal der entscheidende Unterschied, ob was funktioniert oder nicht. In diesen letzten 2% steckt der Schlüssel ob sie zu Billigheimern gehören oder zu den Premiummarken. Die letzten 2%, das ist die

Liebe zum Detail – Attention to detail*

SVGGoodiesForm

Mitte Mai '09 erscheint TechTip 75745: Printing your structure using SVG.

26. Mai 2009: Danke für den Hinweis! Der TechTip ist nicht mehr erreichbar - Google findet noch :-)

Vollkommen überrascht sind die Anwender der V11, wenn ihnen klar wird, daß sie die Struktur ihrer Datenbank nicht drucken können. Das ist erstmalig in der 4D-Geschichte. Mir hat es geholfen die Struktur auszudrucken, um mit Bleistift und Radiergummi darüber zu brüten, mit anderen zu diskutieren oder einfach zum Dokumentieren. Schön, daß Vincent de Lachaux sich die Mühe für uns alle gemacht hat und den XML-Definitionsexport zu parsen und daraus ein SVG zu erstellen. Da sage nicht nur ich danke. Von der Komplexität sicherlich eine TechNote. Eine hervorragende Arbeit. Es sind 98% erreicht.

Das Bild zeigt eine Struktur, die von V2 bis zur V11 überlebt hat – deren Daten sowieso. Es klappt! Flott ist die SVG-Erzeugung auch. Das macht Mut für eigene SVG-Einsatzzwecke, die etwas mehr darstellen sollen.

Doch halt! Der TechTip heißt Printing your structure using SVG. SVG Goodies erzeugt das Bild, aber druckt es nicht.

Hier fehlen die letzten 2%, wenn es denn überhaupt so viel ist. Was noch zu tun ist steht im Kasten Lösungsvorschlag.

Lösungsvorschlag

Vorschlag zur SVG Goodies: legen Sie sich je einen Button zum Drucken und Sichern an.

Button Drucken

Erst ein Formular anlegen mit der verwendeten Variablen ◊Structure. Das Format dieser Bildvariablen auf Proportinal verkleiner setzen. Dann können Sie mit diesen Zeilen drucken, wenn Sie Print form("Prnt_Struct") mit Ihrem Formularnamen versehen:

PRINT SETTINGS
If (OK=1)
    Print form("Prnt_Struct")
End if

Button Sichern

Sichert mit diesen Zeilen das SVG als Bild auf die Festplatte
C_TIME($svgRef)
$svgRef:=Create document("";"SVG ")
If (OK=1)
    SAVE PICTURE TO FILE($svgRef;◊Structure)
    CLOSE DOCUMENT($svgRef)
End if

SVG exportieren

Um editierbares SVG zu erzeugen den zweiten Parameter auf ".svg" setzen
◊Structure:=svg_drawStructure (DOCUMENT;".svg")
und die Methode legt ein SVG-xml an die gleiche Stelle des Struktur-xml.

Code haben wollen :-)

Die kurze Rückmeldung zur TechNote ist hier zu Ende.

Doch ich höre seit Jahren

Wie es aussieht ist erst einmal egal …

… Hauptsache es läuft.

Das ist ein schlechter Ratschlag. Nach der Maxime gehandelt wäre Apple lange pleite. Tatsächlich sind viele Anwendungen in Firmen nach dem Motto Hauptsache es läuft gestrickt. Dazu auch Your company's app und dieser begleitende Artikel.

Es geht um die Liebe zum Detail. Eine Anwendung die gut aussieht funktioniert auch gut - umgekehrt ist paßt auch. Es ist kaum möglich allgemeingültig zu erklären, was Attention to detail ausmacht. Viel leichter ist zu zeigen, wo Mühe zum Detail fehlte. Es fängt an bei so banalen Dingen wie die

exakte Bezeichnung

Printing your structure using SVG ist nicht korrekt. Dieser Teil der SVG Goodies erzeugt ein SVG-Bild der Struktur. Korrekt wäre: Generating a SVG-picture from your exported structure-discription. Und ließe sich ergänzen um den Hinweis, im Handbuch sei unter SVG zu finden, wie man dieses drucken oder auf Platte schreiben könne. Hier fehlten wenige %.

Defensiv programmieren

Die SVG Goodies lesen eine von 4D erzeugte XML-Beschreibung der Datenbank ein. Ich kann nachvollziehen, das das dazu verleitet, nicht so viele Tests zu fahren, als läse und interpretierte man irgendein XML. Diese Fehlermeldung hat mich deshalb überrascht:

parser

Es ist nichts passiert. Fehlermeldung wegklicken und das Bild der Struktur ist da. Auch hier fehlen wenige %.

Das SVG ist kein Abbild der V11-Darstellung. Es gleicht mehr den bekannten bisherigen Darstellung, seit Version 6 in Farbe. Hier fehlen nicht nur ein paar %, das wäre ein neuer Ansatz und verdiente in 4D integriert zu werden.

Wie zeichnet 4D die Datenstruktur auf Design-Ebene? Andererseits, wäre die Datenstruktur auf Design-Ebene SVG, hätte 4D bereits einen einfachen SVG-Editor entwickelt.

Wie das Ausdrucken trotzdem klappt habe ich im Kasten Lösungsvorschlag beschrieben.

Dort ist auch die Methode zu finden, wie man aus dem SVG ein SVG-Dokument auf die Festplatte sichert. Adobe Illustrator kann das SVG öffnen und stellt es dar. Es ist allerdings nicht editierbar, weil es als Bild rausgeschrieben wurde.

Safari kann SVG direkt darstellen. Das über den Button Sichern rausgeschriebene SVG ist ein Bild und Safari kann das nicht darstellen.

Die Methode svg_drawStructure erzeugt per DOM EXPORT TO FILE ein editierbares SVG, wenn als zweiter Parameter ".svg" übergeben wurde.

Dieses SVG zeigt Safari sofort an, wie es 4D V11 auch kann. In Illustrator kommen die Verknüpfungslinien nicht an. Als Editor ist Illustrator bereits mit einer nicht sehr großen Struktur überfordert. Ein Element anfassen und zu bewegen versuchen läßt Illustrator in eine komplette Reinterpretation fallen. Das dauert, so viel Kaffee verträgt niemand. Im illustrierenden Bild ist der blaue Umriß nach dem Versuch der Bewegung zu erkennen. Dann habe ich Illustrator abgeschossen.

Illustrator

Falls jemand einen guten SVG-Editor für MacOSX kennt, dann würde ich den gerne kennenlernen. No, InkScape is no serious contender und Sketsa genau so wenig. Da gibt es angenehmere Möglichkeiten, Geld aus dem Fenster zu werfen. Lernen eigentlich die Java- und Dingsbums-Programmierer nichts über Userinterface beyond dBase and FoxPro. Beide Anwendungen sind tiefstes Mittelalter.

4D Themen: Berichte in Arbeit