Trip Planner TODO List

This is a temporary list to start off the process of getting organized and using this tracker effectively. I'm going to add all the stuff from my hand-written notes and use the tracker from here on. This should help keep the project organized as well as make it easier for other people to get involved.

Trac

  • Set up the road map
  • Set up project components (Web interface, back end, DB, etc)
  • Create tickets for issues and bugs
  • Clone Trac install on dev
  • Figure out how to serve static files statically (it's a little slow)

Organizational

  • Create nice diagram of the system
  • Create server specs document(s)
    • Main application server
    • MapServer
    • Database
    • Web site
  • Make it easier for developers to get involved

Hosting

  • Find a good Virtual Private Server [Update 11/06: We're trying http://johncompanies.com/]

Back End

Address Normalization

  • It's broken in dev--fix it
  • Strip noise chars ASAP
  • Prefer city and state over zip
  • Prefer typed in city, state, zip over selected region

Geocoding

  • It's broken--fix it (related to addr. norm.)
  • Use route method of geocoding for address geocoding (!) [I think this was done--check]

Routing

  • Use traffic signals and intersection costs
  • Fix errors when from and to are the same
  • Fix errors when from and to are on adjecent segments [Double check]
  • Look into better ways of inserting nodes

Other

  • Review cost functions and refine (especially safer option)
  • Create simple logger that records user queries and shows if they were successful or not
  • Automatically send emails for errors, especially 500s
  • Create ".ini" files for automatic configuration of database connections, etc

Data Model

  • Develop a process for keeping up with the latest RLIS version
  • Develop a system/interface for making updates to the live data as reports from the field come in (from users, GPS, etc)
  • Develop a system to fold changes made to the live system back into the main datasource
  • Integrate Clark County
  • Add various weights to nodes where it makes sense and where they can't be added in the current scheme to the ends of segments
  • Create points-of-interest database
  • Test out new data structure for route matrices (use array/tuples instead of using dictionaries; should be a fairly straighforward mapping [har har] from the old to the new) [Note: this change will only be beneficial if the resulting structure is significantly smaller]
  • Exclude any possible types from adjacency matrices
    • Some candidates in Portland: 2100, 2200, [100, 1200), [1200, 1300), 4000, 5101, 5102, 8224, 9000
    • May be easier to specify just the ones to include
  • Use unpaved streets with large penalty???
  • Make sure all SQL queries are safe [SQLAlchemy takes care of this]
  • Use better query substitution techniques [I think this is same as the previous item]
  • Make better database-aware objects to represent segments, intersections, etc (use ORM) [Using SQLAlchemy]

Database

  • Switch to PostgreSQL/PostGIS (depends on getting a new server first)
    • One database per region [Actually, one schema per region]
    • Schema for common data (states, cities w/centroids, extents)
  • Learn how to speed up Postgres data import [Avoid updates, vacuum at strategic points; takes ~5 minutes now]
  • Look into where indexing can be best applied
  • Look into other ways to improve performance

MapServer

  • Implement some kind of tile caching (tile4ms & related)
  • Look into gaps in lines (WMS issue? How GMaps handles the lines?)
  • Use GTileOverlay instead of creating map types

Front End

  • Freeze and release first version of the rewrite
  • Add round trip check box
  • Come up with a way to have multi-point routes
  • Fix reverse directions to be more robust (right now it just uses what's in the from and to fields, which is wrong; it should use the values from the result)
  • Add Firefox referral
  • Add lots of inline help
  • User-friendly error messages
    • Suggestions
    • Common problems
    • Spelling
    • Use map
  • Switch from CGI to a framework (depends on getting a new server first) [Using  Pylons]
  • Work on URL scheme--make ReSTful, get rid of query parameters as much as possible
    • Something like http://tripplanner.bycycle.org/region/service/query-with-params
    • Or http://tripplanner.bycycle.org/service/query-with-params for no default region
    • Or http://tripplanner.bycycle.org/UI-type/... to select the user interface type
  • Create a super-simple text-only interface
  • Create a mobile interface
  • Better peramlink (bookmark)--should save current state, not just the last query; call it "link to this page" because that's what other services use
  • Update location bar instead of having a bookmark link if possible
  • Hook into Yahoo (or similar) local search???
  • Use GMaps geocoding to do address normalization??? (might not always be the same as our data; could fall back to our version if necessary)
  • Find nearest bus stop feature???
  • Use region-specific templates
    • Derive from base template
    • Show logos if appropriate
    • Different elements for different features (e.g., preferences in Portland)
  • Make all HREFs have a fallback action
  • Create a simple, inline AJAXy feedback system
    • Easy way for users to send errors to us, so if they get an error like "address not found" they can write a description (or not) and click a button to report the error (which would grab the URL, etc)
    • or just send all errors automatically in the background
  • Store addresses as pairs of machine, user values or use a simple address/location object
  • Results should be stored locally (on the client machine); build simple results history/navigation
  • Save locations (home, work, etc) at client (cookies?)
  • Interface for users to build and save routes (would require accounts?)
  • Show additional info for address search??? (address range, lat/long, ...)
  • Put result for "find at center" in input field too???
  • Fix clear map OR change it to discard-all-results, which would include clearing the map OR if we're using a local results cache, clear/remove selected or all results
  • Processing pop-up pane that allows cancelling (Processing, please wait... [Cancel])
  • Incorporate photos into routes for trouble spots???
  • Toggle/resize map and results and any screen area that it makes sense to toggle
  • tabindex seems to be broken in Firefox
  • Find some nice widgets to use for close & help buttons and the like
  • logInfo() to status bar and make status bar clickable to show all status messages
  • Compress all JavaScript files to one file for deployment (automate this process)
  • Set map div size before API call so UI doesn't look all funny (doesn't seem to do anything)
  • Click within region bounds selects region (no need for X marker)
  • Map indentify mode (instead of or in addition to find-at-center)
  • Use abbr/acro/jargon styles as needed and show tooltips

Backups

  • Write script to sync (using rsync of course) other machines to dev (got a decent one started for byCycle package; need to add HTML stuff to it and whatever else)
  • Set up a cron job to automatically sync certain items (for instance, syncing the aplus and ralph Subversion repos)

Miscellaneous

  • Add license notice to source files
  • Update region integration info (mainly the cost)
  • Trip planner project status page
  • "In cooperation with" page
  • Create list and repository (tarball?) of dependencies
  • Work on byCycle script to allow access to more functionality, including matrix creation
    • Things that are in a module in if __name__ == !__main__ should go here
    • Set up PYTHONPATH
  • Get separate staging server???
  • Get testing machine (install multiple OSes) [Got Freek Box from  Free Geek]
  • Integrate San Diego [???]
  • SVN checkins summarize (if necessary) and go into file-level detail; use reStructuredText-style lists
  • Create a screencast with a walkthrough of using the TP OR make a little flash movie OR just use screenshots/text