=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).

=head1 Perl/Tk version of bbbike

=over

=item * (M1)

Loading plugins: show multiple errors in one dialog.

=item * (M2)

Replace all dialogs with longdialog (maybe) through a common
subroutine. Either re-use dialogs or destroy them after usage.

=item * (M2)

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

=item * (H2)

Logos für Radfernwege verwenden, z.B.
L<http://www.bike-berlin-copenhagen.com/images_menu/logo_priser.gif>
oder L<http://www.bike-berlin-copenhagen.com/images_menu/logo.gif>.

=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 * (M3)

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.

=item * (M3)

Bugreport von Andreas Mühlhausen: BS/Del funktioniert nicht zum
Löschen von Punkten aus der Selection im Edit-Modus unter Windows.

=item * (M3)

Bugreport von Andreas Mühlhausen: Sehenswürdigkeiten werden auch im
Normalmodus mit einem grünen Punkt gezeichnet (unter Windows).

=item * (M3)

Tk::Getopt addition: for some changes a post dialog should be shown,
e.g. "Please restart the app to make this/the option change/s
visible". Or is it already possible? Use it in bbbike.

=item * (H3)

Drucken: if the PDF backend is chosen, then Druckeinstellungen have no
effect. 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 * (H3)

Option editor does not fit into 800x600 screen --- using scrollable
pane? (it even does not fit into a 1024x768 screen on windows). Maybe
for a first workaround use a smaller font for smaller screens/on
windows?

=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)

Ich sollte GPX als Ein/Ausgabeformat unterstützen:
L<http://www.topografix.com/gpx_resources.asp>. Eingabe geht bereits.

=item * (H3)

Neue Symbole 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?),
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 * (H5)

The -lazy option seems to cause a big memory leak.

=item * (H2)

Dynamisches Zeichnen (weniger/mehr) von Kartenelementen anhand der
VergrE<ouml>E<szlig>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 "StraE<szlig>e A", "StraE<szlig>e
A", "StraE<szlig>e A" zu einer Zeile zusammenfassen. Das kann
vorkommen, wenn bei der Route ein Zwischenpunkt verwendet wird.

=item * (M2)

Bessere Routenbeschreibung fE<uuml>r LandstraE<szlig>en (wie? was ist
an der derzeitigen nicht gut genug?). In der Datenbank "X - Y" nach
"(A) - X - V - Y - (B)" E<auml>ndern, wobei X und Y Start- und Zielort
der Strecke ist, (A) und (B) die globale Richtung
(grE<ouml>E<szlig>ere StE<auml>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)

ME<ouml>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 (StraE<szlig>en) zu machen.
Optional eins oder beides zusammen.

=item * (H1)

(Rsync und CVS hat Zeit...)

Update E<uuml>ber das Internet: rsync-UnterstE<uuml>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.

=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 hE<auml>ufigen Nachnamen (ME<uuml>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>) fE<uuml>r die Suche:
kE<uuml>rzeste Strecke, schnellste Strecke (in AbhE<auml>ngigkeit von
Wind, Steigung/GefE<auml>lle, StraE<szlig>enoberflE<auml>che etc.),

=item * (M1)

Einheitliche Schalter fE<uuml>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)

VernE<uuml>nftige Options-Eingabe in der GUI. Zwischen
Startup-Optionen (Zeichnen der StraE<szlig>en/Punkte) und aktuellen
Optionen unterscheiden. 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 zugehE<ouml>rige(n)
Linien anzeigen

=item * (M2)

Option -centerc auch schöner zugE<auml>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 * (M1)

Bei Tix sind Eingabe-Widgets und Listboxen in einem helleren Farbton.
Auch bei BBBike konsequent umsetzen (systematisch alle Fenster
durchgehen).

=item * (M2)

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

=item * (M2)

Edit-Modus: Cursor aendern. Die Checkbox E<quot>Vias einblendenE<quot>
ausschalten (und spaeter wieder restaurieren).

=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)

StraE<szlig>ennamen: Labels wie in richtigen StadtplE<auml>nen
anordnen, also z.B. "Yorckstr.": am Anfang der StraE<szlig>e "Yorck-",
am Ende der StraE<szlig>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 StraE<szlig>ennamen so lange dauert: mit Hints
arbeiten (z.B. fE<uuml>r einige oft verwendete Zoomstufen Koordinaten
und Transformationsmatrizen vorberechnen).

=item * (H2)

Beim VergrE<ouml>E<szlig>ern kE<ouml>nnte man ab einer bestimmten
Stufe auch die GrE<ouml>E<szlig>e der StraE<szlig>en/Ortslabel auch
mitvergrE<ouml>E<szlig>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 kE<ouml>nnte. Server-Beispielcode aus
E<quot>Mastering Perl/TkE<quot> verwenden.

=item * (H3)

Rotierte Fonts: vielleicht ein Freetype-Modul schreiben, dafE<uuml>r
eine Tk::Canvas-Erweiterung und diese in BBBike verwenden?

=item * (M1)

VergrE<ouml>E<szlig>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 * (E2)

Vielleicht Windchill-Temperatur zusE<auml>tzlich anzeigen. See
windchill program in bin/sh or devel.

New formula: L<http://www.nws.noaa.gov/om/windchill/>

=item * (H1)

Optimierung: Beim Ausschalten von Outline oder StraE<szlig>ennamen
muE<szlig> 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 wE<auml>hrend eines WWW-Fetches die Verbindung gekappt wird,
hE<auml>ngt BBBike vollkommen. Gesehen bei Win32. Vielleicht mit
Timeouts arbeiten (kann das LWP?) und hE<auml>ppchenweise holen. Oder
noch besser: fileevent verwenden! ... LWPng kann Event-Handling.
Leider ist das Event-Handling noch inkompatibel mit Tk. Auch fE<uuml>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)

FE<uuml>r das Drucken von Text: evtl. auch Netscape und print-Methode
verwenden (?). FE<uuml>r Unix kE<ouml>nnte man eine start netscape,
netscape remote openFile/print-Kombination verwenden. Bei Windows?
Netscape kE<ouml>nnte man auch zum Mailabschicken verwenden,
E<uuml>ber mailto. Evtl. ein Modul fE<uuml>r Netscape schreiben,
daE<szlig> 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 fE<uuml>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 dafE<uuml>r portieren. Sachen,
die mir dafE<uuml>r einfallen: Ich brauche ein open(), das E<uuml>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 muE<szlig> 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
durchgE<auml>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
bedE<uuml>rfen KlE<auml>rung (warum, woher, benE<ouml>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 FlE<auml>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 wE<uuml>rde in eine unterbrochene Route
resultieren, deren Fahrzeiten addiert wE<uuml>rden. ZusE<auml>tzlich
kE<auml>me noch eine abgeschE<auml>tzte Zeit fE<uuml>r die Benutzung
des Verkehrsmittels (Fahrzeit + Zusteigzeit + Umsteigezeiten). Eine
Verbindung zu Fahrinfo wE<auml>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 verfE<uuml>gbar sind. Am besten
wE<auml>re natE<uuml>rlich noch immer ein NetPBM-Modul.

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

=item *

Radwegekategorien erweitern: RW(kategorie)(qualitaetskategorie). Also
heiE<szlig>t dann z.B. RW00: Radweg mit sehr guter QualitE<auml>t und
RW13: benutzungspflichtiger Radweg mit sehr schlechter
QualitE<auml>t. Bei den restlichen Kategorien kann man sich die
Erweiterung sparen, da dort die QualitE<auml>tskategorie der
StraE<szlig>e gilt. Default-QualitE<auml>tskategorie fE<uuml>r Radwege
sei 1 (gute QualitE<auml>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 kE<ouml>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 StraE<szlig>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 BahnhE<ouml>fen
statt Strecken (davon kann auch die Routenbeschreibung auf dem flachen
Land profitieren!) ... Und noch schE<ouml>ner: eine Kombination von U/S-Bahn
und StraE<szlig>ennetz (fE<uuml>r FuE<szlig>wege bzw. Bike+Ride).

=item *

Optional eine kE<uuml>rzere Beschreibung. Diese wE<uuml>rde nur
folgendes enthalten: StraE<szlig>en und AbbiegevorgE<auml>nge. Wenn
man auf einer StraE<szlig>e nicht abbiegen muss, dann werden
verschiedene StraE<szlig>ennamen in einer Liste zusammengefasst.

ZusE<auml>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 dafE<uuml>r erweitern

=item *

user editing: negative/positive prE<auml>ferenzen mit b2/b3 lange druecken
setzen

=item *

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

=item *

lange hE<auml>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,
dafE<uuml>r gibt es aber ein neues Tk::MDI-Widget. Aber: MDI is evil!

=item *

Andreas' Labeling-Algorithmus verwenden

=item * (E2)

-font/-fontfamily/-fontheight handling verbessern. -font in der
Kommandozeile sollte Einstellungen in der Config-Datei überschreiben.
Das Verwenden von -fontfamily lucida -fontheight 7 führt nicht zum
gewünschten Ergebnis.

=item * (M2)

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

=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 LandstraE<szlig>enzeichnens (und jwd etc.)
 - generell: vielleicht ein gesondertes sub symbolframe fE<uuml>r jeden Ort?
 - oder: XML-Beschreibungsdatei fE<uuml>r die Properties?
 - automatisches Erstellen der Properties in Geography.pm anhand der existierenden data-Dateien
 - Ampeln sind vielleicht nicht E<uuml>berall erfasst
 - winddaten kE<ouml>nnen vielleicht nicht E<uuml>berall E<uuml>ber das web geholt werden
 - StraE<szlig>en: nicht alle Daten sind E<uuml>berall erfasst (Kategorien, Radwege, QualitE<auml>t, ...)
 - StraE<szlig>enauswahl: PLZ-Liste, CDROM?
 - etc. So gut wie alle daten kE<ouml>nnen vorhanden sein oder nicht
 - transpose-Funktion ist ortabhE<auml>ngig, BBBikeTranspose als Verteiler
 - map-button sollte berlin-spezialitE<auml>t bleiben
 - check-skript: sind alle benE<ouml>tigten Variablen definiert (in den Geography-Modulen)
 - einige devel-skripte sind auch ortabhE<auml>ngig
 - vielleicht Erstellung eines devel-Verzeichnisses mit nE<ouml>tigen skripten aus miscsrc und vielleicht misc. Insbesondere kritische Sachen wie den eplus-Roboter herausnehmen
 - verkleinerung fE<uuml>r overview-mode sollte einstellbar sein
 - anhand von $0 erkennen, welcher Ort verwendet eerden soll. Gut fE<uuml>r CDROM-Installationen
 - edit vs. normal mode: bei anderen stE<auml>dten keinen unterschied machen (transpose entsprechend setzen) oder gps-koordinaten im edit-mode verwenden
 - CGI: imagedir ortsunabhE<auml>ngig machen
 - caches ortsunabhE<auml>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 StraE<szlig>enqualitE<auml>t
  betrE<auml>gt ca. 1000 Joule und auf Kopfsteinpflaster ca. 2200
  Joule jeweils pro 100 Meter. Bei asphaltierten Radwegen mit
  schlechter LE<auml>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
  StraE<szlig>enqualitE<auml>t rund doppelt so groE<szlig> wie bei
  Radwegen mit Betonverbundsteinen und etwa viermal so groE<szlig> 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:
  ReulenbE<auml>cker
  IX D2
  Tel: 9025 2391
  Raum 8.020
  BrE<uuml>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 StraE<szlig>ennetz, Suche

Die build-Funktion kE<ouml>nnte viel einfacher gestaltet werden, da if
(const) { } von perl optimiert wird. Die Vorgehensweise wE<auml>re
also:

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

Leider gibt es mandatory redefine warnings, die vielleicht mit einer
STDERR-Umleitung unsichtbar gemacht werden kE<ouml>nnen. Allerdings
--- eine Analyse mit B::Terse zeigt, dass nach der Optimierung
zusE<auml>tzliche enter/leave opcodes im Tree geblieben sind. (Das
wE<auml>re eine Idee fE<uuml>r optimize::...: E<uuml>berflE<uuml>ssige
enter/leave E<uuml>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 VernE<uuml>nftige Koordinaten verwenden

Wahrscheinlich ist GKK (fE<uuml>r Deutschland) die beste Wahl.

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

  * 1km entspricht wieviel LE<auml>ngengrad in Usedom, Prenzlau,
    Berlin, Dessau, Dresden?

  * Das gleiche mit Karte::Polar ausrechnen

  * Zur Sicherheit auch BreitengradabstE<auml>nde berechnen.

  * Range von GKK feststellen (in Mapsource einstellen, falls
    mE<ouml>glich, ansonsten mit dem eTrex). Wo gelten die Zonen, was
    fE<uuml>r EinschrE<auml>nkungen hE<auml>tte ich?

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

  * -orig-Dateien =E<gt> GKK, konvertierte Dateien =E<gt> einfach auf
    0/0 subtrahiert (E<auml>hnlich wie in ME<uuml>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
    RE<auml>nder sind dann verzerrt). Da mitten durch Berlin eine
    GKK-Zone verlE<auml>uft, sollte ich vielleicht eine Pseudo-Zone
    4.5 verwenden (Aufruf von Karte::UTM::ConvToTm mit dem Berliner
    LE<auml>ngengrad als lat0 z.B.). Wie sieht es mit der
    Konvertierungsfunktion DegreesToGKK aus?

  * Liste aller von den derzeitigen Koordinaten abhE<auml>ngigen
    Dateien erstellen

  * Wenn die GKK-Konvertierung in Perl zu langsam lE<auml>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 mE<ouml>glich: die
    sichtbaren Koordinaten im cgi sollten auch Degrees sein.

  * Evtl. alle data/*-Dateien nach .bbd umbenennen und am Anfang einen
    Header einfE<uuml>gen (Datum, Koordinatenformat etc.)
    Entsprechende orig-Dateien heiE<szlig>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
  ErhE<ouml>hung der Fehleranzahl

=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 so erweitern, 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 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 haesslioch: ps-export braucht
    jahre und dann merkt man, dass es doch nicht geht
  
  * E3 Print OK? (ps vs. pdf backend and automatic recognition)

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

  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
  [???]

  data_corrected: cp or symlink or convert missing files: kneipen,
  restaurants etc.
  2. use data_corrected for CVS and all distributions!

[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 * (M3)

SehenswE<uuml>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 * (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 * (H1)

Umluts get lost in fvwm2 titlebars (Debian, fvwm2.4.x and fvwm2.5.x,
Tk800.024). No problem on FreeBSD with fvwm2.4.15. On Mac and
Tk804.027, umlauts are shown as unicode escape sequences \x{....}

=back

=head2 Windows specific

=over

=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.

=item * (E4)

Check if Object::Iterate will really be available in the next
windistro.

=item * (M1)

Maybe under Windows or for all click-to-focus systems: make bbbike
internal windows act as focus follows mouse. Something like:

   $t->bind("<Enter>" => sub { $t->focus });

may do (but only if the main toplevel or one of its descendents
already has the focus). This is really only necessary for convenient
keyboard control.

=item * (H1)

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

=item * (E3)

Windows: add List::Permutor to the bindist of Windows (sieperl)
-> getan; überprüfen, ob Salesman nun läuft

=item * (M1)

Check appearance on Windows, especially the buttons (is the ipady
value OK now?). I do not use some optionAdd commands for fg/bg on
Windows --- is this OK? 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). Is HList white?

=item * (H1)

Don't understand this one: E<quot>Bug: Busy-Zeiger zurücksetzen ist
unter Win kontraproduktiv!!!E<quot>

=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>

=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).

=back

=head1 Daten allgemein

=head2 Radwege und -touren im Netz

=over

=item * (E3)

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

=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 * (E2)

Ostsee Richtung Osten so weit erweitern, dass kein haesslicher Rand in
der Übersichtskarte bleibt.

=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,
Europaplatz,
Agnes-Zahn-Harnack-Straße,
Ilse-Scheffer-Straße,
Washingtonplatz,
Ella-Trebe-Straße,
Berta-Benz-Straße,
Katharina-Paulus-Straße,
Clara-Jaschke-Straße

Nordbahnhof, Stettiner CarrE<eacute>
Julie-Wolfthorn-Straße,
Coroline-Michaelis-Straße,
Elisabeth-Schwarzhaupt-Platz

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

Moabiter Werder-Nord:
Elisabeth-Abegg-Straße

Friedrichswerder-West:
Caroline-von-Humboldt-Weg

Luisenstadt:
Paula-Thiede-Ufer,
Bona-Peiser-Straße

=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)

Recherchieren (und aus fragezeichen herausnehmen): Neuendorf (Nl) wird ab 2002-08-18 geschlossen; neu: 'Cottbus-Willmersdorf Nord' und 'Teichland'. Grund: Umverlegung der Trasse (betr. RE1 und RE18)	?? 80691,-66664 80603,-64961 81213,-63504 82460,-63229

=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

 S-Bahn: N-S-Tunnel als brunnel markieren
 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 * SpielplE<auml>ze aufnehmen? Z.B.
  L<http://www.stadtentwicklung.berlin.de/umwelt/stadtgruen/kinderspielplaetze/de/spielplaetze/>

=back

=head2 Datenhandling (make, conversion ...)

=over

=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), sowohl für Anzeige als auch für das Routing.

=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.

=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)

Strip Bezirk: nicht für fragezeichen

=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 * (M4)

beim Buildprozess fragezeichen separat erzeugen

=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 * (M2)

Straßen im Oderbruch! Anhand meiner Fahrradkarten und
Benutzer-GPS-Tracks Fragezeichenstrecken eintragen.

=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 StraE<szlig>en sollten auch in
"Berlin.coords.data" stehen. Ansonsten gibt es derart PE<Uuml>robleme,
daE<szlig> zwar beim CGI in der Liste "Alle StraE<szlig>en anzeigen"
z.B. "Hallesches Tor" angezeigt wird, diese StraE<szlig>e als Eingabe
aber nicht akzeptiert wird. Sprich: die Datei data/add_str sollte auf
AktualitE<auml>t E<uuml>berprE<uuml>ft werden und dann mE<ouml>glichst
alle fehlende StraE<szlig>en nach Berlin.coords.data E<uuml>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)

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

=back

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

=over

=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 LandstraE<szlig>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
groE<szlig>er Unterschied, ob man nur rechts oder links um einen Block
herum fE<auml>hrt).

=item * (H1)

Neuimplementation der Streckensuche. Dabei soll zwischen
StreckenaufwE<auml>nden und KnotenpunktaufwE<auml>nden unterschieden
werden. AufwE<auml>nde werden entweder in LE<auml>ngen, in Zeit oder
in einem Punktesystem (Kombination aus Zeit, Komfort, Sicherheit etc.)
angegeben. StreckenaufwE<auml>nde berechnen sich aus: LE<auml>nge der
Strecke, Gegenwind, Steigungen, Dynamowiderstand,
StraE<szlig>enqualite<auml>t der Strecke, sonstige Hindernisse auf der
Strecke, Verkehrsdichte (Staus, Berufsverkehr), Radwege,
Maximalgeschwindigkeiten. KnotenpunktaufwE<auml>nden berechnen sich
aus: durchschnittliche oder wahre Ampelwartezeit mit Zeit fE<uuml>r
die Beschleunigung, durchschnittlicher Zeitverlust an
Rechts-vor-links-Kreuzungen und an vorfahrtsgewE<auml>hrenden
Kreuzungen (abknickende VorfahrtsstraE<szlig>en beachten), Zeitverlust
fE<uuml>r AbbiegevorgE<auml>nge (rechts, links), erschwertes Abbiegen
(Bordsteinkanten E<uuml>berwinden). QualitE<auml>tsbewertungen:
StraE<szlig>enqualitE<auml>t, niedrige LeistungsaufwE<auml>nde (Wind,
Steigungen), NebenstraE<szlig>en, Parks. Sicherheitsbewertungen:
NebenstraE<szlig>en vor HauptstraE<szlig>en bevorzugen, Radwege
ja/nein. In (C) und Perl implementieren.

Analyse eines Streckenabschnitts:

=over

=item * Feststellen der LE<auml>nge

=item * Feststellen der Windrichtung und -geschwindigkeit

=item  * Feststellen der Steigung

=item  * Verluste durch StraE<szlig>enqualitE<auml>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
   fE<uuml>r den Abbiegevorgang abziegen

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

=item  * Feststellen, ob die Vorfahrt beachtet werden muE<szlig>

=back

Z<>=E<gt> nicht unbedingt notwendig, die jetzige LE<ouml>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 bbbike.cgi

=over

=item * (H2)

Make an interface to Google Maps. See
L<http://perl-hackers.net/bragamap.html> or
L<http://maps.google.com/maps?ll=37.774548,-122.424474&spn=0.021688,0.029232&t=h&\saddr=eddy+st,+San+Francisco,+CA&daddr=Market+St,+San+Francisco,+CA&hl=en>

=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 * (E3)

/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?

=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 * (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 points for multiple choices become displaced.

=item * (M2)

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

=item * (H2)

Optional mehr Informationen in der Routenbeschreibung aufnehmen, z.B.
Steigungen, SehenswE<uuml>rdigkeiten in der NE<auml>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 * (M2)

Automatisches HTML-Validieren in der Test-Suite. Man koennte

http://validator.w3.org/check?output=xml;uri=http%3A%2F%2Fwww.iconmobile.com%2F&doctype=%28detect+automatically%29&charset=iso-8859-1+%28Western+Europe%29

verwenden, aber die XML-Ausgabe ist als "experimentell" markiert.

Links auf bbbike:

http://validator.w3.org/check?uri=http%3A%2F%2Fwww.radzeit.de%2Fcgi-bin%2Fbbbike.cgi

http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.radzeit.de%2Fcgi-bin%2Fbbbike.cgi


=back

=head1 WAP version of bbbike

=over

 - Nokia Series 40: lange Straßennamen werden im Select abgeschnitten
 - <b>bla</b> als <b> bla </b> umbauen
 - keine Tabelle für Nokia40/60 für das Ergebnis verwenden
 - XHTML-Lösung?
 - Nokia 6650 in Browserinfo.pm aufnehmen (ca. 120x160, nachmessen!)
 - 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

=head2 BBBikeDraw

=head3 BBBikeDraw::GD

=over

=item * (M3)

unclosedPolygon anstelle von mehreren line-Aufrufen verwenden
(benötigt gd 2.0.33!)

=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 * (M1)

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

=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.

=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

=back

=head3 BBBikeDraw::PDF

=over

=item * (M3)

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

=item * (H3)

Bei Bedarf 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.

=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? 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 * (E2)

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

=item * (H4)

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

=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).

=back

=head2 Strassen and Strassen-related

=over

=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 * (E2)

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

=head1 MapServer

=over

=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 Berlins 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 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 Distribution/Installation/other development

=over

=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 benE<ouml>tigt netpbm, von JPEG-Bildern
die JPEG-Distribution und alle brauchen ghostscript. Eine bessere
Methode wE<auml>re WinPhoto (wenn es korrekt und unter Win32 überhaupt
funktionieren wE<uuml>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 * (M1)

FreeBSD-Port anpassen, so daE<szlig> install.pl verwendet wird. PLIST
von install.pl abhE<auml>ngig machen. -kdeinstall in
AbhE<auml>ngigkeit von HAVE_KDE angeben.

=back

=head1 Tests

=over

=item * (M2)

Cgiinfo in cgi2.t funktioniert leider nicht, weil openURL als zweiten
Parameter nur true oder false zulE<auml>E<szlig>t. Workaround:
Schreiben eines Multiplexers, der per Javascript neue Fenster
E<ouml>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 Documentation

=over 

=item * (M4)

Diese TODO-Liste aktualisieren.

=item * (E4)

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

=back

=head1 Sonstiges

=over

=item * Nichts ...

=back
