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 mapSet up project components (Web interface, back end, DB, etc)- Create tickets for issues and bugs
Clone Trac install on devFigure 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 templatesDerive 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 objectResults 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