| [remote] [frederik] [roadhog] [software] | [veröffentlichen] |
Mein Ziel war es, so viel wie möglich statischen Inhalt zu erzeugen und das CGI-Skript so einfach wie möglich zu halten. Auf diese Weise minimiere ich den Ressourcenverbrauch auf dem Server, der das CGI betreibt, und er kann dann viele Anfragen gleichzeitig effizient handhaben. (Dieses Ziel hat allerdings nicht verhindern können, daß das CGI auf über 1.000 Zeilen angewachsen ist...)
Für jede hereinkommende Anfrage macht das CGI nur eine Datei auf - die Steuerdatei, eine simple Textdatei, die einfach eingelesen und interpretiert werden kann. Oft muß sie nicht einmal bis zu Ende gelesen werden.
Hier ist die Steuerdatei für eine sehr kurze Reise:
Shieldaig:Lochcarron::A896:4 256:192:mm:1200:1100:40:43:[einige Auslassungen] tiny:small:medium:large tiny:small:medium:large:huge 01.jpg:217:863:31x8:N57°31.43':W005°38.74':989162962:38:191 02.jpg:217:864:31x8:N57°31.22':W005°38.78':989162993:51:236 03.jpg:217:866:31x8,32x8:N57°31.04':W005°38.89':989163019:55:171 04.jpg:216:868:31x8,32x8:N57°31.00':W005°38.86':989163024:55:163 You are at a junction. d:1.0::360:A896:Lochcarron:kenmorejunction-shieldaig:f7f4 |
Am Anfang stehen ein paar Konfigurationsinformationen - woher die Reise kommt, wohin sie geht, auf welche Straße usw. - und Informationen über die benutzte Karte und die verfügbaren Bildgrößen. Danach kommt für jedes Foto eine Zeile, die die Pixelposition, die betroffenen Kartenabschnitte, die Koordinaten, Zeit, Geschwindigkeit und Richtung enthält. Am Ende gibt es eine Statusmeldung und eine Liste der möglichen weiteren Verbindungen (in diesem Fall nur eine).
Das reicht schon aus, damit das CGI-Skript für jedes Foto dieser Reise die korrekte HTML-Seite erzeugen kann.
Es gibt auch einen CSS-Modus, in dem das CGI auf die speziellen Kartenausschnitte mit eingezeichneten roten Punkten verzichtet und stattdessen CSS-Poistionierung benutzt, um ein "roter-Punkt-Bild" an die Stelle zu setzen, wo es hingehört. Das kostet weniger Bandbreite, und wir können das "rote-Punkt-Bild" auch etwas variieren, je nach Richtung, in die gefahren wird.
Der Nachteil dieses Standard-Modus ist, daß viele Browser die Seite "löschen", bevor sie die nächste anzeigen, und dadurch kann ein unangenehmes Flackern entstehen. (Der Opera-Browser kriegt das allerdings prima ohne Flackern hin.)
Dieses Vorgehen bedeutet aber auch, daß der Frame-Modus nicht ohne Javascript auskommt.
Auch die Karten-Anzeige verläßt sich auf ein vernünftiges Bilder-Caching durch den Browser; wenn der Browser sich die Bilder "merkt", müssen maximal eine neue Zeile und eine neue Spalte von Kartenabschnitten nachgeladen werden (9 Bilder) und kein gesamter Ausschnitt (das wären 25 Bilder). Die Ausnahme davon ist das Java-Applet, denn das merkt sich seine Bilder selbst.
252c:Journey from North Erradale to Melvaig ae83:Journey from Inverlael to Blarnalearoch 86dc:Journey from North Erradale to Gairloch / Melvaig f207:Journey from Kerrysdale to Kinlochewe 99e6:Journey from Badcaul to Badluarach [...] -5.812468577402863:58.15879941547619:59249.58824709085:111120.0 34263:0:209740:923408:97 34188:82:209663:923329:97 34180:88:209654:923324:97 34108:284:209574:923130:97 [...] |
Die Liste der Reisen besteht nur aus den Journey-IDs und einer kurzen Beschreibung. Danach kommt eine Leerzeile, eine Zeile mit Koordinaten-Umrechnungsdaten, und dann folgt pro Foto eine Zeile mit Koordinaten.
Die Foto-Zeilen enthalten zwei Koordinatenpaare; das erste sind "Meter von der oberen linken Ecke des abgedeckten Bereichs", nach einer simplen Formel ausgerechnet: ein Längengrad = 111120m, ein Breitengrad = 111120 * cos (durchschn. Längengrad). Das reicht aus, um die einfachen Entfernungsberechungen zu machen, die das Skript braucht. Das zweite Paar sind die Koordinaten im "British Grid". Das Suchskript verwendet das erste Paar, wenn jemand nach Länge und Breite sucht, und das zweite, wenn nach British Grid-Koordinaten gesucht wird; so spare ich mir die Umrechnung in Perl. Der fünfte Wert auf jeder Zeile ist ein Verweis auf die entsprechende Reise - 97 heißt hier "die Reise aus Zeile 97".
Die Datei places.txt fängt genauso an, aber nach der Leerzeile geht es so weiter:
Dundonnell River::27,63 Black Water::29,131 Contin::36,83,114,130 Loch Carron::65,120 Loch Bad á Chrótha::11,15 Badachro::11,15 [...] |
Das ist einfach eine Liste von Begriffen, die entweder aus den Namen der Start- und Zielknoten der einzelnen Reisen gewonnen wurden oder in den "via"-Tags der zugehörigen Kanten erwähnt waren. Hinter jedem Begriff stehen wieder Verweise auf die Reisen, zu denen er gehört. Das Suchskript benutzt das String::Similarity-Modul, um aus diesen Begriffen diejenigen auszuwählen, die dem ähnlich sehen, was der Benutzer eingegeben hat.
| [deutsch] [english] [about] [contact] | Frederik Ramm, 2001-05-24 |