Winfried und die Tool-Programmierung


Belljangler: „Immer noch nicht damit fertig, die Parametrierung der Dokumentem-Präsentation programmiert zu haben?“

Winfried Sobottka: „Nein. Ich denke mehr an die ultimative Lösung für HTML-Seiten als nur an die Dokumentenpräsentation, und arbeite zugleich darauf hin. Da ich Jahre lang so gut wie gar nicht programmiert habe, brauche ich Zeit zum Nachdenken.“

Belljangler: „Du achtest vor allem darauf, saubere Routinen zu erstellen, die so variabel sind, dass Du letztlich alles damit machen können wirst, wie man dem aktuellen Stand, soeben geschrieben, nun entnehmen kann?“

10 OPEN "build.0" AS #1 LEN=12:FIELD #1, 12 AS SATZ$
13 GET #1, 1:GET #1,1:SEITEN%=VAL(LEFT$(SATZ$,4)):CLOSE #1:
20 REM
21 REM ****++++**** Die Variable Seiten% gibt an, wieviele Seiten das Dokument umfasst
22 REM
30 DIM TEXT%(SEITEN%), seitenname$(seiten%), bildname$(seiten%),textname$(seiten%), grunddokument(seiten%)
45 OPEN "texte\texte.0" AS #1 LEN=1:FIELD #2,1 AS E$:FOR I=1 TO SEITEN%:GET #2,I%:TEXT%(I%)=VAL(E$):NEXT I%:CLOSE #2
46 REM ****++++**** in text%(i%) ist angegeben, ob es für Seite i einen Text gibt (1) oder nicht (0)
50 REM 
51 REM ******++++**** Vorlauf zum Einlesen aller notwendigen Daten dere Ebene 1 *******
200 FOR SEITE%=1 TO SEITEN%
211 seitenname$(seite%)= "form-"+RIGHT$("000"+RIGHT$(STR$(SEITE%),LEN(STR$(SEITE%))-1),3)+".php"
215 REM ****++++**** Seitennamen sind abgestellt in seitenname$(seite%), von form-001.php bis ggfs. form-999.php
251 IF SEITE%=1 AND SEITE%=SEITEN% THEN GRUNDDOKUMENT$(seite%)="gg-00.php"
252 IF SEITE%=1 AND SEITE%<SEITEN% THEN GRUNDDOKUMENT$(seite%)="gg-01.php"
253 IF SEITE%>1 AND SEITE%<SEITEN% THEN GRUNDDOKUMENT$(seite%)="gg-02.php"
254 IF SEITE%>1 AND SEITE%=SEITEN% THEN GRUNDDOKUMENT$(seite%)="gg-03.php"
260 REM ****++++**** GRUNDDOKUMENT von SEITE% in GRUNDDOKUMENT(SEITE%) abgestellt
270 NAMENSTEIL$= RIGHT$("000"+RIGHT$(STR$(SEITE%),LEN(STR$(SEITE%))-1),3): TEXTNAME$(SEITE%)="texte\form-"+NAMENSTEIL$+".txt"
280 REM ****++++**** TEXTNAME$(SEITE%) enthält PFAD und NAMEN des zugehörigen Erklärungstextes 
270 NAMENSTEIL$= RIGHT$("000"+RIGHT$(STR$(SEITE%),LEN(STR$(SEITE%))-1),3): BILDNAME$(SEITE%)="bilder\bild-"+NAMENSTEIL$+".jpg"
280 REM ****++++**** BILDNAME$(SEITE%) enthält PFAD und NAMEN des zugehörigen Erklärungstextes 
300 NEXT SEITE%
310 REM ******++++**** Vorlauf zum Einlesen aller notwendigen Daten der Ebene 1 beendet ***********************!!!!!!!!!!!!!!!!

Winfried Sobottka: „Systematische Ordnung und Abstellen aller notwendigen Inhalte in Vektoren oder Matrizen sind eine sinnvolle Sache, wenn man Tools schreibt. Nur auf dem Wege kann man ein bestimmtes Problem letztlich mit einem Minimum an Routinen ultimativ erschlagen. Das setzt natürlich voraus, dass man zumindest einfache Variable in allen Anweisungen und auch in LINK-Addressen und als Dateinamen nutzen kann.“

Belljangler: „Mit einem Basic-Programm willst Du die ultimative Erstellung von HTML-Seiten erschlagen?“

Winfried Sobottka: „Natürlich nicht. Es werden zwei Basic- Programme werden. Eines für die Overlay-Erstellung, eines für den Aufbau der HTML-Seiten aus einem Overlay.“

Belljangler: „Inklusive Tabellenverschachtelung?“

Winfried Sobottka: „Na klar. Natürlich bei beliebiger Verschach- telung.“
Belljangler: „Was werden die größten Probleme sein?“
Winfried Sobottka: „Ich brauche in jedem Falle die Generation 2 meiner alten Basic-Tools, notfalls arbeite ich damit dann auf einem DOS-Rechner. Das Textprogramm bietet fast alles, was ich für die Overlay-Erstellung brauche, es fehlen nur ein paar Features. Um fehlende Features einbringen zu können, muss ich Sachen aus dem Textprogramm hinauswerfen, die ich nicht brauche, weil das Programm in der Summe seiner Funktionen bereits an die äußersten Grenzen von Basic geht. U.a. enthält es eine Routine, mit der man sich mathematisch Ausdrücke inkl. Klammerrechnung ausrechnen lassen kann – es ist einiges drin, was hinaus kann. Den geschaffenen Platz muss ich u.a. dafür einsetzen, innerhalb des Textes Tabellensätze für Untertabellen in einem Verzeichnis anzulegen und dann auch direkt aufrufen zu können – ebenfalls in Form eines Overlays präsentiert von der Textverarbeitung. Von dem Overlay der Tabelle muss dann der Sprung sowohl zurück zur Mutter als auch hin zu den Kindern möglich sein. Man muss sich hierarchisch im Tabellensystem bewegen können.“

Belljangler: „Wirst Du das am Bildschirm programmieren?“

Winfried Sobottka: „Das wäre zumindest in meinem Falle Wahnsinn. Solche Sachen kann ich nur mit Papier, Bleistift und gutem Radier- gummi effizient programmieren. Auch den Umbau der Textverarbeitung kann ich nur effizient bewältigen, wenn ich das Programm komplett ausdrucke. Wer Abläufe programmieren will, die nicht ganz so einfach sind, kann nicht alles einfach in die Tasten hacken, wenn er gute Ergebnisse möglichst schnell erzielen will.“

Belljangler:“Wie soll das Anlegen oder Ändern einer Untertabelle aufgerufen werden?“

Winfried Sobottka: „Ich stelle mir das so vor: Im Overlay einer Seite oder einer Untertabelle gibt man an entsprechender Stelle einen Steuercode ein, z.B. $tab1$ für die erste Tabelle der Seite. Dann geht man mit dem Cursor auf dieses $tab1$, und drückt eine dafür vorgesehene Funktionstaste. Es öffnet sich ein Fenster, und abgefragt wird, wie viele Zeilen und Spalten die Tabelle haben soll, wie breit sie insgesamt sein soll, welche Breite die Spalten haben sollen, ob Überschrift oder nicht usw. Dann wird eine Tabelle für $tab1$ angelegt, falls diese noch nicht vorhanden ist. Ist sie angelegt, wird – nicht maßstabsgetreu, weil ja Textmodus – eine vereinfachte Darstellung der Tabelle ab dem Beginn des $tab1$ (automatisch) eingefügt, als ein- facher Rahmen, zum Beispiel blau unterlegt. Dann muss man in die Felder eintragen können, was man darin haben will, Text, Bilder, Untertabellen, wobei man alles als Konserven pflegen können muss. Legt man dann in den Feldern Untertabellen an, dann macht man das z.B. mit $UTAB$, muss sie anschließend von dort aus auch aufrufen können. Will man einen Text anlegen, dann macht man das z.B. mit $TEXT$, muss diesen Text dann auch aufrufen und bearbeiten können. Egal, auf welcher Hierarchieebene und in welchem Element man sich befindet – es muss zurück zur Mutter und hin zu den Kindern gehen, solange es welche gibt.“

Belljangler:“Eine Ansammlung von Tabellen und Elementverweisen als Mutter-Overlay?“

Winfried Sobottka: „Anders geht es nicht, wenn man absolute Flexi- bilität möglichst einfach erreichen will. Zugleich baut man sich so Bibliotheken auf, kann nach ein paar Projekten auf vieles Bewährtes zurückgreifen. Und in der Praxis wird es nicht allzu kompliziert werden  – die Darstellungsmöglichkeiten der üblichen Bildschirme verhindern es wohl, dass irgendjemand auf die Idee kommt, Tabellen über 100 Hierachie-Ebenen zu schachteln.“ Belljangler: „Hört sich nach einem größeren Projekt an…“

Winfried Sobottka: „Wird es wohl auch sein. Entsprechend will ich schrittweise so vorgehen, dass ich mit jedem einzelnen Schritt ein spürbares Mehr an Leistung in der Tool-gestützten Seitenerstellung realisiere, dabei aber eben alle Türen offen halte.“

Belljangler: „Wenn das Overlay Deinen Wünschen gemäß vollendet ist, dann wird der Rest ein geringeres Problem sein?“

Winfried Sobottka: „Die Umsetzung letztendlicher Elemente wird immer nach dem selben Schema laufen: Daten aus Konserven holen und an passender Stelle in die Programmdatei schreiben, stets nach dem selben Schema. Die Tabellen wiederum sind letztlich nur Klammern, die weitere Klammern (Tabellen) oder letztendliche Elemente umschließen. Man beginnt mit der ersten linken Klammer oben und hört mit der letzten rechten Klammer unten auf:

Start Obertabelle
Startzeile Obertabelle
Start Feld 1 Obertabelle
Startzeile Untertabelle 1
Feldinhalt 1 Untertabelle 1
……….
Abschluss Untertabelle 1
Abschluss Feld 1 Obertabelle 1
……….
Abschluss erste Zeile Obertabelle

Wenn man sich den nötigen Ablauf sauber aufschreibt und dann danach programmiert, dann ist es nicht halb so schlimm, wie es einem scheinen mag, solange man das Problem nicht durchdacht hat. Ohne Papier, Bleistift und Radiergummi könnte mich an solche und viele andere Dinge allerdings nicht heran wagen. Man braucht in solchen Fällen schon einen Programmablaufplan, bevor man anfängt, Programmcode zu schreiben. Im Grunde kann jeder HTML-Program- mierer die Umsetzung verschachtelter Tabellen programmieren, und er tut es immer nach dem selben Schema. Das Schema sitzt ihm im Blut, und wenn er es als Ablaufsplan formuliert, dann kann er im Grunde auch ein Tool schreiben, das ihm diese Arbeiten zukünftig abnimmt. Was ich an der Stelle vorhabe, ist nicht mehr als das, und es ist sicherlich nicht schwieriger, als die Berechnung beliebiger mathematischer Ausdrücke aus einem String heraus zu programmie- ren, wobei bis zu 99 Klammern, Grundrechenarten und Potenzieren zugelassen sind: In beiden Fällen ist auf letztendliche Elemente hinunter zu gehen, in beiden Fällen wird der Ablauf im Grunde nach einem Klammersystem gesteuert, das links mit einer öffnenden Klammer be- ginnt und rechts mit einer schließenden Klammer endet.“

Belljangler: „Keine Restriktionen des geplanten Tool-Systems?“

Winfried Sobottka: „Umfließender Text wird problematisch, weil der im Grunde nur Wysiwyg im Grafikmodus oder unter Verzicht auf Worttrennung gestaltet werden kann. Da müsste also Einzelfall bezogen „Hand angelegt“ werden. Mit dieser Restriktion werde ich mich allerdings in bester Gesellschaft befinden: Bisher kenne ich keinen Pagemaker für HTML-Seiten, der das Problem umfließenden Textes wirklich toll gelöst hätte.“
Dipl.-Kfm. Winfried Sobottka


https://belljangler.wordpress.com/2011/06/23/winfried-sobottka-die-hacker-und-an-hannelore-kraft-python-hello-world-php-staatsschutz-polizei-dortmund/

https://belljangler.wordpress.com/2011/02/08/dem-wahren-satanismus-auf-der-spur-karen-haltaufderheide-doris-kipsiekerannika-joeres-die-grunen-wetter-die-grunen-berlin-die-grunen-hamburg-die-grunen-koblenz-renate-kunast-die-linke-witten/

Winfried Sobottka an Hannelore Kraft u. @ die Hacker, 27.06.2011


Für Hannelore Kraft ist nur der letzte Teil sehr wichtig – es geht um ein schmieriges Verbrechen an mir, das nach meiner festen Überzeugung vom NRW-Staatsschutz ausgeht. Ich werde Hannelore Kraft persönlich – mit legalen Mitteln – zur Verantwortung ziehen, wenn die Angriffe auf mich nicht abgestellt werden. Mit einer PR-Wucht, die durch bisher nicht eingesetzte, aber sehr wirksame zusätzliche Mittel erreicht werden wird – in sehr naher Zukunft.

@ die Hacker

Ich war gestern z.T. unterwegs, und habe zum Teil viel geschlafen. Ich mache das Programm nach dem Schreiben dieses Beitrags fertig. Der Staatsschutz hat die Amplitude deutlich spürbar reduziert, aber sie setzen es fort. Aktuell Stakkato: Da-da-da-da-da-da-dang….

Ich habe noch eimal über die einfache Indexverwaltung nachgedacht, die ich im letzten Artikel vorgestellt habe. Sie ist im Prinzip nicht nur sehr einfach, sondern war tatsächlich bereits auf den Kisten ab 80286 DX sehr schnell. Wenn ich mir ansehe, wie schnell z.B. ein 300 KB Bild auf den heutigen Kisten skaliert wird – dann wird mir klar, dass man nach dem Prinzip meiner einfachen Indexverwaltung auch hunderttausende von Datensätzen auf heutigen Kisten sehr gut verwalten kann, wenn man eine Sprache wie Python nutzt.

Nach dem selben Grundprinzip – eigentlicher Index besteht nur aus numerisch gepackten Satznummern, deren Reihenfolge durch die Reihenfolge von Objekten bestimmt wird und diese damit auch wiedergibt (Objekte: Schlüsselwörter oder Zeilen eines Textes) lassen sich mit heutigen Rechnern und entsprechenden Sprachen im Grunde von jedem hocheffiziente Indexverwaltungen, Sortierprogramme und auch die Verwaltung der Zeilen einer Textverarbeitung schreiben.

Ich habe noch nicht nachgeforscht, ob diese Vorgehensweise bereits von anderer Seite dokumentiert wurde, werde sie aber so oder so in einfacher Darstellung dokumentieren, weil ich weiß, dass diese Dinge vielen Programmierern weiter helfen können. Ich habe es (vor Jahren) noch erlebt, dass der eine oder andere Kleinunternehmer, der sich ein Programm von einem „Bekannten“ hatte schreiben lassen, eine alphabetisch sortierte schriftliche Liste am Arbeitsplatz liegen hatte, der er die Satznummern entnehmen musste, anhand derer (anstelle eines alphanumerischen Schlüssels) er die Kundensätze in der Faktura aufrufen musste.

Und ich habe es (auf Nixdorff 8870) erlebt, wie ein junger Informatikstudent das Problem des Einfügens und Löschens von Textzeilen in einer Textverarbeitung zu lösen versuchte: Er speicherte zeilen als Datensätze für random-Zugriff, und verkettete jede Zeile mit ihrer Vorgängerin und ihrer Nachfolgerin über deren Satznummern. Funktionierte natürlich, aber damals kosteten Plattenzugriffe noch sehr viel Zeit, und sein Programm musste 301 Zeilen einzeln aus einer Datei lesen und zwei Zeilen verändert zurückschreiben, um Zeile 300 erstens finden und zweitens löschen zu können. Das dauerte spürbar viel zu lange für praktische Anwendung. Meine Textverwaltung hatte ich noch auf dem IBM-XT programmiert, und selbst auf dem lief sie auch bei langen Texten erträglich: Anhand einfacher Adressrechnung holte ich die Satznummern der jeweils auf den Display zu bringenden Zeilen Zeilen blitzschnell aus dem Indexbereich, und das Einfügen oder Löschen gingen ebenfalls sehr schnell. Und dabei sorgte die Verwaltung freier Datensätze auch noch dafür, dass die Random-Textdatei selbst bei intensiver Bearbeitung letztlich nicht überwiegend aus Leichensätzen bestand, während die höchste Satznummer in den Himmel gewachsen wäre. Das Ding war wirklich rund.

Auch bei langen Texten sah man auf dem Bildschirm nur ein sozusagen minimales Schlucken, weniger als eine Sekunde, und dann war eine Zeile eingefügt oder gelöscht. Auf einem System mit „unechtem“ 16 Bit-Prozessor (8 Bit-Datenbus), getaktet mit 4,77 MHZ (ich erwähne das, weil das ja kaum noch jemand weiß…). Pro Textzeile verwaltete ich dabei 158 Bytes – jeweils eine für das Zeichen, das andere für Farbe Hintergrund und Farbe Vordergrund, so dass man im Textmodus sichtbar „fett“ und so weiter schreiben konnte. Es ist wohl nicht übertrieben anzunehmen, dass ich sehr schnell reich geworden wäre, wenn ich diese Tools ein paar Jahre früher, beim Aufkommen der IBM-PC, gehabt hätte.

Solange man es nur mit ein paar hundertausend Objekten zu tun hat, ist das von vor mir konzipierte System auf heutigen Rechnern garantiert eine hoch effiziente Lösung, auch wenn sie noch so simpel sein mag.

Hannelore Kraft, Ihre Schweine machen weiter:

https://belljangler.wordpress.com/2011/06/23/winfried-sobottka-die-hacker-und-an-hannelore-kraft-python-hello-world-php-staatsschutz-polizei-dortmund/

Gruß

Dipl.-Kfm. Winfried Sobottka

https://belljangler.wordpress.com/2011/02/08/dem-wahren-satanismus-auf-der-spur-karen-haltaufderheide-doris-kipsiekerannika-joeres-die-grunen-wetter-die-grunen-berlin-die-grunen-hamburg-die-grunen-koblenz-renate-kunast-die-linke-witten/