[Allegro] Aschermittwochs- + Himmelfahrtskommando '09 : AJAX3 + KalenderPlus

Bernhard Eversberg ev at biblio.tu-bs.de
Mi Feb 25 09:58:18 CET 2009


Aschermittwochs- + Himmelfahrtskommando '09 : AJAX3 + KalenderPlus

              >>>  Freigabe der Neuerungen erfolgt ca. am 1.3. mit V29.2

Nach alter Tradition wird zu Himmelfahrt, oder seit 2004 auch schon
mal zum Aschermittwoch, einer der Entwickler abkommandiert, eine Nuß
gehobenen Härtegrades zu knacken. Die Nuß des Anstoßes, wenn man so
sagen kann, war diesmal die ärgerliche Komplexität der AJAX-Technik.
Fordert sie einem doch Kenntnisse ab in vier verschiedenen Sprachen:
HTML+CSS, JavaScript, PHP (oder Perl, Python, ASP, Java) und dann
auch noch FLEX (von Exportparametern nicht zu reden, deren Bedeutung
zum Glück sehr geschrumpft ist).
Aber noch eine zweite Nuß lag uns schwer im Magen, eine ganz andere:
Die Datumsfunktion  Day JJJJMMTT  liefert den Wochentag des angegebenen
Datums, aber nur im Zeitraum 1901-2099. Dies ist blamabel, wenn auch
nicht für uns, sondern für die Entwickler der Betriebssysteme und
C-Compiler. Weil die sich aber nicht rühren, haben wir das Pflichten-
heft kurzer Hand selber in dieselbe genommen.
Die Systementwickler setzen sich mit diesem Defizit dem Verdacht aus,
kulturlose Gesellen zu sein, um es mal deutlich zu sagen, denn

Erstens einmal kommt "Computer" von "computus", und das ist ausgerech-
   net der lateinische Term für die Kunst der Kalenderberechnungen,
   besonders des Ostertermins. Da sieht man's wieder: klauen einfach ein
   Wort und scheren sich den Teufel um dessen angestammten Sinn!

Zweitens: Computergeschichte ist ein definierender Teil der Kultur-
   geschichte des 20. Jahrhunderts. Das rechtfertigt aber nicht, daß die
   Datumsfunktion alle früheren Jahrhunderte einfach ausgrenzt. Nun gut,
   die Systementwickler könnten die Verantwortlichkeit auch von sich
   weisen und sie den Eignern der Domäne .VA zuschieben, die den
   Kalenderschlamassel mit den Schaltjahren angerichtet haben (die Jahre
   1900 und 2100 sind ja eben keine solchen!). Rom hält sich dazu aber
   bedeckt, und nach aller Erfahrung kann dies Jahrhunderte währen. Man
   bemerkt sogar, daß auf den Webstätten der Organisation (z.B. auf
   http://www.annopaolino.org) die kleinen Kalenderchen, die heute auf
   keiner Website fehlen dürfen, keinen einzigen Feiertag hervorheben,
   noch nicht mal Ostern. Ist etwa Gauß dort persona non grata?
   Billigerweise könnte man daher solches von uns gleich gar nicht
   fordern, aber naja.

Welche dieser Nüsse nun die geeignetere für Himmelfahrt bzw. Ascher-
mittwoch sei, war unentscheidbar. Daher wurden, wie es unserem
Zeitalter der Ungeduld ansteht, beide schon jetzt geknackt.

Kommen wir zur
+=====================+
| Nuß Nummer 1: AJAX3 |
+=====================+

Um was es genau geht und wie einfach das nun ist, steht in einem
kurzen, ausführlichen, verständlich gehaltenen Papier:

http://www.allegro-c.de/doku/phpac/ajax3.htm

Hier nur, als kleiner Anreiz, die wichtigsten Punkte:

1. Man muß nur noch HTML (mit oder ohne CSS) kennen und FLEX. Und
    FLEX-Jobs sind nicht mehr umständlich und unübersichtlich in PHP-
    Skripte eingebaut, sondern sehen aus wie normale FLEX-Dateien, nur
    mit ein paar kleinen, unvermeidlichen Abweichungen.

2. Der gesamte Hin- und Rücktransport der Daten zwischen Browser
    und Server ist automatisiert und in zwei Standardskripten ver-
    borgen, ajax3.js und ajax3.php, an denen man nichts tun und die
    man gar nicht verstehen muß. Trotzdem sind sie kommentiert.

3. An der Oberfläche kann man alles nutzen, was mit HTML+CSS möglich
    ist. Das Rezept zum Einbauen der nötigen Dinge ist denkbar einfach:
    A. ein Formular, in dem die Variablen verstaut sind, die dem FLEX
       zu übergeben sind, und welcher FLEX-Job es sein soll, ferner
    B. ein simples <div>, in dem die Ergebnisse des FLEX zum Vorschein
       kommen sollen. Position und Eigenschaften absolut frei!

4. Im FLEX-Job hat man automatisch die Variablen zur Verfügung, die im
    HTML-Formular angelegt sind. Der Output, der im <div> erscheinen
    soll, wird mit dem "write"-Befehl (bei Bedarf auch mit "export")
    erzeugt. In diesen Output kann man auch wieder beliebiges HTML
    einbauen.

Einfache, aber lehrreiche Beispiele sieht man in dieser Demo:

http://www.biblio.tu-bs.de/db/null/aj3demo.htm

Schauen Sie gerne in den Quellcode, der ist kommentiert. Sie erkennen
leicht das gemeinsame Muster der fünf kleinen Aktivitäten.

-----------------------------------------------------------------------
Damit kommen wir zur

+==============================+
| Nuß Nummer 2: Datumsfunktion |
+==============================+
Dazu wurde erst einmal gar nichts ins Programm selbst eingebaut (also
mit C++ in a99 und acon), sondern ein FLEX geschrieben, aber einer, den
auch acon (also avanti) ausführen kann. Der FLEX ist schon mit
einbezogen in die o.g. Demo-Beispiele.

Hier die Grundgedanken:

Ein Kalender könnte ganz anders organisiert sein als wir es kennen!
Z.B. könnte man, mit einem bestimmten Tag beginnend, alle Tage
fortlaufend numerieren. (Und auch ganz andere Perioden einführen als
unsere Wochen, Monate und Jahre, da lassen wir aber die Finger von.)
Sagen wir mal, jener "bestimmte Tag" sei der 1.1.1601. Die T-Nummer
eines späteren Tages D wäre demnach seine laufende Nummer, wenn man mit
der Zählung der Tage am 1.1.1601 bei 0 begonnen hätte. Anders gesagt,
die T-Nr ist die Antwort auf die Frage: Wieviele Tage sind am Tag D
seit dem 1.1.1601 verflossen?

Wozu das? Wenn man aus dem üblichen Datum in der Form JJJJMMTT die
zugehörige T-Nr ableiten könnte und umgekehrt, dann könnte man mit dem
Datum bequem rechnen! Z.B.  Datum D + n Tage  ergibt welches Datum?
Oder: Wieviele Tage liegen zwischen Datum D und Datum X? Und außerdem:
Zu jedem gegebenen Datum kann man errechnen, auf welchen Wochentag es
fiel oder fallen wird. Denn die Reihenfolge der Wochentage wurde in der
ganzen Zeit seit 1601 (und wohl auch schon sehr lange vorher) nicht
unterbrochen. Man braucht also nur zu wissen, was für ein Wochentag der
1.1.1601 war und dann die fragliche T-Nr durch 7 zu teilen, aus dem
Rest ergibt sich der Wochentag. Alle diese Dinge sind bei unserer
gewohnten Form des Kalenders nur mit Hilfe von ausgeklügelten,
algorithmisch aber wenig eleganten Tabellen zu lösen (sog. "Immer-
währender Kalender".)

Warum 1601? Das ist das Anfangsjahr des ersten vollen Jahrhunderts, in
dem der Gregorianische Kalender gegolten hat (nach der Reform von 1582,
bei der Papst Gregor XIII zehn Tage unter den Tisch fallen ließ: auf
Donnerstag, den 4.10. folgte sofort Freitag, der 15.10.).

Das eben angedeutete Rechenverfahren wurde in FLEX programmiert, wie
schon das Gauß-Verfahren für das Osterdatum.

Gültig ist die hier entwickelte Methodik bis zum 28.2.2400, denn 2400
ist, wie 1600 und 2000, eins derjenigen Jahrhundertjahre, die einen
Schalttag haben. (Diese vorerst letzte gültige T-Nummer wäre 291886.)

Aber was für ein Wochentag war denn der 1.1.1601? Es war ein Montag. Wie
man das wissen kann? Nun, wäre es z.B. ein Dienstag oder sonstwas
gewesen, dann ergäbe das neue Rechenverfahren, daß heute nicht der Tag
wäre, den wir heute haben.

Das Anwendungsrezept des neuen FLEXes ist simpel: Wo man bis jetzt
schrieb (doku siehe xdate.rtf):

var ...
Day

da schreibt man gleichwertig nun (und das versteht auch acon):

var ...
perform Day
   Ergebnis in jetzt in iV
...
end
include day.inc    // da steckt das UP  :Day  drin

Nur daß die Grenzen jetzt 1601 und 2400 sind.
Manuell ausprobieren:  X day.inc
   (Darin Kommentare zu Aufruf und Ergebnissen.)

Eingebaut ist das jetzt auch schon in kalender.flx, was bedeutet,
daß nun auch die ganz normale Kalenderfunktion von 1601 bis 2399
korrekt klappt. Es dauert freilich einen Tick länger, bis das Kalender-
blatt erscheint. Wem's zu lang ist, kann sich mit der alten begnügen.
Wer aber z.B. historische Romane zu schreiben hat oder SciFi, wird die
neue gut brauchen können...

Und warum haben wir nicht weitergemacht und auch den Zeitraum vor 1601
noch erschlossen, oder wenigstens zurück bis 1582? Warum nicht gleich
zukunftsweisend auch über 2400 hinaus? Na, so ganz wollen wir die
Statthalter in Rom nicht aus ihrer Verantwortung entlassen! Immerhin
decken wir jetzt 600 Jahre mehr ab als zuvor.
Die beweglichen Feiertage gehen leider nur, wie bisher, von 1701-2199,
weil sich die Gauß-Funktion nicht so leicht erweitern ließ.

Jemand anders, der auch kein Kirchenmann ist, hat jedoch mehr getan:
Holger Oertel aus Leipzig hat eine exzellente Kalenderseite gemacht,
http://www.ortelius.de/kalender/index.php
wo man auch alles über die trickreichen Rechenverfahren erfährt.
Bis hin zum Maya-Kalender! Hut ab. (Narrenkappe sowieso, angesichts
des Datums.)




Mehr Informationen über die Mailingliste Allegro