=head1 BBBike: TODO

Legend:

  Challenge level:

    E: easy/fast to implement
    M: middle
    H: hard/time consuming to implement

  Priority from 1 (unimportant) to 5 (very important).

  #: showstopper for next release

  Classification:

    bug, external bug
    feature, external feature
    improvement

=head1 Perl/Tk version of BBBike

=over

=item * (M3) (feature)

Introduce GPS device types for the GPS card in the option editor. This
would set the waypoint number, name length and charset automatically.
A E<quot>customE<quot> setting will still be available to set these
values manually.

=item * (H3) (feature)

Create a small toolbar in the footer bar which displays the
current optimization settings in a few letter or with images. Also, a
shortcut to change the optimization settings should be possible there,
at least by showing the existing preferences window.

=item * (H3) (improvement)

balloon_info_from_all_tags should also deal with E<quot>pointE<quot>
values (Haltestellen, Einbahnstraßen...). Then enterpoint could be
replaced by an universal enterstr. Also, enterroute should be probably
replaced by an extended enterstr.

=item * (M1) (feature)

Mehrere Eingabemodi anbieten, z.B. E<quot>BBBike ClassicE<quot>,
Google, GoYellow.

 BBBike Classic: <1> setzen von routenpunkten
                 <Motion-2> scanning
                 <3> popup-menu
		 <cursor>: scrolling mit einer geschwindigkeit
		 <pg up/down, pos1/end>: seitenweise scrollen
		 <+>/<->: zooming

 Google:         <1> original: zusatzinformationen anzeigen (?), bei
		     bbbike weiterhin routenpunkte setzen
                 <Motion-1> dragging
		 <2> unbelegt (Browser)
		 <3> unbelegt
		 <Cursor>: scrolling mit zwei geschwindigkeiten
		 <pg up/down, pos1/end>: seitenweise scrollen
		 <+>/<->: zooming
		 <wheel up>: zoom in and keep pos under mouse
		 <wheel down>: zoom out and keep pos under mouse
		 <double-1>: zoom in and center
		 <double-3>: zoom out

 GoYellow:	 <1> zoom in and center
		 <3> zoom out and center
	 	 <Shift-1> dito
		 <motion-1> dragging
		 <enter> zusatzinformationen
		 <pg up>: zoom out, center kept
		 <pg down>: zoom in, center kept
		 <cursor>: scrolling mit einer geschwindigkeit


Nachdem ich Motion-1 per default für Dragging eingestellt habe und es
sich OK anfühlt, ist die Implementation der unterschiedlichen
Eingabemodi nicht mehr so wichtig.

=item * (H5)

Aufräumen des Options-Editors.

Sobald Tk::Getopt es unterstützt, vertikalen Listenview statt Tabs
verwenden.

=item * (M3) (feature)

Routenliste: gewünschte Attribute für die Kommentare sollten über den
Options-Editor einstellbar sein bzw. beim Beenden automatisch
gespeichert werden.

=item * (M4)

If FontDialog is available, then use this instead of the *font entries
in the option editor. Make FontDialog also usable for fixed font
selection (this needs the relatively slow -fixedfont option of
FontDialog). Otherwise, if FontDialog is not available, the chosen
fonts should be made immediately visible using set_fonts().

=item * (H3)

Im Edit-Mode auch Direktiven zu Strecken zeigen, soweit sie
interessant sind. Evtl. könnte man einige Direktiven (Aliase) auch im
Normal-Mode zeigen.

=item * (M3)

Aliase sollten suchbar sein: implementiert in search_anything für
nicht-Similarity-Suchen und nicht-egrep-Suchen. Der Rest muss
untersucht werden (brauche ich egrep überhaupt?)

=item * (H2)

category_* directives in bbd files have side effects: the global
%category_... is set and not per-file variants. Should be fixed,
probably in reset_free_layer in bbbike.

=item * (H2)

There's no (easy) way to draw only outlined polygons from custom bbd
files. (Maybe it can be done with category_stipple.cat:
Tk/trans_cur.xbm and some outline directive?) (Frage: wo wird so etwas
benötigt?)

=item * (H2)

If E<quot>Namen zeichnenE<quot> is turned on in custom street draw and
filled areas are drawn, then it's visible that the labels are not
above the are layer. Will probably be fixed if all labels are drawn in
an own layer (quite on the top), which will also get a nice label
positioning algorithm.

=item * (M2)

Straßennummerierungsschilder (+ Font) werden nicht korrekt gezoomt.

=item * (M4)

Überlappende (gleiche) Straßennummern sollten gar nicht erst gezeichnet
werden.

=item * (H5)

Die Optimierungsparameter des CGIs (textuell) sollten in der
Tk-Version verwendet werden können. Plan: Geschwindigkeitsbasierte
Parameter und die E<quot>textuellenE<quot> Parameter werden getrennt
(entweder eins oder das andere); die Faktoren werden vom CGI
übernommen. Vor dem Aufrufen der Suche muss entweder das eine oder
andere genommen werden. Evtl. Modul schreiben, wo die Parameter für
CGI und Tk-Version ge-sharet werden können (-> make cgidist anpassen?
wird das noch für die SF-Version verwendet? Vielleicht sollte die
SF-Version grundsätzlich alle Module außer Tk/* bekommen?). Manuelle
Tests machen, ob bei beiden das gleiche herauskommt.

=item * (H4)

qualitaet-Einstellungen sollten persistent aus dem Optimierungsdialog
gemacht werden können

=item * (M4)

Konverter vom E<quot>TouratechE<quot>-Format nach bbd schreiben. Beispieldatei:
http://www.arur.de/fileadmin/reisenotizen/reisenotizen_roland/images/berlin-ffo/bl-ffo.xml

=item * (M2)

Create nice anti-aliased and alpha-using PNG images and use it if
possible for icons/symbols etc.

=item * (H5)

Besseres Erkennen der Kreuzungssituation in der Straßenliste. Z.B. Bei
Kreuzungen, wo beide Straßen nur einen kleinen Winkel zueinander
haben, sollte immer (auch bei <30°) die Richtung ausgegeben werden.
Bei Situationen wie Falkensteinstr./Oberbaumstr. sollte trotz
Geradeausfahrt die Nebenstraße gekennzeichnet werden (z.B.
E<quot>nicht der Hauptstraße folgenE<quot>). Bei einfachen
Kurvensituationen ohne Kreuzung (Neudecker Weg und Rudower Str.)
braucht keine Richtungsangabe erfolgen. Wenn an so einer Stelle eine
Kreuzung ist, dann kann die Angabe E<quot>Hauptstraße folgenE<quot>
zusätzlich angezeigt werden.

=item * (H3)

insert/delete etc. functionality: add an easy way to use custom layers

=item * (M4)

Show more fields in route list (just like in web interface)

=item * (H3)

Edit mode, coloring of pp points: use different coloring for
E<quot>KurvenpunkteE<quot> and crossings, to easier detect errors in
the street net.

The beginnings are made (see pp_color, tags ppkvp and ppcrs etc.), but
one thing is missing: I need a net like $net->{Net}, but without
gesperrt/oneway modifications... It would also be good to have that
net for *all* layers. A simple solution would bei not too hard to
implement, but time- and memory-consuming.

=item * (M4)

Edit mode: if route searching is active and E<quot>insert pointE<quot>
(or insert multiple points) is active, then it seems that the created
middle point is broken (off by pixels, and in float). So warn the user
in this situation to switch route searching off.

(NB: Is this really the case? It does not seem to be the search mode,
but another problem...)

=item * (H5)

Drucken: if the PDF backend is chosen, then Druckeinstellungen have no
effect -> Remove them in this case! Maybe it would be nice to support
at least some of them (legend, maybe b/w)

=item * (H4)

Overview-Map: always segfaults under Win98

=item * (H1)

Unterstützung für E<quot>Persönliche WegeE<quot> (oder
user-defined layers). Zwei Typen: routingfähig (automatisch per
E<quot>add...E<quot> in das Straßennetz eingebunden) oder
nicht-routingfähig. Editiermöglichkeiten für diesen Layer
(mit Verwendung von datachange.log). Möglichkeit der
Veröffentlichung. -> Niedrige Prio, da theoretisch schon machbar,
auch wenn nicht ganz komfortabel: edit-Funktion funktioniert für
eigene Layer, add custom und custom existiert für das Suchnetz

=item * (H3)

Neue Symbole (basierend auf E<quot>>E<quot>) für Steigungen verwenden:

 > (gepunktet): 1-3%
 > (solid): 3-7%
 >>: über 7%
 > (grau): Steigung ohne Prozentangabe

=item * (M4)

Aufteilen des Strassen-Menues. Vorschlag:

 Strassen-Layer
  Strasse auswaehlen
  Erweiterte Auswahl (untereinander!)
  Strassenkategorien
  Strassennamen
  Attributierung:
  Radwege + Kategorien (comments_cyclepath geht hier ein)
  Hoehenangaben ?
  Ampeln
  Strassenqualitaet + Kategorien
  Sonstige Beeintraechtigungen + Kategorien ?
  Unbeleuchtete Straßen
  Vorfahrt
  Gruene Wege ?
  Steigungen (comments_mount geht hier ein)
  Kfz-Verkehrsdichte (comments_kfzverkehr)
  Strassenbahnen (comments_tram)
  Routing-Hilfen (comments_path)
  Sonstige Kommentare (comments_misc)

 Andere Wege-Layer
  Radrouten (comments_route)
  Radrouten auswaehlen
  Faehren (comments_ferry geht hier ein)
  Faehren auswaehlen
  Fragezeichen

=item * (H2)

Bug: see t/strassennetz.t

=item * (M3)

Computers are faster nowadays. Make some feature default, e.g.
no_overlap_labels, more layers on startup (flaechen, gewaesser).
Detect computer speed on linux:

    perl -e '($bogomips)=`grep bogomips /proc/cpuinfo` =~ /:\s*([\d\.]+)/; print $bogomips,"\n"'

How to get CPU/hardware speed on other OSes: FreeBSD (sysctl?,
/compat/linux/proc/cpuinfo?), Windows?

E<quot>Optionen für langsame RechnerE<quot>: z.B. E<quot>Überlappungen
vermeidenE<quot> etc.

=item * (H1)

Hausnummern. Für wichtige lange Straßen erfassen. In der
Kreuzungsliste beim CGI dann neben den Straßennamen anzeigen. Wie in
der Perl/Tk-Karte darstellen? Vielleicht nur bei kleinen Massstaeben?

=item * (H2)

Optimize SRTProgress: only hide canvas if first progress drawing is
necessary (already done, check). Adjust progress drawing to be
specified in time intervals (alternatively). This would reduce the
need of hiding/displaying the canvas in short or empty redraws.

Research for alternative SRTProgress implementation: pre-forked
stand-alone MainWindow, or submit a TIP with a per-widget update (in
Perl/Tk: updateWidget) method.

=item * (H3)

The -lazy option seems to cause a big memory leak. Unless this is
solved for sure there should be no standard-user-visible -lazy option.

=item * (H2)

Dynamisches Zeichnen (weniger/mehr) von Kartenelementen anhand der
Vergrößerung (wird teilweise schon gemacht, z.B. bei
get_symbol oder Orte/Kategorien=Auto, was fehlt noch?).

Beim Zeichnen von Orten muss das Problem des Abstand zwischen Punkt
und Label geloest werden --- bislang wird der Abstand beim
Vergroessern zu gross und beim Verkleinern zu klein. Ideal waere
natuerlich ein eigener Canvastyp (Composite-Item)

Mittlerweile ist das Problem Punkt-Label bei Orten gelöst für den
Modus E<quot>überlappendE<quot>.

=item * (M3)

In Routenbeschreibungen Zeilen wie "Straße A", "Straße
A", "Straße A" zu einer Zeile zusammenfassen. Das kann
vorkommen, wenn bei der Route ein Zwischenpunkt verwendet wird.

=item * (M2)

Bessere Routenbeschreibung für Landstraßen (wie? was ist
an der derzeitigen nicht gut genug?). In der Datenbank "X - Y" nach
"(A) - X - V - Y - (B)" ändern, wobei X und Y Start- und Zielort
der Strecke ist, (A) und (B) die globale Richtung
(größere Städte vor und nachher) und V ein Via-Ort
ist. Die geklammerten Orte und V sind optional. Auch alle Straßen, die
bislang nur mit der Straßennummer bezeichnet sind, auch mit
Start/Zielort in der Form E<quot>X9: Start - ZielE<quot> oder
E<quot>Start - Ziel (X9)E<quot> bezeichnen.

=item * (H2)

Möglichst Orte (optional) in die Routenbeschreibung aufnehmen.
Vielleicht mit nearest_... arbeiten. Eine erste Implementation mit
$do_route_strnames_orte, aber was macht diese? Nähe zur Ortschaft
sollte evtl. einstellbar sein. Problem: ich habe keine Ortsgrenzen zur
Verfügung. Anfangen, die Datei orte_flaeche anzulegen (zwischen
sicheren Punkten --- diejenigen, wo ich einen Waypoint am Ortsausgang
gesetzt habe, und interpolierten Punkten unterscheiden)

=item * (H2)

Im Umland ist es vielleicht sinnvoller, eine Routenbeschreibung anhand
von Punkten (Ortschaften) anstatt Strecken (Straßen) zu machen.
Optional eins oder beides zusammen.

=item * (H5)

Implementiert, aber nicht getestet: Update-Prozess: data/.modified um
eine weitere Spalte für einen MD5-Hash oder so erweitern. Die Prozedur
sieht dann so aus: .modified wird bei jedem Update/Rsync geändert.
Zuerst wird downgeloaded, dann mit Digest::MD5 überprüft (falls nicht
installiert, gibt es eine Fehlermeldung) und die alte Datei ersetzt.
Man könnte noch einen Sanity-Check auf das Format von .modified
machen. Leider handelt es sich bei data/* um ein Sammelsurium von
Dateien, nicht nur .bbd (auch .gif oder .coords.data oder ...)

=item * (H5)

Update-Prozess: falls unter /usr/* installiert, hat der normale User
normalerweise keine Rechte auf das Installieren. Erkennen und
hinweisen, z.B. BBBike als root starten (sudo/super) -> getan, aber
noch nicht getestet. Nice to have: su/sudo/super für die Dauer der
Installation verwenden. Oder in ein privates Verzeichnis installieren
und dieses bevorzugt verwenden.

=item * (H1)

(Rsync und CVS hat Zeit...)

Update über das Internet: rsync-Unterstützung und die
Alternative CVS testen. rsync ist vielleicht nicht so gut, weil ein
rsyncd irgendwo benötigt wird und rsyncd nicht das Sicherste der Welt
ist. CVS wäre besser, noch besser, wenn es eine abgespeckte
Client-Variante in Perl gäbe (VCS-LibCVS scheint auch brauchbar zu
sein), die man ins Windows-distfile dazupacken könnte. CVS ist unter
Unix meist vorhanden.

Vielleicht besser: gibt es eine Apache-Option, um automatisch bei
accept-encoding: gzip mit komprimierten statischen Dateien zu
antworten? Update.pm braucht allerdings auch Unterstützung dafür...

=item * (M1)

Wie ist der derzeitige Stand mit aktuellen Telefonbuch-CDROMs? Welches
Programm kann diese auslesen (tbb?).

=item * (M1)

Telefonbuch-Datenbank (Name): Die Suche ist suboptimal. Bei der
Suche von häufigen Nachnamen (Müller, Schulze)
wird das Ergebnis begrenzt (200 Namen) und kann mit "Weiter"
fortgesetzt werden.

=item * (M1)

Maushilfe: B4/B5 dokumentieren (nur im Canvas, nicht auf den Buttons
notwendig), Erklärung für B2 anpassen

=item * (M2)

Oben/normal/unten: Reihenfolge: RB oder S, dann RB-Bhf oder S-Bhf, und
nicht RB, RB-Bhf, S, S-Bhf wie bislang.

=item * (H1)

Unlimited Undo?

=item * (M1)

Optionen -auchumland und -nurberlin einführen: damit könnten einige
Variablen wie wasserumland, landstr, orte etc. gesetzt werden.

Aber wahrscheinlich sollte ich besser auf lazyplot setzen?

=item * (H2)

search_route: multiple Start/Zielpunkte (Checkbutton) --- Ausführung
unklar.

=item * (M3)

Mehr einfache Optionen (E<quot>ShortcutsE<quot>) für die Suche:
kürzeste Strecke, schnellste Strecke (in Abhängigkeit von
Wind, Steigung/Gefälle, Straßenoberfläche etc.),

=item * (M1)

Einheitliche Schalter für das interne Caching von Daten (z.B. ob
beim Anklicken von "Ort" die Datei immer neu eingelesen werden soll).

=item * (H1)

Portrait/Landscape-Umschaltung: alle Canvas-Daten aktualisieren. Route
wird z.Zt. nicht gedreht (evtl. auf @coords verzichten und nur
@realcoords verwenden).

=item * (M4)

Vernünftige Options-Eingabe in der GUI. Zwischen
Startup-Optionen (Zeichnen der Straßen/Punkte) und aktuellen
Optionen unterscheiden (teilweise wird das schon gemacht, siehe
E<quot>Layers at StarttimeE<quot>). Damit zusammen hängt eine
Neubearbeitung von Tk::Getopt (Tk::NoNotebook, Klick auf Checkboxen
etc. resultieren *NICHT* in einer sofortigen Aenderungen --- erst nach
E<quot>OkE<quot>, besseren Msgcat-Support (eigene Module dafür?)).

=item * (M1)

choose_ort, S- und U-Bahnen: neben dem Bahnhof die zugehörige(n)
Linien anzeigen

=item * (M2)

Option -centerc auch schöner zugänglich machen. Eine Möglichkeit
wäre, im Optionseditor einen Button neben der Option anzubieten, der
in den set-coord-mode geht, cursor aendert, das tk-getopt-fenster
withdraw-t, und darauf wartet, dass der benutzer auf die karte klickt
oder E<quot>cancelE<quot> drückt.

=item * (M2)

Evtl für BBBike-Canvas und Übersichtskarte: Maus ziehen zum
Einstellen eines Ausschnitts. Das Rechteck, das beim Ziehen erzeugt
wird, muss natuerlich den Aspect des Hauptfensters beibehalten.

<Motion> ist bei der Übersichtskarte schon belegt. Trotzdem
umdefinieren? Oder nur die Ecken des Rechtecks zum Ziehen verwenden?

=item * (M2)

Beim Canvas: <B1-Motion> statt <B2-Motion> zum Pannen der Karte
verwenden? Gibt es Nachteile, weil <B1> belegt ist und Fehler
passieren können? Soll man es konfigurierbar machen?

=item * (H4)

Edit-Menu: Weiteren Punkt E<quot>bulk editE<quot> einführen. Damit
kann ein Straße mit allen wichtigen Attributen gesetzt werden.
Zusätzlich für E<quot>Add new toE<quot>-Dialog: Beschränkung der
Kategorien auf die aktuell verwendbaren (also bei
strassen auf HH .. NN, bei landstrassen zusätzlich B, bei qualitaet-*
Q... etc.)

=item * (H3)

Edit-Menu: new feature: prolonge street. From the editing view: click
2nd and 1st point of street and then a series of coordinates to be
added.

=item * (H3)

Edit-Menu: new feature: split street. From the editing view: click
three neighboring points on the street. The middle one is the split
point.

=item * (H2)

Edit-Menu: new feature: combine streets. From the editing view: click
three points from two streets, where the middle one belongs to both
streets. Check if both streets have the same name and category,
otherwise combining is not possible. But maybe combine nevertheless
and give the user the possibility to choose the combined
name/category.

=item * (H3)

Edit-Menu: new feature: Move multiple points. From the editing view:
select a number of points (e.g. all points of a street or area; or by
selection rectangle; or by clicking on a number of points). Select a
delta by defining a line. Move all points by this delta.

=item * (M2)

Edit-Mode: DEL does not delete the coord list (but Backspace does).

=item * (M3)

search net custom: statt automatisch alle Layer zu verwenden sollte
man lieber:

* entweder einen Filedialog erhalten und damit eine bbd-Datei
auswählen

* oder einen Dialog mit allen vorhandenen Layern anzeigen und daraus
beliebig viele (für multistrassen) auswählen

* oder beides

=item * (M3)

Additional layers sollten auch in der Kommandozeile und im config-File
spezifizierbar sein.

=item * (H3)

Replay datachange.log: alle Änderungen (am/bis einem bestimmten Datum)
werden automatisch aufgenommen. Am besten mit einem Testmodus, der
zuerst alle Dateien aus data/* nach /tmp kopiert und nur dort ändert.
Dann könnte man bbbike mit -datadir aufrufen und testen, oder ein diff
-r machen.

=item * (H3)

Straßennamen: Labels wie in richtigen Stadtplänen
anordnen, also z.B. "Yorckstr.": am Anfang der Straße "Yorck-",
am Ende der Straße "str.". Dadurch werden die Namen hoffentlich
lesbarer sein.

Der Code dazu existiert schon, ist aber langsam und buggy und wird nur
bei bbbike.cgi verwendet.

=item * (H3)

Da das Zeichnen von Straßennamen so lange dauert: mit Hints
arbeiten (z.B. für einige oft verwendete Zoomstufen Koordinaten
und Transformationsmatrizen vorberechnen).

=item * (H2)

Beim Vergrößern könnte man ab einer bestimmten
Stufe auch die Größe der Straßen/Ortslabel auch
mitvergrößern.

=item * (H1)

Server-Mode und Client-Programm: austesten, insbesondere mit KDE, und
dann alle Starts auf bbbikeclient umschreiben. Gucken, wie man sowas
mit Win32 machen könnte. Server-Beispielcode aus
E<quot>Mastering Perl/TkE<quot> verwenden.

=item * (H3)

Rotierte Fonts: vielleicht ein Freetype-Modul schreiben, dafür
eine Tk::Canvas-Erweiterung und diese in BBBike verwenden?

Besser: man kann bereits jetzt rotierte TTF-Fonts verwenden:

    perl -MTk -e 'tkinit->Label(-text => "hello, world!")->pack;MainLoop' -- -font 'serif:matrix=1 .1 0.2 1 122'

=item * (M1)

Vergrößerung der Schrift beim Zoomen

=item * (M1)

Beim pp-Symbol wird beim Zoomen vergrößert; beim Neuzeichnen wird aber
die kleinste Vergrößerungsstufe wieder genommen.

=item * (H1)

Kurzhilfe: kann man feststellen, ob man eine 2/3-Tastenmaus hat? Und
wenn es nur eine 2-Tasten-Maus ist, dann existiert vielleicht eine
Emulation fuer die mittlere Taste?

=item * (H1)

Optimierung: Beim Ausschalten von Outline oder Straßennamen
muß nicht alles neu gezeichnet werden.

=item * (H2)

Meta-Choose-Dialog, der alle Choose-Dialoge vereinigt. Vielleicht
Tk::SmartListbox verwenden?

=item * (M3)

wettermeldung2 mit fork/spawn/threads aufrufen

=item * (H3)

Neue Version von wettermeldung2 schreiben, die SYNOP-Information
verwendet.

=item * (M4)

Wenn während eines WWW-Fetches die Verbindung gekappt wird,
hängt BBBike vollkommen. Gesehen bei Win32. Vielleicht mit
Timeouts arbeiten (kann das LWP?) und häppchenweise holen. Oder
noch besser: fileevent verwenden! ... LWPng kann Event-Handling.
Leider ist das Event-Handling noch inkompatibel mit Tk. Auch für
wettermeldung2 mit LWPng arbeiten. =E<gt> Vielleicht das hochgelobte
POE verwenden.

XXX Stimmt das noch immer, auch mit Http.pm? Unter Unix scheint es gut
zu laufen.

=item * (M2)

Für das Drucken von Text: evtl. auch Netscape und print-Methode
verwenden (?). Für Unix könnte man eine start netscape,
netscape remote openFile/print-Kombination verwenden. Bei Windows?
Netscape könnte man auch zum Mailabschicken verwenden,
über mailto. Evtl. ein Modul für Netscape schreiben,
daß die ganzen remote-Kommandos verwendet. Hier eine Liste:

 %s: usage: OpenURL(url [ , new-window|window-name ] )
 %s: usage: OpenFile(file)
 %s: usage: print([filename])
 %s: usage: SaveAS(file, output-data-type)
 %s: usage: SaveAS(file, [output-data-type])
 %s: usage: mailto(address ...)
 %s: usage: find(string)
 %s: usage: addBookmark(url, title)
 %s: usage: htmlHelp(map-file, id, search-text)

Mit Xprt für X11 experimentieren (doc lesen).

=item * (H1)

Ein LightWeight-Modul (CanvasMap) schreiben. Vielleicht irgendwann
alles auf dieses Modul umschreiben.

=item * (H1)

PerlPlusPlugin ausprobieren und BBBike dafür portieren. Sachen,
die mir dafür einfallen: Ich brauche ein open(), das über
LWP funktioniert (vielleicht mit LWPng?). Ich brauche ein hyperuse und
hyperrequire. Z.B.

    @HYPERINC = qw("http://user.cs.tu-berlin.de/~eserte",
                   "file://tmp");
    hyperuse BBBikeEdit;
    hyperrequire Strassen;

Irgendwo habe ich so etwas schon implementiert gesehen ... suchen!

=item * (M2)

Bei einem Resize muß auch das Progress-Canvas angepasst werden.

=item * (H1)

BBBikeContext.pm schreiben: gibt alles aus, was ich so brauche: $os,
Strassen-Objekte, Crossings, Netze etc. Caching bei Belieben
einstellen, evtl. mit Ties arbeiten, die sich selbst umwandeln oder
durchgängig mit Methoden. AutoLoading verwenden.

Z<>=E<gt> Teilweise erledigt BBBikeRouting.pm einige dieser Sachen...

=item * (H1)

Speicheroptimierung.

Folgende Symbole kommen im Dump von Devel::Symdump vor und
bedürfen Klärung (warum, woher, benötigt?):

    * English::* => in irgendeinem Tk-Modul
    * DB::args
    * Tk::Pretty::*
    * re::*
    * DirHandle::*

Ein minimales System kann auf Folgendes verzichten:

    * Fahrinfo::*
    * BikePower::*
    * Devel::Peek::*
    * EasySound::*
    * Karte::Berlinmap1997::*
    * Karte::Berlinmap1999::* und weitere
    * wettermeldung2::*
    * BSD::Resource::*
    * Hyper::*
    * Plugin::*

Evtl. auch:

    * Tk::DragDrop::*
    * Tk::CanvasBalloon::*
    * Tk::ContextHelp::*
    * Tk::Dialog::* (nach STDERR umlenken, wenn nur OK-Button erscheint)
    * Tk::ErrorDialog::* (Default: nach STDERR umlenken)
    * Tk::FireButton::*
    * Tk::SRTProgress::*
    * Tk::UnderlineAll::*

=item * (H1)

3D-Darstellung von Berlin (z.B. vier versetzte Flächen, die
oberste in der Hintergrundfarbe und die anderen in der Schattenfarbe).

Z<>=> Wo verwenden: overview-Fenster, overview-Button oder im CanvasMap
anstelle der normalen Grenzen?

=item * (H2)

Bike+Ride integrieren. Das würde in eine unterbrochene Route
resultieren, deren Fahrzeiten addiert würden. Zusätzlich
käme noch eine abgeschätzte Zeit für die Benutzung
des Verkehrsmittels (Fahrzeit + Zusteigzeit + Umsteigezeiten). Eine
Verbindung zu Fahrinfo wäre genial.

Vorgehensweise:

=over

=item * automatisch Verknüpfungspunkte Bahnhof-Straßennetz erstellen.
Z.B. exact_streetchooser verwenden, um die nächste Straße zu
ermitteln, und dann mit add_net den Lotpunkt neu erzeugen.

=item * evtl. für pathologische Fälle Verknüpfungspunkte manuell
erstellen

=item * make_net_cat für die Geschwindigkeit. Faustregel: RB 80-100
km/h (?), U-/S-Bahn anhand von einigen Fahrplänen
Durchschnittsgeschwindigkeiten ermitteln

=item * jeder Verknüpfungspunkt wird mit einer Penalty belegt, die der
Wartezeit ungefähr entspricht.

=item * auch Umsteigemöglichkeiten im Netz mit Penaltys belegen (wie?)

=item * Suche modifizieren: Verabschieden vom Grundsatz gleiche
Koordinate = Verknüpfung? Mitführen der aktuellen Linie (bzw.
Liniengruppe), um Umsteigen zu erkennen.

=back

=item *

GfxConvert evtl. mit Tk::WinPhoto/Tk::Photo-Funktionen implementieren,
wenn die externen Programme nicht verfügbar sind. Am besten
wäre natürlich noch immer ein NetPBM-Modul.

Photo-Zooming: -zoom x -subsample y == -zoom x/y oder umgekehrt

=item *

Radwegekategorien erweitern: RW(kategorie)(qualitaetskategorie). Also
heißt dann z.B. RW00: Radweg mit sehr guter Qualität und
RW13: benutzungspflichtiger Radweg mit sehr schlechter
Qualität. Bei den restlichen Kategorien kann man sich die
Erweiterung sparen, da dort die Qualitätskategorie der
Straße gilt. Default-Qualitätskategorie für Radwege
sei 1 (gute Qualität).

Problem => ich bin schon bei RW10 angelangt, also brauche ich eine
andere Kodierung.

=item *

ShAddRecentDoc geht unter Win98 nicht?

=item *

Drag'n'drop und open's sollten vielleicht etwas mit .lnk-Dateien unter
Win* anfangen können...

=item *

outline_text bei draw_text_intelligent verwenden

=item * (M4)

draw_text_intelligent should use the bbox of the central object
if xaddanchor/yaddanchor is not defined

=item *

Beim intelligenten Zeichen von Ortsnamen bietet sich ein
Scanline-Vorgang von rechts nach links an. Somit vermeidet man Sachen
wie
        Slubice *
	      * Frankfurt

Schwierig, wenn gleichzeitig das Ergebnis aus sortbycat beachtet
werden soll (Multipass? Langsam!)

=item *

Bei der Ausgabe der Straßennamen an der Route sollte ein aehnlich
intelligentes Verfahren angewendet werden. Vielleicht kann bei Routen,
die von W nach O verlaufen, die Strassennamen erstmal links vom Punkt
eingezeichnet werden und umgekehrt.

=item *

Bei -usbahnnetz sollte folgendes gehen: Routenbeschreibung mit Bahnhöfen
statt Strecken (davon kann auch die Routenbeschreibung auf dem flachen
Land profitieren!) ... Und noch schöner: eine Kombination von U/S-Bahn
und Straßennetz (für Fußwege bzw. Bike+Ride).

=item *

Optional eine kürzere Beschreibung. Diese würde nur
folgendes enthalten: Straßen und Abbiegevorgänge. Wenn
man auf einer Straße nicht abbiegen muss, dann werden
verschiedene Straßennamen in einer Liste zusammengefasst.

Zusätzlich noch eine Druckausgabe. Auch beim CGI. Wann wird die
Ausgabe endlich vereinheitlicht?

=item *

bei Windows (oder allgemein: bei ClickToFocus) ist es
unangenehm, dass neue Fenster den Focus klauen. Allerdings ist es ohne
Maus eher angenehm, dass neue Fenster den Focus bekommen. Wie soll man
also verfahren?

=item *

Pilot.pm installieren, BBBikePalm dafür erweitern

=item *

user editing: negative/positive präferenzen mit b2/b3 lange druecken
setzen

=item *

bugfix: optmenu in optimierungseinstellungen korrigieren (Fehler beim
Tk Widget)

=item *

lange hänger bei vielen Canvas-Elementen ueberpruefen

=item *

MDI-Interface entwickeln mit:
 * map-widget
 * start/zieleingabe
 * einfaches opt-einstellungs-fenster
 * routenbeschreibung
Siehe Tk::WindowManager =E<gt> entwickle ich nicht mehr weiter,
dafür gibt es aber ein neues Tk::MDI-Widget. Aber: MDI is evil!

=item *

Andreas' Labeling-Algorithmus verwenden

=item * (M2)

Tk::Icon (see L<http://www.schmuker.de/perl/modules/>) to optionally
display the bbbike icon (avoid transparency problem!) (Windows only).

=back

=over

=item CDROM-Probleme:

 - tk:underlineall.pm warnings in 111,114,157,178
 - win, print: fehlermeldung nicht auf stdout zeigen. start_cmd wird ohne progexe gestartet, wenn der ps-viewer gestartet weden soll. dito beim browser
 - tk::getopt: pane verwenden. ab 800.015 eh standard
 - optionen besser gruppieren. z.b. audio irgendwo unterbringen
 zwei Reihen mit Notebook?
 - "outline" -> umrandungen
 sonstige anglizismen herausnehmen
 - Bei Win98 geht anscheinend perlglob nicht-> Probleme mit Ncopy
 - unix/kde-installation: statt symlink von /usr/local/bin besser shell-skript mit richtigem perl-path erstellen. wenn /usr/local/bin nicht im PATH, dann evtl. /usr/bin nehmen. wie macht es autoconf bei KDE? kann ich was von autoconf verwenden?
 Env-loesung ist auch OK
 - menuepunkt fuer taste x
 - layereditor hat bei win95 einen absturz verursacht, und zwar beim local drag (NT mit 800.015 selbst compiliert auch? nur bei followmouse?)
 - winddaten eingeben als menuepunkt
 - eigenes popup mit popover nicht fuer win32 verwenden - da ist eh clicktofocus aktiv. Bei KDE auch? Gibt's ne property, die die wm -einstellung anzeigt?
 - set ziel vom str-dialog setzt anscheinend das via-array nicht
 - shift-click vom start aus geht nicht
 - besseres cdrom.pl schreiben. Sowas wie cons, nur fuer das kopieren. Oder mkisofs beibringen, das er die richtigen sachen ohne kopieren erzeugt

=item BBBike - Externalization, towards to v4.0

 Allgemein: Aenderungen nur durchfuehren, wenn sie entweder trivial und unaufwendig sind oder zwingend fuer die anstehenden Portierungen sind.

 - data: neue Verzeichnishierarchie
 Vorschlag: city "_" iso-country-abbrev. Beispiel: berlin_de, muenchen_de, san_francisco_us
 - oder: derzeitige datadir-praxis beibehalten: z.b. data_berlin_de
 - in den Geography-Modulen: Iconleiste (welche Buttons sind ueberhaupt definiert? Welche zugehoerigen Menues?)
 - Iconleiste wird stadtspezifisch erzeugt (e.g. Gibt es U-/S-Bahnen?)
 - Iconbilder werden stadt/landtpezifisch benannt. Beispiel: ubahn.gif => ubahn_de.gif
 - Umland ja/nein. 3-stufig (mit jwd?), "Haltestelle" oder "Haltestelle/Ort"?
 - Aufgeben des manuellen Landstraßenzeichnens (und jwd etc.)
 - generell: vielleicht ein gesondertes sub symbolframe für jeden Ort?
 - oder: XML-Beschreibungsdatei für die Properties?
 - automatisches Erstellen der Properties in Geography.pm anhand der existierenden data-Dateien
 - Ampeln sind vielleicht nicht überall erfasst
 - winddaten können vielleicht nicht überall über das web geholt werden
 - Straßen: nicht alle Daten sind überall erfasst (Kategorien, Radwege, Qualität, ...)
 - Straßenauswahl: PLZ-Liste, CDROM?
 - etc. So gut wie alle daten können vorhanden sein oder nicht
 - transpose-Funktion ist ortabhängig, BBBikeTranspose als Verteiler
 - map-button sollte berlin-spezialität bleiben
 - check-skript: sind alle benötigten Variablen definiert (in den Geography-Modulen)
 - einige devel-skripte sind auch ortabhängig
 - vielleicht Erstellung eines devel-Verzeichnisses mit nötigen skripten aus miscsrc und vielleicht misc. Insbesondere kritische Sachen wie den eplus-Roboter herausnehmen
 - verkleinerung für overview-mode sollte einstellbar sein
 - anhand von $0 erkennen, welcher Ort verwendet eerden soll. Gut für CDROM-Installationen
 - edit vs. normal mode: bei anderen städten keinen unterschied machen (transpose entsprechend setzen) oder gps-koordinaten im edit-mode verwenden
 - CGI: imagedir ortsunabhängig machen
 - caches ortsunabhängig machen

=item Bookmarks

Bookmarks in choose_ort und möglichkeit, per dnd neue bookmarks zu definieren, um als straßenauswahl dienen zu können

=item weiter:

 - bei Http.pm vielleicht IO::Select::can_read/write verwenden
 - bbbike.cgi: Installation auf rapidsite testen => automatisierten Test a la wap_test schreiben, gleiche Features erkennen und verallgemeinern
 - BBBike: feinere Aufteilung der Gegenwind- etc. Strecken (fließend von rot bis grün)
 - BBBike: "Window intelligent positionieren" implementieren

 - BrowserInfo.pm: von Roxen's SUPPORT lernen:
 SUPPORTS: font tables cookies javascript backgrounds backgrounds autogunzip netscape_javascript tablecolor ssl frames mailto forms images pull push java imagealign gifinline pjpeginline fontcolor some_html3 jpeginline

 - bbbike/c: neues pmake funktioniert unter Suse nicht =>
 gmake benutzen? grrr...

 - Verwendung von Tk::App::Reloader. Scheint allgemein zu funktionieren.

=item Fahrbahnbeschaffenheit

  Aus der Radzeit 3/2001, Seite 8-9:
  Radwege: Verbundsteine kontra Asphalt
  [...]
  Der Energieverbrauch beim Rad fahren (durchschnittliche
  Geschwindigkeit 15 km/h) auf Asphalt in Straßenqualität
  beträgt ca. 1000 Joule und auf Kopfsteinpflaster ca. 2200
  Joule jeweils pro 100 Meter. Bei asphaltierten Radwegen mit
  schlechter Längsebenheit liegt dieser Wert zwischen 1200 bis
  1400 Joule, bei neu gebauten Radwegen mit gefasten Verbundsteinen
  bei ca. 1400 Joule und bei wassergebundenen Decken zwischen 1600 und
  2000 Joule pro 100 Meter. Da der Einsatzbereich des Fahhrades als
  Verkehrsmittel umgekehrt proportional zum Quadrat des
  Energieverbrauchs ist, ist dieser bei Radverkehrsanlagen in guter
  Straßenqualität rund doppelt so groß wie bei
  Radwegen mit Betonverbundsteinen und etwa viermal so groß wie
  bei wassergebundenen Radwegen. Quelle: UPI-bericht Nr. 41, 3. erw.
  Auflage August 1999 E<quot>Entwicklung und potentiale des
  Fahrrad-VerkehrsE<quot> Seiten 18 bis 20

  URL: L<http://www.upi-institut.de/upi41.htm>

=item Verkehrsverwaltung

  Verkehrs-/Umweltverwaltung wegen Emissionen:
  Reulenbäcker
  IX D2
  Tel: 9025 2391
  Raum 8.020
  Brückenstr. Mitte

=item weiter

 - Farbeditor: background setzen sollte vielleicht Canvas-bg ignorieren bzw. eigener Auswahlpunkt für Canvas-bg. Vielleicht *alle* Farben änderbar machen --- aber dann muss man die Änderungen auch abspeichern können (schwer, unwichtig)

 - Straßennamen: zeichnen on demand? besserer Algorithmus? TIP mit -angle ausprobieren? (schwer)

 - intelligenterer Markieralgorithmus: nicht Zentrieren, sondern nur verschieben, falls: durch andere Fenster verdeckt (nur eigene Toplevels beachten) oder weniger als 10% (5%) oder .... Pixel vom Rand oder einem anderen Toplevel entfernt. In diesem Fall den Ausschnitt auch nur minimal verschieben, bis sichtbar (schwer)

 - Idee von effizienten Loop/Callback-Mechanismus: ein callback kann entweder alleine aufgerufen werden (mit nötiger Initialisation + Cleanup) oder in eine beliebige Loop eingebettet werden (Inline, Initialisation + Cleanup außerhalb der Loop). Beliebig viele Callbacks können kombiniert werden (Stacking). Verwendung von B::Deparse? (sehr schwer, API und Ausführung erst einmal ausdenken)

 - Bug: beim Umschalten von einem anderen Mode in den Suchmode muss zuerst einmal ein Reset ausgeführt werden, bevor Start gesetzt werden kann (mittel)

 - Start/Ziel löschbar machen (mittel)

 - Optimierung bei vias löschen/verschieben/einfügen: nur geändertes Stück berechnen (delete=strecke vor-nach; move=beide strecken vor/nach; insert: neue zwei strecken) (mittel-schwer, nur, wenn ich das via-feature häufiger nutze)

 - bbbike.cgi: kommentar-spalte: bei münchen schiebestrecken ausweisen, evtl. auch radwege. in berlin vielleicht alles mögliche ausgeben --- ausprobieren

=item Straßennetz, Suche

Die build-Funktion könnte viel einfacher gestaltet werden, da if
(const) { } von perl optimiert wird. Die Vorgehensweise wäre
also:

    eval q{
        sub CONST () { $const }
        ...
        A*-Code
    }

Leider gibt es mandatory redefine warnings, die vielleicht mit einer
STDERR-Umleitung unsichtbar gemacht werden können. Allerdings
--- eine Analyse mit B::Terse zeigt, dass nach der Optimierung
zusätzliche enter/leave opcodes im Tree geblieben sind. (Das
wäre eine Idee für optimize::...: überflüssige
enter/leave überspringen, wenn in einem Block keine padsv (my)
oder LVINTRO (local) vorkommen sowie der Block in einem void-Kontext
steht.)

=item BBBikeEdit

Teile nach BBBikeGPS etc. auslagern => schon gemacht, noch mehr?

=item Vernünftige Koordinaten verwenden

Wahrscheinlich ist GKK (für Deutschland) die beste Wahl.

Mit dem Mapsource-Programm und/oder gpsman folgendes testen:

  * 1km entspricht wieviel Längengrad in Usedom, Prenzlau,
    Berlin, Dessau, Dresden?

  * Das gleiche mit Karte::Polar ausrechnen

  * Zur Sicherheit auch Breitengradabstände berechnen.

  * Range von GKK feststellen (in Mapsource einstellen, falls
    möglich, ansonsten mit dem eTrex). Wo gelten die Zonen, was
    für Einschränkungen hätte ich?

  * Umrechnung GKK - Karte::Standard - Karte::Berlinmap1966 - Karte::GISmap.

  * -orig-Dateien =E<gt> GKK, konvertierte Dateien =E<gt> einfach auf
    0/0 subtrahiert (ähnlich wie in München)?
    Hmmm. Wahrscheinlich ist es sogar besser, wenn die -orig-Dateien
    auf polare Koordinaten basieren --- wegen der verschiedenen Zonen.
    Beim Konvertieren wird eine Zone als E<quot>HauptzoneE<quot>
    angenommen und die gesamte Karte dagegen konvertiert (die
    Ränder sind dann verzerrt). Da mitten durch Berlin eine
    GKK-Zone verläuft, sollte ich vielleicht eine Pseudo-Zone
    4.5 verwenden (Aufruf von Karte::UTM::ConvToTm mit dem Berliner
    Längengrad als lat0 z.B.). Wie sieht es mit der
    Konvertierungsfunktion DegreesToGKK aus?

  * Liste aller von den derzeitigen Koordinaten abhängigen
    Dateien erstellen

  * Wenn die GKK-Konvertierung in Perl zu langsam läuft:
    XS-Modul schreiben. Tests sind einfach (Perl-Ausgabe gegen
    XS-Ausgabe checken)

  * Welches Datum verwenden: Potsdam oder WGS84?

  * Alle abgespeicherten Dateien sollten besser Degrees sein! Also
    .bbr und evtl. esri und so. Auch wenn möglich: die
    sichtbaren Koordinaten im cgi sollten auch Degrees sein.

  * Evtl. alle data/*-Dateien nach .bbd umbenennen und am Anfang einen
    Header einfügen (Datum, Koordinatenformat etc.)
    Entsprechende orig-Dateien heißen .orig.bbd oder .bbd.orig.
    In der Zwischenzeit mit beiden Systemen gleichzeitig arbeiten
    (Konvertierung im Makefile)

  * DegreesToNZGrid sieht interessant aus --- das brauche ich: x und y
    und keine Zonen. Implementieren, angucken!

  * Was ist mit dem Koordinatensystem ETRS 89?

=item Niederschlagsprognosen:

  http://puma.dkrz.de/theomet/prognosen/
  http://puma.dkrz.de/theomet/prognosen/bilder/colorpop6.jpg
  http://puma.dkrz.de/theomet/prognosen/bilder/colorpop6_12.jpg

  Kommerzielles Programm: http://www.einfalt.de/x_rad_vorher.html

=item Volltextsuchfunktion in bbbike erweitern: agrep mit fester
  Fehleranzahl, automatische Operation mit schrittweiser
  Erhöhung der Fehleranzahl

=item Volltextsuchfunktion: itemconfigure und normal/bold oder
black/grey verwenden, um Kategorisierung darzustellen (größere Orte,
wichtigere Straßen)

=item Eine Kreuzung:

  Verzögerung durch Vorfahrtsberechtigungen: Ampel, Bahnübergang,
  Vorfahrt, Vorfahrt gewähren, rechts-vor-links; Abbiegevorgänge

  Verzögerung durch Richtungsänderungen: geradeaus, rechts/links

=item Splines verwenden?

Z.B. in den Daten so markieren: x,y S x,y ... Falls ein Spline
auftritt, wird der gesamte Linienzug mitsamt Outline als -smooth => 1
markiert und für nicht spline-Abschnitte werden die Koordinaten
gemaess der Tk::Canvas-Doku dupliziert. Kreuzungen müssen exakt sein
(also darf ein Kreuzungspunkt nicht zwei S-Nachbarn haben! =>
Konsistenzcheck möglich). Mögliches Problem: können alle Tools mit
Extra-Daten zwischen den Koordinaten umgehen? Und: wie sieht die API
dazu aus (z.B. $street->getattr($data_pos, $coord_pos) und
$street->getallattr($data_pos)). Splines auch bei der Routensuche
(strecke()) beachten?

=item H1: Ausblenden von Strassentypen/Radwegtypen

sollte besser -state => "hidden" verwenden, wenn moeglich (d.h. recent
Tk). Waere aber eine Semantikaenderung, da zurzeit nicht eingeblendete
strassen auch nicht in der routensuche verwendet werden. Was
eigentlich Quatsch ist.

=item ??? make some data controlled persistent

  * mapping full path => data structure
  * check modtime
  list: strassen, landstrassen, Berlin.coords.data,
        Potsdam.coords.data ???

=item Ampelschaltung.pm und BBBikeEdit.pm erweitern

So, dass die alte Form (misc/ampelschaltung-orig.txt) auch per GUI
editierbar ist. Alternativ herauskriegen, wie ich mir die
Punkt-Kreuzung-Liste zusammenklicken kann (wahrscheinlich einfacher).

=item secure deployment to radzeit.de:

  * cp on server: bbbike => bbbike~ etc.
  * rsync to ~ version
  * test ~ version (maybe name the test scripts bbbike~.cgi etc.)
  * exch ~ and "" version
  * test "" version

=item dillo 0.7.x ist schon richtig gut

--- kann imagemaps und tabellen, für ipaq besorgen und dann endlich
die alternative zu bbbike impl.! => auf skiffcluster compilieren

=item gpsman2bbd Parameteruebergabe ueberarbeiten

=item Tk::LayerEditor

in einer nicht-DND-Version (für Windows,
optional auch für X11, notwendig fuer Tk804) -> fix for TK804 ist leicht, einfach

     my($x, $y) = ($_[3], $_[4]);#XXXchanged for Tk804

in LayerEditorCore::Drop verwenden

=item * (H3)

Entweder nur einen LayerEditor erlauben oder Aenderungen in einem
LayerEditor in alle anderen propagieren. Ausserdem: jeder Aufruf von
plot* sollte alle LayerEditoren aktualisieren

LayerEditor koennte weitere Spalten mit Funktionen enthalten, z.B.
hidden/visible setzen vs. ganz loeschen, Reload, Ausschnitt anpassen,
Strassenliste zeigen.

LayerEditor bug: es wird special_raise nur auf alle vom LayerEditor
verwalteten Layer gemacht. Dadurch wird die stacking order von
nicht-verwalteten Layern kaputt gemacht.

=item * (M3)

Rewrite BBBikePersonal to a real object-oriented module: preserve
widgets when do any actions, immediately show changes (plot, hlist)
when editing.

=item Preferences:
  - Stellung des Kopfsteinpflaster-/Ampelzeit-Buttons (nicht so wichtig)
  - evtl. die Möglichkeit des Rücksetzens (nicht so wichtig)

=item Inline modules => XS modules (less hassle with dependencies,
faster compilation)

=item Rename Kurvenpunkte => ... to AllPoints => ... in all scripts
and modules.

=item Turn all comments in Strassen/*.pm into Pod.

=item Waypoint+ besorgen. geht der export ueberhaupt? gibt es extensions?
geht ein import?
=> Programm ist downgeloaded und in distfiles/windows, install and check

=back

  * E5 make test unter Windows/cygwin ausführen

  * E5 bbbike -public unter Windows/cygwin ausführen

  * M3 make ext unter cygwin machen => habe ich Inline installiert?

  * evtl. overview-fenster so positionieren, dass die canvas-scrollbars nicht
    verdeckt sind

  * alle skripte/module, die zum abspeichern als ESRI notwendig sind,
    einbinden

  * es ist nur ein einziges Upload auf den Garmin unter Win moeglich. Wird ein
    FH evtl. nicht geschlossen? perl-gps-Problem oder bbbike-Problem?
    -> Lösung ist in Sicht, ich muss nur auf Win testen!

  * Tk::Getopt-Optimierung: withdraw before showing (long)help window

  CHECK AGAIN:

  * M5: GPS::DirectGarnim fehlt in der dist?
    => Kann ich nicht reproduzieren (MANIFEST ist OK). Nochmal testen
    => Jetzt kann ich es reproduzieren --- perl-GPS hat in SiePerl gefehlt.
       => Geht es jetzt?
       => Bessere (weniger irreführende) Fehlermeldung erzeugen
    => Garnim anschliessen und mit sieperl testen (brauche ich
       Win32::Serial dazu?)

  * M1 ->postscript is slow (sieperl). Warn before calling any export
    and print function? COMBINED WITH:
  * M1 PNG-Export: first check for all dependencies, then try to export
    (change in GfxConvert needed). Das ist jetzt haesslich: ps-export braucht
    jahre und dann merkt man, dass es doch nicht geht

  * E3 Print OK? (ps vs. pdf backend and automatic recognition)

  * H1 very low prio: Research Tk::Balloon: kann ich Tk::CanvasBalloon durch
  Tk::Balloon *effizient* ersetzen?

  * M1 TelbuchDBApprox: wenn eine genaue hausnummer nicht gefunden wurde,
  dann in der naehe suchen!

  inaccessible_strassen, look at:
     fix_coords in bbbike.cgi
     all_crossings and similar functions
     introduce also in perl/tk version
  [???]

[Ab hier wieder geordnet:]

=over

=item * (H2)

Cycle paths are displaced when zooming. Correct this.

=item * (M1)

Remove SRT Algo (bbbike menu, StrassenNetz.pm ...)

=item * (M2)

enter_opt_preferences, Straßenqualität: additional select box like in
bbbike.cgi (Kopfsteinpflaster vermeiden, rennradtauglich, Custom).

=item * (M1)

Überprüfen, ob der Menüpunkt E<quot>GPS-Track bearbeitenE<quot> im
Edit-Modus funktioniert.

=item * (M2)

Drucken: optional auch die Routenansicht/PDF drucken, mit/ohne
Routenbeschreibung.

=item * (M2)

PDF-Routenbeschreibung: zusichern, dass die Spaltenbreite nicht zu
groß wird. Beispielsweise bei langen Dateinamen wie E<quot>Str. des
17. Juni - Tiergarten, Philharmonie ...E<quot> kann es passieren, dass
die Entfernungsspalte rechts herausrutscht.

=item * (M3)

Sehenswürdigkeiten: eine neue Kategorie für
E<quot>flächigeE<quot> Sehenswürdigkeiten (z.B. Holländisches Viertel)
einführen, um besseres Stacking zu machen (unterhalb von Straßen).

=item * (H2)

Sehenswürdigkeiten: mehrere Bilder für unterschiedliche Zoomstufen
sollten bereitsgestellt werden können bzw. Zooming on-the-fly. Ich
habe bereits bodemuseum.png und bodemuseum_klein.png.

=item * (M2)

Gewässer: vielleicht sollte kleinere Flüsse/Bäche/Seen immer ohne
Outline dargestellt werden, damit sie nicht so sehr auffallen,
jedenfalls bei großen Maßstäben? (Bei kleinen Seen scheint es nicht so
schlimm zu sein wie bei langen Bächen) Ich sollte nochmal die
Gewässerkategorisierung überarbeiten in punkto Empfehlungen für die
Darstellung (wann wird ausgeblendet, wie werden E<quot>breitereE<quot>
Flüsse gekennzeichnet).

=item * (M4)

comments_kfzverkehr sollte nicht in E<quot>Aktuelle RouteE<quot> (und
wahrscheinlich nicht in show_info) vorkommen, da viele Einträge ohne
vernünftigen Namen existieren. Mögliches Problem:
$comments_net/_get_comments_obj braucht vielleicht an einigen Stellen
comments_kfzverkehr, an anderen nicht.

=item * (M2)

power and speed settings: allow to E<quot>chainE<quot> power settings
to speed settings; or let the user set the power settings
(distinguishing both needs option support). In the first case, if
changing parameters in the BikePower interface and clicking
E<quot>ApplyE<quot>, then the power should be recalculated in the
applyhook.

=item * (M2)

BikePower: if some variable bikepower settings like steigung or
gegenwind are set, then these are used in the initial calculation of
the chained power values, which seems wrong.

=item * (M1) (feature)

Support for the imview image viewer (imview.sf.net). Unfortunately
every download seems to be corrupted?!

=item * (M2)

Einfärben der Route nach Steigungen.

=item * (H1)

Why is selecting one of the last characters in the streets chooser
significantly slower (approx. 4s vs 1s) than a similar test with
Tk-SREZIC/examples/k2listbox.pl? (Seems to be not reproducible with my
new machine)

=item * (M1)

Eine Möglichkeit schaffen, auch im overview-Fenster Strecken zu
zeichnen. In der Zwischenzeit geht es manuell mit ptksh>

    plotstr("L100", Canvas => $overview_canvas, -filename => "$FindBin::RealBin/misc/abdeckung.bbd")

Das gibt es schon (im Devel-Mode für Strecken), hat aber noch eine
Defizite; in BBBikeAdvanced.pm bei draw_layer_in_overview()
nachschauen.

=item * (H3)

Umbau der plot*-Funktionen, damit $str_draw{...} etc. nicht sowohl für
den Status (ist der Layer an?) und auch den Wunsch (möchte man den
Layer einschalten?) verwendet wird. Außerdem gibt es ein Problem bei
normal canvas vs. $overview_canvas, aber nur einen Satz an
$str_draw{...}-Variablen.

=item * (H1)

F8/F9 funktioniert bei fragezeichen im Edit-Mode (manchmal) nicht. Der
Grund ist, dass fragezeichen hier kombiniert aus fragezeichen und
XXX.bbd erzeugt wird. Wenn das Canvas-Item aus XXX.bbd oben liegt,
kann keine entsprechende Datei von click_info in BBBikeEdit.pm
gefunden werden.

Theoretisch kann der Mechanismus intelligenter gemacht werden, indem
der E<quot># sourceE<quot>-Mechanismus benutzt wird und vielleicht
durch Zeilennummern ergänzt wird. Dann kann eindeutig auf die
entsprechende Originaldatei verwiesen wird.

=back

=head2 Plugins

=over

=item * (M4) (bug)

BBBikeRuler: das neue Leftmouse-Dragging funktioniert nicht mit diesem
Plugin.

=item * (H5)

BBBikePluginLister: Plugin-Argumente sollten angezeigt und editiert
werden können. Vielleicht auch mehr Informationen (Icon, längere
Beschreibung etc.) hereinnehmen.

=item * (M1) (feature)

BBBikeScribble: tell user where the scribble was saved (at least in
status bar). Connect lines in bbd if possible. New feature: mail
scribble to maintainer (newstreet). Dabei aber beachten, dass
tkbabybike noch immer damit umgehen sollte...

=item * (M1)

Vielleicht Windchill-Temperatur zusätzlich anzeigen. See
windchill program in bin/sh or devel. Frage: wie und wo soll die
Temperatur angezeigt werden? Im CGI? In der Perl/Tk-Version als Plugin
oder Standard?

=back

=head2 MacOSX specific

=over

=item * (M5)

Bei E<quot>Schriftart ändernE<quot> erscheint folgende Fehlermeldung:

 Tk::Error: named font "Helvetica -12 bold" doesn't exist at /Library/Perl/5.8.6/darwin-thread-multi-2level/Tk/Submethods.pm line 19.
 Tk callback for font
 Tk::Submethods::__ANON__ at /Library/Perl/5.8.6/darwin-thread-multi-2level/Tk/Submethods.pm line 19
 main::set_fonts at ./bbbike line 18370
 main::change_font at ./bbbike line 18254
 main::__ANON__ at ./bbbike line 3485
 Tk callback for .#menu.#frame#frame#symframe#frame1#menubutton7#menu
 Tk::__ANON__ at /Library/Perl/5.8.6/darwin-thread-multi-2level/Tk.pm line 249
 Tk::Menu::Invoke at /Library/Perl/5.8.6/darwin-thread-multi-2level/Tk/Menu.pm line 532
 <ButtonRelease>
 (command bound to event)

In früheren Versuchen hat es aber funktioniert. Vielleicht liegt es an
der Vorgeschichte (hatte gerade tests.pod durchgespielt)?

=item * (M5)

xfig-Erzeugung scheint nicht zu funktionieren, es wird kein ...fig
erzeugt (aber dafür ...fig-images?)

=item * (M2)

Exportieren > PDF: Funktioniert nicht, aber Ps wird sowieso
automatisch zu Pdf konvertiert, also könnte man die Funktion aus dem
Menü herausnehmen oder einen entsprechenden Dialog anzeigen.

=item * (M2)

Wenn die Routenliste gespeichert wird, bekommt sie keine
E<quot>.txtE<quot>-Extension, sondern bleibt extensionlos. Außerdem
sollte die Routenliste vielleicht mit utf-8 gespeichert werden, da
besser vom Betriebssystem unterstützt? Vielleicht auch unter Unix
und/oder Windows? Vielleicht als Option anbieten?

=item * (H2)

Maybe create a Mac distribution using .dmg disk images? See for
example:

 http://www.stepwise.com/Articles/Technical/2001-03-29.01.html
 http://el-tramo.be/guides/fancy-dmg/
 http://el-tramo.be/files/fancy-dmg/Makefile

=item * (H1)

Drawing custom category images seems to not work in lazy mode (try:
turn on lazy mode, draw E<quot>misc/zebrastreifenE<quot> as a point
layer).

=item * (H2)

New editor functions: moving whole polygons or regions. Some
implementation suggestions: mark all points to move. Mark another
point which the last marked point would move to and use this delta for
all other points. Or just draw a region boundary, and all points
inside the region would move.

More ideas: copy polygons, rotate polygons.

=item * (M1)

Use Imager::Screenshot for screenshots instead of xwd etc. tricks.
Note: I should explicitely supply the display parameter because one
cannot rely on $ENV{DISPLAY} (the application could be started with
-display parameter). Also, I need to support both the id parameter and
the hwnd parameter.

=back

=head2 Windows specific

=over

=item * (M1)

Try Win32::GUI::SplashScreen as splash alternative.

=item * (M2)

Do I need to use a larger font if user's font settings are different
from Tahoma 8? -> Es existiert eine Liste der noch lesbaren und gut
aussehenden Font/Schriftgrößen-Kombinationen auf einer Win98-Maschine.
Unter Win98 scheint ein Minimumdefault von 10px besser zu sein als
8px, wie derzeit in set_fonts eingestellt.

=item * (M2)

String::Similarity und ggfs. String::Approx in die winbindist
aufnehmen für die approximative Volltextsuche. Leider sind das beides
nicht pure-perl-Module. Diesen Testcase auch in doc/tests.pod
aufnehmen!

=item * (H1)

Die -except-Option von IncBusy sollte auch für die
Nicht-Tk::InputO-Variante implementiert werden.

=item * (M1)

make-target für das Kopieren einer kompletten win-distro auf usb-stick
schreiben.

=item * (M4)

HINWEIS zum Update von Modulen in der sieperl-Distribution (dieses
sollte zu einem Skript oder so werden?):

Am besten, ich update neue Module in ein shadow-Verzeichnis
sieperl-5.6.1-bbbike-$(BBBIKEVER) und lasse winbindistcopy dieses
Verzeichnis zusätzlich kopieren. Bei einer neuen Version würde ich
typischerweise die alte rüberkopieren und vielleicht Updates machen.

Ich muss noch rausfinden, wie ich pure-perl-Module in dieses
Verzeichnis installieren lasse. -> So:

    umask 022; setenv PATCHBINPERLROOT /home/e/eserte/src/binperl/sieperl-5.6.1-bbbike-3.16-DEVEL; perl Makefile.PL INSTALLSITEARCH=$PATCHBINPERLROOT/site/5.6.1/lib INSTALLSITELIB=$PATCHBINPERLROOT/site/5.6.1/lib INSTALLSITEBIN=$PATCHBINPERLROOT/5.6.1/bin INSTALLSITESCRIPT=$PATCHBINPERLROOT/5.6.1/bin INSTALLSITEMAN1DIR=/tmp/IGNORE_man/man1 INSTALLSITEMAN3DIR=/tmp/IGNORE_man/man3

=item * (M1)

Langfristig auf Strawberry Perl umsteigen, sobald ich alle Module 
aus Bundle/BBBike_windist.pm erzeugen kann.

=item * (M5)

Add Tk::Clipboard to @Tk::HList::ISA on Windows (or so). Then it would
be possible to use Control-C for copying the selection. -> Eigentlich ein Task für Tk. Check it!

=item * (E1)

Should $top->focusfollowsmouse be default everywhere?

=item * (H1)

Windows: An activating click should only activate the window but not
doing an action. This should be like in Excel (but unlike Windows
Commander). This sounds like a generell Tk problem (is it maybe solved
with Tk804?).

=item * (M1)

It seems that it is standard on Windows to
have some more spacing between buttons and make related buttons the
equal width (especially in end dialog buttons). I think grid() has
some new? -uniform option to force all widgets in a frame to have
the same width.

=item * (M1)

An example how to programmatically make a screenshot on Windows ---
maybe this can be of use somewhere (using instead of xwd?):
L<http://www.perlmonks.org/index.pl?node_id=355073>

=back

=head1 Daten allgemein

=head2 Kategorien, Attribute

=over

=item * (H4) (improvement)

S- und U-Bahnlinien mit den neuen Attributen Em (embankment=Damm, z.B.
U6 nach Tegel) und Cu (cut=Einschnitt, z.B. U nach Krumme Lanke)
versehen. Diese sollten dann dafür verwendet werden, um das Layering
anzupassen. Außerdem U-Bahntunnelstrecken als solche markieren.

=back

=head2 Radwege und -touren im Netz

=over

=item * (E3)

Bahntrassenradeln: L<http://www.achim-bartoschek.de/bahn_bb.htm>

 BBN1: ignore
 BBO1: eingepflegt (Qualität vielleicht mit aufnehmen)

=item * (E3)

GPS-Tracks in BRB: L<http://www.das-rad-ruft.de/Radtouren/index.php?Bundesland=11&id=431&action=Suche>

Bereits eingepflegt: Ahrensfede-Gamegrund-Niederfinow.trk,
Berlin-Bredereiche.trk, Teile von anderen.

=item * (E3)

Radrouten im Raum Potsdam:

(aus L<http://www.werder-havel.de/t2.htm>)

  Route F1
  Potsdam - Caputh - Ferch - Geltow - Pirschheide- Wildpark - Potsdam

  Route F2/2
  Werder - Golm - Nattwerder - Grube - Bornim - Eiche - Wildpark - Werder

  Route F3
  Werder - Phöben - Ketzin - Paretz - Uetz - Marquardt - Grube - Nattwerder - Werder

  Route F3/1
  Die Insel Töplitz

  Route F3/2 und F3/3
  Glindow - Plötzin - Bochow - Groß-Kreutz - Deetz - Schmergow - Krielow - Derwitz - Glindow
  Werder - Kemnitz - Krielow - Schmergow - Phöben - Werder

  Route F3/4
  Glindow - Petzow - Plötzhorn - Glindow

  Route F3/5
  Glindow - Kammerode - Klaistow - Kanin - Busendorf - Glindow

  Route F3/6
  Werder - Werder Inselstadt - Glindow - Plessow - Werder

=item * (E3)

Der Spreeradweg: L<http://www.spreeradweg.de/>

=item * (E3)

Berlin-Kopenhagen: L<http://www.bike-berlin-copenhagen.com/>

=item * (E3)

Berlin-Usedom: L<http://www.berlin-usedom-radweginfo.de/>

Anfahrtsbeschreibung: L<http://www.teamdochnoch.de/mtb-barnim/MTBB_11.html>

=item * (E3)

Broschuere der Landesregierung Brandenburg:
L<http://www.wirtschaft.brandenburg.de/sixcms/media.php/1312/broschurrad.pdf>

=item * (E3)

Radtouren im Raum Potsdam:
L<http://www.f-monzer-co.de/easteuro/hhklinik.htm>

=item * (E3)

Radfahren - Mobil in Potsdam:
L<http://www.mobil-potsdam.de/radfahren.htm>

=item * (E3)

Radwegkonzept MOL:
L<http://www.maerkisch-oderland.de/landratsamt/bauplanungsamt/Radwege2002.pdf>

=item * (E3)

Allgemein:
L<http://www.berliner-rundfunk.de/cgi-bin/WebObjects/brf.woa/wa/CMSshow/1058650>

=item * (E3)

GPS-Tracks zusammenfassen.

=back

=head2 Fehler, Ergänzungen, ...

=over

=item * (M1)

Neues Sehenswürdigkeit-Bild vom Fernsehturm machen, das jetzige sieht
etwas mickrig aus im Vergleich zu anderen Bildern.

=item * (M1)

Fahrradkarte Charlottenburg-Wilmersdorf besorgen:

Die Fahrradkarte ist zum Preis von einem Euro bei den Bürgerämtern
(Otto-Suhr-Allee 100, Hohenzollerndamm 174-177, Heerstr. 12-14)
sowie beim Fachbereich Vermessung (Rathaus Wilmersdorf, Zi. 4090)
während der Sprechzeiten erhältlich.

=item * (H2)

Potsdam ist größer geworden (Golm, Marquardt ...). Potsdam.coords.data
erweitern, vielleicht auch zwischen den Potsdamer Ortsteilen
unterscheiden?

=item * (E3)

Neue Straßen in Mitte (jetzt und zukünftig):

Lehrter Bahnhof:
Emma-Herwegh-Straße (DONE),
Europaplatz (DONE),
-> Agnes-Zahn-Harnack-Straße,
Ilse-Scheffer-Straße (DONE),
Washingtonplatz (DONE),
Ella-Trebe-Straße (DONE),
Berta-Benz-Straße (DONE),
Katharina-Paulus-Straße (DONE),
Clara-Jaschke-Straße (DONE)

Nordbahnhof, Stettiner CarrE<eacute>:
Julie-Wolfthorn-Straße (DONE),
Caroline-Michaelis-Straße (DONE),
-> Elisabeth-Schwarzhaupt-Platz

Elisabeth-Lüders-Haus, Straße davor:
Adele-Schreiber-Krieger-Straße (DONE)

Moabiter Werder-Nord:
Elisabeth-Abegg-Straße (DONE)

Friedrichswerder-West:
Caroline-von-Humboldt-Weg (DONE)

Luisenstadt:
Paula-Thiede-Ufer (DONE),
Bona-Peiser-Straße (DONE (weg))

Nochmal sichergehen: (leider existiert dieser Link nicht mehr)
L<http://www.berlin-mitte.de/index_6819_de.html>

=item * (E1)

ÖPNV-News tracken:
L<http://www.oepnv-berlin.de/news/news_aktuell.htm>. Oder:
L<http://www.bahninfo.de>.

=item * (H4)

E<quot>Flughafen SchönefeldE<quot> ist im Web-Interface nicht
erreichbar. Das Problem ist, dass der Flughafen außerhalb des Berliner
Stadtgebietes liegt. Man könnte vielleicht einen Hack für Schönefeld
analog zu potsdam_hack programmieren? Dann bräuchte man aber
eigentlich ein Schönefeld.coords.data --- lieber nicht...

=item * (E1)

Look at it:

aus zwei Artikeln in der aktuellen Bahnzeitung punkt3 habe
ich herausgelesen, dass es ab dem 14. Juni eine neue S-Bahnlinie
S85 gibt, die von Grünau über den Ostring nach Waidmannslust
fahren soll. Sehe ich das richtig, dass diese Linie die erste
Linie nach der Wiedervereinigung ist, die eine bis dahin nicht
gefahrene Trasse nutzt? Die Artikel sind Online unter

<http://www.punkt3.de/p3/Punkt3.nsf/f89cda9362f1398c80256a380044fd3c/e35bb9a0c9febd3cc1256ea0003a35c3?OpenDocument>
<http://www.punkt3.de/p3/Punkt3.nsf/f89cda9362f1398c80256a380044fd3c/110ed361d2a59f1dc1256ea0003790b4?OpenDocument>

nachzulesen.

=item * Vosskanal => Voßkanal?

 neue stuetzpunkte fuer gps_correction_map (entsprechungen in standard-koordinaten suchen)
 N52 46 59.9 E14 02 11.3	Bad Freienwalde B158/B167
 N52 35 49.4 E14 14 17.8	bei Neuhardenberg B167/L36 nach Trebnitz
 N52 48 50.5 E12 45 48.1	Fehrbellin (Knick der L16)
 N53 15 52.1 E13 36 23.6	Boitzenburg (hmmm, reichlich unspezifisch)
 N53 23 36.8 E13 35 04.5	L259/L25 bei Fuerstenwerder (vielleicht anstelle von Boitzenburg)
 N52 53 37.2 E11 45 09.4	Seehausen/Altmark, Kreuzung, richtig!
 N51 21 59.7 E12 44 38.9	Wurzen: B6/S11
 N52 16 52.3 E11 25 22.9	Haldensleben:B245/L24 nach Hundisburg
 N52 31 42.2 E11 26 02.5	B71/B188

 stolpe => stolpe/oder
 hohensaatener wasserstr. eintragen
 H-str. B2 => Stolpe/oder => neukuenkendorf eintragen
 deichstr. ab stolpe richtung sueden
 siehe auch: http://www.grass-net.de/modules.php?name=Content&pa=showpage&pid=16
 Radtouren um bestensee herum: http://www.mediapur.de/foto_rad.html

 Fahrplanaenderungen Dezember 2003 bei RE/RB beachten!

 brunnels mit nicht-leeren NAME suchbar machen

 U-Bahn: Negativliste erstellen, alle Strecke, die nicht enthalten
 sind, sind automatisch als Tunnel markieren. U1 nach Krumme Lanke =
 tunnel.

 brunnels sollten bei sort_by_cat verwendet werden können,
 insbesondere für BBBikeDraw::GD und ::PDF

 gpsbabel kann zwischen einer großen Anzahl von GPS-Formaten
 konvertieren. Evtl. optional in bbbike integrieren. Siehe auch:
 L<http://gpsbabel.sourceforge.net/>. Evtl. ein Strassen::Gpsbabel
 schreiben, welches alle gpsbabel-unterstützten Formate
 lesen/schreiben könnte.

=item * Waypoints und Tracks im Internet:

=over

=item *

Jede Menge, leider in einem binaeren Format:
L<http://www.grabo.de/gps/index.html>

=item *

Als Test für G7T Version 2, enthält Teil von Berlin-Usedom bis
Biesethal:

L<http://www.berlin-usedom-radweginfo.de/downloadzaehler.php?URL=http://www.berlin-usedom-radweginfo.de/tracks/0u1_BB.zip>

=item *

Alternativroute von Frankfurt/Oder Richtung Norden:
L<http://adfc.jgr.de/alternativradroute/alternativradroute.ovl> und
L<http://adfc.jgr.de/alternativradroute/>

=item *

Radfernwege in Brandenburg:
L<http://www.brandenburg.adfc.de/Tourismus/index.htm>

=item *

Radwege um den Stechlinsee herum:
L<http://www.stechlin.de/aktivitaet.htm>
Radfernwanderweg Berlin - Kopenhagen,
Stechlinsee-Radweg,
Polzow-Radweg

=back

=item * Funktionieren die Aufzüge bei der S-Bahn? Das erfährt man
E<quot>... am Besten bei der Kundenbetreuung 297-4 33 33E<quot>.

=item * Spielpläze aufnehmen? Z.B.
  L<http://www.stadtentwicklung.berlin.de/umwelt/stadtgruen/kinderspielplaetze/de/spielplaetze/>

=item * Radtouren um FF herum

L<http://www.adfc-frankfurt-oder.de/radtour/>

=back

=head2 Datenhandling (make, conversion ...)

=over

=item * (M5) (bug)

Bei Verwendung von PreserveComments=>1 sollte $s->next die Kommentare
überspringen. Siehe workaround in Strassen::CoreHeavy::simplify.

=item * (H4)

Es sollte möglich sein, in einer bbd-Datei sowohl nur-Routing- als
auch nur-Mapping-Information unterzubringen. Ein Beispiel wäre
3nocross/3: beim Routen benutzt man die E<quot>3E<quot>er-Kategorie,
beim Plotten die E<quot>3nocrossE<quot>-Kategorie. Evtl. könnte ich
eine Konvention erfinden, dass Kategorien, die mit E<quot>RTE-E<quot>
anfangen, für das Routing reserviert sind und nicht geplottet werden
sollen. Sollte es dafür eine spezielle next-Methode in Strassen::Core
geben, welches solche Kategorien überspringt (next_map)? Oder kann ich
das erst einmal ignorieren, weil der gesperrt-Layer sowieso nur in
bbbike Perl/Tk gezeichnet wird und spezielle gesperrt-Kategorien beim
MapServer noch ignoriert werden?

=item * (H5)

Einbahnstraßen-Reorganisation: Die derzeitigen Typen von
Einbahnstraßen 1 und 1s sollen noch feiner aufgeschlüsselt werden.
Beispiele: 

 * Neue Schönhauser Str.: die Straßenbahn darf in beide Richtungen
   fahren, d.h. die Fahrbahn ist breit genug und normalerweise sollte
   es keine Konflikte mit dem Gegenverkehr geben. Höchste Kategorie
   (= 25 km/h?) (+ Achtung, Einbahnstraße!)

 * Am Treptower Park: teilweise Gehweg, teilweise Nebenfahrbahn zum
   Parken. Eher niedriges Konfliktpotenzial, vielleicht mittlere
   Kategorie (= 18 km/h?) (kein Achtung?)

 * Bayernring, Schulenburgring: sehr wenig Verkehr, aber enge Straße.
   Deshalb niedrige Kategorie. (= 13 km/h?) (+ Achtung, Einbahnstraße!)

 * Jahnstr.: etwas mehr Verkehr, aber auch etwas breitere Straße.
   Zusammengenommen auch niedrige Kategorie. (+ Achtung, Einbahnstraße!)

 * Landwehrkanalstraßen: gegen die Richtung mit nur 5 km/h erlauben
   (Gehwege) (+ Achtung, Einbahnstraße -> Gehweg!)

 * Großer Stern: gegen die Richtung mit vielleicht 13 km/h erlauben?
   Eher wenig Fußgängerverkehr, kurze Strecken, relativ breite
   Gehwege. (+ Achtung, Einbahnstraße -> Gehweg!)

 * Mangerstr.: Radfahren auf dem schmalen Gehweg erlaubt? (+ Achtung,
   Einbahnstraße -> Gehweg!)

 * Flughafen Tegel: striktes Einbahnstraßenverbot (keine durchgängigen
   Gehwege, starker Verkehr)

Vielleicht mal einige Realworldbeispiele mit Stoppuhr messen?

Weiterhin sollte in der CGI-Version angezeigt werden, dass man gegen
die Einbahnstraße fährt bzw. schiebt (aber vielleicht nicht immer,
siehe Beispiele oben).

=item * (H3)

Fragezeichen-Reorganisation: Es gibt mehrere Typen von Fragezeichen:

=over

=item public: werden von fragezeichen-orig nach fragezeichen
konvertiert und sind öffentlich sichtbar, insbesondere Perl/Tk-Version
im Nicht-Edit-Modus und WWW-Version

=item private: sind nur in fragezeichen-orig und nicht öffentlich
sichtbar, d.h. nur in der Perl/Tk-Version im Edit-Modus (allerdings
sollte es auch eine Möglichkeit geben, die privaten Fragezeichen im
Nicht-Edit-Modus anzuschauen)

=item last_checked/next_check mit relativen Datum: diese könnten
automatisch als öffentliche Fragezeichen erzeugt werden (falls nicht
ausdrücklich als privat gekennzeichnet)

=item Datensätze mit add_fragezeichen-Direktiven versehen: diese sind
in fragezeichen-orig nicht sichtbar, dafür aber in fragezeichen

=item XXX-Datensätze: diese sind ebenfalls in fragezeichen-orig sowie
in fragezeichen nicht sichtbar

=item Es gibt Fragezeichen, die das Abfahren einer Strecke verlangen
sowie Fragezeichen, die durch andere Recherchemöglichkeiten aufgelöst
werden (z.B. Ortsteilfragen, nicht ausgeschilderte offizielle
Straßennamen ...) -> indoor vs. outdoor

=item Es gibt Fragezeichen, die durch eine technische Änderung
aufgelöst werden können (z.B. durch das Einführen von neuen
Straßenattributen)

=back

Es gibt folgende fragezeichen-Dateien am Ende:

 - fragezeichen-public (weiterhin nur E<quot>fragezeichenE<quot>
   genannt, einzige Datei, die in die Distribution wandert)
 - fragezeichen-private-outdoor (für alles, was E<quot>vor OrtE<quot>
   recherchiert werden kann; falls es eine
   nextcheck/lastcheck-Direktive gibt, wird diese beachtet)
 - fragezeichen-private-indoor (für alles, was im Internet oder
   sonstwo recherchiert werden kann)
 - fragezeichen-checklater (ebenso Sachen, die
   E<quot>vor OrtE<quot> recherchiert werden können, aber die später
   überprüft werden sollen --- wegen einer
   nextcheck/lastcheck-Direktive. Hier können sich öffentliche und
   private Fragezeichen befinden)
 - fragezeichen-tech (Sachen, die durch technische Änderungen
   aufgelöst werden können)

XXX.bbd wird nicht mehr benötigt. Alle fragezeichen-*-Dateien außer
-public kommen nach bbbike/tmp.

Ungefähre Einordnung der jetzigen Daten:

 - geplante Straßen und Radstreifen: sofern nicht durch nextcheck
   oder ein Fertigstellungsdatum im Text abgedeckt, können diese ruhig
   nach fragezeichen-public (aber genauer prüfen!)
 - section private Fragezeichen -> fragezeichen-private-indoor oder -outdoor
 - Aufnahme in DB fraglich: dieser Abschnitt sollte entfernt werden
 - Isolierte Einträge: fragezeichen-private-outdoor
 - öffentliche Fragezeichen: fragezeichen-public
 - XXX (alternativ: XXX-outdoor) -> fragezeichen-private-outdoor
 - add_fragezeichen -> fragezeichen-public
 - eine neue Direktive für fragezeichen-private-indoor:
   XXX-indoor
 - eine neue Direktive für fragezeichen-tech:
   XXX-tech

=item * (H4)

Routes vs. Layers: some data formats may be interpreted as routes and
as map layers. If interpreted as routes, then normally information is
lost (colors, route is always connected...). If interpreted as map
layer, then information about length and time and maybe a route list
is not available. How to solve this problem? Have a clever route/layer
loader which decides what to use?

=item * (H5)

Introduce interrupted routes. E.g. by introducing E<quot>interruption
elementsE<quot> in realcoords_ref; or another variable. Rendering:
interrupt the route at these points. bbr2bbd: should look nicely.
bbd2bbr also.

=item * (M4)

comments_route should probably be combined (e.g.
RR6+Pankeweg+Berlin-Usedom), just like sbahn/rbahn. Interesting
question: what icon should be shown in a combined section? both? the
first? alternated?

Vielleicht ist das Kombinieren nicht so dringend, wenn die
mehrzeiligen Tooltipps poliert und für alle verfügbar sind. Aber für
das leichtere Editieren könnte es trotzdem sinnvoll sein (Vermeidung
der Doppelung).

=item * (M3)

Check the coordinates of Berlin.coords.data against the corresponding
streets in strassen-orig.

=item * (M3)

resolve_stars: add support for E<quot>* X *E<quot>

=item * (H4)

.desc-Dateien komplett durch globale Direktiven ersetzen. Es fehlt noch:

    @scrollregion = (516703,180658,918450,458155)
    $p_attrib = ["Botschaft", "Botschaften, undef];

=item * (H2)

0-Sperrungen mit Richtungen durch drei Koordinaten kennzeichnen.

=item * (H3)

Check auf E<quot>erlaubteE<quot> Kategorien pro Datei, also z.B.
H/HH/N/NN in strassen, zusätzlich B in landstrassen, nur Pl in plaetze
etc. Diese Information könnte auch dazu verwendet werden, um im
Straßen-Editor die Kategorien einzuschränken. BBBikeCategories.pm?

=item * (H4)

Find algorithms for reducing points in a polyline/gon. Use it for
wasserstrassen-lowres.

=item * (M4)

Automatic conversion from GPS tracks to bbd data: maybe using
Douglas-Peucker polyline simplification algorithm?

=item * (H4)

Ich brauche eine spezielle handicap-Kategorie für Abbiegevorgänge
(z.B. q\d3 oder q\d::3 oder q\d::dir (für directed)), sowohl für
Anzeige als auch für das Routing.

Datenbeispiel: Am Volkspark/Bundesallee

=item * (H3)

rbahn-orig -> rbahn-orig + rbahnhof-orig. Oder gibt es noch einen
Grund für das Extra-Handling? insert_points und co. sollten gut genug
sein, um die beiden Dateien synchron zu halten...
Dann brauche ich auch eine make-Regel, um rbahnhof gegen rbahn zu
checken (wie bei der S-Bahn)

=item * (M3)

Introduce new bbd file E<quot>xxxE<quot> which contains all non-public
XXX comments. ? on devel-host would also draw xxx.

=item * (M4)

Siehe miscsrc/merge_overlapping_streets.pl

=item * (M1)

Convert the data/Makefile to data/Makefile.PL or similar (to solve
problems like for loops etc. only availabkle in BSD make).

=item * (M3)

All references to E<quot>commentsE<quot> should use the partial
comments files instead. Maybe define a method with a list of the
partial files in Strassen/Dataset. Create new menu cascade Comments
all and comment types (partially done in bbbike, check for other
apps).

=item * (M4)

insert_points changes:

* warn if deleting a point causes a street to have only one point

* special handling for vorfahrt:

  given A B C
  insert between A and B: A changes to last inserted point
  insert between B and C: C changes to first inserted point

=item * (H3)

insert_points optimizations:

* Use a MLDBM or similar database for a point -> [file, pos] mapping.
  This can be used for fast searching. Check database file <-> orig
  file for recentness.

* Further optimization: the insert/add/change/move operations should
  update the MLDBM database themselves to avoid a complete rebuild.

=item * (M4)

Use the :by and :temporary directives in the data files (ampeln
already done). Change some files which are using this information
(e.g. misc/Makefile). Write some tests for all kinds of directives
(global, block, line, nested blocks and lines, errors)

=item * (M3)

Change convert_* to optionally not ignore directives and comments.
Rewrite the misc/Makefile rule to use standard Strassen methods.

=item * (H4)

In bbd files, there are presently line and block directives. Maybe
introduce another form of block directives, which do NOT nest. This
could be used for a E<quot>sourceE<quot> directive, which is more
convenient to specify once at the beginning and not also at the end.

=item * (H3)

A new E<quot>sourceE<quot> directive could probably change the virtual
file location for relative paths.

=item * (H4)

Add more directives to control presentation of bbd files. E.g:
plotting of labels enabled...

=item * (H1)

Add directives for a kind of E<quot>metaE<quot> bbd which contains
only references to other bbd file (E<quot>includeE<quot>?
E<quot>referenceE<quot>?). But some questions are difficult to answer,
e.g. how to apply global directives? What is the current directory of
the file?

But if the only concern is to open multiple layers and to avoid clumsy
GUI dialogs, then it's probably sufficient to just use the
BBBike-Server/Client.

=back

=head2 cgpsmapper

=over

=item * (H3)

Fragezeichen besser bauen: alle aus fragezeichen ausser für mich
ignorierte (wo ich z.B. die Daten einfach nicht aufnehmen will).
next_check/last_checked beachten. Auch alle XXX-Strecken aufnehmen.
temporaries aufnehmen (es sei denn, mit next_check/last_checked
versehen).

=item * (M3)

Das Strippen des Bezirk-Parts im Straßennamen: nicht für fragezeichen,
da hier oft ein ergänzender Kommentar steht.

=item * (M4)

Nach Kategorien sortieren (HH -> H -> ...). Evtl. werden die Labels
von zuerst genannten Straßen zuerst gezeichnet.

=item * (M3)

zwischen Wäldern und Parks, und Seen und Meer unterscheiden

=item * (M3)

landstrassen/N und NN ab 8km oder so nicht mehr sichtbar haben;
Sichtbarkeiten zwischen strassen und landstrassen differenzieren

=item * (H2)

Straßennummern - wie?

=item * (H3)

Images oder Prozess veröffentlichen

=item * (M3)

Eisenbahnen werden zurzeit nur bis 200m angezeigt. Für RB hochgehen
auf 3 km oder mehr, bei S-Bahn auf ca. 800m, bei U-Bahn auf ca. 500m
(falls es überhaupt geht).

=item * (H3)

Friedhof-POI (flaechen), scenic-POI (comments-scenic), bank-POI (falls
ich noch sparkassen/citibank-Daten habe), sonst. Sehenswürdigkeiten ->
building-POI, church-poi, hospital-poi, theater, museum, stadium, tall
tower (Fernsehturm, Funkturm, Schäferbergturm), Zoo-POIs, igraliste
(PVRT?)

=item * (H3)

Regionenübergreifende Dateien: feststellen, ob in Berlin oder nicht
und dementsprechend in der richtigen Karte zeichnen (mittels
line/point_in_polygon).

=item * (H3)

Einführen von Garmin-Typen in bbd, z.B.: SW::GARMIN=0x1f39. Diese
könnten von bbd2polish direkt verwendet werden. IDs oder Klartextnamen
verwenden?

=back

=head2 Verschiedenes

=over

=item * (M5)

Cleanup the E<quot>-infoE<quot> companion of a .bbd file. Suggestions:

* Have a .yml or .dd file (first better because it's more readable,
  second is better because it does not need any perl requirements, but
  is also unsafe) with the id -> info-string/object mapping. Name it
  maybe .infoyml or .infodd?

* Have a module which reads and creates these info files.

* It is preferable to cache these files in a berkeley db file or
  anydbm file (like is the situation now).

* Parts of the info-reading code in show_info in bbbike should also go
  into this module.

The other tracks in misc/gps_data should have a info companion.

=item * (H4)

Interesting: L<http://www.geonames.org/export/>. Geographical names,
elevations at a accuracy of 90 meters.

=item * (E1)

L<http://bikeroutetoaster.com/Course.aspx>. A route planner, but
nearly unusable for Germany. One will be routed over freeways, and
good cycle routes are not available within this application.
Interesting: the evelation display using data from geonames. Maybe I
should, too?

=item * (M4)

Nicht benötigte Einträge aus bbbike-temp-blockings.pl nach
old-bbbike-temp-blockings.pl verschieben. old-bbbike-temp-blockings.pl
kommt ins MANIFEST.addtocvs, aber nicht ins MANIFEST. -> evtl. reicht
die jetzige Methode mit dem optimierten bbbike-temp-blockings?

=item * (E1)

weblinks E<quot>offiziellE<quot> machen.

=item * (E1)

Look at it:

Es wurde eine Unterführung gebaut, die erst die Fernbahntrasse und ein
paar Meter weiter dann auch die neue S-Bahntrasse unterquert. Bilder
hier: http://www.bsisb.de/default_f.htm?/anhalter/anhalter07fc.htm
oder direkt die schrittweise Wandlung vom Kolonnenweg zur Unterführung:
http://www.bsisb.de/anhalter/g_s_lio_tw/l25.htm

=item * (H4)

Wie zeige ich an, dass ein BNP unpassierbar fuer anhaenger ist?
Fr-Jahn-Sportpark zur Topsstr ist so ein fall.

=item * (H4)

Alle in "strassen" vorkommende Straßen sollten auch in
"Berlin.coords.data" stehen. Ansonsten gibt es derart Probleme,
daß zwar beim CGI in der Liste "Alle Straßen anzeigen"
z.B. "Hallesches Tor" angezeigt wird, diese Straße als Eingabe
aber nicht akzeptiert wird. Sprich: die Datei data/add_str sollte auf
Aktualität überprüft werden und dann möglichst
alle fehlende Straßen nach Berlin.coords.data übertragen
werden.

Hatte ich schonmal:
[in add_str sollten möglichst KEINE "richtigen" Straßen stehen --- nur
Sachen wie Brücken, Tunnel, "Alexanderplatz [zur Grunerstr.]", Parkwege etc.
ansonsten werden sie in bbbike.cgi nicht erkannt, obwohl sie
existieren!]

Vielleicht ein ausreichender Workaround vorerst: Liste aller Straßen
enthält nicht die Straßen, die keine Koordinate in Berlin.coords.data
haben.

=item * (M2)

Landstraßen: Gibt es Untersuchungen zur Verkehrsdichte?
Recherchieren! => Jan hat etwas gefunden (Aldi-Karten...) -> Die habe
ich jetzt auch...

=item * (H1)

Garmin GPS Courses - kann mittels
L<http://www.bradculberson.com/cc/map.html> erzeugt werden.

=back

=head1 Routing (BBBikeRouting.pm, Strassen::StrassenNetz)

=over

=item * (H3)

Idee: in bbd-Dateien die Möglichkeit erzeugen, Display-only- und
Routing-only-Informationen ablegen zu können. Z.B.

    #: routing-only vvv
    Straße	q4; X1,Y1 X2,Y2
    #: routing-only ^^^
    #: display-only vvv
    Straße	1 X1,Y1 X2,Y2
    #: display-only ^^^

In diesem Beispiel würde die Straße als Einbahnstraße dargestellt
werden, aber im Routing als Schrittgeschwindigkeitstraße behandelt
werden. Siehe auch nächstes Item.

=item * (H5)

Es sollte eine weitere Abgrenzung bei den Kategorien 1 (Einbahnstraße)
und 2 (gesperrte Straße) geben, und zwar Einbahnstraßen/gesperrte
Straßen, die man mit Schrittgeschwindigkeit passieren kann.
Darstellung wäre also als Einbahnstraße, vielleicht mit einem
speziellen Symbol dazu, und im Routing würde es als q4 angesehen
werden. Dann könnte ich vielleicht auch die E<quot>1sE<quot>-Kategorie
entfernen.

In der Routingliste (bbbike.cgi und Perl/Tk) sollte ein entsprechender
Text (E<quot>gegen die Einbahnstraße schiebenE<quot>) auftauchen.

Ganz wichtig: Straßen wie B96a/Adlergestell, die wirklich nicht
passierbar sind, sollen es auch bleiben! Be careful...

=item * (H5)

Alberne Beschreibung, sollte lieber E<quot>3x ...E<quot> erwähnen:

nach 0.10 km	rechts (50°) in den	Parkweg	1.7 km
enge Brücke, Fußweg; teils sehr gutes Kopfsteinpflaster; Drängelgitter
(ca. 5 Sekunden Zeitverlust); Drängelgitter mit asphaltierer
Vorbeifahrmöglichkeit (Parkweg) (ca. 2 Sekunden Zeitverlust);
Drängelgitter mit asphaltierer Vorbeifahrmöglichkeit (Parkweg) (ca. 2
Sekunden Zeitverlust); Drängelgitter mit asphaltierer
Vorbeifahrmöglichkeit (Parkweg) (ca. 2 Sekunden Zeitverlust)

=item * (H5)

In der Routenliste problematische Kreuzungen anzeigen, zum Beispiel
eine abknickende Straße mit dem gleichen Straßennamen (das Abbiegen
wird nirgendwo angezeigt) oder bei Kreuzungen mit abknickender
Vorfahrt.

=item * (H4)

Neue Kategorie 0 und BNP mit Richtungsabhängigkeit einführen. Z.B.

	0:10	A B C

wobei B die Stelle mit dem Hindernis ist. Es sind also nur genau ein
oder drei Punkte erlaubt. Im Pre-Processing könnte man Joker (*)
erlauben.

Implementiert werden muss:

* Routing (wahrscheinlich ähnlich wie E<quot>3E<quot> und
E<quot>BNPE<quot>, make_sperre und build_penalty_code müssen geändert
werden)

* Zeichnen im Perl/Tk-Tool (weiterer Spezialfall in plot_sperre,
vielleicht mit einem Pfeil versehen? Oder versetzt zeichnen, wenn die
Position eindeutig ist (i.e.: * A B)? Neues Icon bzw.
Polygon/Polyline-Zug für Bordsteine, da diese so oft vorkommen [wenn
ja, dann auch im Postprocessing (Winkelberechnung) berücksichtigen]?)

=item * (H2)

Optimierung: bei Landstraßen reine Kurvenpunkte bei der
Netzberechnung ignorieren. Das ist mit B<make_wide_net> bereits
implementiert, wird aber nicht verwendet. Benchmarks? Probleme?

=item * (H1)

Suchen nach Alternativen. Es ist schwierig zu entscheiden, wann eine
Alternative wirklich eine Alternative darstellt (z.B. ist es kein
großer Unterschied, ob man nur rechts oder links um einen Block
herum fährt).

=item * (H1)

Neuimplementation der Streckensuche. Dabei soll zwischen
Streckenaufwänden und Knotenpunktaufwänden unterschieden
werden. Aufwände werden entweder in Längen, in Zeit oder
in einem Punktesystem (Kombination aus Zeit, Komfort, Sicherheit etc.)
angegeben. Streckenaufwände berechnen sich aus: Länge der
Strecke, Gegenwind, Steigungen, Dynamowiderstand,
Straßenqualite<auml>t der Strecke, sonstige Hindernisse auf der
Strecke, Verkehrsdichte (Staus, Berufsverkehr), Radwege,
Maximalgeschwindigkeiten. Knotenpunktaufwänden berechnen sich
aus: durchschnittliche oder wahre Ampelwartezeit mit Zeit für
die Beschleunigung, durchschnittlicher Zeitverlust an
Rechts-vor-links-Kreuzungen und an vorfahrtsgewährenden
Kreuzungen (abknickende Vorfahrtsstraßen beachten), Zeitverlust
für Abbiegevorgänge (rechts, links), erschwertes Abbiegen
(Bordsteinkanten überwinden). Qualitätsbewertungen:
Straßenqualität, niedrige Leistungsaufwände (Wind,
Steigungen), Nebenstraßen, Parks. Sicherheitsbewertungen:
Nebenstraßen vor Hauptstraßen bevorzugen, Radwege
ja/nein. In (C) und Perl implementieren.

Analyse eines Streckenabschnitts:

=over

=item * Feststellen der Länge

=item * Feststellen der Windrichtung und -geschwindigkeit

=item  * Feststellen der Steigung

=item  * Verluste durch Straßenqualität

=item  * Korrigieren auf Maximalgeschwindigkeit (max. Trittfrequenz)

=item  * anhand der aktuellen Leistungswert Zeit berechnen

=back

Analyse einer Kreuzung:

=over

=item  * Feststellen, ob es um einen Abbiegevorgang handelt und ggfs. Zeit
   für den Abbiegevorgang abziegen

=item  * Feststellen, ob eine Ampel vorhanden ist, und eine
   durchschnittliche Zeit abziehen.

=item  * Feststellen, ob die Vorfahrt beachtet werden muß

=back

Z<>=E<gt> nicht unbedingt notwendig, die jetzige Lösung reicht erst
einmal aus...

=item * (H3)

Compressed data: use <long><long> (or <short><short>) for starting x,y
value and then only the deltas as bytes <byte><byte>. Add additional
points if delta exceeds 128/128 meters.

=back

=head1 CGI version of BBBike (bbbike.cgi)

=over

=item * (M5) (bug)

Wenn auf der Übersichtskarte eine Straße außerhalb Berlins aber in der
Nähe der Grenze angeklickt wird, dann wird häufig eine Straßenkreuzung
in Berlin gewählt, auch wenn es eine bessere Kreuzung außerhalb
Berlins gäbe. Lösung: zuerst prüfen, ob sich der Klickpunkt innerhalb
Berlins befindet, ansonsten sofort den Scope erhöhen.

=item * (H5) (bug)

Zwischen Rudow und Lichtenrade wird man nicht über Großziethen
geroutet. Lösung: Luftlinie zwischen Start-(Via)-Ziel legen, falls
diese die Berliner Grenze kreuzt, muss der Scope von city auf region
erhöht werden.

=item * (M4) (improvement)

Review bbbike.cgi.config and change defaults in bbbike.cgi. Rule of
thumb: everything which is included in the normal distro and needed by
a feature, should be turned on.

=item * (M5) (bug)

If the strname_html parameter to fragezeichenform.html contains
HTML-escaped characters, then the parameter is parsed incorrectly due
to premature call of unescape(). I need a correct querystring parse
like the one in CGI.pm. Create one! Or maybe search one in the net.

=item * (H3) (feature)

Im Umland sollte statt Kreuzungen bevorzugt der Ortsname verwendet
werden. Der Code dazu ist teilweise schon vorbereitet (siehe
get_kreuzung, if (0)).

=item * (M5)

$g_str muss wissen, welcher Scope verwendet wurde. Und jeder Zugriff
auf get_streets muss ggfs. get_streets_rebuild_dependents aufrufen,
falls sich der Scope geändert hat.

Das wirkt sich nur in mod_perl aus.

Kann ich einen Test schreiben, der dieses Verhalten reproduziert
(i.e.: Apache neu starten, nur einen Prozess verwenden, scope=city ...
scope=region, kreuzung auswählen -> boom!)

-> fixed, aber der Test fehlt noch...

=item * (H5)

Ich habe unvollständig gezeichnete Kacheln (fehlende Straßen) auf
bbbike.radzeit.de gesehen. Wie sind sie entstanden? Vielleicht eine
komplette Karte zusammenfügen, um zu sehen, ob weiterhin Fehler
entstehen?

=item * (H4)

Mit www.bbbike.de umziehen.

=item * (M4)

Alternative Startseite a la
L<http://wolfram.schneider.org/tmp/bbbike/> (gibt's nicht mehr!)
erzeugen. Aber zunächst müssten die Layer-Probleme gelöst werden (Via-
und Ziel-Layer sind nach dem Aufklappen verschoben).

Die Layer-Probleme gibt es übrigens schon jetzt, wenn durch ein Resize
des Browser-Fensters eine Umordnung der Layer erfolgt. Also brauche
ich so oder so eine Lösung.

=item * (H4)

Crop (or use?) the E<quot>ortE<quot> part of a street, i.e.
E<quot>robert-rössle-str. 10, 13125 berlinE<quot>. Split against the
E<quot>,E<quot> and filter (or use?) the part with berlin or without
str or ...

In real data (Berlin.coords.data) there are no streets containing a
E<quot>,E<quot> (just a few Siedlungen with E<quot>I,IIE<quot> and
Gaststätten).

=item * (M3)

Opera 7.11: nice_berlinmap seems to work, but nice_abcmap has problems
(only the first character is highlighted?). Check on newer Operas.

Another problem with abcmap and berlinmap: if the E<quot>niceE<quot>
code is disabled, then <Return> will fire the wrong button (that is,
the image maps...). Unfortunately the hidden submit hack does not work
on Opera...

Also: the clicking on the <label>...</label> part does not fire the
onClick function (seen on Opera 7.xx) (maybe I should just remove
<label> for Opera?).

=item * (M3)

Zusätzlich zu "Schopenhauer Str. (Potsdam)" die Schreibweise "Potsdam,
Schopenhauer Str." akzeptieren. Frage: nur fuer Orte oder auch fuer
Bezirke, also "Kreuzberg, Bahnhofstr."? Kommt auch vor, dass die Leute
E<quot>Berlin, ...E<quot> schreiben.

=item * (E2)

/robots.txt einrichten, um das Indexieren von temporären Dateien bei
bbbike und mapserver zu verhindern. -> Hmmm, es existiert schon ein
robots.txt. Mit Dirk konferieren? Nein, ich kann selbst robots.txt
schreiben.

=item * (H1)

Bei pref_fragezeichen=yes: Straßenbezeichnungen aus fragezeichen
vertragen sich mit Strasse::strip_bezirk nicht so gut. Es wird oft zu
viel abgeschnitten. Könnte strip_bezirk intelligenter programmiert
werden und tatsächlich nur die in Geography:: vorkommenden Bezirke
abschneiden? Wo wird strip_bezirk überall eingesetzt?

=item * (M1)

Evtl. Link auf Detailmap, um eine bessere Straße auszuwählen? Bei
"genaue Kreuzung": evtl. Link auf Detailmap um alternativ eine
Kreuzung auszuwaehlen?

=item * (H5)

Ackerstr. (Mitte,Wedding,Spandau)-Problematik: es sollte erkannt
werden, dass die Ackerstr. (Mitte, Wedding) die selbe Strasse ist. In
multi_bez_str steht es drinnen, muesste wahrscheinlich von PLZ.pm
verwendet werden (combined streets?). (Aber nur, falls multi_bez_str
vorhanden ist)

=item * (H2)

Subroutine zum Mapping von Kreuzungen (E<quot>Astr./Bstr.E<quot>) auf
mögliche Koordinaten erstellen. Ein Ansatz wäre der Code ab E<quot>if
(defined $crossing_street)E<quot> in bbbike.cgi. Die größte Frage ist
eigentlich, wo der Code hingehört: nach Strassen/Util.pm, Strasse.pm,
PLZ.pm oder StrassenNetz.pm?

Wenn die Subroutine einmal existiert, kann sie z.B. für E<quot>On
start center on streetE<quot> verwendet werden.

=item * (M2)

Request:

 > Wäre es auch möglich, daß man die Acrobat -datei erst speichern
 > könnte, bevor man sie sich anzeigen läßt? Oder, daß man diese
 > vielleicht per autom. Email zugeschickt bekommt?

Ersteres könnte man machen, indem man einen Link bereitstellt, der das
gleiche wie der submit-Button macht, nur mit Content-Disposition:
attachment oder ähnlichem. Vielleicht nicht allzu schwer.

=item * (M5)

Opera and Safari: Hitting the return key on the first screen calls the
abc page (because it's the first <input image> element in the form).
(SOLVED for Konqueror, Opera seems to be difficult, ask wosch about
Safari, same for MSIE!)

=item * (H1)

On resize, the reddot/bluedot points for multiple choices become
displaced. Siehe oben, Layer+Resize-Problematik.

=item * (M2)

Dokumentieren (in ?info=1): Beschreibung der Sucheinstellungen

=item * (H2)

Optional mehr Informationen in der Routenbeschreibung aufnehmen, z.B.
Steigungen, Sehenswürdigkeiten in der Nähe,
U/S-Bahnstationen ... Kommentare sind schon drinnen.

=item * (E3)

cgi-Version: Linux+Netscape: Probleme mit Cookies (Einstellungen)
=E<gt> noch immer? -> ein Problem habe ich gelöst, war es das?

=item * (M1)

Nice: falls BBBike nur mit Start XOR Ziel angegeben wurde, wird der
Titel geändert auf E<quot>BBBike: <startname> (als Start)E<quot> bzw.
das Gleiche mit E<quot>zielE<quot>. Hintergrund: wenn dieses auftritt,
handelt es sich höchstwahrscheinlich um eine Bookmark-URL.

=item * (M3)

Idea by Andreas Mühlhausen: beim Anzeigen der Ausweichroute auch die
Basisdaten (Länge, Fahrzeit, Ampeln) der ursprünglichen Route
anzeigen, sowie ein Diff zwischen den beiden Routen anzeigen.

Implementationsmöglichkeit: Die alte Route wird per CGI-Parameter
E<quot>oldcsE<quot> und als Wert die Session-ID der alten Route
referenziert (done). Daraus kann man zumindest die Länge herausholen (die
anderen Parameter sind vielleicht nicht so wichtig). Außerdem könnte
man ein primitives Diff erstellen: einfach den ersten Unterschied am
Anfang und am Ende nehmen und mit E<quot>Beginn der
AusweichrouteE<quot> und E<quot>Ende der AusweichrouteE<quot> in der
Tabelle kennzeichnen. Ein besserer Diff-Algorithmus ist nicht
notwendig, typischerweise sollte es nur einen Diff-Chunk geben.
Weiterhin könnte man feststellen, ob sich alte und Ausweichroute
überhaupt unterscheiden und einen Erklärungstext anzeigen.

Das geht natürlich nur, wenn Apache::Session* installiert ist.

Note: Einiges ist bereits implementiert: Anzeige der vorherigen Länge,
grafisches Diff bei der googlemaps- und BBBikeDraw::GD-Darstellung.

=item * (E3)

newstreetform.html: qualitaet zum Pflichtfeld machen.

=back

=head1 BBBike and Googlemaps/similar

=over

=item * (H4) (improvement)

Use the suggest AJAX funktion for bbbikegooglemaps.cgi. Possible
alternatives: just for searching for streets (and user has to use the
existing function to set start/goal) or to set start+goal or both.

=item * (H2) (feature)

Use the googlemaps clone on mapserver basis.

=item * (M4) (improvement)

Make it possible to add points to a computed route in
bbbikegooglemaps.cgi. Also make it possible to delete points (last, to
last via, whole) from a computed route.

=item * (H5) (feature)

Routingpräferenzen sollten eingebbar sein. Das kann ruhig das gleiche
Formular wie bei bbbike.cgi sein, und die gleichen Cookies sollten
verwendet werden. Am besten als eingeblendetes Fenster.

=item * (H3) (improvement)

Neben der Anzeige der temp-blockings sollte auch ein Re-routing
möglich sein (Link im info-Fenster). Die alte Route kann dann als
old_coords-Route weiterhin sichtbar sein.

=item * (M3) (improvement)

Info-Fenster für temp-blockings: weitere Informationen anzeigen,
insbesondere die ungefähre verlorene Zeit

=item * (H3) (improvement)

Die gesamte Länge von temp-blockings sollte markiert werden, nicht nur
der erste Punkt. Benötigt eine Änderung in bbbike.cgi (alle Punkte
müssen in LongLatHop erhältlich sein; da diese unterbrochen sein
könnte, müsste die Datenstruktur entsprechend angepasst werden, evtl.
durch ein <separator>-Element und bei der YAML-Ausgabe mit mehreren
Arrays).

=item * (H3) (external bug)

Manchmal geht die Höhe der map im Seamonkey verloren. Dann erzeugt
Googlemaps Routenbilder mit Höhe=NaN, die natürlich kaputt sind. Die
Frage ist, ob ich hier etwas machen kann (außer den Bug zu reporten).

=item * (M1) (improvement)

Die verwendeten Bilder (Start/Zielflagge/pointer) könnten etwas
Antialiasing vertragen.

=item * (H2) (feature)

Die Attribute an der Strecke sollten irgendwie visualisiert werden
können (Kopfsteinpflaster, Radwege...). Dazu müsste bbbike.cgi erst
einmal die entsprechenden Datenstrukturen bereitstellen.

=item * (H2) (feature)

Zusatzdownloads (GPX, Palm) bereitsstellen, vielleicht auch die
Verlinkung zur Printversion, PDF-Generierung und Mapserver.

=back

=head1 WAP version of BBBike (wapbbbike)

=over

=item * (M3) (feature)

Missing: Advanced form: another step for choosing search preferences

=item * (M3) (improvement)

Using temp_blockings should be automatic (wap searches are normally
E<quot>nowE<quot> searches) (could be problematic for test suite?)

=item * (M3)

Nokia Series 40: lange Straßennamen werden im Select abgeschnitten

=item * (M3)

<b>bla</b> als <b> bla </b> umbauen

=item * (M3)

keine Tabelle für Nokia40/60 für das Ergebnis verwenden

=item * (H3) (feature)

XHTML-Lösung?

=item * (M3)

width=/height= in BBBike Karte angeben, damit Platz reserviert wird

=back

=head1 tkbabybike

=over

=item * (H3)

Convert to be useable with the Tcl::Tk module (beginnings are done...)

=item * (M4)

Tk::PathEntry (used in start/goal entries): -autocompletion does not
work (anymore)?

=item * (M5)

Completion failure for E<quot>StrausbE<quot>. It should be
Strausberger Platz (the first in list), but it is not completed when
leaving the entry.

=back

=head1 Modules

=head2 Route

=head3 Route::GPX

=over

=item new (input: coords, net, maybe also dataset)

=item param_from_cgi:

=over

=item gpxcontent: trk, rte, trk+rte (default), wpt (?)

=item gpxrteno: number of route points, 50 is default, may be 20 or 30
for older GPS devices

=item gpxtrkno: number of track points, by default very high (1024 or
2048?) or even unlimited

=item gpxversion: default 1.1, maybe support for 1.0 (for gpsbabel)

=item gpxwptlen: length of waypoint ids, by default 10

=item gpxwptsuffix: fixed waypoint id suffix

=item gpxwptprefix: fixed waypoint id prefix

=item gpxname: name of gpx file

=item gpxnameauto: boolean; otherwise: generate name automatically
from start and goal point of route

=back

=item as_string/as_gpx

=back

=head3 Route::Simplifier

Output-agnostic simplifier of routes. Should take coords, net, already
used waypoints and some gpx* parameters and return a simplified coord
list with generated shorter waypoint names

-> GPS::DirectGarmin::simplify_route ist vielleicht schon allgemein
genug, um in ein anderes Modul herausgebrochen werden zu können

=head2 BBBikeDraw

=over

=item * (M1)

Wird ImageSuffix irgendwo verwendet? Besser ImageType stattdessen
verwenden, dann kann ich auch bei bbbikedraw MapServer/gif oder
MapServer/pdf sagen.

=back

=head3 BBBikeDraw::GD

=over

=item * (M3)

TitleDraw: sollte nach Möglichkeit auch mit einem TTF-Font passieren.

=item * (M3)

unclosedPolygon anstelle von mehreren line-Aufrufen verwenden
(benötigt gd 2.0.33!), aber nur, wenn es sich als effizienter erweist.

=item * (M3)

In BBBikeDraw/GD.pm nach Kommentar bei AREA suchen: Probleme mit den
verschiedenen Netscape-Versionen. Beim Galeon scheint man nicht auf
das Area-Polygon klicken zu koennen, sondern nur in der Naehe davon.
Evtl. das gleiche Problem bei allen Gecko-Browsern. -> AREA/map nutze
ich gar nicht mehr. Vielleicht vorsichtig wiederbeleben? 

=item * (H3)

Auch hier könnte man Labels intelligent positionieren, siehe unten bei
BBBikeDraw::PDF. VectorUtil::intersect_rectangles wird hier aber schon
genutzt... (Werden auf radzeit.de die XS-Versionen genutzt? Beim
syncen kompilieren!)

=item * (M1)

Titel: E<quot>->E<quot> schöner E<quot>malenE<quot> statt Text
verwenden

=item * (M3)

Bahnhofsnamenpositionierung: vertikal zentrieren (ist zurzeit nicht,
sieht man, wenn die Schrift groß wird).

=item * (H2)

Routenbrush: kann man transparente Pixel einfügen, also rot -
transparent - blau - transparent? (Versucht, scheint aber mit gd2.0.33
nicht so schön zu klappen) Ebenfalls zu übelegen bei BBBikeDraw::PDF.

=item * (E2)

E<quot>(A -) BE<quot> zu E<quot>-> BE<quot> optimieren

=item * (H2) (external bug)

An den Rändern werden Straßen nicht durchgezeichnet (schön zu sehen:
bbbikedraw.t, Yorckstr. an der Kreuzung Großbeerenstr.).
Wahrscheinlich ein GD-Bug. Nicht bei der SVG-Variante.

=item * (H2) (bug)

Zusammenstoßende Straßenumrandungen weisen manchmal eine große Lücke
auf (schön zu sehen: bbbikedraw.t, Hochkirchstr.). Auch bei der
SVG-Variante.

=item * (H1) (external bug)

Die nördliche Begrenzung der Yorckstr. scheint zu dick gezeichnet zu
sein (2 Pixel statt 1 Pixel?). Möglicherweise ein GD-Problem. Nicht
bei der SVG-Variante.

=item * (H3) (bug)

Das Straßen-Labeling ist noch nicht perfekt. Siehe E<quot>Platz der
LuftbrückeE<quot>. Bei der SVG-Variante fehlt das Labeling komplett.

=item * (H1) (bug)

GD/gif und GD/jpeg können mit Transparenzen in Bildern nichts
anfangen.

=item * (H2) (external feature)

GD::SVG kann nicht externe Images einbinden, deshalb fehlt das
Zeichnen von S- und (echten) U-Bahnhöfen bei der SVG-Variante, ebenso
die Flaggen.

=back

=head3 BBBikeDraw::ImageMagick

=over

=item * (M3) (feature)

$TTF_STREET (und auch andere) sollte wie in GD.pm gesetzt werden. Oder
besser: in BBBikeDraw.pm eine Funktion dazu definieren und überall bei
Bedarf verwenden.

=item * (H2) (bug)

Zusammenstoßende Straßenumrandungen weisen manchmal eine große Lücke
auf (schön zu sehen: bbbikedraw.t, Hochkirchstr.). 

=item * (M2) (bug)

Draw street outlines above areas. Siehe
Viktoria-Park/Kreuzbergstr./Katzbachstr.

=back

=head3 BBBikeDraw::PDF

=over

=item * (M3)

Show more fields in route list (just like in web interface)

=item * (H3) (feature)

Bei Bedarf Karte in mehrere Seiten aufteilen?

=item * (M2)

Überprüfen, ob der Massstab noch auf die Karte passt, ansonsten von
1km verkleinern. Der entsprechende Code müsste auch für andere
BBBikeDraw::*-Module verwendet werden. (in BBBikeDraw::GD und
BBBikeDraw::PDF bereits implementiert, Teile von draw_scale müssten
nach BBBikeDraw.pm ausgelagert werden)

=item * (H3)

Straßenbeschreibung: Labels intelligent positionieren. Das
::PDF-Objekt führt eine Liste der belegten BBoxes. Jede neue
potentielle Text-BBBox wird dagegen geprüft. Auch prüfen, ob man sich
innerhalb der PageBBox befindet. Falls kein Platz ist, werden zunächst
die Himmerlsrichtungen versucht und dann per Verbindungslinie eine
entferntere Position. Kann man Texte auch rotieren? (Ja, mit
L<http://sourceforge.net/tracker/index.php?func=detail&aid=1857255&group_id=2464&atid=302464>!)
Besser: feststellen, wo sich die Route befindet (Pseudo-BBox dafür
erstellen?) und Überlappungen der Route somit vermeiden.

Oder ganz alternativ: wie sieht die PDF-Unterstützung des Mapservers
aus?

Weiterhin kann man Strasse::short verwenden, wenn es nicht passt.

=item * (M1)

Via im Titel erwähnen: Start -> Goal über Via. Dazu muesste vianame im
CGI übermittelt werden.

=item * (H2)

Untersuchen, ob man mit 8-Bit-GIFs und PDF::Create arbeiten kann. Wenn
ja, dann 8-Bit-Varianten für U/S-Bahnsymbole erstellen. (Oder
vielleicht liegt es an der Transparenz?)

=item * (M5)

Check: wird das richtige gemacht, wenn die Route Landscape und die
Routenliste weiterhin Portrait ist? Veraenderungen bei Route::PDF
notwendig?

=item * (M2)

E<quot>(A -) BE<quot> zu E<quot>-> BE<quot> optimieren (mit leftarrow)

But: it seems that PDF does not know anything about Unicode
characters; and the PDF::Create documentation states that the ZingBats
and Symbol fonts are not useable.

=item * (H5) (fixed?)

Acrobat Reader often shows an error message for
BBBikeDraw/PDF.pm-created files. No problems with xpdf and other
viewers.

Reproducible with:

    perl t/bbbikedraw.t -only PDF -save -bbox 8985,9344,14677,11721 -drawtypes title,ampel,berlin,wasser,faehren,flaechen,ubahn,sbahn,str,ort,wind,rbahn

Error vanishes if E<quot>rbahnE<quot> is left from the drawtypes.

Maybe it has something to do with drawing stuff outside of the page
area. Use devel/pdftotk.pl to see what's really drawn.

-> Believed to be fixed! Maybe do some mass testing with a lot of
auto-generated PDFs.

=item * (H3)

Bessere Platzierung der Labels in der PDF-Ausgabe. U- und
S-Bahn-Symbole sind suboptimal, evtl. GIFs stattdessen verwenden (geht
zurzeit nicht, weil PDF::Create anscheinend GIFs mit 8 Bit Farbtiefe
erwartet (extra dafuer erzeugen?). JPEGs gehen, aber ohne Transparenz
(schlecht für das S-Bahn-Symbol), außerdem geht es nur mit xpdf, aber
nicht mit acroread). Wenn Platz ist, könnten auch die Bahnhöfe mit
Labels versehen werden. Wenn ich rotierte Fonts zeichnen kann, dann
auch wichtige Straßen.

=item * (H1)

Migrate to PDF::API2 (beginnings in BBBikeDraw::PDF2, Route::PDF2
should also be created) or another pdf package, which is supported (in
opposite to PDF::Create).

=item * (M4)

Komprimierung von PDFs. Ich habe die PDF::API2-verwendende Funktion in
BBBikeDraw::PDFHeavy abgelegt. Die pdftk-verwendende Funktion sollte
auch dorthin wandern. Weiterhin brauche ich eine Methode can_compress,
eine Factory-Methode compress. Compress => 1 im BBBikeDraw-Konstruktor
sollte angeben, welche Komprimierer man bevorzugt. Falls alles gut
läuft (Testsuite mit vielen automatisch generierten PDFs und
anschließendem Aufruf von xpdf/acroread?) kann ich es auf radzeit
aktivieren.

=back

=head3 BBBikeDraw::Imager

=over

=item * (M3) (bug)

Manche Straßenbegrenzungen laufen spitz aufeinder zu (z.B.
Hochkirchstr., Viktoria-Quartier). Gut zu sehen mit bbbikedraw.t.

=item * (M3) (feature)

Implement some icon drawing: U-Bahnhof, S-Bahnhof, Start/Goal flag ...

=item * (H3) (feature)

Implement street labeling.

=item * (M2) (bug)

Draw street outlines above areas. Siehe
Viktoria-Park/Kreuzbergstr./Katzbachstr.

=back

=head2 Strassen and Strassen-related

=over

=item * (M4)

Weiteres KML-Feature: die wichtigsten Kategorien an einer Route per
Farbe kodieren (z.B. Kopfsteinpflaster rot, gute Strecke grün, Radwege
blau) und in KML einbauen.

=item * (H2)

Das Studium von
L<http://wiki.openstreetmap.org/index.php/De:Map_Features> könnte
interessant sein, um eine Vereinheitlichung der Attributnamen zu
bekommen.

=item * (H2)

Daten direkt von einer Postgres/Mysql-Datenbank auslesen und
darstellen (Strassen::Pg weiterschreiben, Strassen::Mysql neu
schreiben, oder sogar Strassen::DBI?).

=item * (M3)

Alternative implementation of nearest_point with Strassen::QuadTree
(which must be made official!). Use in match_bbd_data.

Strassen::QuadTree could also be used in BBBikeExp.

=item * (H2)

[Do I really need this?]

Mapinfo.pm converter: add new attributes Author, AcquireAuthor,
CreationDate, AcquireDate (maybe better names for AcquireDate?) (from
by directive), FromDate, ToDate (from temporary directive). Implement
first the directive stuff above.

New output scheme: create one mapinfo file per layer. Use real
pen/symbol for lines.

=item * (H1)

AI implementation for detecting street parts (from crossing to
crossing, or just a crossing) from normal text.

=back

=head2 Other

=over

=item * (M1)

Sometime take a look at L<http://search.cpan.org/dist/Geo-Shapelib/>
Only needed if my functions would be too slow one day.

=item * (M1)

Maybe write an BBBikeAreaPlugin for displaying the current route's
area (in a balloon or additional label/toplevel).

=back

=head2 BikePower

=over

=item *

BikePower: Profile laden/speichern, evtl. auch direkt aus bbbike
sichtbar. Erst einmal das Problem mit dem Komma (Linux, Solaris mit
LANG gesetzt) lösen.

=back

=head1 MapServer

=over

=item * (M4)

Missing stipples for Cemetery etc.

=item * (M5)

Ich sehe 404 für /cgi-bin/radroute.html und .../help.html mit Firefox
2.0.0.3 unter Windows. Wird <base> hier nicht korrekt erkannt? ->
confirmed: ich sehe Probleme mit Firefox 1.0.7, 1.5, 1.5.0.1,
1.5.0.2, 1.5.0.3, 1.5.0.4, 1.5.0.5, 1.5.0.6, 1.5.0.7, 1.5.0.9, 2.0,
2.0.0.1, 2.0.0.2, 2.0.0.3 (verschiedene OS) und einigen Java- und
anderen Bots. -> Workaround durch absolute URLs, aber vielleicht gibt
es eine bessere Lösung?

=item * (M5)

Funktioniert coordset=start mit dem MapServer unter MSIE6.0? Ich sehe
Warnings im errorlog, das mit dieser Konstellation img.x/img.y fehlt
und somit eine Suche in MapServer gar nicht möglich ist.

=item * (E3)

Sehenswürdigkeiten vielleicht grau statt rot einfärben wie auf
http://de.wikipedia.org/wiki/Bild:Berliner_freifunk_netz_03-01-2007.jpg
? Das sieht nicht so aufdringlich aus. Auch bei allen anderen
Ausgabeformaten (BBBikeDraw, bbbike/Tk) überlegen.

=item * (M5)

Was sind die gepunkteten Linien bei der MapServer-Ausgabe von
bbbikedraw.t? -> Steigungen! Nicht bzw. schöner zeichnen! Siehe auch
brb.map-tpl, mount.

=item * (H5)

Verbleibende Issues mit mapserver 4.4.1:

 * Siehe MIGRATION_GUIDE.TXT im mapserver-CVS bzgl. Segfaults und
   einem GD-Patch. Könnte das bei meinen Problemen helfen?
 * Detailanzeige geht sehr oft nicht (Keine Details für diesen Punkt
   vorhanden.)
 * Segfault (?) bei einige Zoomstufen+Layerkombinationen (!!!)
   Problematisch scheint zu sein: U/S-Bahnhof-Symbole als Bild. Wenn
   ein Quadrat/Kreis stattdessen gezeichnet wird, funktioniert es
   nicht. Vielleicht hat das Problem auch was mit den fehlenden
   Bild-Symbolen, s.o., zu tun? Problematische PNGs? Nein, es scheint
   das Label zu sein. Die Bilder werden nicht angezeigt, aber das
   scheint keinen Segfault auszulösen...
 * falls dieser Fehler mit meiner Testsuite nicht getriggert wird:
   nachholen!
 * fast alle Bild-Symbole werden nicht angezeigt (Ausnahme: Fähre,
   Start, Ziel)
 * Einbahnstraßen sind durch E<quot>>E<quot> markiert (das ist aber
   OK).
 * Das Grenzen-Symbol (Punkt Strich) wird nicht gezeichnet.

 * CVS-Version (2006-09-25) scheint viel besser zu funktionieren! Noch
   kein einziger Segfault! Ich habe allerdings auch den GD-Patch oben
   angewandt (der aber mit mapserver 4.4.1 nicht geholfen hat).
 * alpha in Symbolen scheint nicht zu funktionieren, und es gibt wohl
   Bugreports auf Bugzilla. Aber die *noalpha*png-Bilder funktionieren
   nun.

=item * (E4)

Nebenstraßen und Flughäfen sollten nicht die gleiche Farben (siehe
Flughafen Tegel) oder Straßen sollten Outlines besitzen.

=item * (M4)

Ich sollte maptemplate durch TT oder ähnliches ersetzen können. Ein
erster Schritt wird gerade gemacht: jeder maptemplate-Platzhalter wird
durch [% t(...) %] ersetzt. Dann kann ich mit

   --define template_type=TT

entscheiden, ob ich TT-Templates direkt verwenden oder Maptemplates
bauen will. Die Platzhalter bekommen im TT-Modus ein
E<quot>msE<quot>-Prefix, also aus

   [program]

wird

   [% msprogram %]

(Theoretisch wäre ms.program schöner, aber das kann man (noch) nicht
mit tpage setzen!)

=item * (M2)

bundesstrasse_table_32.png auch hier verwenden.

=item * (H1)

Legend: start/goal flags are to high and may overlap the
E<quot>MarkierungE<quot> circle. Maybe a mapserver problem, fixed in a
new version?

=item * (H3)

Make it easy to show additional custom layers (with limited mapserver
mapfile functionality???). E.g. integrate somehow
miscsrc/bbd2mapservhtml.pl

=item * (M2)

Zurzeit werden innerhalb Berlin Radroutennummern angezeigt. Soll das
so bleiben?

=item * (H4)

Fehlende Layer: Baustellenzeichen. Die Symbole von BLOCKED_CARRY/_BNP
sind nicht gedreht. Keine Unterscheidung zwischen handicap und
qualitaet. Spezieller Modus für das Erzeugen von Mittelpunkten (e.g.
Schwerpunkt mit Zusatzregeln wie bei den Gewässern). Diese könnten für
Sehenswürdigkeiten verwendet werden.

=back

=head1 Other languages (Java, Tcl, C++)

=over

=item * (H1)

Tcl version is too slow --- get rid of the E<quot>calculate and show
all crossingsE<quot>

=item * (H1)

Java version does not compile anymore with Java 1.5

=back

=head1 Distribution/Installation/other development

=over

=item * (M1)

There is CDB_Perl on CPAN which could be used as a fallback for
CDB_File.

=item * (H2)

Marek::Pod::HTML seams to have a problem, maybe inherited from
Pod::Checker: 2nd argument set to \*STDERR for parse_from_file does
not work. See my hack in Marek/Pod/HTML.pm in the perl5.8.0 tree.

=item * (M3)

bbbike/html: add bbbike_small.html.spp to CVS, but maybe first convert
to use TT?

=item * (M2)

GNOME-Desktop-Icon in ~/.gnome-desktop/BBBike.desktop mit folgendem
Inhalt ungefaehr erstellen:

    [Desktop Entry]
    Encoding=UTF-8
    Version=1.0
    Type=Application
    Exec=/mnt/suse/usr/bin/perl -e 'for (@INC) { push @_INC, "/mnt/suse$_" } @INC = @_INC; $0= "/mnt/suse/home/slavenr/work2/bbbike/bbbike"; do $0 '
    TryExec=
    X-GNOME-DocPath=
    Terminal=false
    Name[en_US]=BBBike
    GenericName[en_US]=
    Comment[en_US]=

und in
~/.nautilus/metafiles/file:%2F%2F%2Fhome%2Fslavenr%2F.gnome-desktop.xml

    <?xml version="1.0"?>
    <directory><file name="starthere.desktop" icon_position="30,91"/><file name="slavenr's%20Home" icon_position="30,10"/><file name="Trash" icon_position="30,172"/><file name="BBBike.desktop" icon_position="30,260" custom_icon="file:///mnt/suse/home/slavenr/work2/bbbike/images/srtbike32.xpm"/></directory>

=item * (M1)

Das Erzeugen von GIF-Bildern benötigt netpbm, von JPEG-Bildern
die JPEG-Distribution und alle brauchen ghostscript. Eine bessere
Methode wäre WinPhoto (wenn es korrekt und unter Win32 überhaupt
funktionieren würde). Kann ich in die win32-dist einige weitere
Binaries unterbringen (ppmtogif o.ae.).

=item * (M1)

install.pl: Falls Tk nicht installiert ist und PPM vorhanden ist, mit
PPM nachinstallieren. Bei Bedarf eine Reihe weiterer Module
nachinstallieren (siehe Bundle::BBBike).

=item * (#M5)

install.pl: Should be tested on another system.

=item * (M1)

FreeBSD-Port anpassen, so daß install.pl verwendet wird. PLIST
von install.pl abhängig machen. -kdeinstall in
Abhängigkeit von HAVE_KDE angeben.

=item * (H1)

Check if it would be feasible to create a BBBike Windows distribution
using L<Perl::Dist>. Note that the current Perl::Dist (0.0.5) has many
very serious problems (up to making the current perl unusable!).

=back

=head1 Tests

=over

=item * (M1)

Cgiinfo in cgi2.t funktioniert leider nicht, weil openURL als zweiten
Parameter nur true oder false zuläßt. Workaround:
Schreiben eines Multiplexers, der per Javascript neue Fenster
öffnet.

=item *

 ... reveals problems if started first time without any cache files ---
 many warnings, sometimes even coredumps on RedHat (?). The 2nd pass is
 usually OK.

Z<>=> maybe the cache build should be done in a separate process. This
 would save memory which probably can't be given back to the process.

 add another full-test rule which calls some tests with their
 -slow/-all/-full/-doit options

=back

=head1 BBBike on the public Server

=over

=item * (H1)

Maybe I should create a tiny wrapper around mapserver-3.6.4, and if
this fails (segfaults) call mapserver-3.6.6. So I will get the nicer
images of 3.6.4, but the fallback safety of 3.6.6.

=item * (E3)

Regularly check the CVS version/latest release of mapserver. Maybe it
will run my mapfile again...

=back

=head1 Documentation

=over

=item * (M5)

There should be a document for design decisions. For example, thoughts
which were developed in this file and later implemented, could go
nearly unchanged into this new document.

The new file could be named F<design_decisions.pod> if no better name
pops up.

=item * (M1)

Eine öffentliche FAQ bereitstellen, vielleicht auch ein
(ChangeE<verbar>B)Log.

=item *

Alle Anregungen von anderen Leuten (z.B. per Mail) hier eintragen.

=back

=head1 Sonstiges

=over

=item * Nichts ...

=back
