=head1 BBBike: TODO

Legende:

  Schwierigkeit:

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

  Priorität von 1 (unwichtig) bis 5 (wichtig).

=head2 Perl/Tk-Version von bbbike

=over

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

Update E<uuml>ber das Internet: rsync-UnterstE<uuml>tzung austesten.
Oder alternativ auf CVS setzen?

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

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

=item * (H2)

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

=item * (M3)

Mehr benutzerfreundliche 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). Sollte der Portrait-Mode vielleicht nur bei
$advanced anwaehlbar sein?

=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, Reduzierung der Buttons, Klick auf
Checkboxen etc. resultieren *NICHT* in einer sofortigen Aenderungen
--- erst E<quot>ApplyE<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, 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 * (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 *

Wenn GD nicht installiert ist, sollte die gif-Datei gelE<ouml>scht
werden und eine Fehlermeldung ausgegeben werden (wo? ptk-version?
cgi?) XXX

=item * (M1)

VergrE<ouml>E<szlig>erung der Schrift beim Zoomen

=item *

Speichern von Grafiken: Extension erzwingen (?), E<Uuml>berschreiben testen
und verhindern

=item *

evtl. mit fork eine Warteschleife implementieren. Wenn es nicht mit
Tk (threads!) geht, dann vielleicht mit X11::Protocol oder mit xterm?

=item *

Kurzhilfe: kann man feststellen, ob man eine 2/3-Tastenmaus hat?

=item *

Vielleicht Windchill-Temperatur zusE<auml>tzlich anzeigen.

=item *

Optimierung: Beim Ausschalten von Outline oder StraE<szlig>ennamen
muE<szlig> nicht alles neu gezeichnet werden.

=item *

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

=item *

wettermeldung2 mit fork/spawn/threads aufrufen

=item *

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

=item *

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.

=item *

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 *

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

=item *

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 *

Bei einem Resize muE<szlig> auch das Progress-Canvas angepasst werden.

=item *

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.

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

=item *

Folgende Radwege in der Landsberger Chaussee kE<ouml>nnen nicht
dargestellt werden, weil sich die StraE<szlig>e in landstrassen-orig
und nicht in strassen-orig befindet.

14389,5916	14348,5906	radweg	radweg
14545,5953	14389,5916	radweg	radweg
14844,6029	14545,5953	radweg	pflicht
15283,6150	14844,6029	radweg	pflicht

=E<gt> radwege_l anlegen?

=item *

Speicheroptimierung.

Folgende Symbole kommen im Dump von Devel::Symdump vor und
bedE<uuml>rfen KlE<auml>rung (warum, woher, benE<ouml>tigt?):

    * English::*
    * DB::args
    * Tk::Pretty::*
    * re::*
    * DirHandle::*

Ein minimales System kann auf Folgendes verzichten:

    * Fahrinfo::*
    * BikePower::*
    * Devel::Peek::*
    * EasySound::*
    * Karte::Berlinmap1997::*
    * Karte::Berlinmap1999::*
    * 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 *

3D-Darstellung von Berlin (z.B. vier versetzte FlE<auml>chen, die
oberste in der Hintergrundfarbe und die anderen in der Schattenfarbe).

=item *

bbbike.cgi: Eine "Neu"-Subroutine, die jeweils die neuen Features der
Version anzeigt. Vielleicht auch eine "Neu"-History, die automatisch
aus den alten EintrE<auml>gen oder aus dem RCS-Log aufgebaut wird?

=item *

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 *

Soll ich mit Scopes arbeiten? Scopes wE<auml>ren: Berlin, Brandenburg,
jwd und wE<uuml>rden sich auf StraE<szlig>en, Orte und GewE<auml>sser
beziehen. 

=item *

Kann ich mapserv irgendwie einsetzen?

=item *

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.

=item *

Aufteilung des Routen-MenE<uuml>s. In das zweite MenE<uuml> kommen
alle Punkte, die die Ausgabe beeinflussen: Ausschnitt anpassen,
Steigungen zeigen, Streckenprofil, Start/Zielflagge, Routenfarbe (+
EinfE<auml>rbung Wind/Leistung/QualitE<auml>t/etc.), Kalorienverbrauch

=item *

Berechnen des StraE<szlig>ennetzes: Ausblenden des Canvas nicht
notwendig

=item *

GfxConvert evtl. mit Tk-Photo-Funktionen definieren, 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).

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

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

=item *

Andreas' Labeling-Algorithmus verwenden

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

=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 verschiebbar machen (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 SpielplE<auml>ze aufnehmen? Z.B.
  L<http://www.stadtentwicklung.berlin.de/umwelt/stadtgruen/kinderspielplaetze/de/spielplaetze/>

=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 Ideensammlung für schrittweise landstrassen-orig-Auflösung in Brandenburg

  0. Änderungen für Variante 1 und 2
    - Es wird in ein neues landstrassen-orig mit Hafas-Koordinatensystem
      gewandelt
    - BASE: landstrassen-orig => H
    - alle Punkte aus landstrassen-orig, die sich in anderen bbd-Dateien
      befinden, müssen auch umgewandelt werden
    - alle anderen Datentypen (insbesondere .bbr in ~/.bbbike) müssen auch
      umgewandelt werden
    - für vergessene Dateien muss es ein Skript geben, das die
      Umwandlung durchführt

  1. Teile der Datei umwandeln
    -
 
  2. Gesamte Datei umwandeln
    -

  ODER!

  genaue Daten werden mit H gekennzeichnet => keine Probleme bei der
  Unterscheidung! Nur für neue Daten verwenden. Bei CONV in
  data_converted ausklammern.

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

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

=item temp blockings:
  * beim Start von bbbike (options-gesteuert) die aktuellen Sperrungen
    laden (load_user_dels mit $del_token gesetzt, <I>nfo sollte auf den 
    Sperrungen funktionieren)
  * Listbox mit Liste der Sperrungen (Name, Datum) zum Ein-/Ausschalten
  * Evtl. eine weitere Zeit einführen: von-bis der Sperrung, von der
    Warnzeit

=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

=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

=head2 Daten

=over

=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.]" etc.
ansonsten werden sie in bbbike.cgi nicht erkannt, obwohl sie
existieren!]

=item * (M2)

Weitere Kategorisierung der LandstraE<szlig>en? Gibt es Untersuchungen
zur Verkehrsdichte? Recherchieren!

=back

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

=over

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

=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

=E<gt> nicht unbedingt notwendig, die jetzige LE<ouml>sung reicht erst
einmal aus...


=back

=head2 bbbike.cgi

=over

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

cgi-Version: Linux+Netscape: Probleme mit Cookies (Einstellungen)
=E<gt> noch immer?

=back

=head2 Distribution/Installation

=over

=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

=head2 Sonstiges

=over

=item * (M4)

Diese TODO-Liste aktualisieren.

=item * (E4)

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

=back
