Beschreibung

Das Hauptziel des Projekts war es eine WEB-Anwendung zu schaffen, ähnlich der Windows- und Linux-Anwendungen wie Stellarium, Starry Night oder KStars. Ebenso wie zum Beispiel Neave planetarium sollte diese Anwendungen nur Web 2.0 Techniken (AJAX) verwenden, das heißt, keine eigenen oder auf Plug-ins basierten Verfahren zurückgreifen, wie Flash, Java Applets oder ActiveX.

Planetarium Screenshot

Diese Anwendung ist einer mehrerer Teile eines Projekts mit dem Namen Ciclope Astro an der Fakultät für Informatik an der Politechnischen Universität Madrid , Spaniel. Dieser Arbeit ist einige Forschung vorangegangen bzgl. Web Toolkits, Frameworks und Techniken für das Ciclope Astro Projekt im Allgemeinen, als auch mehrere Design Studien. Nichtsdestotrotz ist das in Teamarbeit geschehen und wird hier nicht dokumentiert.

Mögliche Herangehensweisen an ein Webbasiertes Planetarium

Wie oben erwähnt, kann ein web-basiertes Planetarium geschaffen werden, indem Plug-ins, wie Java Applets, ActiveX oder Flasch verwendet werden, aber das Projekt hat verlangt keine Techniken dieser Art zu benutzen. Deshalb führt die Anwendung von ausschließlich AJAX-Techniken zu zwei möglichen Szenarien:

Client-based vs. server-based

  1. Benötigt werden en Web-Server, der nur astronomische Daten beschafft und alle Kalkulationen und Zeichen-Operationen bzgl. des Displays des Planetariums seitens des Clients druchführt, d.h. man verwendet ein JavaSkript.
  2. Die gesamte Arbeitslast liegt somit auf dem Server und dem Client werden nur die endgültigen Bilder übermittelt

Vor- und Nachteile verschiedener Lösungen:

Die beiden oben erwähnten möglichen Herangehensweisen haben verschiedene Stärken und Schwächen. Die client-based Version minimiert den Verkehr über das gesmate Netzwerk / Internet, als auch die notwendige Perfomance auf der Serverseite. Nichtsdestotrotz würde dies intensive Verarbeitungsleistung vom Client verlangen und würde wahrscheinlicherweise an die Grenzen der JavaScript Leistung stoßen.Unter der Voraussetzung, dass man die Position tausender Sterne berechnet, die dann auf ein Bild gezeichnet werden und sehr wahrscheinlich SVG Funktionalitäten verwenden, die das JavaSkript bietet (z.B. in ein Framework wie Dojo) und zu guter letzt alle paar Sekunden oder wenigstens Minuten upgedatet werden müssen, was JavaSkript immense Perfomanceprobleme einbringt.

Wenn wir die server-based Vorgehensweise betrachten, könnten wir auf alle Fälle diese Beschränkungen aufheben. Der Client müsste dann nur das Bild anzeigen, obwohl in diesem Fall der Server die gesamte Arbeit verrichten müsste. Im Detail bedeutet dies, die Position von Himmeslobjeten zu berechnen und die Bilder zu erzeugen, die der Client angezeigt bekommt. Obwohl es ziemlich ausgefeilte Techniken gibt, um diese Aufgaben zu erledigen, wie zum Beispiel JSP, ASP oder PHP, was zu dem Problem führt, dass die Arbeitslast extrem von der Anzahl dier Clients abhängt und von den Möglichkeiten, verschiedene Ansichten je Client anzuzeigen. Deshalb bräuchte man abhängig von der gewählten Methode irgendetwas zwichen einen billigen Standard-Pc und einem High-End Server Cluster, um diese Anwendung zum Laufen zu bringen.

Betrachtet man die starken Beschränkungen von Java Skript und die größere Flexiblität, wenn man eine server-based Version verwendet, kommt man zu dem Schluss, das die zuletztgenante letztendlich Anwendung findet in diesem Projekt und im nächsten Kapitel im Detail diskutiert wird.

Aktuelle Implementation

Allegemeine Betrachgungen und Beschränkungen

Wie bereits gesagt, mit einer Server-basierten Lösung variieren die Anforderungen an den Web-server in Abhängigkeit der aktuellen Implementation und Funktionalität der Anwendugn. Im schlechtesten Fall einer Planetariumsanwendung, wo einige tausend Sterne eines typischen Katalogs, wie Hipparcos angezeigt werden und der Anwender frei von seinem beliebigen Ort auf der Erde aus, als auch zu einem beliebig ausgewählten Zeitpunkt, wofür die Sternenkonstellationen angezeigt werden, all das innerhalb einer Update-Rate weniger Sekunden und mit 1000 gleichzeitig verbundenen Usern, würde das zu einer enormen Serverauslastung führen, da dieser alle Konstellationen berechnen muss und gemäß der Bilder für jeden verbundenen User das Sternenbild zum gewünschten Zeitpunkt am gewünschten Ort liefern muss. Darüberhinaus müsste das alle paar Sekunden wiederholt werden, um die Konstellationen für den User zeilich zu aktualisieren.

Auf Grund derzeit beschränkter Hardware Ressourcen für dieses Projekt und in Übereinstimmung mit dem ursprünglichen Ziel, eine zusätzliche Möglichkeit zu lieferen, das Tleskop zu kontrollieren, das am Fakultätsgelände stehet, wurde dieses Szenario auf das folgende Design reduziert, das weniger Rechnerleistung benötigt:

  1. Das Planetarium wird nur den Himmel an einem bestimmten Ort anzeigen können, nämlich dem Fakultätsgelände, wo sich das Teleskop befindet.
  2. Der Zeitpunkt, für den der Himmel angezeigt werden soll kann nicht frei gewählt werden, nur für die aktuelle Zeit. he point of time to display the sky for cannot be selected
  3. Bilder werden vorkalkuliert. Die Bilder des Immels werden im Voraus berechnent anstatt sie in Real-time zu berechnen.
  4. Ein intelligentes Design der Client-side Anwendung wird nur die Teile des Himmels nachfragen, das gegenwärtig gezeigt werden soll. (z.B. wenn man in einen besimmten Ort hineinzoomt.
  5. Die Update-Zeit für den Himmel wird auf eine Minute beschränkt.

Übersicht über die Implementierung

Während die Client-Seite mehr oder weniger aus einem einfachen Web-Browser besteht, dass eine AJAX- Webseite lädt, besteht der Server aus zwei Teilen:

  1. Eine Java Anwendung, um die Sternenkonstellationen zu berechnen und die notwendigen Bilder für die Planetariumsanwendung zu kreiren.
  2. Ein Web-Server, der eine JSP-Anwendung hostet, um die Web-Seite des Planetariums, als auch die geschaffenen Bilder und die Serverzeit zu übermitteln.

Das folgende Diagramm zeigt eine logische Übersicht über das Design der vollständigen Anwendung und hebt die Beziehung und die Interationen zwischen Client und Server-Seite hervor:

System Diagram

  1. Der Administrator betreibt das Java Titelbist, indem er dei Applikation auf der Server-Seite betreut, welches zugeschnittenen Sternen-Charts erzeugt in einem directort auf dem Webserver und darüberhinaus das Mapping der Pixel Positionen zu den Sternidentifikatoren in der Datenbank hinzufügt.
  2. Ein User betritt das Planetarium über die Hauptseite.
  3. Der JavaSkript-Code auf der HTML-Seite, der zum Client gesendet wird, wird eine Instanz eines GoogleMaps Objekts im Webbrowser der Users erzeugen und de Standartsicht vom Planetarium aus zeigen. Alle notwendigen Hintergründe für diese Sicht werden asynchron in den Hintergrund hineingeladen und dann angezeigt, sobald sie geladen sind.
  4. Da der User sich im Planetarium bewegt oder darin herumzoomt, werden notwendige Teil wieder im Hintergrund geladen und danach angezeigt.
  5. Jede Minute macht ein Hintergrundzähler eine Serveranfrage, um die aktuelle SErverzeit angezeit zu bekommen und die einzelnen Bilderanforderungen zu einem anderen Ordner gemä´der Tagesminute zum Server zurückzuliefern. Dafür wird die Sicht jede Minute upgedatet.
  6. Falls der User an einen bestimment Ort im Planetarium klickt, wird das JavaSkript (im Hintergrund) den Pixel-Standort des Clicks zum Server weiterleiten und fragen, welcher Stern an der angeklickten Position sein mag. Der Server wird die gegebene Position in der Mappingtabelle in der Datenbank anchsehen um zu sehen, ob es einen Stern an der angeclickten Position gibt und wird seinen ID zurückliefern, falls dem so ist. Die Clientseite kann dann letztendlich die Information über diesen Stern anzeigen.

Implementierungsdetails

Client-side Anwendung

Um die Arbeitslast der Client-Seite der Applikation auf einem Minimum zu halten, aber auch wegen seiner Funktionalität,wurde Google Maps API gewählt, um das Planetarium auf die Client-Seite zu bringen. Es liefer alle notwendigen Funktionalitätn, um Bilder gezielt zu laden und sie in verschiedenen Auflösungen anzuzeigen, als auch sie zu bewegen und heranzuzoomen. In anderen Worten: Es ist perfekt um Himmelbilder anzuzeigen.

Besonders wichtig ist tatsächlich, dass dieses API sehr ausgefeilt ist, um Bilder anzuzeigen. Es sind nur Ausschnitte notwendig um das aktuelle Feld der Sicht anzuzeigen und somit vom Server zu laden. Wenn man sich im Bild bewegt, werden zusätzliche Teile von Server geholt, genau dann, wenn sie gebraucht werden. Darüberhinaus sollten die meisten User mit der verwendung der Anwendung vertraut sein, wie sie es bereits sein sollten vonGoogle Maps.

In Bezug auf Zeitersparnis durch Verwendung existierender Lösungen, soll an dieser Stelle auch das Google Web Toolkit erwähnt werden. Dies war zwar nicht von besonderer Bedeutung für das Planetarium, wird jedoch als Framework für das Ciclope Astro Projekt an sich verwendet. Das GWT stellt ein Framework und eine Sammlung von Web 2.0 Klassen speziell in Bezug auf User Interfaces aber auch für asynchrone Datenübertragung, XML Parsing und weiter Anwendungen im Bereich Web 2.0 zur Verfügung. Das Besondere an diesem Toolkit ist jedoch die Tatsache, dass es ein JAVA Framework inklusive Debugger beinhaltet. Die gesamte Programmierung findet in JAVA statt und erlaubt daher nahezu perfektes Debuggen der entwickelten Anwedungen. Das Deployment zum Schluss erfolgt durch einen einzigen Mausklick mit dem die JAVA Anwendung in reines HTML und JavaScript übersetzt wird, durch einen eigens von Google bereitgestellten Compiler.

Die Integration des Planetarium in dieses Framework war allerdings nicht ganz einfach. Da das Framework keine Klassen zur Benutzung der Google Maps API beinhaltet, war es nötig den Übergang zwischen JAVA Code und JavaScript API manuell zu programmieren. Dazu waren einige Workarounds für diverse Problem nötig. Letztendlich war es aber möglich die Probleme zu lösen und die fertige Version steht hier ebenfalls zum Download bereit.

JAVA Anwendung für das Generieren von Bildern

Die Java Anwendung, die genutzt wird um Bilder zu erzeugen, die gebraucht werden für das Planetarium ist eine angepasst Version der Open Source Anwendung namens Mobile Star Chart. Nach intensiver Nachforschung, wie bestehende Planetariumsanwendugen wie Stellarium, KStars or PP3 aufgebaut sind, um die benötigten Bilder zu erzeuen für Internetplanetarium, konnte Mobile Star Charrt als einzige Anwendung identifiziert werden, um in angepasster Weise die benötigten Bilder zu generieren innerhalb einer akzeptablen Zeit und mit einem angemessenen Programmieraufwand.

PP3 hat unpasseinde Beschränkungen bzgl. der Größe der Outputbilder, da es tex engine benutzt. KStars und besoders Stellarium sind noch weniger brauchbar, um für die Bildergenerierung angepasst zu werden, da sie 3D Wltern und eigene Projektions Cods benutzen, als auch Hardwerdbeschleunigung im Sinne von OpenGL. Ein enormer Zeitaufwand wäre notwendig gewesen diese Anwendung so zu verändern, dass sie die gewünschte Aufgabe erfüllt.

Letztendlich war Mobile Star Chart genau das, was gebraucht wurde. Da es vorsieht auf Mobile Divices zu laufen, enthielt es bereits den Code um die Sternen Kalkulationen zu berechnen und sie auf ein 2D Bild zu projezieren (dem PDA-Bildschirm) ohne irgeneine OpenGL-Library zu benutzen. Nichtsdestotrotz, eine akzeptable, aber noch signifikante Menge an Programmierarbeit musste gemacht werden, umd diese Anwendung auf J2SE, anstatt auf J2ME zum Laufen zu bringen und darüberhinaus große, skalierte und zugeschnittene Sternencharts verschiedener Zeitpunkte der Festplatte auszugegen. Zu guter Letzt wurde die Anwendung so verändert umd das Mapping jedes Sterns in der Database auszuliefern.(Yale Bright Star catalog) u seinem Ort an jedem Teilbild zu einer (MySQL)Datenbank, die wichtig ist, die Mausclicks auf dem Planetarium zu handeln und die Information über die Objekte unter dem Mauscursor anzuzeigen.

Diese angepasste Version der Anwendung ist übertragbar bzgl. verschiedener Alpekte des Outputs wie die anzuzeigenden Objekte, den Zeitpunkt, die Erdposition und viele andere Einstellungen. Details darüber können dem operativen Teil dieser Dokumentation entnommen werden.

Web Content & Web Server

Der Webserver hostet prinzipiell den Inhalt des HTML und JavaSkript Inhalt ( als Teil der kompletten Ciclope Astro Seite). Innerhalb dieses Dokuments ist nur sehr wenig Code, der (ohne gesonderte Erwähnung zu bedürfen) die Parameter für Google Maps API konfiguriert und schließlich eine Instanz der Himmelskarte kreiert. Es wurden nur 2 erwähnenswerte Dinge hinzugefügt:

  1. Der Code um Mausclicks zu handeln im Planetarium, um die Information über die Objekte unter dem Cursor anzuzeigen.
  2. Der Code um das Planetarium jede Minute upzudaten.

Bezüglich des ersten Punktes wurde ein Event Handler registriert mit Google Maps API, um auf Mausclicks auf dem Bildschirm zu reagieren. Ein Click auf en Bildschirm startet ein asynchrones JavaSkript Request zu einer serverseitigen JSP Seite, die die Koordinaten der Maus enthält, den Zoomlevl und die aktuelle Kartenzeit. Als Ergebnis liefert die Seite eine XML-Datei, die das Objekt unter dem Cursor enthält, falls eines existiert, als auch ihren Katalog-ID. Mit diesem Ergebnis kann der Code der Clientseite schließlich ein Pop-up Fenster öffnen, dass die Informationüber dieses Objekt unter dem Mauscursor anzeigt.

Bezüglich dem zweiten Punkt wurd ein JavaSkript Timer hinzugefügt zu der Seit, das einen asynchronen Anruf auf ein JSP auf dem Server jede Minute macht, die die aktuelle Zeit auf dem Server zurückliefert. Das geschieht um die Client-Seite synchronisiert mit dem Server, umd den Himmel, so wie der gesehen werden kann mit einem Teleskop an der Fakultät zu dieser Zeit und nicht den Himmel gemäß der Zeit auf dem Computer des Users (die falsch sein könnte oder wegen Zeitverschiebung verschieden sein könnte).