Das Horoskop-Applet

Inhalt


Testinstanz

Sie sehen links eine Instanz des Horoskop-Applets für Testzwecke. Sie wird durch den rechts im Textfenster stehenden HTML-Quellcode erzeugt. Wenn Sie den Code ändern und "HTML ändern" drücken, wird die Seite mit dem von Ihnen modifizierten Code neu gerendert. So können Sie die Bedeutung der verschiedenen, unten dokumentierten Applet-Parameter erkunden.


Kurzbeschreibung

Das Horoskop-Applet ist ein kleines Stück Java-Code, das ein Horoskop im Sinne der klassichen Astrologie zur Darstellung bringt. Als Applet wird es nicht auf dem Server, sondern auf dem Client prozessiert – auf dem PC des Internetbenutzers. Es kann jedoch zur Planetenberechnung Kontakt mit dem Server aufnehmen. Alternativ kann man auch, statt einen Server zur Planetenberechnung aufzurufen, die gewünschten Haus- und Planetenpositionen im HTML-Quellcode fest angeben, sie mit einem niedriggenauen Rechner (LowPrecCalculator) auf dem Client berechnen oder mit Hilfe des Java Native Interface mehr oder weniger direkt die swedll32.dll-Methoden aufrufen.

Man kann das Horoskop-Applet an Stelle von festen Graphiken verwenden, um in einem astrologischen Text Horoskopfiguren unterzubringen. Die Stärke des Applets sind aber die Interaktionsmöglichkeiten. Wenn der Browser nicht nur Java interpretiert, sondern auch JavaScript/Java-Kommunikation zulässt (und das gilt heute für die meisten Browser, nur Safari und IE for Macintosh bilden unrühmliche Ausnahmen), kann der Benutzer über Drucktasten und Eingabefelder Funktionen des Applets anstossen. Auch eine Applet-Applet-Kommunikation mit selbstverfassten weiteren Applets ist möglich.

Die Horoskopdarstellung ist bewusst auf die sieben klassischen astrologischen Planeten Sonne, Mond, Merkur, Venus, Mars, Jupiter und Saturn (wir alle wissen, dass die Astronomen das Wort Planet anders definieren, interessieren uns aber nicht dafür) sowie auf die drei Transsaturnier Uranus, Neptun und Pluto beschränkt. Die Hausberechnung erfolgt nach dem Placidussystem, Erweiterungen auf andere Häusersysteme sind geplant.


Was wird benötigt?

Um das Applet zu verwenden, müssen mindestens die folgenden Ressourcen auf dem Server vorhanden sein ("." bezeichnet das Codebase-Verzeichnis, also den Wurzelordner für die Klassenhierarchie):
./AstroUI/HoroApplet.class               // Das Horoskop-Applet
./AstroUI/ILoadListener.class            // Ein Interface (s.u.)
./AstroOL/Calculator.class               // Astrologischer Rechner
./rsc/mime/SO.gif bis ./rsc/mime/PL.gif  // Planetensymbole
./rsc/mime/AR.gif bis ./rsc/mime/PS.gif  // Tierkreiszeichensymbole
Wenn Sie die serverseitige Rechenfunktion nutzen wollen, muss darüberhinaus ein Servlet auf dem Server existieren, das zu den in der URL angegebenen (oder als Formularfelder mitgelieferten) Werten des Julianischen Datums, der Länge und der Breite die Haus- und Planetenpositionen berechnet. Beispielsweise sollte das Servlet, wenn Sie folgenden Link eingeben,
/servlet/Ephemeris?planets&houses&jd=2451544.5&lon=7.2833&lat=52.3333
die Planeten- und Hauspositionen des 1.1.2000 um 0h00m00s UT wie folgt anzeigen:
planets:279.8592,217.2933,271.1118,240.9614,327.5755,25.2331,40.4059,314.7841,303.1753,251.4372
houses:192.0288,217.1332,248.6104,285.8994,321.3361,349.8952,12.0288,37.1332,68.6104,105.8994,141.3361,169.8952
Wenn Sie den niedriggenauen Planetenrechner einsetzen wollen, benötigen Sie darüberhinaus die folgenden Objekte:
./AstroOL/LowPrecCalculator.class        // Niedriggenauer Rechner
./AstroOL/Elements.class                 // Hilfsklasse für die Bahnelemente
./rsc/data/J1950.dat                     // Binärdatei für 1950-2049
sowie bei Bedarf weitere Binärdateien für andere Jahrhunderte (J1850.dat, J1750.dat etc.).

Das folgende Jar-File enthält die genannten Objekte, die für den Betrieb des Applets nötig sind. Das Verzeichnis ./rsc/data enthält die Binärdateien für weitere Jahrhunderte zum Download. Sie benötigen sie nur, wenn Sie den niedriggenauen Rechner (LowPrecCalculator) einsetzen wollen.

http://www.astrotexte.ch/applets/horoApplet.jar
// Ressourcen [33 KB]
http://www.astrotexte.ch/rsc/data// Binärdateien (4.5 KB/Jahrhundert)

Zum Inhaltsverzeichnis

Planetenpositionen vom Server

Es ist ein Wagnis, den vielen unbekannten Clients dieser Welt so etwas Schwieriges wie eine Javaklasse zur Ausführung zu überlassen! Trotz der weitgehenden Plattformunabhänigkeit unterscheiden sich die verschiedenen Implementierungen der Java Runtime in einigen Details. Das fängt mit der Sprachversion (Release) an und hört mit unterschiedlichen Schriftgrössen bei der Graphikerzeugung nicht auf. Dazu kommen unterschiedliche Sicherheitseinstellungen: Manche Benutzer haben in irgendeiner Zeitschrift gelesen, dass Java eine hochgefährtliche Angelegenheit ist und haben die Java Virtual Machine in ihren Browsereinstellungen ganz ausgeschaltet. Die Browser-Entwickler haben in ihrer Angst, Sicherheitslücken zu produzieren, teilweise die Möglichkeit einer Verbindungsaufnahme mit dem eigenen Server lahmgelegt (so der Netscape 7.1), was nichts anderes als ein Bug ist.

Solange der Internet Explorer 5.5 noch so weit verbreitet ist wie er es zur Zeit ist, muss man seine Applets mit dem ältesten noch bei Sun verfügbaren Development Kit, nämlich mit dem JDK 1.1.8 compilieren. Nimmt man stattdessen JDK 1.3 oder höher, so läuft man Gefahr, dass das Applet auf den älteren Internet Explorer Versionen nicht präsentiert wird. Daher hat man bei der Applet-Entwicklung gewisse Restriktionen zu beachten: Es dürfen nur die bereits im JDK 1.1.8 enthaltenen Sprachelemente verwendet werden, keine späteren. Man sollte für das UI daher auch AWT verwenden und nicht Swing - denn sonst müssen Benutzer älterer Browserversionen eine doch recht umfangreiche Swing Library aus dem Netz hinzuladen, um das Applet zu Gesicht zu bekommen.

Entsprechend buntgemischt (oder auch grau) sind die Resultate. Wenn ein Browser sich entscheidet, ein bestimmtes Applet nicht zu präsentieren, enthält die angezeigte Webseite anstelle der Horoskopgraphik ein hässliches graues Rechteck als Platzhalter, und die Statusleiste bringt irgendeine beängstigende Meldung (zum Beispiel "java.lang.NullPointerException").

Dazu kommt, dass die Rechner der Websurfer unterschiedlich leistungsfähig sind. Wer der Seite eher zufällig einen Besuch abstattete, hat keine Lust, grosse Mengen an Code herunterzuladen, bevor er etwas zu sehen bekommt: Hic Rhodos, hic salta: die Seite soll ohne Umschweife und vollständig erscheinen, sonst ist der Besucher wieder weg.

All dies spricht dafür, auf dem Client nur das nötigste, unumgängliche Coding zu prozessieren: den Teil des Programms nämlich, der für die Präsentation des Horoskops zuständig ist. Die Berechnungen selbst führt man besser auf dem Server aus: Die Java-Maschine, die dort läuft, hat man selber unter Kontrolle, und man kann dort auch das neueste Sprachrelease verwenden, statt sich auf den kleinsten gemeinsamen Nenner der im Internet verwendeten VM's herabbegeben zu müssen. Um Code vom Applet aus auf dem Server prozessieren, bedarf es eines Servlets, das über den eigenen Host gerufen werden kann: das sogenannte Crosshosting, also die HTTP-Kommunikation eines Applets mit einem anderen Rechner als dem, von dem es stammt, ist üblicherweise aus Sicherheitsgründen unterbunden. Zwar hat man die Möglichkeit, einem Applet mehr Rechte als üblich zu geben (durch Editieren des .policy-Files), aber auch diese Prozedur ist einem normalen Surfer nicht zuzumuten.

Am sichersten berechnen Sie die Planeten- und Hauspositionen direkt auf dem Server, indem Sie nicht ein statisches HTML-File, sondern eine Java Server Page verwenden. So haben Sie die Möglichkeit, noch bevor der Anwender die HTML-Seite zu Gesicht bekommt, serverseitige Logik zu prozessieren. In diesem Fall füllen Sie dann die Applet-Parameter planets und houses ab und geben dem Applet auf dem PC daher die anzuzeigenden Planeten- und Hauspositionen vor. Auf der Java Server Page könnte das Tag zum Beispiel so aussehen (wobei die Strings houses und planets zuvor berechnet worden sind):

<applet name     = "Horoskop"
        code     = "AstroUI.HoroApplet.class"
        width    = "600"
        height   = "400">
<% if (planets != null) { %>
  <param name="planets" value="<%=planets%>">
<% }
   if (houses != null) { %>
  <param name="houses" value="<%=houses%>">
<% }
   if (timePlace != null) { %>
  <param name="timePlace" value="<%=timePlace%>">
<% }
   if (sbErr != null) { %>
  <param name="messages" value="<%=sbErr%>">
<% } %>
</applet>
Wenn die Seite prozessiert wurde, könnte das fertige, an den Client zurückgesandte HTML dann wie folgt aussehen:
<applet name     = "Horoskop"
        code     = "AstroUI.HoroApplet.class"
        width    = "600"
        height   = "400">
  <param name="planets" value="279.8592,217.2933,271.1118,240.9614,327.5755,25.2331,40.4059,314.7841,303.1753,251.4372">
  <param name="houses" value="192.0288,217.1332,248.6104,285.8994,321.3361,349.8952,12.0288,37.1332,68.6104,105.8994,141.3361,169.8952">
  <param name="messages" value="Systemmeldung xy bei der Planetenberechnung">
</applet>
Probieren Sie es aus: Setzen Sie den Code in das Eingabefeld für die Testinstanz ein und drücken Sie "HTML ändern". Das Horoskop-Applet zeigt dann die Stände des 1. Januar 2000. Da der Parameter timePlace nicht gesetzt wurde, wird weiterhin das aktuelle Datum als Bildunterschrift angezeigt. Sie können das ändern, indem Sie auch diesen Parameter noch setzen!

Und was ist mit der "Systemmeldung xy" passiert? Sie wird in der Java Konsole ausgegeben. Über den Parameter messages hat man bei dieser Verwendung des Applets also die Möglichkeit, Hintergrundinformationen mitzusenden, ohne den Benutzer zu stören (nützlich zum Beispiel für die Fehlerbehebung).

Sie können gleichzeitig mit festen Werten für Häuser und Planeten zusätzlich eine Servlet-URL mitgeben. Das hat den Sinn, die Werte nachträglich noch mittels Javascript zu beeinflussen.


Zum Inhaltsverzeichnis

Steuerung mit Javascript

Nachfolgend sehen Sie eine Instanz des Horoskop-Applets mit dem Namen jsHor. Öffentliche Instanzmethoden eines Applets (jedoch keine statischen Methoden) sind bei den meisten Browserimplementierungen mit Javascript aufrufbar, zumindest wenn die Methodensignatur nur aus Parametern vom Typ String besteht (manche Browser können mehr, aber dies ist das von allen Browsern geleistete Minimum, die überhaupt eine Javascript-Java-Kommunikation anbieten). Wenn Sie die nebenstehend angeführte Methode setTimePlace( ) auf das Applet anwenden (durch Druck des Buttons "Javascript ausführen"), werden die Planetenpositionen sowie die Fusszeile mit dem timePlace-Parameter geändert.

NameBedeutung
setTimePlace()Einen neuen Datum/Zeit/Ort-String setzen und das Horoskop neu zeichnen
setPlanetsAndHouses()Planeten- und Hauspositionen direkt übergeben.
setCaption()Bildunterschrift frei setzen
doShow()Aktualisierungsmethode - reproduziert das Horoskop, wie es zuletzt gezeichnet war.

Zum Inhaltsverzeichnis

Die Parameter im Überblick

NameFunktionDefaultBeispiel
bgcolorHintergrundfarbe des Graphikbereichs
Farbwertangabe als Ganzzahl oder hexadezimal mit vorangestelltem #
52479 (blau) #A0A0A0
bgcolor2Hintergrundfarbe der Positionsleiste
Farbwertangabe als Ganzzahl oder hexadezimal mit vorangestelltem #
#FFFF00 (gelb) #E0E0E0
precisionGenauigkeit der Positionsangaben ("min" oder "sec") sec min
servletURLURL des Ephemeridenservlets, auch relative Pfadangabe möglich ./ephemeris http://www.astro-rechner.com/ephemeris
calculatorKlassenname des verwendeten Ephemeridenrechners
Möglich sind Calculator,LowPrecCalculator, NativeCalculator
oder eigene Klassen, die das Interface ICalculator implementieren
Calculator LowPrecCalculator
noTimePlaceKeine Unterschriftzeile mit Zeit und Ort false true
captionEigene Unterschriftzeile mit freiem Text Horoskop von Charlie Chaplin
tileAnteil des Graphikbereichs an der Gesamtbreite
tile = 1 bedeutet: Keine Positionsleiste anzeigen
0.77 1
callerName eines anderen Applets, das das Horoskopapplet steuert steuerApplet
timePlaceZeit- und Ortstring [now] 1.1.2000 17h25m32s 7e16 52n20
planetsListe der Längen der 10 Planeten 279.8592,217.2933,271.1118,240.9614,327.5755,
25.2331,40.4059,314.7841,303.1753,251.4372
housesListe der Längen der 12 Häuser 192.0288,217.1332,248.6104,285.8994,321.3361,349.8952,
12.0288,37.1332,68.6104,105.8994,141.3361,169.8952
noHousesKeine Häuser zeichnen false true
messagesMeldungen, die an die Konsole weiterzuleiten sind Bei Berechnung der Plutolänge ist ein Fehler aufgetreten

Zum Inhaltsverzeichnis

Horoskop mit Ständen im Aussenkreis

Um Stände im Aussenring zu haben, ist statt der Klasse HoroApplet.class die Klasse HoroCompare.class zu verwenden. Innen- und Aussenstände können über Applet-Parameter mitgegeben werden, wie in folgendem Beispiel, in dem der niedriggenaue Planetenrechner (LowPrecCalculator) zum Einsatz kommt. Es werden die aktuellen Stände (angewiesen durch den speziellen timePlace-String "now") im Innenkreis verglichen mit den Konstellationen der aktuell gültigen Mutationskonjunktion fürs Luftelement vom 31.12.1980.

Ein anderes Anwendungsbeispiel ist der Geburtstagsprüfer, den Sie sich zum Beispiel in Ihre Browser-Startseite einbauen können.

<APPLET
CODE     = "AstroUI.HoroCompare.class"
ARCHIVE  = "horo.jar"
NAME     = "Horoskop"
WIDTH    = 470
HEIGHT   = 360
HSPACE   = 0
VSPACE   = 0
ALIGN    = "MIDDLE">
<PARAM NAME="tile" VALUE=".62">
<PARAM NAME="timePlace" VALUE="now">
<PARAM NAME="timePlaceOut" VALUE="31.12.1980 21h19m 13e30 52n30">
<PARAM NAME="calculator" VALUE="LowPrecCalculator">
<PARAM NAME="precision" VALUE="min">
</APPLET>

Zum Inhaltsverzeichnis Zurück zur Homepage