Should the archive file be backed up before adding the daily summaries?
  - Probably.

See if it is possible to make cheetahgenerator not require a default wx_binding

Make setup.py do nicer formatting to weewx.conf
  - spacing before when injecting skin stanzas
  - spacing before when injecting database and binding stanzas
  - spacing before when injecting restful stanzas
  - rows of hashmarks when injecting service stanzas such as [Forecast]
  - inject service stanzas somewhere other than end of file
  - inject skin stanzas before ftp and rsync

The StdArchive service should extract everything it can from the accumulators,
whether or not software record generation is used.
  - This could be added later.

Implement a $time_ago, or $timespan tag (see email with Gary Roderick).
  - This could be added later.

Look at Gary's (?) changes to allow cron-like report generation.

Is max gap fraction meaningful for bar charts now?

Fix units in cmon to use kilo, mega, giga, tera?
 - scaling probably should be done in the plotting, not unit as types

Doing 'setup.py install --extension' should prompt for required parameters
 - deferring this.  for now the installer should inject required parameters
   into weewx.conf.  for passwords and tokens, inject INSERT_XXX_HERE.  when
   service starts up, detect missing or default passwords/tokens and bail out
   with a log message (as the restful services do).

Guard against database locks:

Jul 30 08:55:22 hummingbird weewx[959]: wxengine: Caught unrecoverable exception in wxengine:
Jul 30 08:55:22 hummingbird weewx[959]:     ****  database is locked
Jul 30 08:55:22 hummingbird weewx[959]:     ****  Traceback (most recent call last):
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/wxengine.py", line 962, in main
Jul 30 08:55:22 hummingbird weewx[959]:     ****      engine.run()
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/wxengine.py", line 189, in run
Jul 30 08:55:22 hummingbird weewx[959]:     ****      self.dispatchEvent(weewx.Event(weewx.POST_LOOP))
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/wxengine.py", line 210, in dispatchEvent
Jul 30 08:55:22 hummingbird weewx[959]:     ****      callback(event)
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/wxengine.py", line 562, in post_loop
Jul 30 08:55:22 hummingbird weewx[959]:     ****      self._catchup(self.engine.console.genArchiveRecords)
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/wxengine.py", line 625, in _catchup
Jul 30 08:55:22 hummingbird weewx[959]:     ****      origin='hardware'))
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/wxengine.py", line 210, in dispatchEvent
Jul 30 08:55:22 hummingbird weewx[959]:     ****      callback(event)
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/wxengine.py", line 574, in new_archive_record
Jul 30 08:55:22 hummingbird weewx[959]:     ****      self.archive.addRecord(event.record)
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weewx/archive.py", line 192, in addRecord
Jul 30 08:55:22 hummingbird weewx[959]:     ****      e))
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weedb/__init__.py", line 130, in __exit__
Jul 30 08:55:22 hummingbird weewx[959]:     ****      self.connection.commit()
Jul 30 08:55:22 hummingbird weewx[959]:     ****    File "/home/weewx/bin/weedb/__init__.py", line 97, in commit
Jul 30 08:55:22 hummingbird weewx[959]:     ****      self.connection.commit()
Jul 30 08:55:22 hummingbird weewx[959]:     ****  OperationalError: database is locked
Jul 30 08:55:22 hummingbird weewx[959]:     ****  Exiting.


--------------------  DONE  --------------------------- 

Quick start guide
(11/28/14 tk)

Test on redhat
 - rpm install and upgrade
 - extension installer
Test on suse
 - rpm install and upgrade
 - extension installer
(28nov14 mwall)

Move schemas to the extension that uses them.
  - this has always been the case for cmon, pmon, and forecast

Test new extension installer on debian
(23nov14 mwall)

Test new setup.py on debian deb upgrades
(23nov14 mwall)

Prompt for station-specific parameters
(23nov14 mwall)

The station hardware configuration process could be improved. 
  - Nowhere is it listed what driver to use.
  - Docs need to be updated with the new two-step process.
  - Perhaps the configuration routine could be made interactive? It would
    scan the "drivers" subdirectory and offer up the choices...
(23nov14 mwall)

Include setup.py in the installation (also setup.cfg)
(22nov14 mwall)

Document how to extend the unit system.
 - deferred documentation to see if we like it.
(20nov14 tk)
 
Extending the accumulators
 - use the same strategy as the unit system
 - deferred documentation to see if we like it.
(20nov14 tk)

Update the forecast service
forecast is now working with the database structure
(17nov14 mwall)

Add parameter max_delta to $current.
(16nov14 -tk)

Strategy for extending units.
(16nov14 -tk)

May need to update the guide on packaging an extension.
modified the docs to match the new setup.py syntax
(15nov14 mwall)

Update setup.py
 -- Rework deb installer to work with device snippets
 -- Give each driver option to modify driver stanza while updating weewx.conf
 -- the --configure option should modify station_type if successful
(15nov14 mwall)
              
Update setup.py.
  -- Add configure keyword, with option --device=
  setup.py --configure [--driver=weewx.drivers.simulator]
(14nov14 mwall)

Update skins: exfoliation amphibian simple
Update drivers: owfs link fileparse
Update services: cmon crt cwxn
Put fileparse driver into extensions directory as driver example
(14nov14 mwall)

Check existing extensions: basic xstats
(13nov14 mwall)

Update services to use new database
cmon pmon
(13nov14 mwall)

Update setup.py.
  -- General update strategy for weewx.conf
     (11/13/14 by tk)
     
Update uploader extensions to use new database.
emoncms mqtt owm seg thingspeak twitter wbug wcloud wetter windfinder xively
(11/12/14 by Matthew)

Update Upgrading Guide.
 - explain how to migrate data from a v2 database to a v3 database
 - Changes in search list extensions
 
Verify that examples still work:
  alarm.py 
  lowBattery.py
  xsearch.py
(11/10/14. All are OK. I checked/updated them when updating the docs)

The table name is explicitly specified in the uploader database queries. E.g.,
  "SELECT SUM(rain), MIN(usUnits), MAX(usUnits) FROM archive WHERE dateTime>=? AND dateTime<=?"
Does this matter?
(11/11/14. Now substitutes the table name into the query string)

On startup, the log should indicate not only which binding is in use, but what
it is bound to (sqlite or mysql).

Both tables archive_day_windSpeed and archive_day_wind exist. 
[11/11/14. Both now get updated. $day.wind.max and $day.windSpeed.max return the same thing]

I removed Appendix: Statistical types because it is no longer valid. But,
it needs to be explained somewhere the difference between vector and scalar
stats.
[11/11/14. Added a section "Winds" to the Customizing Guide, explaining the differences.]
