Neubot 0.4.10 [2012-03-15]
	* Makefile: exit 1 when make regress fails
	* .gitignore: no need to ignore those two files
	* M-Lab: import ip_addr.dat, servers.dat
	* M-Lab/servers.dat: update
	* M-Lab/ip_addr.dat: update
	* http/server.py: ignore query string when serving files
	* Win32: install Neubot in $LOCALAPPDATA
	* MacOS: Privacy.xib: update to policy 2.0.3
	* MacOS/makepkg.py: allow to skip privkey step
	* MacOS/makepkg.py: rmtree: lstat() instead of ignoring errors
	* MacOS/makepkg.py: don't ship okfile with autoupdate
	* rendezvous/server.py: ignore users w/o can_collect perm
	* Merge some bug fixes
	* log.py: change standard error logging format
	* runner_rendezvous.py: remove unnecessary log
	* runner_rendezvous.py: add -vy command line options
	* runner_rendezvous.py: remove redundant code
	* Merge some runner_rendezvous.py cleanups
	* doc/FAQ.rst: add section 7 on web user interface
	* doc/FAQ.rst: for gawd's don't mention agent
	* doc/FAQ-it.rst: add section 7 on web user interface
	* doc/FAQ-it.rst: predefinito -> preferito
	* Merge patches to add FAQ section 7 on web user interface
	* Always use global RUNNER_CORE object
	* runner_api.py: remove unused runner_lst import
	* Always use RUNNER_LST global object
	* regress: neubot/runner_core.py: avoid pylint warning
	* Merge cleanups for the runner
	* Merge remote-tracking branch 'whitespider/next' into next
	* bittorrent/peer.py: file-wide docstring
	* bittorrent/peer.py: comment nit
	* bittorrent/peer.py: rephrase comment
	* bittorrent/peer.py: remove unused imports
	* bittorrent/peer.py: one less pylint warning
	* bittorrent/peer.py: reword the comment, remove unneeded XXX
	* bittorrent/peer.py: avoid unused-params warning
	* Merge cleanups for bittorrent/peer.py
	* runner_core.py: avoid two consecutive rendezvous
	* add runner_updates.py: keep track of avail updates
	* Rename runner_lst.py runner_tests.py
	* rendezvous/client.py: use RUNNER_UPDATES
	* rendezvous/client.py: refactor after-rendezvous actions
	* rendezvous/client.py: Use runner_rendezvous.py
	* Merge code to always use runner_rendezvous.py for rendezvous
	* rendezvous/client.py: no need to lambda-wrap self.run
	* rendezvous/client.py: credit Elias in comment
	* rendezvous/client.py: use uniform style in _after_rendezvous()
	* rendezvous/client.py: add docstrings
	* rendezvous/client.py: bump copyright
	* rendezvous/client.py: zap semi-hidden config variables
	* rendezvous/client.py: update comments
	* Merge more cleanups for rendezvous/client.py
	* runner_core.py: safely run first element in queue
	* runner_core.py: -f receives a parameter
	* runner_core.py: allow to pass conf
	* Merge runner_core.py enhancements
	* runner_rendezvous.py: send json request
	* rendezvous/server.py: accept json requests
	* runner_rendezvous.py: remove now-useless debug()
	* Merge code to allow to use JSON in rendezvous
	* utils_rc.py: warn if we cannot open the file
	* utils_rc.py: support for parsing iterables
	* utils_rc.py: support both key=value and 'key value' syntaxes
	* utils_rc.py: parse() can safely raise on error
	* utils_rc.py: better embedded main() for testing
	* Merge enhancements for utils_rc.py
	* negotiate: bump default parallelism to 7
	* add M-Lab/airports.json: from jbrooksuk's JSON-Airports project
	* M-Lab/servers.py: bump copyright
	* M-Lab/servers.py: stop spreading lies in comments
	* M-Lab/servers.py: zap old code for guessing locations
	* M-Lab/servers.py: remove the last pylint warning
	* M-Lab/airports_cache.dat: map airports.json to countries.dat
	* M-Lab/servers.py: locate servers, new style
	* M-Lab/servers.dat: updated list of servers
	* add M-Lab/redir_table.sh: the redirection table
	* M-Lab/redir_table.py: correct comment
	* Merge better code for M-Lab redirection table
	* updater_install: install new version
	* updater_install: tell tarfile to raise all errors
	* updater_install: verify tarfile content
	* updater_install: implement dryrun
	* updater_install: add simple main()
	* updater_install: default absolute basedir
	* updater_install: verify version number
	* updater_install: verify uid, gid
	* updater_install: portably construct okfile path
	* updater/unix: use updater_install module
	* updater_install.py: remove unneeded braces from regex
	* updater_installer.py: simplify usage
	* Merge code that factors install() out of updater/unix.py
	* Neubot/0.4.10-rc1 released
	* doc: sync FAQs with http://www.neubot.org/about
	* doc/FAQ.rst: move down links
	* doc/FAQ-it.rst: sync index style with english faq
	* doc/FAQ-it.rst: move link down
	* doc/FAQ.rst: normalize more links
	* README.rst: sync with FAQ
	* Debian: sync control and control-nox w/ FAQ
	* MacOS: update installer welcome text
	* Merge documentation and faq enhancements
	* Win32/neubot.nsi: properly auto-uninstall Neubot 0.4.9
	* Neubot/0.4.10-rc2 released
	* runner_rendezvous.py: repair json-based rendezvous
	* Neubot/0.4.10-rc3 released
	* regress/Makefile/install.txt: sync
	* regress/Makefile/install.noexec.txt: sync
	* Typo: Provides -> Providers
	* Debian: Make sure description is one single paragraph
	* Neubot/0.4.10 released

Neubot 0.4.9 [2012-02-27]
	* scripts/publish: rewrite from scratch
	* scripts/diffstat: remove
	* updater/unix.py: Implement __clear_base_directory()
	* Makefile: make sure we release at release point only
	* Makefile: release: do not hide the commands we run
	* Makefile: do not release .gz.gz... manpages
	* Makefile: make it always explicit
	* Makefile: uninstall: do not hide failures
	* Merge some maintenance patches for Makefile
	* Added chartdiv2
	* Added style for chartdiv2
	* Latency and connect time graph on speedtest page
	* added chartdiv2 to bittorrent.html
	* added connect time graph to bittorrent page
	* bittorrent.js speedtest.js: update comments
	* speedtest.js: sync labels with bittorrent.js
	* state.js: make_lang_en.js does not handle line continuation
	* it.js: move down certain strings
	* en.js: regen
	* it.js: sync
	* Merge latency-plots and www-maintenance patches
	* config_api.py: always sort keys
	* scripts/publish: fix some usage strings
	* browser: open page in the browser
	* notifier_browser: configurabile browser-based notifier
	* rendezvous/client.py: do not open browser too frequently
	* Merge code to prevent too frequent Win32 browser notifications
	* updater/unix.py: add user-agent header
	* neubot/privacy.py: remove XXX
	* doc/neubot/config.txt: document neubot/config.py
	* config.py: documentation moved at doc/neubot/config.txt
	* Stop spreading lies about documentation
	* doc: Move Neubot documentation below doc/neubot/
	* doc/RELEASE: rewrite and sync with reality
	* Merge maintenance patches for documentation
	* Merge branch 'master' into next
	* Release neubot/0.4.9-rc1
	* collect.sh: Meld classify_by_privacy into prepare_for_publish
	* collect.sh: more robust publish
	* collect.sh: add -n to publish
	* collect.sh: more verbosity in publish
	* collect.sh: do not remove .gz files
	* Merge improvements for the collect script
	* data/README: bittorrent is not a table, of course
	* scripts/publish: fix stable channel name
	* updater/unix.py: add missing import shutil
	* js: load second graph even when the first is empty
	* Remove scripts/rh from the public repository
	* Merge remote-tracking branch 'tersicore/next' into next
	* Release neubot/0.4.9-rc2
	* MacOS/makepkg.py: we don't need to import LibVersion
	* TODO: reference the wiki
	* Add doc/FAQ.rst: website faq converted to restructuredtext
	* Add doc/FAQ-it.rst: website faq-it converted to restructuredtext
	* doc/FAQ.rst: cosmetic changes
	* doc/FAQ.rst: don't lie, we don't publish aggreate results yet
	* doc/FAQ.rst: unique link to speedtest.net
	* doc/FAQ.rst: fix warning generated during pandoc conversion
	* doc/FAQ.rst: fix warning generated during pandoc conversion
	* doc/FAQ.rst: reword section 1.6
	* doc/FAQ.rst: update section 1.7, 1.8 and 1.9
	* doc/FAQ.rst: improve section 1.12
	* doc/FAQ.rst: section 1.13 link cosmetics
	* doc/FAQ.rst: section 1.14 link cosmetics
	* doc/FAQ.rst: revamp section 2
	* doc/FAQ.rst: update section 3.1
	* doc/FAQ.rst: fix images in section 4.2
	* doc/FAQ.rst: tweak section 3.3
	* doc/FAQ.rst: fix title of section 3.4
	* doc/FAQ.rst: bring section 3.6 up to date
	* doc/FAQ.rst: update the wording of section 3.7
	* doc/FAQ.rst: update wording in section 3.8
	* doc/FAQ.rst: simplify links in section 4.2
	* doc/FAQ.rst: section 4.3: it's HKCU not HKLM
	* doc/FAQ.rst: minor tweaks to section 4.4
	* doc/FAQ.rst: minor tweaks to section 4.6
	* doc/FAQ.rst: minor tweaks to section 4.7
	* doc/FAQ.rst: section 4.8: be less specific
	* doc/FAQ.rst: minor tweaks to section 5.1
	* doc/FAQ.rst: readd the index
	* doc/FAQ.rst: stop spreading lies in section 5.2
	* doc/FAQ.rst: add faq on M-Lab
	* doc/FAQ.rst: mention M-Lab in section 1.1
	* doc/FAQ.rst: correct the title of section 1.1
	* doc/FAQ.rst: add data section
	* Merge improvements for english FAQ
	* doc/FAQ.rst: add self-link to index
	* PRIVACY: measurement -> measurements
	* doc/FAQ-it.rst: readd index, fix some links
	* doc/FAQ-it.rst: fix most obvious links
	* doc/FAQ-it.rst: section 1.1. is OK
	* doc/FAQ-it.rst: add question on Measurement Lab
	* doc/FAQ-it.rst: section 1.3 OK
	* doc/FAQ-it.rst: give some love to section 1.6
	* doc/FAQ-it.rst: section 1.7 OK
	* doc/FAQ-it.rst: updated section 1.8
	* doc/FAQ-it.rst: bring FAQ 1.9 up to date
	* doc/FAQ-it.rst: sync 1.10 with english FAQ
	* doc/FAQ-it.rst: sync 1.13 with english faq
	* doc/FAQ-it.rst: section 1.15 improvements
	* doc/FAQ-it.rst: section 2.1 OK
	* doc/FAQ-it.rst: nit in sect. 2.2
	* doc/FAQ-it.rst: bring section 3.1 uptodate
	* doc/FAQ-it.rst: fix image links in 3.2
	* doc/FAQ-it.rst: sync 3.3 w/ english FAQ
	* doc/FAQ-it.rst: bring 3.6 up to date
	* doc/FAQ-it.rst: rewrite 3.7
	* doc/FAQ-it.rst: cosmetic change in 3.8
	* doc/FAQ-it.rst: update 4.2
	* doc/FAQ-it.rst: in 4.3: s/HKLM/HKCU/
	* doc/FAQ-it.rst: minor fixes to 4.4
	* doc/FAQ-it.rst: sync bittorrent test description with speedtest one
	* doc/FAQ-it.rst: twak section 4.7
	* doc/FAQ-it.rst: rewrite, clarify section 4.8
	* doc/FAQ-it.rst: tweak wording in section 5.1
	* doc/FAQ-it.rst: stop spreading lies in section 5.2
	* doc/FAQ-it.rst: port data questions from english FAQ
	* Merge improvements for italian FAQ
	* neubot.1.txt: bump copyright year
	* neubot.1.txt: rewrite description
	* neubot.1.txt: remove common options section
	* neubot.1.txt: minor fixes to the rest of the manpage
	* main/__init__.py: sync --help with manpage
	* PRIVACY: tweak restructured text a bit
	* neubot.1.txt: add privacy policy
	* man1/neubot.1: regen
	* doc/neubot.1.txt: fix a couple of nits
	* man/neubot.1: regen
	* Merge manual page improvements
	* www: en.js privacy.html: regen
	* it.js: update to privacy policy 2.0.3
	* doc: FAQ.rst FAQ-it.rst: add transitions
	* regress/Makefile/install.sh: stable sort
	* regress/Makefile: updated install.sh good-files lists
	* regress/neubot/http/rootdir.sh: stable sort
	* regress/neubot/filesys_posix.sh: repair for linux
	* regress/neubot/utils_posix.sh: repair for linux
	* Merge some fixes for the regression tests suite
	* Release neubot/0.4.9-rc3
	* M-Lab/deploy.sh: use git describe
	* scripts: release, update_changelog: better wording
	* Neubot/0.4.9 released

Neubot 0.4.8 [2012-02-08]
	* M-Lab: fail deploy if we cannot stop a running Neubot
	* M-Lab/deploy.sh: autogen neubot.tgz even if -n
	* M-Lab/deploy.sh: document command line options
	* scripts/collect.sh: scalable data collection
	* updater/unix.py: make update channel configurable
	* utils_rc: configuration file parser
	* updater/unix.py: honor /etc/updater/unix config file
	* Release neubot/0.4.8-rc1
	* Merge experimental code to follow development on MacOSX
	* scripts/collect.sh: count number of good/bad privacy settings
	* scripts/collect.sh: do not mirror the neubot folder
	* scripts/collect.sh: create and commit the publisheable tarball
	* scripts/collect.sh: do not prepare $today for publishing
	* scripts/collect.sh: generate better logs
	* scripts/collect.sh: publish publisheable data
	* scripts/collect.sh: set -e after option parsing.
	* scripts/collect.sh: never change the script directory
	* Merge working code for automatic data collection
	* M-Lab: startup the rsync server
	* scripts/collect.sh: make sure we generate tarball just once
	* scripts/rh: regression test helper
	* Check privacy when running command line tests in the local context
	* filesys_posix.py: delay datadir_init()
	* regress/filesys_posix.sh: document why it fails on Linux
	* Makefile: record failures but don't stop regress
	* regress/Makefile: repair install test
	* notify.py: raise the interval between comet
	* log.py: no point in logging empty lines
	* regress: Tidy up
	* regress: repair database/table_{bittorrent,speedtest}.py
	* regress/Makefile: update install.noexec.txt to 0.4.7
	* regress/neubot/http/rootdir.sh: repair after regress tidy up
	* regress: adjust some comments
	* regress/neubot/utils_posix.sh: document why it fails on Linux
	* Tidy up regression tests
	* Win32/neubot.nsi: s/HKLM/HKCU/g
	* filesys: add filesystem null so Neubot for Windows works again
	* Revert "Release neubot/0.4.8-rc1"
	* Merge MacOSX code to automatically follow development
	* updater/unix.py: correct nit in comment
	* doc/updater/unix.txt: correctly document time between update checks
	* updater/unix.py: add stub to clear base directory
	* updater/unix.py: document __install_new_version()
	* Merge some updater/unix.py fixes
	* Rewrite /api/config and zap /api/configlables
	* regress/Makefile: add newly added files
	* scripts: extract code to update_changelog from release
	* Release neubot/0.4.8-rc2
	* MacOS/makepkg.py: do not create the latest file
	* scripts/publish: helper to publish releases
	* data: add LICENSE and README for data
	* data/LICENSE: nit
	* data/README: update bittorrent result description
	* scripts/collect.sh: classify_by_privacy(): print extra empty line
	* Merge branch 'next' into MASTER
	* README -> README.rst for nicer project description on GitHub
	* README.rst: bump copyright
	* scripts/diffstat: require first and last commit
	* M-Lab/redir_table.py: bump copyright year
	* M-Lab/redir_table.py: do not override italy anymore
	* M-Lab/ip_addr.sh: use the proper fqdn names
	* M-Lab/servers.py: update M-Lab database location
	* M-Lab/redir_table.py: more than one server per country
	* M-Lab/redir_table.py: drop comment
	* M-Lab/redir_table.py: also print time when it was generated
	* Merge redirection table improvements
	* Release neubot/0.4.8

Neubot 0.4.7 [2012-01-30]
	* PRIVACY: s/measurement-lab.net/measurementlab.net/
	* M-Lab/deploy.sh: pass -q to compileall
	* M-Lab/deploy.sh: better command line options parsing
	* M-Lab/deploy.sh: allow to skip check for tarball
	* M-Lab/deploy.sh: rewrite with two nested shells
	* M-Lab/deploy.sh: change semantic from resume to force
	* M-Lab/deploy.sh: make sure all ports are bound
	* M-Lab/deploy.sh: arrange things so that we don't need ping
	* M-Lab/post_deploy.py: postprocess deploy log
	* Merge improvements in M-Lab deployment scripts
	* utils_path.py: util functions for paths
	* utils_posix.py: util functions for posix
	* utils_posix.py: pass uid, gid to mkdir and touch
	* filesys: file system abstraction
	* backend: generic backend for saving results
	* negotiate/server_bittorrent.py: use backend
	* negotiate/server_speedtest.py: use backend
	* neubot/server.py: switch to JSON backend
	* Merge code for scalable data collection
	* Clear previous test results when we change test name
	* state.js: wrap long lines
	* state.js: mechanically replace _self with state_ctx
	* state.js: mechanically replace me with tracker_ctx
	* state.js: document the code
	* state.js: remove useless code
	* Merge maintenance patches for state.js
	* update.js: remove pasto and make update.js operative again
	* Release neubot/0.4.7

Neubot 0.4.6 [2012-01-23]
	* regress/http/rootdir.sh: sort output before comparison
	* regress/http/rootdir.txt: sort lines
	* log.html: do not open textual logs in another page
	* notifier/unix.py: better wording
	* Debian/control/postinst: better wording
	* privacy.html: better wording
	* Release neubot/0.4.6

Neubot 0.4.6-rc5 [2012-01-23]
	* TODO: update
	* privacy.js: reload when updating privacy fails
	* config.py: better explain interval
	* api/server.py: better comment
	* settings.js: reload settings on failure
	* bittorrent/client.py: remember to print upload speed
	* regress/negotiate/smoke.sh: add command to --kill
	* regress/negotiate/smoke.sh: run w/ runner disabled
	* Release neubot/0.4.6-rc5

Neubot 0.4.6-rc4 [2012-01-22]
	* .gitignore: Ignore .swp .pyc files
	* www: less confusion: enable controls automatic tests
	* config.py: less confusion: enable controls automatic tests
	* privacy.js: reload on success
	* runner_lst: export list of known test names
	* marshal: support for dict to xml
	* runner_core: let run() select negotiate URI
	* runner_rendezvous: simplified rendezvous client for runner
	* runner_core: trigger rendezvous when test list is empty
	* rendezvous_client runner_api: Adapt to new runner_core.run()
	* runner_clnt: print the full exception
	* runner_clnt: clear indicate logs copied from the server
	* runner_core: do not stop streaming immediately
	* runner_core: prefix log messages with module name
	* runner: Automatically rendezvous when test list is empty
	* www: the usage of H4 there is OK
	* footer.html: Mention Measurement Lab
	* log_api.py: Rewrite /api/log code
	* api/server.py: properly unescape incoming URIs
	* log.html: add small intro
	* Makefile: find -executable is not portable
	* regress/Debian/*: be a NOP on non-debian systems
	* regress/bittorrent/config.py: default on-demand server changed
	* regress/http/rootdir.sh: *.pyc files break the test
	* Makefile: _install: clear .DS_Store files first
	* regress/Makefile/install.sh: find -executable is not portable
	* regress/Makefile: We're now installing more files
	* chmod -x neubot/updater/unix.py
	* Release neubot/0.4.6-rc4

Neubot 0.4.6-rc3 [2012-01-20]
	* M-Lab: scripts to deploy, start and stop
	* M-Lab/deploy.sh: make sure $HOST is up and running
	* M-Lab/deploy.sh: two more prints to help automatic output parsing
	* M-Lab/deploy.sh: stanza format to separate host logs
	* M-Lab: fetch the list of hosts in realtime
	* M-Lab/deploy.sh: Improve the deploy script
	* M-Lab: more explanatory comments
	* M-Lab: import contries information from Wikipedia
	* M-Lab/servers.py: write approxymate location of nodes
	* M-Lab/ip_addr.sh: get slivers IP address
	* .gitignore: Ignore generated M-Lab files
	* M-Lab/redir_table.py: code to build redirection table
	* M-Lab/countries.dat: allow comments and convert to UTF-8
	* M-Lab/deploy.sh: add help message
	* M-Lab/servers.py: write output to M-Lab/servers.dat
	* M-Lab/redir_table.py: always use just one server per country
	* M-Lab/redir_table.py: DELETE all, don't DROP table
	* M-Lab/redir_table.py: fix some SQL doofus
	* www: use new NEXA logo
	* Toplevel: Update to privacy policy 2.0
	* neubot/www: Update to privacy policy 2.0
	* lang/it.js: typos
	* rendezvous/client.py: Remove useless privacy check
	* table_speedtest.py: Move glue to speedtest/client.py
	* database/_table_utils.py: allow to rename columns
	* neubot/privacy.py: Refactor main()
	* neubot/config.py: Update to privacy policy 2.0
	* neubot/privacy.py: Update to privacy policy 2.0
	* database: Update to privacy policy 2.0
	* neubot/privacy: Add command line option to test settings
	* clients servers: Update to privacy policy 2.0
	* Remainder of neubot/: Update to privacy policy 2.0
	* Debian: Update to privacy policy 2.0
	* neubot/log.py: listify(): don't unconditionally connect to database
	* Makefile: add target to run all the available regression tests
	* neubot/config.py: do not suggest to sqlite3.connect()
	* notifier/unix.py: stop spreading lies in comments
	* regress/negotiate/smoke.sh: better usage message
	* regress: Add regression tests for database version schema
	* regress: Add regression test for database/migrate.py
	* regress: Repair table_*_gen.py
	* Merge some regression test goodies
	* M-Lab: Install /etc/rc.d/rc.local not /etc/rc.local
	* net/stream.py: Bump copyright
	* net/stream.py: disable less relevant pylint warnings
	* net/stream.py: remove unused bytes_recv bytes_sent
	* net/stream.py: remove unused import os
	* Sanitize certfile before passing it to wrap_socket()
	* net/stream.py: get rid of two simple pylint warnings
	* net/stream.py: Connector: avoid pylint warning
	* net/stream.py: Listener: avoid pylint warning
	* net/stream.py: directly access all configuration variables
	* net/stream.py: cosmetic change
	* net/stream.py: return to settings for localhost
	* net/stream.py: do not duplicate code in main()
	* regress: net/stream.py: repair after recent changes
	* Merge maintenance patches for net/stream.py
	* agent.py: net.stream does not provide default settings anymore
	* regress: add regression test for http.server.rootdir setting
	* server.py: more info on selected ports
	* net/poller.py: zap comment
	* net/poller.py: say we're gonna replace the task scheduler
	* regress: add regression test for net/poller.py
	* net/poller.py: simplify check_timeout() code
	* log.py: delayed string interpolation
	* viewer/unix.py: adjust not_running.html path when not installed
	* MacOS: Update PrivacyPane to privacy policy 2.0
	* MacOS: prerun.sh: cosmetic changes
	* MacOS/makepkg.py: cosmetic changes
	* MacOS: postflight: cosmetic changes
	* MacOS: postflight: update to privacy policy 2.0
	* MacOS: /tmp/neubot-can-share is no more
	* Merge branch 'pu.privacy' into next
	* net/stream.py: missing import
	* http/message.py: compose(): support for up_to_eof body
	* net/stream.py: Don't delay close() after EOF
	* log.py: avoid some pylint warnings
	* log.py: Introduce streaming API
	* runner_lst.py: Keep track of available tests
	* runner_core.py: Run a test on demand
	* runner_api.py: Implements /api/runner
	* runner_api.py: NOT (streaming AND overlapped tests)
	* runner_clnt.py: Client for running tests via /api/runner
	* api/server.py: Enable /api/runner
	* rendezvous/client.py: Use the runner module
	* config.py: add runner.enabled setting
	* bittorrent/__init__.py: Use runner by default
	* speedtest/client.py: Use runner by default
	* log.py: Kill interactive
	* Globally s/neubot.blupixel.net/master.neubot.org/
	* rendezvous/client.py: get_next_test() may return None
	* www: allow to start test manually
	* runner_api: disable /api/runner when a test is running
	* runner_clnt: select return value more carefully
	* log.py: don't pass ACCESS logs down the stream
	* www: now we support tests from the web interface
	* Merge code to run tests from web user interface
	* www: Italian is not an opinion
	* updater/unix.py: Do not delay startup
	* notifier/macos.py: notify users of bad privacy settings
	* notifier: support for macos notifier
	* MacOS: Add notifier PLIST
	* MacOS: Include notifier PLIST in package
	* MacOS: Install notifier PLIST
	* www: better privacy message
	* Merge simple and stupid MacOS notifier
	* Release neubot/0.4.6-rc3

Neubot 0.4.5 [2011-11-24]
	* MacOS: tell the login screen not to pick Neubot user
	* Debian: control/postinst: empty setting implies false
	* Release neubot/0.4.5

Neubot 0.4.5-rc3 [2011-11-22]
	* regress: bittorrent/sched.py: add test case for sched_idx()
	* regress: bittorrent/config.py: add test case for finalize_conf()
	* regress: bittorrent/config.py: add test case for _random_bytes()
	* scripts/debugmem: allow to monitor objects count
	* scripts/debugmem: move time.sleep at the beginning of the loop
	* scripts/debugmem: doofus in the while condition
	* server: more flexible debugmem instrumentation
	* speedtest/server.py: keep memory fragmentation under control
	* regress: negotiate/smoke.sh: more aggressive testing
	* Debian: control/prerm: update pkill arguments
	* Debian: control/postinst: refactor
	* regress: add unit test Debian/control/postinst
	* regress: add unit test Debian/control/prerm
	* regress: add unit test Debian/control/postrm
	* regress: add Debian/reinst unit test
	* regress: add Debian/inst regression test
	* regress: Debian/reinst: account for notification
	* Debian: control/preinst: show notification on first install
	* regress: add Debian/conflict regression test
	* regress: Debian/inst: fix informative message
	* speedtest/wrapper.py: old clients do not set content-length
	* rendezvous: more strict rules for redirection
	* rendezvous/server.py: rewrite update advertisement
	* Release neubot/0.4.5-rc3

Neubot 0.4.5-rc2 [2011-11-18]
	* MacOS/makepkg.py: update location of manual page
	* Makefile: swap find arguments to avoid warning
	* scripts/cleanup: remember to cleanup gzipped manpages
	* simplejson: move CHANGES.txt LICENSE.txt below doc/
	* Makefile: honour $(LOCALSTATEDIR)
	* regress/Makefile/install.sh: more checks
	* regress/Makefile/install.sh: also check directories
	* regress/Makefile/install: do not install more exec files than needed
	* Makefile: rewrite uninstall in terms of install
	* Makefile: zap empty line
	* Debian: get dependency right
	* Debian: support for -nox flavour
	* Makefile: remember to compile modules on plain install
	* i18n: do not use empty string to indicate default language
	* Makefile: automatize uninstall
	* viewer/unix.py: refactor
	* negotiate: tweak the big patch after code review
	* negotiate: deal with old speedtest clients (part 1)
	* bittorrent: simplify and clarify maximum message length
	* Release neubot/0.4.5-rc2

Neubot 0.4.5-rc1 [2011-11-15]
	* debian: make sure neubot is restarted
	* debian: document previous patch
	* nagios-plugin-neubot: allow to specify alternative port
	* negotiate: complete rewrite
	* speedtest: repair /speedtest/latency
	* server: memleak debugging infrastructure
	* geoip_wrapper.py: die in open_or_die() only
	* geoip_wrapper.py: Improve pylint score
	* utils/blocks.py: kickstart by fetching the first block
	* Merge branch 'pu.mlab' into next
	* config: define www.lang setting
	* i18n in Settings
	* js/settings.js: Revert some unneeded bits in previous patch
	* Merge branch 'pu.wwwlang' into next
	* privacy.py: do not assume database directory exists
	* privacy.py: improve pylint score
	* debugmem: make absolute view the default
	* setup.py: chmod +x
	* setup.py: do not install nagios-plugin-neubot
	* debian: reset packager version number
	* UNIX: simplify the task of creating a package
	* server.py: add /debug/count to debug API
	* Win32: consolidate win32-only files
	* icons: remove the folder and its content
	* Win32/setup.py: pylintify
	* Remove all references to start-neubot-daemon
	* debian -> Debian
	* Debian: simplify packaging
	* Debian: What's the point of an empty preinst?
	* BUGS: it may be confusing to mention the ML address like this
	* README: sync with Debian/control/control
	* simplejson: Upgrade to simplejson 2.2.1
	* regress/bittorrent/config.py: maintenance
	* bittorrent/config.py: maintenance
	* regress/bittorrent/sched.py: maintenance
	* bittorrent/sched.py: maintenance
	* bittorrent: remove support for sending big messages
	* bittorrent: remove support for receiving big messages
	* bittorrent/stream.py: remove unused PieceMessage class
	* bittorrent/stream.py: remove unused import
	* bittorrent/stream.py: reduce the number of pylint warnings
	* regress/database: reorganize
	* regress/net/stream.py: maintenance
	* regress/config.py: maintenance
	* regress/log.py: maintenance
	* regress/state.py: maintenance
	* Release neubot/0.4.5-rc1

Neubot 0.4.4 [2011-10-25]
	* nagios-plugin-neubot: fix usage string
	* bin/nagios-plugin-neubot: print current queue length
	* table_config.py: Python 2.5 sqlite3.Row cannot iterate
	* net/stream.py: avoid exception in atclose()
	* rendezvous/server.py: no more separate bittorrent negotiation
	* Release neubot/0.4.4

Neubot 0.4.3 [2011-10-25]
	* scripts/diffstat: helpers for release announcement
	* debian: control/postinst: restart neubot if privacy is OK
	* debian: cron.daily/neubot: honour grammar
	* js/update.js: don't live commentedout code around
	* Makefile: use SYSCONFDIR not /etc
	* UNIX: always install neubot_notify and neubot_gui
	* Release neubot/0.4.3

Neubot 0.4.3-rc4 [2011-10-21]
	* debian: create system user and group
	* debian: postinst: avoid races between neubot and sqlite3
	* Release neubot/0.4.3-rc4

Neubot 0.4.3-rc3 [2011-10-20]
	* debian: add sqlite3 to predepends
	* debian: bye bye neubot-web-ui.desktop
	* debian: rename neubot-on-gui-login.desktop neubot.desktop
	* net/stream.py: garbage collect encrypt and decrypt
	* Makefile: adjust debian package permissions
	* debian: Better name for menu entry
	* debian/neubot_notify: die when graphic session is over
	* www: pleasant no-privacy informative message
	* Revert "debian: use cron.hourly for debugging purpose"
	* neubot_notify: tune sleep interval and log exceptions
	* doc/RELEASE: tweak final part of the file
	* Release neubot/0.4.3-rc3

Neubot 0.4.3-rc2 [2011-10-19]
	* post-release: Undo some unwanted strings changes
	* Makefile: GC release_stable _release DEB_UPDATE_URI
	* rendezvous: "just works" update notification for Windows
	* doc/RELEASE: misc updates
	* api/server.py: close stream on /api/close
	* utils/blocks.py: repair win32 bug using WWW
	* http/server.py: honour the connection header
	* api/server.py: escape watchdog for active streams
	* privacy.py: skip checks if no privacy settings involved
	* js/i18n.js: correct privacy policy display with IE
	* api/server.py: add reachable objects info to /api/debug
	* Release neubot/0.4.3-rc2

Neubot 0.4.3-rc1 [2011-10-19]
	* Makefile: I don't need SHA256.inc anymore
	* privacy.html: fixed size text area
	* neubot_webkit: Maximize at startup.
	* neubot_webkit: Shows a static page if neubot is not running.
	* neubot_webkit: Tweak previous
	* neubot_webkit: zap unused arguments
	* neubot_webkit: no need to repeat window title
	* neubot_webkit: note we need to be more precise
	* database: unbreak migrate
	* database: Zap tool_*
	* table_bittorrent.py table_speedtest.py: pylintify
	* table_config.py: byebye functional style
	* regress: unbreak table_config.py regression
	* debian: preinst: ask for privacy settings if needed
	* Makefile: add preinst to debian package
	* debian: control: Less lintian warnings
	* debian: move 'update-rc.d remove' from prerm to postrm
	* debian: mention config files
	* Makefile: compress manpages
	* debian: add changelog and copyright
	* Makefile: do not install *.pyc and useless scripts
	* Makefile: install neubot-on-gui-login.desktop w/o +x bit
	* debian: /etc/init.d/neubot: mention $remote_fs
	* debian: /etc/init.d/neubot: add fake force-reload
	* debian: control/postinst: use invoke-rc.d
	* debian: prerm: do not use /usr/bin/pkill
	* debian: prerm: use invoke-rc.d
	* debian: control: list python as pre-depend
	* debian: preinst: show full privacy policy in webkit
	* debian: preinst: do not use curses to show license text
	* debian: preinst: help users stuck in less(1)
	* debian: preinst: avoid some pylint warnings
	* Merge branches 'pu.database', 'pu.debian' and 'pu.debian-webkit' into next
	* Move utils.py -> utils/__init__.py
	* Move libersion.py to utils/version.py
	* http/utils.py: remove unused negotiate_mime()
	* http: make prettyprintbody a method of Message
	* http: move date() to Message
	* http: make content_length a method of Message
	* http: move parse_range to speedtest/server.py
	* http: move urlsplit to http/message.py
	* http/utils.py: remove unused imports
	* http: move nextstate() to stream.py and justice utils.py
	* http: improve pylint score
	* Merge branches 'pu.http' and 'pu.utils' into next
	* net: Remove measurer
	* speedtest/client.py: fallback of measurer removal
	* net: simpler and more robust timeout model
	* net: Simplify task scheduling
	* net: start using same names as asyncore
	* net: more asyncore affinity
	* Merge branch 'pu.net' into next
	* poller.py: fallout after scheduler simplification
	* stream.py: stop passing exceptions upstream
	* scripts/make_lang_en.py: fallout of http rationalization
	* privacy: policy v2.0
	* lang/it.js: zap old privacy policy translation
	* www/privacy.html: make it wellformed XML
	* www/lang/en.js: regen
	* Merge branch 'pu.privacy-policy' into next
	* Merge branch 'next' of github.com:neubot/neubot into next
	* privacy: Revert privacy policy to version 1.0
	* debian: control/postinst: Most moral license choice
	* debian: add etc/cron.daily/neubot
	* debian: nuke python-based preinst
	* Makefile: do not require superuser privs to make deb package
	* debian: robust and least surprising reenable-repository algorithm
	* debian: use cron.hourly for debugging purpose
	* debian: Privacy strategy that works (TM)
	* privacy: Bye bye special provisions
	* win32: open browser if privacy not OK
	* www: use \r\n in privacy policy to please IE
	* privacy.py: use system default database path
	* neubot_notify: fallback to browser
	* neubot.nsi: install with user privilege level
	* Repair favicon
	* Garbage collect on_gui_login and infobox
	* js/privacy.js: explicit var declaration
	* MacOS: update privacy policy
	* Garbage collect unused show_database command
	* Ditch statusicon
	* compat.py: garbage collect unused code
	* Forgot to rename utils/version.py unit test
	* Garbage collect unused arcfour
	* utils/blocks.py: new data generator
	* Unbreak release script
	* Release neubot/0.4.3-rc1

Neubot 0.4.2 [2011-09-19]
	* Release neubot/0.4.2

Neubot 0.4.2-rc6 [2011-09-18]
	* scripts/sed_inplace: clarify help message
	* scripts/sed_inplace: quote the pattern
	* updater/unix.py: remove duplicate informational message
	* updater/unix.py: saner interval between two updates checks
	* MacOS: don't log on stderr in SH scripts
	* Release neubot/0.4.2-rc6

Neubot 0.4.2-rc5 [2011-09-16]
	* updater/unix.py: more robustness in the main loop
	* updater/unix.py: note we should install a signal handler
	* updater/unix.py: mark a possibly-redundant piece of code
	* updater/unix.py: debug-friendlier syslog output
	* updater/unix.py: more frequent check for updates
	* updater/unix.py: syslog cmdline to verify signature
	* doc/updater/unix.txt: more documentation
	* Merge branch 'pu.updater' into next
	* Release neubot/0.4.2-rc5

Neubot 0.4.2-rc4 [2011-09-16]
	* MacOS: Remove Neubot-pkg
	* MacOS: add neubot-pkg
	* MacOS doc: s/Neubot-VERSION.pkg/neubot-VERSION.pkg/
	* Merge branch 'pu.MacOS' into next
	* database: fix regression with old clients
	* database/_table_utils.py: allow null entries
	* table_bittorrent.py table_speedtest.py: pylintify
	* neubot.nsi: make sure we delete all from autostart
	* neubot.nsi: Typo
	* neubot.nsi: Want to run as admin
	* Merge branch 'pu.win32-installer' into next
	* Release neubot/0.4.2-rc4

Neubot 0.4.2-rc3 [2011-09-15]
	* doc: updater/unix.py: no need to use current version number
	* doc: MacOS/installer.txt: mention the ``latest`` file
	* MacOS: makepkg.py: also create the ``latest`` file
	* Merge branches 'pu.MacOS' and 'pu.doc' into next
	* scripts/fixperms: fix permissions
	* neubot.nsi: do not autostart neubot
	* Makefile: force UID=0 and GID=0 when installing
	* Release neubot/0.4.2-rc3

Neubot 0.4.2-rc2 [2011-09-10]
	* MacOS/makepkg.py: be python2.6-compatible
	* www: privacy.js: don't mix 1/0 and true/false in settings.html
	* www: settings.html: clarify that some settings require restart
	* doc: MacOS/installer.txt: update
	* Merge branches 'pu.MacOS' and 'pu.www' into next
	* updater/unix.py: reverse time comparison to give updates a chance
	* updater/unix.py: must chdir before chroot
	* updater/unix.py: follow 'setuid demystified' guidelines
	* updater/unix.py: naive chroot for MacOSX
	* updater/unix.py: make sure chroot directory starts with /
	* updater/unix.py: be more precise with respect to copyright
	* updater/unix.py: unbreak downloading sha256 sum
	* updater/unix.py: unbreak switching to new version
	* updater/unix.py: more readable error messages
	* updater/unix.py: improve pylint score
	* updater/unix.py: disable chroot for 0.4.2
	* Merge branch 'pu.updater' into next
	* Release neubot/0.4.2-rc2

Neubot 0.4.2-rc1 [2011-09-07]
	* log.py: table_log may be None
	* system/unix.py: fix openlog() and syslog() flags
	* system/unix.py: remove possible incompatibility with pypy
	* system/unix.py: rewrite BackgroundLogger to improve pylint score
	* system/unix.py: factor lookup_user_info
	* system/unix.py: improve pylint score
	* system/unix.py: python3 compatible
	* system/unix.py: prettify redirection to /dev/null
	* Merge branch 'pu.system' into next
	* libversion: print numeric representation for arbitrary versions
	* scripts/release: also update numeric representation
	* del neubot/updater.py
	* doc/neubot.1.txt: document neubot/main/__init__.py
	* man/man1/neubot.1: regen
	* Revert "main/__init__.py: remove fork nonsense"
	* main/__init__.py: make the code more readable
	* main/__init__.py: X11.app avail by default on 10.5+
	* main/__init__.py: don't open browser when running as root
	* main/__init__.py: don't blindly override address and port
	* MacOS: Neubot-app: update neubot.icns icons
	* MacOS: basedir-skel/start.sh: spelling
	* MacOS: versiondir-skel/start.sh: start updater/unix.py
	* MacOS: versiondir-skel/prerun.sh: add _neubot_update user
	* MacOS/icon.txt: update procedure to create icon
	* doc/MacOS/installer.txt: use 0.4.0 as example version
	* MacOS: Neubot-pkg: Info.plist: omit major and minor
	* debian: prerm: attempt to kill 'neubot on_gui_login'
	* system: clean-up log backend a bit
	* system/unix.py: sys.exit -> os._exit for robustness
	* updater/unix.py: Updater daemon for Unix
	* doc/updater/unix.txt: Updater documentation
	* Merge branches 'pu.MacOS', 'pu.debian', 'pu.doc', 'pu.main', 'pu.system' and 'pu.updater' into next
	* bittorrent/config.py: Raise watchdog timeout
	* database/_table_utils.py: more robust INSERT INTO autogen
	* database/_table_utils.py: deploy docstrings
	* database/_table_utils.py: longer variable names
	* database/table_speedtest.py: use _table_utils
	* regress: Add speedtest/__init__.py
	* Move neubot/speedtest/gen.py -> regress/speedtest/_gen.py
	* database/table_speedtest.py: move unit-test to regress
	* database/table_config.py: move unit test to regress
	* database/table_config.py: add docstrings
	* database: add os_name and neubot_version columns
	* log.py: Break circular dependencies
	* net/stream.py: undo 262144 recvbuf optimization
	* privacy: redirect to /privacy.html if no privacy settings
	* privacy.py: explicitly utils.intify() privacy settings
	* privacy.py: more checks
	* Merge branches 'pu.bittorrent', 'pu.database', 'pu.log', 'pu.stream' and 'pu.privacy' into next
	* database/migrate.py: use logging.info not LOG.info
	* poller.py notify.py: We MUST stringify compact_traceback()
	* speedtest/client.py: it was not intended to create tuples
	* database: Use sys.platform not os.name
	* doc/updater/unix.txt: use previous version to avoid autobump
	* main/__init__.py: ditch creeping featurism
	* main/browser.py: bump pylint score to 10.0
	* main/browser.py: python3 ready
	* main/browser.py: deploy a couple of flush()
	* doc: update neubot.1.txt
	* man: regen
	* Merge branches 'pu.main' and 'pu.doc' into next
	* server.py: enable sapi w/o SSL
	* negotiate.py: export the queue length
	* speedtest/session.py: export the queue length
	* server.py: export queue length via sapi
	* server.py: Put sapi into global http server
	* nagios-plugin-neubot: adapt to work with /sapi/state
	* nagios-plugin-neubot: add --hostname flag
	* nagios-plugin-neubot: sync docstring with reality
	* Merge branch 'pu.nagios' into next
	* speedtest/client.py: use just one connection
	* patches: rm not needed fix-manpage.patch
	* updater/unix.py: add code to verify signature
	* doc: MacOS/installer.txt: document public key
	* MacOS: versiondir-skel: add public key
	* log.py: ditch debugging leftover
	* log.py: sched maintenance when we use database only
	* Merge branches 'pu.updater' and 'pu.log' into next
	* Merge branch 'pu.speedtest' into next
	* MacOS/makepkg.py: generate autoupdate, checksum and signature
	* doc: MacOS/installer.txt: sync with autoupdates
	* debian: add neubot_webkit command
	* debian: control/prerm: tear down neubot_webkit
	* Makefile: add neubot_webkit to debian package
	* applications: add neubot.desktop
	* Makefile: add neubot.desktop to NEEDEDIT list
	* main/__init__.py: settle after merge
	* Merge branches 'pu.debian' and 'pu.updater' into next
	* Release neubot/0.4.2-rc1

Neubot 0.4.1 [2011-08-30]
	* MacOS: uninstall.sh: remove all Neubot receipts
	* MacOS: uninstall.sh: add comment
	* Merge branch 'pu.MacOS' into next
	* Release neubot/0.4.1

Neubot 0.4.1-rc4 [2011-08-29]
	* MacOS: move icon-creation tutorial to the proper place
	* doc/RELEASE: mention the Mac package too
	* icons: Update neubot.ico
	* icons/Makefile: forgot to mention neubot-48x48.png
	* icons: update neubot-48x48.png
	* www: update header web
	* www: Translate title and subtitle into italian
	* Merge branches 'pu.MacOS', 'pu.icons' and 'pu.www' into next
	* doc/RELEASE: sections
	* doc/RELEASE: prepend .exe to the command
	* MacOS: preflight: Make sure /tmp/neubot-can-share exists
	* Merge branches 'pu.doc' and 'pu.MacOS' into next
	* neubot: make sure there are no executable files inside
	* MacOS: makepkg.py must be run by root.  Period.
	* MacOS: document makepkg.py algorithm
	* simplejson: Upgrade to 2.1.6
	* MacOS: makepkg.py: more precise unhandled exceptions handling
	* MacOS: makepkg.py must not write bytecode
	* MacOS: makepkg.py: really ensure root:wheel ownership
	* Merge branches 'pu.MacOS', 'pu.doc', 'pu.icons', 'pu.simplejson' and 'pu.www' into next
	* Release neubot/0.4.1-rc4

Neubot 0.4.1-rc3 [2011-08-28]
	* bittorrent: don't need to exit(0)
	* bittorrent: drop privileges after listen()
	* rendezvous/server.py: export initialization via run()
	* negotiate: export run() and propagate changes
	* neubot: Add server.py to start server-side components
	* Merge branch 'server-command' into next
	* main/module.py: re-raise SystemExit
	* speedtest: server: Remove old test server code
	* speedtest: server: We don't need StringIO anymore
	* server.py: Expose simple server-side API on port 9775
	* bin: Add Nagios plugin for Neubot
	* Merge branch 'nagios-plugin' into next
	* nagios-plugin-neubot: critical in nagios is 2 not 1
	* nagios-plugin-neubot: set default socket timeout of 3 seconds
	* nagios-plugin-neubot: arm 10-seconds watchdog timeout
	* nagios-plugin-neubot: avoid NameError in error path
	* nagios-plugin-neubot: wrap very long line
	* nagios-plugin-neubot: basic command line options parsing
	* nagios-plugin-neubot: manual-compliant strings
	* nagios-plugin-neubot: Unknown is 3 not -1
	* Merge branch 'nagios-plugin-fixes' into next
	* nagios-plugin-neubot: drop root privileges automatically
	* nagios-plugin-neubot: comment about the expected scenario
	* nagios-plugin-neubot: refuse to run as root
	* net/stream.py: Treat zero bytes send() as EOF
	* http/server.py: allow to flag some ports as SSL ports
	* net/CA.py: Generate self-signed certificate under posix
	* server.py: Export server-api using SSL
	* nagios-plugin-neubot: Fetch server state via SSL
	* Merge branch 'nagios-plugin-ssl-and-paranoia' into next
	* negotiate.py: clarify upstream modules' duties
	* regress: net/stream.py: repair after s/foo/handle_foo/
	* icons: Improved Neubot icon, step 1
	* New version management strategy
	* main/module.py: add two missing modules to py2exe list of modules
	* Locate neubot directory using os.path.dirname and abspath
	* Create package installer for MacOSX
	* main/module.py: disable some modules on Win32
	* main/__init__.py: sys.exit(0) at the end is implied
	* main/__init__.py: remove fork nonsense
	* server.py: disable server sapi
	* rendezvous/server.py: explain recent change
	* libversion.py: print version number when invoked directly
	* Release neubot/0.4.1-rc3

Neubot 0.4.1-rc2 [2011-07-26]
	* infobox.py: better testing code
	* on_gui_login.py: Annoy the user if we cannot collect
	* privacy: add version number
	* scripts/make_lang_en.js: Autogenerate www/lang/en.js
	* www/privacy.html: make sure it's valid XML
	* www/footer.html: make i18n using class and not id
	* www/footer.html: always use same value of i18n_resultof
	* lang: Add autogenerated en.js to repository
	* Merge branch 'autogen-en.js' into next
	* debian: add and use postrm to honour apt-get purge
	* scripts/new_version.py: bugfix regex for 0.4.1-rc1
	* scripts/release: zap code to auto-guess next version number
	* Release neubot/0.4.1-rc2

Neubot 0.4.1-rc1 [2011-07-21]
	* Don't offer -rc updates to stable clients
	* Offer to download from the frontend not the backend
	* doc/RELEASE: remove redundant sentence
	* doc/RELEASE: typo
	* Handle exceptions in calling module's MAIN()
	* api/server.py: make the dispatch table and his callbacks protected
	* on_gui_login: raise timeout
	* debian: zap also /var/neubot on purge
	* release: unbreak regex for matching version
	* Release neubot/0.4.1-rc1

Neubot 0.4 [2011-07-20]
	* rendezvous/server.py: stop redirecting bittorrent on a test server
	* Globally replace next(foo) with foo.next()
	* Release neubot/0.4

Neubot 0.4-rc6 [2011-07-20]
	* doc: add windows instructions to RELEASE
	* manpage: add BUGS section
	* manpage: s/help/COMMAND/ in in-place example
	* manpage: Claudio also contributed patches
	* Release neubot/0.4-rc6

Neubot 0.4-rc5 [2011-07-19]
	* neubot.list: No more testing repository
	* Makefile: adjust debian packaging number
	* privacy.py: keep the oops but switch to LOG.debug
	* bittorrent/config.py: use port 8080 not 80
	* doc: document testing procedure before release
	* Release neubot/0.4-rc5

Neubot 0.4-rc4 [2011-07-19]
	* on_gui_login.py: Loop just once to avoid problems with Windows
	* i18n.js: correct bug, let i18n work on IE
	* js: delay i18n.translate()
	* Release neubot/0.4-rc4

Neubot 0.4-rc3 [2011-07-18]
	* Make it simpler to debug 404 Not Found events
	* Makefile: quick-dirty fix to adjust permissions
	* Makefile: initial support for uninstalling neubot
	* log.py: don't defer commit for too much time
	* Release neubot/0.4-rc3

Neubot 0.4-rc2 [2011-07-18]
	* setup.py: fix indent
	* main/module.py: align
	* main/module.py: ref all modules so py2exe includes them
	* on_gui_login.py: spam the user immediately
	* on_gui_login.py: give daemon time to breathe first
	* system: add win32 code to kill a process
	* on_gui_login: add -k switch to kill on_gui_login process
	* neubot.nsi: kill on_gui_login process on uninstall
	* neubot.nsi: change on_gui_login start-menu name
	* neubot.nsi: run also on_gui_login after install
	* Merge branch 'win32-fix-updates' into next
	* scripts/release: Initial support for -rc releases
	* Release neubot/0.4-rc2

Neubot 0.4-rc1 [2011-07-16]
	* manpage: simplify how-to-dump example
	* database/main.py: allow to query database path
	* Release neubot/0.3.7
	* speedtest/client.py: remeber position-in-queue history
	* Let /api/debug return position-in-queue history too
	* Merge branch 'measure-queue' into next
	* speedtest/client.py: print uri we're connecting to
	* rendezvous: add geoip_wrapper.py
	* database: add table_geoloc.py
	* database: Bump minor version because of geoloc table
	* rendezvous/server.py: implement geo-aware rendezvous
	* geo-rendezvous: Update configuration properties
	* Merge branch 'geo-rendezvous' into next
	* rendezvous/server.py: transparent geo-aware rendezvous
	* api/client.py: hide some properties
	* api/server.py: remove duplicate properties
	* http/client.py: hide some properties
	* http/server.py: hide some properties
	* net/CA.py: hide some properties
	* net/stream.py: hide most properties
	* rendezvous/client.py: hide some properties
	* rendezvous/server.py: hide some properties
	* speedtest/client.py: hide some properties
	* speedtest/negotiate.py: hide some properties
	* speedtest/server.py: hide some properties
	* move agent.py properties to config.py
	* Merge branch 'remove-noise-from-config' into next
	* Makefile: deb: s/install/$(INSTALL)/g
	* Makefile: debian: fix postinst prerm permissions
	* Makefile: -m755 is already the default for install
	* Merge branch 'improve-Makefile-quality' into next
	* net/stream.py: duplicate http/stream.py outgoing functionality
	* http/stream.py: properly set/reset self.writing
	* http/stream.py: note we can use net/stream.py instead of outgoing
	* bittorrent/stream.py: allow PIECE block to be a file-like
	* bittorrent/stream.py: simplify code in the recv path
	* bittorrent/stream.py: stub for handling jumbo messages
	* Merge branch 'improve-bittorrent-core' into next
	* bittorrent/stream.py: prefer exceptions to LOG.error()+close()
	* bittorrent: Add and use new BitTorrent peer model
	* bittorrent: cache partial PIECE params in stream.py
	* bittorrent: ConnectingPeer + ListeningPeer = PeerSimple
	* bittorrent/stream.py: bitfield is optional
	* Merge branch 'add-bittorrent-peer' into next
	* bittorrent/peer.py: save peer bitfield
	* bittorrent: process HAVE messages
	* stream.py: add LOG.debug() for HAVE and BITFIELD
	* bittorrent/stream.py: check incoming CANCEL for correctness
	* bittorrent/stream.py: deploy more checks on the index
	* bittorrent/stream.py: deploy some more whitespaces
	* bittorrent/peer.py: allow to override default random infohash
	* bittorrent/peer.py: do not choke/unchoke automatically
	* bittorrent/stream.py: pack/unpack unsigned integers
	* Merge branch 'bittorrent-misc-enhancements' into next
	* bitfield.py: Add code to get a randomly filled bitfield
	* bittorrent/peer.py: use randomly filled bitfields
	* bittorrent/sched.py: simple algorithms for scheduling requests
	* bittorrent/peer.py: join initialization and configuration
	* bittorrent/peer.py: extend peer to perform a simple test
	* Merge branch 'extend-bittorrent-peer' into next
	* bittorrent/main.py: sync with new bittorrent/peer.py
	* Link /api/bittorrent to ServerAPI.api_speedtest()
	* bittorrent/peer.py: start measuring after the first PIECE
	* bittorrent/sched.py: ensure we always fill the pipeline
	* bittorrent/sched.py: force npieces npiecespipe to integer
	* bittorrent/peer.py: get rid of some self.conf gymnastics
	* Create a new Peer object for each peer that connects
	* bittorrent/peer.py: invoke complete() at the end of the test
	* bittorrent/peer.py: print more informative messages
	* bittorrent/main.py: stop when the test is complete
	* bittorrent/peer.py: sync channel adaptation with speedtest
	* Merge branch 'test-bittorrent-at-home' into next
	* Revert "bittorrent/sched.py: ensure we always fill the pipeline"
	* bittorrent/peer.py: Wait for the other end to complete the test
	* bittorrent/main.py: never activate the measurer
	* bittorrent/main.py: allow to hint with estimated download speed
	* bittorrent/peer.py: raise if inflight becomes negative
	* bittorrent/sched.py: do not schedule 0-7 in sequential order
	* bittorrent/stream.py: LOG.debug on incoming KEEPALIVEs
	* Pass time-to-connect to connection_made()
	* net/dns.py: Cache recent DNS lookups
	* http/client.py: print and save time-to-connect
	* bittorrent/peer.py: print and save time-to-connect
	* Merge branch 'better-time-to-connect-measurement' into next
	* bittorrent: pass also rtt to complete()
	* bittorrent/peer.py: implement seeder-only peer
	* bittorrent: handle each connection with a new Peer (sub)class
	* bittorrent/peer.py: make BitTorrent test a bit longer
	* bittorrent/bitfield.py cosmetics
	* Move bittorrent/main.py content to bittorrent/__init__.py
	* bittorrent/__init__.py: we don't use MEASURER
	* bittorrent/__init__.py: pull expected duration from peer.py
	* bittorrent/__init__.py: factor common code
	* bittorrent/bitfield.py: paranoid division by two
	* bittorrent/peer.py: clarify comment
	* bittorrent/peer.py: always update target_bytes
	* bittorrent/peer.py: refine and document the stopping rule
	* bittorrent/peer.py: clarify interested/not interested
	* bittorrent/sched.py: clarify comment
	* bittorrent/stream.py: remove unused import
	* bittorrent/stream.py: protocol_name -> PROTOCOL_NAME
	* bittorrent/stream.py: cosmetic changes
	* Merge branch 'bittorrent-maint' into next
	* speedtest/client.py: comment on some to-be-done refinements
	* Revert "net/dns.py: Cache recent DNS lookups"
	* debian: Update GPG pubkey expire time
	* debian: Update GPG pubkey expire time
	* debian: Bump packaging number
	* Makefile: deb: s/install/$(INSTALL)/g
	* Makefile: debian: fix postinst prerm permissions
	* debian: Bump packaging number
	* Makefile: -m755 is already the default for install
	* bittorrent/stream.py: redef message types for testability
	* bittorrent/stream.py: RuntimeError on jumbo protocol violation
	* bittorrent/stream.py: space nit
	* bittorrent: s/tostring/__str__/ for bitfield
	* bittorrent/stream.py: check handshake for correctness
	* bittorrent: send bitfield in peer.py not in stream.py
	* bittorrent/stream.py: simplify type and length checking
	* bittorrent: create bitfield at the peer level
	* bittorrent/stream.py: bugfix message reassembler
	* bittorrent/stream.py: allow to specify small-message threshold
	* bittorrent/stream.py: sync _send_message and send_piece
	* Add regress test for bittorrent/stream.py
	* Merge branch 'bittorrent-regress' into next
	* net/stream.py: some cosmetic changes
	* net/stream.py: move self.conf near self.parent self.poller
	* net/stream.py: {recvb,send}locked -> {recv,send}_blocked
	* net/stream.py: get rid of _do_close()
	* net/stream.py: s/isclosed/close_complete/
	* net/stream.py: put all state variables together
	* net/stream.py: s/kickoffssl/recv_ssl_needs_kickoff/
	* net/stream.py: Use True/False for booleans
	* net/stream.py: implement close-pending
	* Merge branch 'stream-maint' into next
	* net/stream.py: parent is not optional anymore
	* net/stream.py: distinguish between closed() and shutdown()
	* net/stream.py: protection against multiple closed()
	* net/stream.py: recv_maxlen was over-engineering
	* net/stream.py: guard vs. close_complete
	* net/stream.py: cosmetic change
	* net/stream.py: simplify and boolize recv_ssl_needs_kickoff
	* net/stream.py: reorganize and document global variables
	* net/stream.py: more clear read_send_queue()
	* regress: add net/stream.py set of tests
	* Merge branch 'stream-unittest' into next
	* net/poller.py: allow to pass arguments to sched()
	* www: Added language support
	* www: allow to i18n textareas too
	* www: i18n now use GetText idea
	* www: make the page visible when i18n is not available
	* Merge branch 'web-gui-i18n' into next
	* net/stream.py: print error if connect doesn't fail immediately
	* Update BitTorrent test to avoid simultaneous downloading
	* bittorrent: sync peer.py duration with speedtest
	* doc: add documentation for bittorrent/peer
	* Merge branch 'bittorrent-peer-enhancements' into next
	* net/dns.py: Cache recent DNS lookups
	* http/client.py: convert to debug() an annoying LOG.info()
	* net/dns.py: Make sure we also consider the port number
	* Merge branch 'cache-dns' into next
	* Under debian always use /usr/bin/python
	* http/stream.py: I don't like docstrings
	* http/stream.py: let net/stream.py manage outgoing queue
	* http/stream.py: raise RuntimeError on errors
	* http/stream.py: send_message(): allow to customize smallmessage
	* Merge branch 'http-layer-cleanups' into next
	* bittorrent/stream.py: update to new net/stream.py code
	* Note we should move close() from protocols to generic stream
	* http/messages.py: RFC2616-compliant host header support
	* http/client.py: Save host header value
	* When needed, pass compose() host header information
	* Merge branch 'fix-host-header' into next
	* http/message.py: responses are not supposed to have host header
	* Distinguish between periodic and nonperiodic notifications
	* notify.py: Do not declare global event names
	* Teach versioncmp() about release candidate numbers
	* Make sure versioncmp() refuses to process negative numbers
	* database/tool_collate.py: Collate various databases
	* database/tool_goodset.py: extract goodset from database
	* database/tool_slice.py: split database in monthly chunks
	* database/tool_users.py: Count per-month active users
	* database/tool_buckets.py: make stats out of a database
	* Merge branch 'database-analysis' into next
	* database/tool_collate.py: Honour -o command line option
	* database/tool_buckets.py: robustness vs negative values
	* database/tool_buckets.py: convert buckets number to real value
	* database/tool_buckets.py: write percentage not absolute value
	* utils.py: raise RuntimeError even if rc number is greater than sys.maxint
	* database/tool_buckets.py: minor fixes
	* database/tool_privacy.py: enforce privacy settings
	* database/tool_goodset.py: for god's sake don't commit every row
	* tool_gooset.py tool_privacy.py: Never override timestamp
	* database/tool_privacy.py: we can do better when we don't have perms
	* Merge branch 'database-goodies' into next
	* speedtest.html: internationalize page
	* www: added bittorrent support
	* database/_table_utils.py: helpers to build queries
	* database: always use sqlite.Row as row factory
	* bittorrent/_gen.py: generate random bittorrent results
	* database/table_bittorrent.py: manage table bittorrent
	* Bump database version number because we've added bittorrent table
	* api/server.py: Really implement /api/bittorrent
	* database/table_speedtest.py: remember we should update it
	* speedtest/gen.py: remember we should rename it
	* api/server.py: minor cleanup in api_speedtest()
	* Adapt existing BitTorrent code to test client and server
	* Prototype of BitTorrent test's client
	* Prototype of BitTorrent test's server
	* Merge branch 'bittorrent-negotiation' into next
	* database: Sort in descending order
	* www: insert connect time in bittorrent results
	* bittorrent.js speedtest.js: Better label for X axis
	* www: Less emphasis on the test name
	* main.py: Wait for more before timing out
	* main.py: Die if we cannot reach the GUI
	* main.py: response.read() before connection.close()
	* http/server.py: Do not violate RFC 2616 Sect. 14.30
	* http/message.py: Capitalize HTTP header names
	* Live up to the promise that header names are case insensitive
	* Merge branch 'improve-openbrowser' into next
	* net/poller.py: Safer timeout algorithm
	* net: Implement watchdog mechanism
	* http/server.py: add connection_ready()
	* net/stream.py: add __repr__() to listener and connector
	* net/stream.py: register and then run hooks at close()
	* privacy.py: add collect_allowed()
	* tool_privacy.py: Make can_share count what is supposed to
	* regress/bittorrent/stream.py: bells and whistles
	* regress/net/streams.py: bells and whistles
	* regress/blocks.py: unbreak test
	* Move regress/speedtest.py to a more convenient place
	* Merge branch 'regress-love' into next
	* http/server.py: bells and whistles
	* http/server.py: export HTTP_SERVER
	* http/server.py: By default daemonize
	* Merge branch 'http-server-love' into next
	* http: allow for outgoing body to be a basestring
	* http: allow to rewrite request uri at will
	* streams: globally replace shutdown() with close()
	* log: allow to attach custom message to exception
	* doc: temporarily remove outdated documentation
	* http/utils.py: add content_length() function
	* net/stream.py: make atclose() robust wrt duplicate entries
	* http/utils.py: make prettyprintbody string-safe
	* http/server.py: send 500 if child.got_request_headers() fails
	* negotiate.py: Add new negotiation code
	* bittorrent: Use new negotiation code
	* www/privacy.html: corrected & -> &
	* www/privacy.html: add i18n classes
	* http/utils.py: unbreak prettyprintbody()
	* http/server.py: Better content-type and content-encoding
	* i18n: retain the i18n_ prefix for HTML classes
	* settings.html: add italian translation
	* database/tool_slice.py: make a slice over a true range
	* database/tool_buckets.py: count the number of tests per user
	* net/poller.py: check_timeout(): deploy some blank lines
	* net/poller.py: cosmetic: move break_loop() up
	* net/poller.py: Merge update_tasks() and dispatch_events()
	* net/poller.py: _loop_once(): remove redundant else
	* net/poller.py: Now ready to loop forever
	* Merge branch 'poller-prepare-to-loop-forever' into next
	* rendezvous/client.py: fix the unknown-test-type case
	* rendezvous/client.py: choose a test at random
	* rendezvous: support for BitTorrent test
	* Merge branch 'bittorrent-rendezvous' into next
	* net/poller.py: of course tasks are AHEAD in time
	* privacy.html: italian translation
	* lang/it.js: give credit to Claudio
	* www/bittorrent.html: minor language fix
	* bittorrent.html: translate to italian
	* Merge branch 'finalize-i18n' into next
	* database/table_config.py: Work-around Py 2.5 sqlite.Row
	* main.py: use bittorrent.client to implement bittorrent
	* bittorrent/server.py: Fix the port number
	* bittorrent/client.py: make sure we connect to port 6881
	* speedtest/client.py: anticipate decision of test to perform
	* bittorrent/client.py: normalize response's queue_pos parsing
	* regress/negotiate.py: minor changes
	* bittorrent/client.py: do not collect if test fails
	* bittorrent/client.py: cosmetic change
	* js/state.js: cosmetic changes
	* js/state.js: avoid name clashes with reserved words
	* state.py: The dumber, the better
	* state.py: add unit test, remove ad-hoc test code
	* state.py: leading underscore before private attributes
	* Let BitTorrent update() the STATE
	* Clear results before test in a robust way
	* Merge branch 'bittorrent-api-state' into next
	* bittorrent/estimate.py: download and upload speed estimate
	* negotiate.py: always process request bodies
	* bittorrent: pass adjusted target_bytes to complete()
	* bittorrent: adapt target_bytes to channel conditions
	* Merge branch 'bittorrent-estimate' into next
	* bittorrent: log PEER_ID during handshake
	* bittorrent/stream.py: remove redundant conditional
	* bittorrent/server.py: always use the same PEER_ID
	* bittorrent: use same infohash for listener and connector
	* Merge branch 'more-compliant-bt' into next
	* rendezvous/client.py: alternate speedtest and bittorrent tests
	* net/poller.py: ongoing work
	* bittorrent: unsanely raise watchdog timeout
	* bittorrent: Instrument peer to measure time-to-upload
	* Merge branch 'bittorrent-upload-takes-too-much-time' into next
	* bittorrent/peer.py: oops, unbreak previous
	* Modularize main.py and make boot.py a submodule of main
	* Add new show_database command
	* log.py: reindent InteractiveLogger
	* log.py: Make oops() and exception() more similar
	* log.py: Move test code into regress
	* Merge branch 'log-misc' into next
	* bittorrent/client.py: remember to handle connection_failed
	* notify: print names of events we publish
	* net/poller.py: Take care of select() returning EINTR.
	* net: more readable function names
	* _table_utils.py: Verify strings more strictly
	* database: By default select ascending
	* Store log records into the database
	* regress: add test for neubot/config.py
	* bittorrent/peer.py: Cosmetic changes
	* bittorrent/peer.py: stub for connection_failed
	* bittorrent/client.py: Deal with BitTorrent connect() failure
	* Merge branch 'bittorrent-fixes' into next
	* bittorrent/negotiate.py: add explanatory comment
	* bittorrent/stream.py: add explanatory comment
	* bittorrent/stream.py: Use tuple not vector
	* bittorrent/stream.py: document global objects
	* bittorrent/stream.py: the project starts with uppercase
	* bittorrent/stream.py: Tweak comment
	* bittorrent/stream.py: Sync comment with reality
	* bittorrent/stream.py: More robustness in the reader
	* bittorrent/stream.py: document the reader a bit more
	* bittorrent: consistently use 'big' in place of 'jumbo'
	* bittorrent: improve function names
	* bittorrent/peer.py: add explanatory comment
	* bittorrent/peer.py: Use tuple, not vector, for states
	* bittorrent/client.py: add explanatory comment
	* Merge branch 'bittorrent-cosmetics' into next
	* log.js: Fetch severity properly when deciding color
	* utils.js: zap newline at end of file
	* bittorrent: improve scheduling and channel adaptation
	* bittorrent/peer.py: rewrite logging
	* bittorrent/peer.py: final comments
	* bittorrent/peer.py: watchdog timeout after 60 seconds
	* Merge branch 'more-bittorrent-love' into next
	* bittorrent/peer.py: committed wrong PIECE_LEN by mistake
	* bittorrent: log the endpoint we're connecting to
	* api/server.py: Unbreak /api/log?debug=1
	* notify.py: default subscribe() context to None
	* poller: Use lambda to avoid special-case arguments
	* Error slippage: MacOSX getpeername() fails with EINVAL
	* notify.py: prefix protected stuff with underscore
	* notify.py: protect our assumptions with a warning
	* notify.py: allow to query whether an event is subscribed
	* Merge branch 'notify-love' into next
	* config.py: zap multiple blank lines
	* config.py: update docstring
	* config.py: print the source we're reading variables from
	* Merge branch 'config-love' into next
	* bittorrent: Add unit test for table_bittorrent.py
	* bittorrent/config.py Prepare to keep configuration
	* bittorrent: Make __init__.py the real module entry point
	* bittorrent: quit neubot when the client-side test is finished
	* bittorrent/client.py: print informative messages
	* bittorrent: LOG.oops() if "testdone" is not subscribed
	* bittorrent/sched.py: use a single next-piece scheduler
	* bittorrent/peer.py: Re-add robustness in channel adaptation
	* Merge branch 'bittorrent-love' into next
	* net/poller.py: pass args and kwargs correctly to tasks
	* log: Use the database only when we're the agent
	* log: periodically prune logs saved into the database
	* Merge branch 'log-database' into next
	* net/poller.py: be more precise wrt Task.timestamp
	* config.py: allow to __getitem__ from CONFIG
	* Move configuration helpers from bittorrent/config.py to config.py
	* bittorrent/__init__.py: grammar
	* main/common.py: Version must not end with newline
	* state.py: LOG.debug() on statechange
	* rendezvous/client.py: sort imports
	* rendezvous/client.py: Simplify code using lambda
	* rendezvous/client.py: No need to use StringIO
	* rendezvous/client.py: Factor out some common code
	* rendezvous/client.py: add brief file description
	* rendezvous/client.py: grammar
	* rendezvous/client.py: Ditch self.testing state variable
	* rendezvous/client.py: Use "testdone" instead of TESTDONE
	* rendezvous/client.py: _protected nazism
	* rendezvous/client.py: silently ignore the count argument
	* rendezvous/client.py: more cosmetics
	* Merge branch 'rendezvous-love' into next
	* database: Bump major version number because of log table
	* rendezvous/client.py: Move safety checks in connection_lost()
	* rendezvous/client.py: Use lambda to simplify code
	* rendezvous/client.py: Always use fresh configuration
	* agent rendezvous.client: Remove duplicate variables
	* Merge branch 'rendezvous-love' into next
	* Make sure CONFIG.register_defaults() scope is always global
	* settings.js: no point in changing agent.daemonize from web gui
	* config: Hide socket buffers options
	* config: Hide rendezvous.server-only variables
	* api/server.py: Very low barrier to prevent damage from kiddies
	* Merge branch 'config-love' into next
	* Fixed setup.py
	* Merge branch 'next.evfire' into next
	* it.js: shorter translation
	* rendezvous/server.py: bugfix need-update? algorithm
	* utils.py: strip version numbers before comparison
	* neubot/gui: message boxes using various GUIs
	* on_gui_login.py: check updates and privacy on gui login
	* neubot/main.py: add the on_gui_login command
	* neubot.nsi: run on_gui_login command on user login
	* unix_root: Add autostart .desktop file for GNOME
	* Makefile: install .desktop file to run some checks on login
	* Merge branch 'on-gui-login-initial' into next
	* Small fixes in infobox_tk and infobox_gtk
	* Merge branch 'next.evfire' into next
	* on_gui_login.py: make testing from commandline easier
	* gui: function infobox -> class InfoBox
	* gui: fallback to a valid InfoBox(message) stub
	* gui: add testing code to generic infobox.py too
	* gui: build a list of all the available infoboxes
	* gui: autoclose infobox after timeout
	* gui: add unit test for infobox
	* infobox_gtk.py: button large 1/3 of the window
	* infobox_gtk: use neubot icon
	* Zap infobox_win32: Tk we'll be enough for Windoze users
	* Merge branch 'improve-infobox' into next
	* setup.py: autogenerate sources and data
	* Makefile: use setup.py to install
	* Merge branch 'makefile-use-setup-py' into next
	* Added 'build/' and 'MANIFEST' to cleaned files
	* Handle gracefully failure in privilege dropping
	* Added a comment about PyPy compatibility.
	* main/module.py: changed the way neubot dinamically loads a module's main() at runtime
	* Merge branch 'next.evfire' into next
	* Merge branch 'next'
	* main/__init__.py: no newlines in version pls
	* debian: return package version to -1
	* Release neubot/0.4-rc1

Neubot 0.3.7 [2011-05-20]
	* debian prerm: Consistent check and action
	* http/messages.py: Add response field
	* neubot/utils.py: Add asciify()
	* http/ssi.py: Add minimal support for server-side includes
	* http: add stream.py client.py server.py
	* Merge branch 'new-http-core' into next
	* api_service.py: Service for /api/foo requests
	* ui.py: Reimplement UIServer using http.server
	* Merge branch 'api_service' into next
	* TODO: We should SSI only text/html files
	* http/server.py: SSI text/html resources only
	* www: extract and use header.html, footer.html from index.html
	* Merge branch 'www-split' into next
	* speedtest.js: 80x24 orthodoxy
	* speedtest.js: don't attempt to plot empty data sets
	* www: Append .min to minified javascripts and update header.html
	* header.html: deploy one more media=screen
	* Merge branch 'www-settle' into next
	* README: refer to PRIVACY for privacy policy details
	* PRIVACY: spell out the details of our privacy policy
	* privacy.html: rst2html PRIVACY > privacy.html plus some editing
	* Merge branch 'privacy-policy' into next
	* marshal.py: Rewrite with more knowledge
	* neubot: Move config.py complexity to api_service.py
	* database.py: Hack for XML-on-database oddities
	* Merge branch 'new-marshal' into next
	* www: load the proper javascript for each page
	* http/server.py: Don't attempt to process empty services list
	* shell.py: Very simple command line shell
	* boot.py: Faster boot procedure
	* neubot neubotw: Try using new startup procedure
	* Merge branch 'main-maint' into next
	* start-neubot-daemon: Now safe to run neubot start
	* boot.py: Zap two premature sys.exit()
	* boot.py: We don't need to specify /index.html
	* boot.py: win32: Do not spawn a thread when already running
	* boot.py: Simplify logic
	* boot.py: The webgui command does not make sense
	* rootdir.py: Auto-compute location of WWW files
	* ui.py: Import WWW from neubot.rootdir
	* pathnames.py: Moved WWW to neubot.rootdir
	* boot.py: Auto-compute location of Neubot sources
	* Merge branch 'auto-paths' into next
	* system.px unix.py win32.py: Import code for daemons from utils.py
	* agent.py: The new default command
	* shell.py: Include the agent command
	* boot.py: Launch agent.py not rendezvous.py
	* rendezvous.py: Delete not-true-anymore comment
	* Merge branch 'agent' into next
	* api_service.py: Add missing blank line
	* http/server.py: Allow to register already-instantiated service
	* http/messages.py: Cosmetic changes
	* http/messages.py: Use collections.defaultdict
	* http: Automatically print headers, decommission prettyprint
	* http/stream.py: Do not debug() receiver state
	* Merge branch 'decommission-prettyprint' into next
	* utils.py: Decommission unused XML code
	* neubot: One step closer decommissioning fixkwargs()
	* neubot: Start decommissioning Stats and SimpleStats
	* utils.py: Sanitize imports
	* utils.py: I'm taking heed of it for 2011 too
	* Merge branch 'utils-maint' into next
	* marshal.py: Allow to serialize/unserialize vectors too
	* rendezvous.py: Preparatory work for the next patch
	* rendezvous.py: Convert to ServiceHTTP
	* rendezvous.py: Use marshal.py for RendezvousRequest
	* rendezvous.py: Use marshal.py for RendezvousResponse
	* rendezvous.py: Use new http client
	* rendezvous.py: Zap unused imports, style
	* rendezvous.py: Don't need to import/use ui anymore
	* rendezvous.py: Replace flags with boolean
	* rendezvous.py: Hardcode VERSION to 0.3.7
	* Merge branch 'rendezvous-maint' into next
	* agent.py: Bugfix RendezvousClient.__init__() invocation
	* database.py: Work-around timestamp being a float
	* speedtest.py: Make sure SpeedtestCollect.timestamp is an integer
	* utils.py: improved version comparation algorithm
	* boot.py: Merge shell.py and dispose of shell.py
	* api_client.py: Use m.compose(...) not compose(m, ...)
	* speedtest.py: Make sure we use __init__() and inherit from object
	* speedtest.py: Use marshal.py for marshalling/unmarshalling
	* speedtest.py: Use m.compose(...) and not compose(m, ...)
	* Merge branch 'speedtest-maint' into next
	* HTTPListener: Immediately pass new request to the parent
	* http/stream.py: Avoid pychecker warning
	* http/server.py: Add sample ServiceHTTP to avoid pychecker warning
	* neubot/http: Avoid another pychecker warning
	* Merge branch 'http-reduce-warnings' into next
	* notify.py: Rewritten using collections.defaultdict()
	* speedtest.py: Unblur negotiator to tracker boundaries
	* speedtest.py: One more put-two-blank-lines-around-classes patch
	* speedtest.py: Get rid of RESTRICTED
	* speedtest.py: Re-implement server-side using ServerHTTP
	* speedtest.py: s/connection/stream/ after previous patch
	* doc/speedtest-server.png: Dispose of now-obsolete documentation
	* Merge branch 'speedtest-use-new-http-server' into next
	* bittorrent/stream.py: Don't upcall parent on connection lost
	* bittorrent/main.py: Get rid of VERBOSER
	* bittorrent/main.py: s/handler/stream/
	* http/message.py: Remove unused import
	* net/stream.py: configure(): s/dictionary/conf/
	* net/stream.py: configure(): Use dictionary.get(key, default)
	* net/streams.py: Get rid of StreamMeasurer
	* VERBOSER was actually not such a good idea
	* Merge branch 'stream-simplify' into next
	* http/server.py: process_request: s/func/serve/
	* Don't pass listener param to http services
	* net/stream.py: GenericProtocolStream: Cosmetic changes
	* http: Don't pass upstream reference to connector or listener
	* http/server.py: ServerHTTP: s/dictionary/conf/
	* BTListeningPeer BTConnectingPeer: s/dictionary/conf/
	* net/stream.py: Simplify stream construction
	* http: Move connection_ready() up one level
	* Merge branch 'stream-v3' into next
	* Make sure we compute time-to-connect()
	* http/client.py: Register with measurer when needed
	* Migrate ap_client.py to http/client.py and propagate changes
	* http: support for sending chunked transfer encoding
	* arcfour.py: add support for generating random data for N seconds
	* speedtest.py: Cosmetic changes
	* speedtest.py: SessionTracker: zap comment
	* speedtest.py: Don't routinely print queue length if not needed
	* Elaborate on the idea of http server and child server
	* net/stream.py: allow to connect() more than one socket at a time
	* net/stream.py: Make sure SSL works
	* http/client.py: allow to connect to a given uri
	* http/client.py: seminal work to load arbitrary http clients
	* http/client.py: allow to load http class from another module
	* speedtest.py: deploy bits of the new speedtest client
	* Merge branch 'new-speedtest-client-alpha' into next
	* speedtest.py: new complete speedtest client
	* net/stream.py: allow to measure RTT only
	* speedtest.py: Make sure new tests collects results
	* speedtest.py: start using new speedtest client
	* net/stream.py: add two extra stat counters
	* speedtest.py: use bytes_*_tot to measure speed
	* net/streams.py: Measure: factor measure_speed() out
	* net/stream.py: measure_speed(): safer delta <=0 retval
	* net/stream.py: Measurer: gargabe collect measure()
	* Allow speedtest.py to perform incremental measurements
	* speedtest.py: don't connect() all connections at the same time
	* Merge branch 'incremental-measurements' into next
	* speedtest.py: always use two connections
	* speedtest.py: decommission old client code
	* speedtest.py: Prefer import to from..import for stdlib classes
	* Move neubot/boot.py to neubot/main.py
	* agent.py: Bypass neubot/ui.py
	* neubot/ui.py: F.O.D.
	* rm http/clients.py http/servers.py
	* http/utils.py: Fetch defs from http.stream not http.handlers
	* http/utils.py: throw away unused make_filename wankery
	* decommission http/handlers.py net/streams.py
	* neubot/tools: decommission
	* My dying neubot/pathnames.py
	* pathnames.py sleeps with the fishes
	* Merge branch 'slaughterhouse-number-five' into next
	* speedtest.py: Use one obytes per stream
	* Fix broken speedtest.py measurements
	* Update TODO file
	* Move system stuff below neubot/system/
	* Funeral portrait for ismacosx()
	* system/unix.py should not test for if os.name == "posix"
	* system/unix.py: Remove unused import
	* system/win32.py: Zap __all__ and if os.name == "nt" check
	* Move api stuff into neubot/api/
	* http: Rename messages.py to message.py
	* Version in neubot/__init__.py passed away
	* New home for compose() in messages.py: the recyle bin
	* Move database.py to database/__init__.py
	* Move rendezvous.py to rendezvous/__init__.py
	* Move speedtest.py to speedtest/__init__.py
	* Move debug-related files to neubot/debug
	* Merge branch 'tidy' into next
	* log.py: simplify code
	* system: move drop_privileges after go_background
	* Implement and use system-dependent redirect_to_dev_null()
	* Implement and use system-independent write_pidfile()
	* Dirge for utils.py's become_daemon()
	* Implement and use want_rw_file() in database.py
	* utils.py: ditch getpwnaml() getpwnamlx()
	* Merge branch 'cleanup-utils' into next
	* Taking care of neubot/debug/__init__.py
	* marshal.py: Move unicodize() stringify() to utils.py
	* s/asciify/asciiify/g using the new sed_inplace
	* scripts: Tweak sed_inplace to accept more than one file
	* utils.py: Simplify asciiify() implementation
	* utils.py: Implement and share function to convert string to bool
	* Merge branch 'coercers' into next
	* rendezvous/__init__.py: Adjust connection_failed() signature
	* Meld times.py into utils.py and propagate changes
	* utils.py: Add and use support to cherry-pick classes at runtime
	* www js: mv neubot.js index.js and propagate changes
	* www: get rid of non-existent CSS classes
	* www: replace absolute links with relative links
	* css/style.css: add newline at end of file
	* Merge branch 'www-maint-alessio' into next
	* www js: created function update_sidebar() and called it from comet
	* js/state.js: ... and justice for stray whitespaces
	* js/index.js: kill outdated comment
	* www: s/testName1/testNameSideBar/
	* js/state.js: UTF-7 integralism
	* Merge branch 'js-maint' into next
	* api/server.py: Sort imports
	* api/server.py: Return {} on POST /api/config
	* After POST /api/config return only what changed via /api/state
	* Merge branch 'api-config-tweaks' into next
	* log.py: Sort imports
	* log.py: Two blank lines around Log, please!
	* log.py: Reword docstring
	* log.py: Remove protection against comet storms
	* log.py: Add _log() a SEVERITY argument
	* log.py: Improve test unit
	* log.py: Rewrite that crappy serialization mechanism
	* api/server.py: Add /api/log to read recent logs
	* log.py: Fix exception() with respect to splitting lines
	* Merge branch 'exhume-api-log' into next
	* api/server.py: Provide API support for /api/testnow
	* api/server.py: Make sure we JSONize logs
	* api/server.py: Unbreak previous by importing json
	* config.py: Keep configuration into a modified dictionary
	* api/server.py: Provide more information on internal errors
	* config.py: Spit out more meaningful errors
	* Merge branch 'config-on-dict' into next
	* config.py: Avoid pychecker warning
	* www: add log page
	* www: seek and destroy some more white spaces
	* Do not change directory to profile dir
	* From neubot import system to reduce number of imports
	* Unconditionally drop root privileges
	* Only the agent must write pidfile
	* write_pidfile(): Convert integer to string to avoid exception
	* Write pidfile only when needed
	* Merge branch 'system-love' into next
	* Add CONFIG flags to manage privacy settings
	* api/server.py: Write the database after POST /api/config
	* database: query_results_functional(): zap unused arguments
	* database/__init__.py: Remove outdated comment
	* database: Move code to migrate to database/migrate.py
	* database/__init__.py: Zap unused imports, sort remaining ones
	* Merge branch 'update-database' into next
	* database/__init__.py: Abstraction with sugar
	* api/server.py: database.dbm != sqlite3.Connection
	* scripts: Move make clean logic into a script
	* utils.py: Make sure we use integers to represent booleans
	* Keep boolean values consistent across CONFIG lifetime
	* config.py: Allow properties names to contain dots
	* config.py: store properties descriptions too
	* Merge branch 'improve-config' into next
	* boot.py: generic bootstrap code for neubot commands
	* net/stream.py: Avoid multiple from neubot.utils import
	* net/stream.py: do not hide soclose() errors
	* Merge branch 'stream-love' into next
	* net/stream.py: unit test: connect multiple sockets at once
	* net/stream.py: We don't need to define KIND* constants
	* net/stream.py: test unit: add echo protocol
	* Move measurer bits from net/stream.py to net/measurer.py
	* Support for serializing connect() landed into net/stream.py
	* Don't store reference to measurer into configuration
	* Merge branch 'more-stream-love' into next
	* www: highlight of tabs
	* www: improve getSetConfigVar function to get/set multiple values
	* www: added getConfigVars and setConfigVars
	* www: privacy now works
	* www: modified n/a in status
	* www: added settings page
	* www: added seconds to log page
	* www: moved numchanged variable
	* www: more whitespace intolerance
	* Merge branch 'palmero-www' into next
	* log.py: Put latest log first
	* www: added error function in setConfigVars
	* database: sort latest result first
	* speedtest/__init__.py: quick hack for measurer
	* agent: Bind or die when UI is enabled
	* www: moved tooltip code in state.js
	* www: abandoned idea to insert chart in homepage
	* www: when config variable change, the setting page is updated
	* Beating the ass of white lines again
	* Merge branch 'palmero-www' into next
	* speedtest: force the measurer we want just before we need it
	* www: added support for config labels and improve colors in Settings page
	* agent.py: Use boot.py config.py instead of options.py
	* api/client.py: Use boot.py config.py instead of options.py
	* net/CA.py: Use boot.py config.py instead of options.py
	* Merge branch 'decommission-options' into next
	* net/stream.py: Use boot.py config.py instead of options.py
	* main.py: updated options to start/stop/status
	* www: bugfix in settings.js
	* database: Make sure /api/speedtest returns real results
	* www: added feature not to modify dangerous settings
	* log.py: allow to print exceptions at different error levels
	* log.py: unit test: make sure we deal with exceptions gracefully
	* api/server.py: Use LOG.info() for ConfigError errors
	* Merge branch 'config-errors' into next
	* speedtest: Maybe this time I'll fix measurer for real
	* www: now charts rule
	* log.py: Add oops() function
	* net/stream.py: Use oops for the unicode warning
	* Merge branch 'discourage-sending-utf8' into next
	* api/server.py: sort configlabels
	* config.py: killed force property
	* http/message.py: check that the http request is utf8
	* log.py: increase log size
	* log.py: reverse log order again
	* notify.py: TESTDONE should not run periodically
	* notify.py: Bugfix the TESTDONE hack
	* system/linux.py: collect system-dependent stats
	* utils.py: Add get_uuid()
	* speedtest/gen.py: Generate random results
	* database/table_config.py: Algorithms for config table
	* database/__init__.py: Use table_config
	* config.py: Use table_config
	* Merge branch 'table-config' into next
	* speedtest/__init__.py: Make sure we use client uuid
	* database/migrate.py: migrate from 1.1 to 2.0
	* database/migrate.py: Give credit to Alessio
	* database/migrate.py: s/client_uuid/uuid/g
	* speedtest/get.py: s/client_uuid/uuid/
	* speedtest/gen.py: use relative not absolute time
	* database/table_speedtest.py: Algorithms for speedtest table
	* database/migrate.py: Make 1.1 -> 2.0 migration more robust
	* Use code in database/table_speedtest.py
	* Merge branch 'table-speedtest' into next
	* net/stream.py: save conf reference into stream
	* net/stream.py: move duration checks in GenericProtocolStream
	* net/stream.py: separate handling of send and recv socket buffers
	* net/stream.py: allow to tune and reduce default chunk size
	* Merge branch 'stream-love' into next
	* bittorrent/main.py: migrate to neubot/config.py
	* log.py: allow to print custom message on complete()
	* log.py: add timing for operations
	* log.py: allow to personalize progress indicator
	* log.py: remove unused import
	* log.py: avoid pychecker warnings
	* log.py: add testing code for in-progress feature
	* Merge branch 'log-love' into next
	* net/stream.py: all-or-nothing semantic for multi-connect
	* HeadlessMeasurer: allow to restart from scratch
	* log.py: more precise check for exceptions in unit test
	* http/server.py: collapse all imports from neubot.utils
	* http/server.py: convert from options.py to config.py model
	* http/server.py: allow to disable mime-guessing code
	* http/server.py: syntactic sugar to serve current directory
	* Merge branch 'http-love' into next
	* agent.py: pass correct properties names to http/server.py
	* http/client.py: collapse imports from neubot.utils
	* http/client.py: remove unused import
	* http/client.py: migrate from options.py to config.py
	* Merge branch 'http-love' into next
	* Move neubot/options.py into the attic
	* Return to old-style speedtest
	* config.py: do not return ConfigDict() on select()
	* Merge branch 'speedtest-backout' into next
	* speedtest: Remove /speedtest/download/2 code
	* speedtest: make TestServer self-sustained
	* Merge branch 'speedtest-love' into next
	* arcfour.py: No more RandomData users
	* log.py: don't flood log with access logs
	* privacy: Responsible is JC, not DAUIN director
	* speedtest: don't save body when not needed
	* main.py: allow to turn on memleak debugging
	* speedtest/client.py: make sure we measure connect_time
	* speedtest: pass ClientSpeedtest the real configuration
	* http/stream.py: silence http stream a bit
	* http: pretty print body if possible
	* config: Not a good idea to copy just a subset
	* js/state.js: fetch /api/config just once
	* www/settings.html: do not encourage people to make random changes
	* css/style.css: there is no justification for this commit
	* speedtest/client.py: unbreak /api/state for negotiate and collect
	* http/utils.py: remove unused import
	* notify.py: dispose of deprecated code
	* api/server.py: Make /api more transparent and debuggable
	* api/server.py: garbage collect /api/testnow
	* api/server.py: return available APIs on GET /api
	* api/server.py: allow to inspect POLLER and NOTIFIER state
	* Merge branch 'api-love' into next
	* Remove neubot.dia icon from the repository
	* Make sure update_tasks() does not misbehave
	* speedtest/client.py: remember to stop the measurer
	* net: s/closing/closed/ in Connector and Listener
	* api/server.py: import version from boot
	* Comment on what should be done just after release
	* rendezvous: move message-handling code to compat.py
	* Copy rendezvous server code to rendezvous/server.py
	* Copy rendezvous client code to rendezvous/client.py
	* agent.py: use new rendezvous code by default
	* Shrink neubot/rendezvous/__init__.py
	* Merge branch 'rendezvous-love' into next
	* update.py: download and verify next version archive
	* update.py: specify the correct file name for MacOSX
	* rendezvous/server.py: use releases.n.o instead of w.n.o/download
	* Do not use with because Python 2.5 does not support it
	* rendezvous/server.py: allow to decide default speedtest server
	* rendezvous/server.py: we must return a list not a scalar
	* http/client.py: make connect_uri() more robust
	* rendezvous/client.py: subscribe before connect_uri
	* Add main() to speedtest client
	* Move speedtest TestServer into speedtest/server.py
	* arcfour.py: use warning again
	* Move a copy of speedtest messages to speedtest/compat.py
	* Copy to speedtest/session.py session-management code
	* Copy to speedtest/negotiate.py speedtest NegotiateServer
	* Merge branch 'speedtest-love' into next
	* speedtest/client.py: fetch structures from speedtest/compat.py
	* main.py: implement speedtest command using speedtest.client
	* We can now dispose of speedtest/__init__.py unused code
	* Merge branch 'speedtest-love' into next
	* api/server.py: alphabetically sort imports
	* api/server.py: remove unused import
	* api/server.py: import DATABASE not database from neubot.database
	* api/server.py: use table_speedtest.listify()
	* api/server.py: api_speedtest: relax checks on since, until
	* Merge branch 'api-server-love' into next
	* speedtest/negotiate.py: use table_speedtest
	* speedtest/client.py: use table_speedtest
	* api/server.py: Start moving properties to config.py
	* speedtest: cast privacy settings to integers
	* Merge branch 'speedtest-db-and-privacy' into next
	* Improve database code
	* boot.py: let the user decide not to merge from environment
	* boot.py: allow to list all the available properties
	* config.py: undo the starts-with-enable hack
	* boot.py: cosmetic changes
	* main.py: sync
	* Merge branch 'main-and-options' into next
	* log.py: cosmetic changes
	* system/win32.py: decommission NTEventHandler code
	* bin/neubotw: re-enable redirect-from-the-beginning
	* Merge branch 'log-love' into next
	* start-neubot-daemon: search for python2.7 too
	* Remove obsolete etc/neubot/config
	* doc/neubot.1.txt: remove references to /etc/neubot/config
	* man1/neubot.1: sync with doc/neubot.1.txt
	* Makefile: remove rules to install configuration file
	* Merge branch 'delete-old-etc-file' into next
	* Makefile: pathnames.py no longer exists
	* Makefile: remove seldom used bdist commands
	* Makefile: even lint was not used very often
	* Makefile: we can avoid the hidden _all target
	* Makefile: echo -n does not work on the Mac, so use printf
	* Makefile: we can kill some more blank lines
	* Makefile: PREFIX is just fine
	* neubot.nsi: deploy some more white lines
	* setup.py: update list of things to install
	* Makefile: shrink archive a little bit
	* Makefile: /etc/neubot is not relevant anymore
	* Makefile: simplify and improve source-installing procedure
	* Makefile: make some loops more robust
	* Makefile: do not install apple .DS_Store
	* Replace scripts to compute sums with python equivalent
	* Merge branch 'build-system-love' into next
	* Makefile: tell the user we're going to install
	* main.py: make sure we can start neubot using an alternate port
	* speedtest/client.py: adjust log messages for negotiation
	* database: Special case for when database is in memory
	* net/stream.py: add __repr__ to Stream
	* speedtest/session.py: add __repr__ to SessionState
	* regress: add test for speedtest
	* Be a little more paranoid about http.server.rootdir
	* Good-enough generator for data to exchange during tests
	* api/server.py: more UTF-7 integralism
	* privacy.html: move privacy policy into a textarea
	* privacy.py: Make sure privacy settings make sense
	* privacy.js: remove now unneeded ternary-operator gymnastics
	* privacy.js: notify the user if we cannot save privacy settings
	* Merge branch 'privacy-love' into next
	* main.py: be patient, wait for web gui to become ready
	* js: make sure we always put functions inside namespaces
	* utils.js :s/^\ *$//g
	* Make sure root directory guessing works for frozen win32 exe
	* scripts/release: run ./scripts/cleanup to remove garbage
	* Immediately break POLLER.loop() on /api/exit
	* config.py: Export uuid and version
	* Listener: make the accept() procedure much more robust
	* main.py: export api.client module
	* main.py: more terse --help output
	* database/main.py: don't use boot.common
	* doc man: Updated manual page
	* patches: add patch to fix some bits of the manual page
	* Manpage tweaks
	* Merge branch 'next'
	* Release neubot/0.3.7

Neubot 0.3.6 [2011-03-18]
	* arcfour.py: New home for ARC4 code
	* net/streams.py: Import ARC4 code from arcfour.py
	* net/streams.py: Unbreak ARC4
	* Merge branch 'arcfour' into next
	* bittorrent/main.py: Simplest possible transmission test
	* bittorrent/main.py: Use arcfour_new to scramble pieces
	* bittorrent/main.py: Make piece scrambling conditional
	* bittorrent/main.py: Allow to obfuscate the whole protocol
	* bittorrent/streams.py: Pass CHOKE/UNCHOKE INTERESTED/NOT_INTERESTED
	* bittorrent/main.py: Honour CHOKE/UNCHOKE INTERESTED/NOT_INTERESTED
	* bittorrent/main.py: Keep at most 32 pieces in flight
	* bittorrent/main.py: Allow to ovverride default sobufs size
	* bittorrent/streams.py: Increase robustness and verbosity
	* Merge branch 'bittorrent-test' into next
	* neubot/times.py: The various definitions of time
	* Always pull the times functions from neubot/times.py
	* Merge branch 'maint-time' into next
	* system.py: Generic support for OSes
	* Always use neubot.system
	* Merge branch 'maint-system' into next
	* times.py: Zap a couple of whitespace errors
	* neubot/log.py: Simplify encoding to JSON
	* neubot/log.py: Remove __all__[]
	* neubot/log.py: Remove deprecated code
	* log.py: Avoid pychecker warning
	* Make sure we always import LOG from neubot.log
	* Merge branch 'maint-log' into next
	* neubot/options.py: Remove __all__[]
	* net/CA.py: Do not import * from options.py
	* options.py: Do not suggest to import *
	* Move neubot/options.py manual to do/neubot.3.txt
	* Merge branch 'maint-options' into next
	* net/pollers.py: Remove unneeded __del__
	* net/pollers.py: Remove stats-printing code
	* net/pollers.py: Style
	* net/pollers.py: s/PollerTask/Task/g
	* net/pollers.py: Pass exceptions upstream
	* net/pollers.py: No more global funcs, just one global object
	* Always import POLLER from net.pollers
	* Merge branch 'maint-poller' into next
	* neubot/net: mv pollers.py poller.py
	* Make sure we always import from net.poller not net.pollers
	* net: Copy to stream.py the new classes of streams.py
	* Make sure we import from stream (not streams) where needed
	* bittorrent: mv streams.py stream.py
	* bittorrent/main.py: Import from bittorrent.stream not streams
	* Merge branch 'rename-files' into next
	* Revert "net/pollers.py: Pass exceptions upstream"
	* streams.py: Remember to remove self.stats
	* utils.py: Cosmetic changes
	* utils.py: Better to raise ValueError than Exception
	* handlers.py: Remove unused import
	* handlers.py: Use import rather than from..import for collections
	* messages.py: Cosmetic changes
	* messages.py: Store body length in a message field
	* messages.py: Use get(..., default) instead of fixkwargs
	* messages.py: Make compose() a method of Message
	* Merge branch 'http-maint' into next
	* README: Update copyright date to include 2011 too
	* marshal.py: Implement JSON_marshal()
	* marshal.py: Allow to test either XML or JSON marshalling
	* marshal.py: Zap a redundant `continue`
	* marshal.py: `object` is a reserved word
	* marshal.py: Remember to export JSON_marshal
	* marshal.py: endode -> encode
	* config.py: Return a JSON rather than an XML
	* ui.py: /api/config mimetype: text/xml -> application/json
	* marshal.py: Update to use LOG instead of log
	* Merge branch 'json-config' into next
	* marshal.py: One more endode -> encode fix
	* marshal.py: Implement XML_unmarshal()
	* database.py: Allow to export speedtest results using JSON
	* ui.py: Add /api/speedtest to pull JSON results
	* ui.py: Bye bye /api/results /api/results2
	* database.py: Bye bye cache and old methods to access results
	* Merge branch 'json-speedtest' into next
	* statusicon.py: Always create the statusicon menu
	* notify.py: Use all-uppercase for global objects
	* notify.py: Allow to pass publish() the opaque time
	* Merge branch 'notify-T' into next
	* state.py: Rewrite to reduce complexity and use JSON
	* api_client.py: Add client that tracks /api/state using comet
	* ui.py: Update to use the new code in state.py, api_client.py
	* speedtest.py: Update to use the new code in state.py
	* rendezvous.py: Update to use the new code in state.py
	* statusicon.py: Update to use the new code in api_client.py
	* Merge branch 'json-state' into next
	* speedtest.py: Re-add removed-by-mistake latency.start()
	* Added button for start/stop daemon from web interface
	* Modified config in js to accept JSON
	* Delete function() in js
	* neubot.js: Reindent after function(...)() removal
	* neubot.js: Get rid of executeFunctionByName
	* neubot.js: Revert quick and dirty fix-update-box attempts
	* neubot.js: Be explicit: use jQuery and not the dollar symbol
	* js/contrib.js: new file that contains contributed code
	* js: Break up libneubot.js into three new files AND switch to JSON
	* A moment of silence for our beloved js/results.js
	* www: Make sure updateUri is a clickable hyperlink
	* www: Update to use new javascript infrastructure
	* results.html: Rewrite input form to filter results by date
	* www: Rename results.html to speedtest.html
	* js/neubot.js: Update state management to use JSON
	* Merge branch 'json-web' into next
	* utils.js: Changed upper case letter
	* www: Make links relative instead of absolute
	* speedtest.js: Note we should use a larger font for axis labels
	* speedtest.js: Throw away outdated comment
	* speedtest.js: Dispose of old, commented-out code chunks
	* speedtest.js: Sync duplicated code with neubot.js
	* speedtest.py: Minor cosmetic changes
	* net/stream.py: Become daemon on -Ddaemonize
	* bittorrent/main.py: Become daemon on -Ddaemonize
	* main.py: Allow to invoke net/stream.py main()
	* bittorrent/main.py: Adjust --help message
	* net/stream.py: Adjust --help message
	* net/stream.py: Use 'stream' not 'net' prefix for options
	* Merge branch 'new-tests' into next
	* tools/dbtool.py: Fix version number
	* net/stream.py: Zap unused import
	* speedtest.js: re-enable zoom (and other plugins)
	* speedtest.html: zap obsolete description
	* speedtest.html: center-align view-last control
	* Merge branch 'www-fixes' into next
	* index.html: Fix js inclusion order.
	* js: clear latest results during test
	* js: Insert enable/disable button in speedtest results page
	* jquery.qtip.js: updated to new version
	* neubot.js: prevStatus variable wiped
	* Merge branch 'www-maint' into next
	* rendezvous.py: Honour CONFIG.enabled flag
	* rendezvous.py: Make sure we sched at most 1 rendezvous at a time
	* Merge branch 'www-enable-disable' into next
	* arcfour: Lazy 'arc4 not available' warning
	* ui.py: Return 204 No Content to POST /api/config
	* config.py: Allow to export as a dictionary
	* ui.py: Trigger state change after POST /api/config
	* js: update config.enabled via /api/state
	* utils.js: Comment on the effect of recent 204 No Content change
	* Merge branch 'api-config-www' into next
	* README: clarify collection vs individual contribution copyright
	* speedtest.js: UTF-7 integralism
	* speedtest.js: Soft-tabs integralism
	* speedtest.js: Larger fontSize for plot
	* speedtest.js: Do not put 'hours ago' on X axis anymore
	* speedtest.js: Very simple X axis labels rendering
	* speedtest.js: changed xaxis data in graph
	* Merge branch 'beautify-x-axis' into next
	* patches: add py2exe-patch to ensure stderr is a blackhole
	* Revert "bin/neubotw: Make sure stderr.write() is a no-op"
	* utils.js: more UTF-7 integralism
	* utils.js: Avoid IE8 error
	* utils.js: blank-line-around-funcs integralism
	* utils.js: 80x24 integralism
	* Revert "POST /api/state returns 204 No Content" change
	* utils.js: getSetConfigVar(): Honour id parameter
	* www: Try to be less ambiguous when we have not performed any test
	* index.html: Do not mention the number of Neubots in queue
	* TODO: We should remove queue_len from speedtest-returned info
	* www: More informative text when we know nothing
	* index.html: Explain how to run a test now
	* www: Link to DAUIN not just to Polito
	* bittorrent/main.py: Choose better default address
	* bittorrent/main.py: Delegate buffer scaling to the sender only
	* bittorrent/main.py: Allow to control test duration
	* net/stream.py: Default test duration to 10 seconds
	* net/stream.py: Choose better default address
	* bittorrent/main.py: Also measure connect() time
	* Merge branch 'friendlier-experimental-tests' into next
	* arcfour.py: Downgrade to debug() ARC4 warning
	* debian/control/prerm: Attempt to kill running statusicon
	* state.py: Update current for canonical state changes only
	* neubot/statusicon.py: Cosmetic changes
	* state.js: Throw-away obsolete comment
	* neubot.js: Update comment wrt neubot.js vs index.js dilemma
	* neubot.js: s/tag/event/ in comment
	* neubot.js: Ignore negotiate.queue_len
	* neubot.js: let's deploy some more blank lines
	* neubot.js: Tweak comment
	* Merge branch 'js-maint' into next
	* statusicon.py: Unbreak update-checking code
	* neubot.js: Unbreak update-checking code
	* Merge branch 'check-updates' into next
	* neubot.1.txt: Correct Antonio's email
	* neubot.1.txt: Sync copyright statement with README
	* neubot.1.txt: Update manual page's copyright
	* neubot.1.txt: We now support two more transmission tests
	* neubot.1.txt: We now export data to JSON not XML
	* neubot.1.txt: Give credit to people that helped
	* man1/neubot.1: Regen
	* Merge branch 'update-man' into next
	* www: Unbreak sidebar spans
	* utils.js: Assign to object in a less baroque way
	* index.html: dispose of stray whitespace
	* bin/neubotw: Comment LOG.redirect() out and unbreak Win7
	* Release neubot/0.3.6

Neubot 0.3.5 [2011-02-24]
	* options.py: Fix a typo in an error message
	* fake-db.py: improved fake rows generation
	* move fake-db.py to neubot/tools/dbgen.py
	* neubot/tools: Directory for standalone tools
	* tools/dbtool.py: Standalone tool to analyze database
	* tools/dbtool.py: Hackish fix for the accented letter issue
	* tools/dbtool.py: Add command to count unique uuids per day
	* neubot/tools/dbtool.py: add __init__() to SpeedtestResult class
	* dbtool.py: Let the user decide treshold on -C
	* dbtool.py: check if database files exist before trying to open them
	* dbtool.py: add __init__() to Anonymizer, CityResolver and ASNResolver
	* tools/dbtool.py: Fix version number
	* Merge branch 'topic.tools' into next
	* marshal.py: Rules to marshal and unmarshal simple classes
	* config.py: Update to use the new marshal.py module
	* ui.py: Use the updated config.py module
	* Merge branch 'topic.update-api-config' into next
	* Merge branch 'topic.typo-in-options' into next
	* streams.py: Allow to override default socket buffers size
	* streams.py: Add command line option to set socket buffers size
	* Merge branch 'topic.stream.buffer' into next
	* Do not import from neubot.net.connectors and neubot.net.listeners
	* neubot.net: Remove deprecated connectors.py listeners.py
	* Merge branch 'topic.rm-connector-listener' into next
	* streams.py: Add generic protocol to unit test
	* streams.py: in main() use the new GenericProtocol
	* streams.py: Remove unused protocols, connectors, listeners
	* streams.py: Rename clients the option count
	* streams.py: Allow to interrupt client(s) after N seconds
	* streams.py: Make sure -D duration=N prints stats for N seconds
	* Merge branch 'topic.stream-allow-download-test' into next
	* Merge branch 'topic.stream-improve-usage' into next
	* streams.py: We don't need to pass count to send_complete()
	* streams.py: Fork current Stream implementation
	* Revert "Revert "More clever buffer usage, kill send_pos""
	* streams.py: Remove backward compatibility code from new stream
	* streams.py: start_recv: default maxlen to MAXBUF
	* doc: Add documentation for stream
	* streams.py: Compact the sendblocked and recvblocked cases
	* streams.py: Remove a couple of useless set_readable/writable calls
	* streams.py: Be paranoid, make the code slightly more robust
	* streams.py: Minor cosmetic changes
	* streams.py: rename close() shutdown() in Stream
	* streams.py: Refine the message we print on explicit close
	* streams.py: Adjust the version number
	* streams.py: Remove the ssl handshaking code from SSLWrapper
	* streams.py: Make sure client always kicks SSL negotiation off
	* Merge branch 'topic.fork-stream' into next
	* Merge branch 'topic.enhance-new-stream' into next
	* Merge branch 'topic.refine-new-stream' into next
	* Merge branch 'topic.ssl-handshake' into next
	* win32: Remove executables due to false-positive malware allegation
	* win32: Remove executables due to false-positive malware allegation
	* doc/protocol.png: Import new version of the protocol model
	* streams.py: Remove stream vs protocol semantic confusion
	* connector.py: Rebase on the new stream
	* connector.py: Implement send_piece()
	* connector.py: Fix the way we handshake the peer
	* connector.py: Cosmetic changes
	* connector.py: Print something useful when in verbose mode
	* main.py: New main for BitTorrent
	* neubot/main.py: Import BitTorrent's main from bittorrent/main.py
	* Merge branch 'topic.bittorrent-use-new-stream' into next
	* bittorrent: Remove unused files: handler.py wrapper.py
	* bittorrent: mv connector.py streams.py for simmetry with neubot.net
	* main.py: We have renamed connectors.py streams.py
	* Merge branch 'topic.bittorrent-cleanups-and-cosmetics' into next
	* options.py: override optionxform to fix uppercase options bug
	* net/CA.py: Use all-uppercase option prefix
	* Merge branch 'topic.uppercase-options' into next
	* net/CA.py: Adjust help string to look like streams.py one
	* net/CA.py: Remove the dots at the end of the help string
	* net/streams.py: Adjust help string to look like CA.py one
	* options.py: Adjust help string to look like net/CA.py one
	* bittorrent/main.py: Adjust help string to look like net/CA.py one
	* Merge branch 'topic.help-string-cosmetics' into next
	* Move neubot.ico icon from win32 to icons
	* setup.py: Use icons/neubot.ico for neubot.exe
	* setup.py: Make neubot.exe a windows executable
	* neubot.nsi: Always invoke neubot.exe
	* Make-dist.bat: Don't install the content of win32
	* Remove win32 directory and all its content
	* Merge branch 'topic.win32-remove' into next
	* Make-dist.bat: Make sure we install all of www
	* win32.py: Use NT EventLog handler for logging
	* log.py: Delete comment: now there is NT EventLog handler
	* Merge branch 'topic.log-nt' into next
	* neubot: Add simplejson 2.1.3 sources
	* simplejson: Make sure it's possible to import from neubot
	* compat.py: Import simplejson if json not available
	* Merge branch 'topic.json' into next
	* log.py: Adjust the comment at the beginning
	* log.py: Make sure we use integers for timestamps
	* log.py: Logger: The prefix attribute is not used
	* log.py: Logger: Inherit explicitly from object
	* log.py: Implement a simple InteractiveLogger class
	* log.py: Simplify the code and use InteractiveLogger
	* log.py: Simplify the interactive check a bit
	* log.py: Rename the state variables
	* log.py: Reorganize attributes in __init__
	* log.py: Get rid of _interactive()
	* log.py: Avoid possible but unlikely exception
	* log.py: Simplify a comment
	* log.py: Simplify another comment
	* log.py: Move MAXQUEUE definition around
	* log.py: Another cosmetic change
	* log.py: Add function to export using json
	* log.py: Remove getlines() because it's unused
	* log.py: The global object must have an all-uppercase name
	* log.py: Deprecate module-wide methods
	* log.py: Enhance unit test and dump json
	* log.py: clarify where BackgroundLogger comes from
	* log.py: With windows force background logger
	* log.py: Remove unused logging.handlers import
	* Merge branch 'topic.log-simplify' into next
	* dbgen.py: more realistic fake results generation
	* setup.py: Rewritten to drive the win32 build process
	* Make-*.bat: Remove the now-unneeded batch files
	* Revert "log.py: With windows force background logger"
	* bin/neubotw: Script that becomes the windows executable
	* bin/neubot: Import instead of from..import for stdlib
	* setup.py: Build both console and windows executables
	* neubot.nsi: Use neubotw.exe instead of neubot.exe
	* Merge branch 'win32-build-enhance' into next
	* www/results.html: unbreak plots for internet explorer
	* version number on the home page
	* www/index.html: Merge the about with version number info
	* www/results.html: Sync the about with index.html
	* js/results.js: Break x axis lables to unbreak zoom
	* js/ += jqplot.dateAxisRenderer.min.js
	* www/results.html: Import from jqplot.dateAxisRenderer
	* js/results.js: Quick-n-dirty hack to prettify the x axis labels
	* js/results.js: Remove old-n-commented-out x-axis-labels code
	* Merge branch 'adjust-results-plot' into next
	* js: libneubot.js results.js: Use base 10 not base 2
	* js/libneubot.js: Use 3 digits as we do in results.js
	* js/results.js: Use Mbit/s rather than Mb/s
	* Globally replace iB -> iByte
	* Merge branch 'adjust-units' into next
	* www/index.html: Clarify that there is a tab for each test
	* www: index.html results.html: Update primary links
	* results.html: Link to OECD and provide more context
	* Merge branch 'add-context-to-results' into next
	* bin/neubotw: Make sure stderr.write() is a no-op
	* bin/neubotw: Be very silent when running in windows mode
	* Merge branch 'win32-gentler-logging' into next
	* speedtest.py: Use 4 instead of 2 connections
	* neubot/speedtest.py: First calibrate, then measure
	* speedtest.py: Measure download/upload speed every second
	* speedtest.py: upload: use 4 connections if needed
	* speedtest.py: Default to unit_formatter
	* speedtest.py: Use blupixel.net for on-demand tests
	* Merge branch 'enhance-speedtest' into next
	* neubot/speedtest.py: Use speed_formatter NOT unit_formatter
	* js/neubot.js: Make sure we output update URI
	* js/neubot.js: Make sure updates box is visible
	* js/neubot.js: Make sure updateUrl is a link
	* Merge branch 'next'
	* Release neubot/0.3.5

Neubot 0.3.4 [2011-01-18]
	* www/libneubot.js: shared javascript functions
	* www/libneubot.js: make the plot symmetric
	* libneubot.js: add helpers for the new web user interface
	* www/css: location for CSS sheets used by the new web user interface
	* www/image: location for images used by the new web user interface
	* www/js: location for the javascripts required by the new WEB-UI
	* www/new-neubot.*: Development sources of the new Web-UI
	* www/new-neubot.js: black magic to unbreak the tooltip
	* neubot/ui.py: By default use the new Web UI
	* www/new-neubot: disable plots because they kill my browser
	* neubot/tools: Directory for standalone tools
	* tools/dbtool.py: Standalone tool to analyze database
	* tools/dbtool.py: Hackish fix for the accented letter issue
	* tools/dbtool.py: Add command to count unique uuids per day
	* [tools] neubot/tools/dbtool.py: add __init__() to SpeedtestResult class
	* [tools] dbtool.py: Let the user decide treshold on -C
	* Merge branches 'topic.tools' and 'topic.www-api' into next
	* neubot/objgraph.py: Import v1.1b of objgraph
	* Renaming file to clean web interface
	* Edit index
	* Edit style and merge stuff in html file
	* Updated ui.py to use index.html
	* Clean CSS file
	* Clean image folders
	* jqplot folder removed
	* added needed jqplot files
	* moved results.js into js folder
	* deleted unneeded files
	* css/style.css: Increase the page width
	* www/index.html: Minor changes
	* www/results.html: Wrap the old page in the new style
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug' and 'topic.www-new-gui' into next
	* Make sure we import Stats and SimpleStats from neubot.utils
	* http/clients.py: Zap an old comment
	* http/clients.py: Group imports at the beginning
	* http/servers.py: Group declarations at the beginning
	* utils.py: Let Stats and SimpleStats inherit from object
	* neubot/options.py: Generic options parser for all modules
	* net/CA.py: Helper script to create certfiles for testing
	* neubot/www: Wide header
	* neubot/www: Cleanup after wide header patch
	* neubot/www: Add media property to CSS tags
	* neubot/www: Be readable by braille and nongraphic browsers too
	* neubot/net/: Move SSL code in streams.py
	* neubot/net: Move connect() and listen() in streams.py
	* neubot/net: Copy code of test.py into streams.py.
	* neubot/net: Bye bye neubot/net/test.py
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options' and 'topic.CA' into next
	* net/streams.py: import sys instead of from sys import ...
	* net/streams.py: Zap circular imports
	* net/streams.py: Zap useless from neubot.net.streams import ...
	* net/streams.py: Get rid of multiple from neubot import log
	* net/streams.py: Get rid of multiple from socket import error ...
	* net/streams.py: Don't import EWOULDBLOCK more than once
	* net/streams.py: Don't import fixkwargs more than once
	* net/streams.py: Don't import ticks more than once
	* net/streams.py: Make sure we import Pollable just once
	* net/streams.py: Don't import poller more than once
	* net/streams.py: Import SOCK_STREAM just once
	* net/streams.py: Import AF_INET just once
	* net/streams.py: Zap unused from socket import AF_INET6
	* net/streams.py: don't import socket from socket twice
	* net/streams.py: Make sure we don't import getaddrinfo twice()
	* net/streams.py: Silence pychecker
	* net/streams.py: Just move all the imports at the beginning
	* net/streams.py: Cosmetics
	* net/streams.py: Define a variable that holds buffer size
	* net/streams.py: Make sure MAXBUF is big enough
	* net/streams.py: Every second calculate and print throughput
	* net/streams.py: Import types and not from types import ...
	* net/streams.py: Import ssl and not from ssl import ...
	* net/streams.py: Move import ssl before local imports
	* net/streams.py: Import socket and not from socket import ...
	* net/streams.py: Import errno and not from errno import ...
	* net/streams.py: Import os and not from os import ...
	* net/streams.py: Group all local imports together
	* dbtool.py: check if database files exist before trying to open them
	* dbtool.py: add __init__() to Anonymizer, CityResolver and ASNResolver
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.simplify-stream' and 'topic.stats-cleanup' into next
	* net/streams.py: Oops closing() lost by mistake moving the code
	* neubot/net: Pollable: rename closing() to closed()
	* net/pollers.py: Add to closed() the exception argument
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.simplify-stream', 'topic.stats-cleanup' and 'topic.adjust-pollable-api' into next
	* Makefile: Add version number to MacOSX application
	* Makefile: Allow to make a lite release
	* http/messages.py: Remove obsolete and unused code
	* http/utils.py: Remove some obsolete and unused code
	* http/handlers.py: Note that we might want to split the handler
	* simplify-stream: Revert all the changes in this branch
	* Simplify net module: Move SSL code in streams.py
	* Simplify net module: Move connect() and listen() in streams.py
	* Simplify net module: Copy code of test.py into streams.py.
	* Simplify net module: Bye bye neubot/net/test.py
	* Simplify net module: streams.py: import sys instead of from sys import ...
	* Simplify net module: Move all imports at the beginning of streams.py
	* Simplify net module: Define and use MAXBUF in streams.py
	* Simplify net module: In streams.py: Print throughput every second
	* Simplify net module: In streams.py: Avoid from..imports
	* Simplify net module: In streams.py: Cleanup Connector code
	* Simplify net module: In streams.py: Cleanup Listener code
	* Simplify net module: In streams.py: Cleanup Stream code
	* Simplify net module: In streams.py: Rewrite the main() func
	* Simplify net module: Empty connectors.py and listeners.py
	* Undo streams.py optimizations: Undo ISSENDING/ISRECEIVING
	* Undo streams.py optimizations: Undo delayed unset readable/writable
	* Rewrite Stream in streams.py: Use boolean variables and not flags
	* Rewrite Stream in streams.py: Linearize the code
	* Rewrite Stream in streams.py: More clever buffer usage, kill send_pos
	* Rewrite Stream in streams.py: Assume successful send
	* Rewrite Stream in streams.py: Group together some cosmetic changes
	* More Stream undos: Get rid of the set/unset paranoia
	* More Stream undos: We don't need the handleReadable/Writable dance
	* Change Pollable API: pollers.py: Rename closing() to closed()
	* Change Pollable API: streams.py: Rename closing() to closed()
	* Change Pollable API: Add to closed() the exception argument
	* topic.adjust-pollable-api: Revert all the changes in this branch
	* Merge branch 'topic.adjust-pollable-api' into next
	* Merge branch 'topic.simplify-stream' into next
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.simplify-stream', 'topic.stats-cleanup', 'topic.adjust-pollable-api', 'topic.release', 'topic.misc', 'topic.net.simplify' and 'topic.poller.improve-api' into next
	* neubot/debug.py: Re-organize comments
	* neubot/debug.py: The testing folder does not exist anymore
	* neubot/www: These are the sources of the new web user interface
	* neubot/www: js/libneubot.js: Make the plot symmetric
	* neubot/www: js/neubot.js: black magic to unbreak the tooltip
	* neubot/www: Edit neubot/ui.py to link to the new graphic
	* neubot/www: Disable plots in /index.html because they kill my browser
	* neubot/www: Install needed jqplot plugins into js/
	* neubot/www: Move CSS snippets from index.html to style.css
	* neubot/www: Cleanup and reindent style.css
	* neubot/www: Cleanup all image folders
	* neubot/www: Move results.js into js/ folder
	* neubot/www: results.js: Change the way we print time
	* neubot/www: results.js: Shorter labels for prettier table
	* neubot/www: Delete all the unneeded files
	* neubot/www: style.css: Increase the page width
	* neubot/www: index.html: Include all needed jqplot plugins
	* neubot/www: results.html: Wrap the old page in the new style
	* neubot/www: Wide header
	* neubot/www: Cleanup after wide header patch
	* neubot/www: Add media property to CSS tags
	* neubot/www: Be readable by braille and nongraphic browsers too
	* neubot/www: fix location of favicon.ico
	* topic.www-new-gui: Revert everything in this branch
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.www-new-gui', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next
	* neubot/www: index.html: Fix version number
	* tools/dbtool.py: Fix version number
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next
	* fake-db.py: improved fake rows generation
	* move fake-db.py to neubot/tools/dbgen.py
	* neubot/www: libneubot.js: Make sure we always use same time format
	* neubot/www: results.html: Unbreak the plots
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next
	* neubot/www: Note things that should be done
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next
	* neubot/www: small fixes for webui font size
	* Merge branches 'topic.tools', 'topic.www-api', 'topic.debug', 'topic.options', 'topic.CA', 'topic.stats-cleanup', 'topic.release', 'topic.misc', 'topic.net.simplify', 'topic.poller.improve-api' and 'topic.www-clean' into next
	* neubot/tools: Directory for standalone tools
	* tools/dbtool.py: Standalone tool to analyze database
	* tools/dbtool.py: Hackish fix for the accented letter issue
	* tools/dbtool.py: Add command to count unique uuids per day
	* [tools] neubot/tools/dbtool.py: add __init__() to SpeedtestResult class
	* [tools] dbtool.py: Let the user decide treshold on -C
	* dbtool.py: check if database files exist before trying to open them
	* dbtool.py: add __init__() to Anonymizer, CityResolver and ASNResolver
	* tools/dbtool.py: Fix version number
	* AUTHORS: Give credit to patch contributors and translators
	* Revert the tree back to 0.3.2, so we can fast-forward it
	* Merge branch 'master' into exp-old-next
	* connector.py: Remove all commented out lines
	* connector.py: Fix import pack vs from pack..import
	* connector.py: Simplify message codes
	* connector.py: Collapse multiple empty lines
	* connector.py: Reindent and remove some comments
	* connector.py: Avoid pychecker warning
	* connector.py: Reorganize send path
	* connector.py: Reorganize close path
	* connector.py: Reorganize recv path
	* connector.py: Simplify send path
	* connector.py: Simplify initialization
	* handler.py: Delete purely emotive comments
	* handlers.py: Make sure we inherit from object
	* handler.py: Make sure we invoke handler's connection_lost()
	* handler.py: Now connector should not pass write() a buffer
	* connector.py: Simplify destructor
	* connector.py: Setting to None should be the same as del
	* connector.py: Propagate KeyboardInterrupt and SystemExit
	* connector.py: Make max_message_length a constant
	* connector.py: Remove unused parameters
	* connector.py: Cosmetic change: mv is_local locally_initiated
	* connector.py: Delay close when we are sending
	* streams.py: Allow to send() when we are already sending
	* streams.py: Move StreamSSL and StreamSocket before Stream
	* streams.py: SSLWrapper: s/ssl_sock/sock/
	* streams.py: Change relation between Stream and Socket/SSLStream
	* streams.py: Allow to specify configuration parameters
	* streams.py: Consider that soclose() might raise
	* streams.py: Allow to encrypt/decrypt data using ARC4
	* streams.py: Cosmetic changes to make the code more readable
	* streams.py: Stream/SSLWrapper: propagate exception to Stream
	* streams.py: More structured relation with protocol and parent
	* streams.py: Fork Connector and Listener
	* streams.py: More structured Connector and Listener
	* streams.py: Dispatch started_connecting() on EINPROGRESS only
	* streams.py: Cosmetic changes to increment readability
	* utils.py: Add speed_formatter
	* streams.py: Pull stream_formatter from neubot.utils
	* streams.py: Add connect() support for measuring RTT
	* streams.py: Alternate approach for measuring stats
	* streams.py: StreamVerboser: default log messages for stream
	* streams.py: Add Measurer and VerboserMeasurer
	* streams.py: Rewrite from scratch the test unit
	* streams.py: Reduce the number of pychecker warnings
	* Merge branch 'topic.stream.configure' into next
	* Merge branch 'topic.stream.more-structured-api' into next
	* Merge branch 'topic.stream.measurer' into next
	* Merge branch 'topic.stream.rewrite-main' into next
	* Merge branch 'topic.stream.multiwrite' into next
	* Merge branch 'topic.authors' into next
	* Merge branch 'topic.tools' into next
	* Merge branch 'pu.dbgen' into next
	* scripts: Directory with useful scripts
	* scripts: Move release.sh there and rename it relase
	* scripts/release: Use the new scripts/send_inplace helper
	* Makefile: Update copyright notice to new style
	* Makefile: Update some comments and remove other comments
	* Makefile: Take advantage of the new helpers in scripts/
	* Makefile: simplify the code to make a release
	* Makefile: make app.zip: do not leave garbage around
	* Makefile: make deb: do not leave garbage around
	* Makefile: make release: don't need to remove garbage anymore
	* Makefile: support for testing and stable releases
	* debian: Support for stable/testing releases in neubot.list
	* scripts: Add update_apt script that updates APT info
	* Makefile: Use the new scripts/update_apt helper
	* www: Update with respect to possible neubot.js -> index.js rename
	* Merge branch 'topic.misc' into next
	* Merge branch 'topic.testing' into next
	* Merge branch 'topic.bittorrent' into next
	* Revert everything in this branch because it's not yet ready
	* Merge branch 'topic.tools' into next
	* Revert all the changes in the branch pu.dbgen
	* Re-apply some bits that I mistakenly removed from next
	* scripts: sed_inplace: don't clobber permissions
	* debian: Make sure apt likes our neubot.list
	* scripts: Make sure update_apt produces a valid Release file
	* Revert "More clever buffer usage, kill send_pos"
	* Release neubot/0.3.4

Neubot 0.3.3 [2011-01-11]
	* neubot/ui.py: Always start the database when running in server mode
	* database.py: query_results_functional(): New query API backend
	* neubot/ui.py: /api/results2: New query API
	* neubot/database.py: Make sure we don't pass unicode to lower layers
	* neubot/state.py: Augment state with neubot daemon's PID
	* neubot/state.py: Augment state with latest rendezvous's timestamp
	* neubot/database.py: use timestamp() instead of int(time())
	* neubot/database.py: Don't use from..import for standard library
	* neubot/objgraph.py: Import v1.1b of objgraph
	* neubot/debug.py: Re-organize comments
	* neubot/debug.py: The testing folder does not exist anymore
	* neubot/options.py: Generic options parser for all modules
	* net/CA.py: Helper script to create certfiles for testing
	* Make sure we import Stats and SimpleStats from neubot.utils
	* http/clients.py: Zap an old comment
	* http/clients.py: Group imports at the beginning
	* http/servers.py: Group declarations at the beginning
	* utils.py: Let Stats and SimpleStats inherit from object
	* Makefile: Add version number to MacOSX application
	* Makefile: Allow to make a lite release
	* http/messages.py: Remove obsolete and unused code
	* http/utils.py: Remove some obsolete and unused code
	* http/handlers.py: Note that we might want to split the handler
	* Simplify net module: Move SSL code in streams.py
	* Simplify net module: Move connect() and listen() in streams.py
	* Simplify net module: Copy code of test.py into streams.py.
	* Simplify net module: Bye bye neubot/net/test.py
	* Simplify net module: streams.py: import sys instead of from sys import ...
	* Simplify net module: Move all imports at the beginning of streams.py
	* Simplify net module: Define and use MAXBUF in streams.py
	* Simplify net module: In streams.py: Print throughput every second
	* Simplify net module: In streams.py: Avoid from..imports
	* Simplify net module: In streams.py: Cleanup Connector code
	* Simplify net module: In streams.py: Cleanup Listener code
	* Simplify net module: In streams.py: Cleanup Stream code
	* Simplify net module: In streams.py: Rewrite the main() func
	* Simplify net module: Empty connectors.py and listeners.py
	* Undo streams.py optimizations: Undo ISSENDING/ISRECEIVING
	* Undo streams.py optimizations: Undo delayed unset readable/writable
	* Rewrite Stream in streams.py: Use boolean variables and not flags
	* Rewrite Stream in streams.py: Linearize the code
	* Rewrite Stream in streams.py: More clever buffer usage, kill send_pos
	* Rewrite Stream in streams.py: Assume successful send
	* Rewrite Stream in streams.py: Group together some cosmetic changes
	* More Stream undos: Get rid of the set/unset paranoia
	* More Stream undos: We don't need the handleReadable/Writable dance
	* Change Pollable API: pollers.py: Rename closing() to closed()
	* Change Pollable API: streams.py: Rename closing() to closed()
	* Change Pollable API: Add to closed() the exception argument
	* neubot/www: These are the sources of the new web user interface
	* neubot/www: js/libneubot.js: Make the plot symmetric
	* neubot/www: js/neubot.js: black magic to unbreak the tooltip
	* neubot/www: Edit neubot/ui.py to link to the new graphic
	* neubot/www: Disable plots in /index.html because they kill my browser
	* neubot/www: Install needed jqplot plugins into js/
	* neubot/www: Move CSS snippets from index.html to style.css
	* neubot/www: Cleanup and reindent style.css
	* neubot/www: Cleanup all image folders
	* neubot/www: Move results.js into js/ folder
	* neubot/www: results.js: Change the way we print time
	* neubot/www: results.js: Shorter labels for prettier table
	* neubot/www: Delete all the unneeded files
	* neubot/www: style.css: Increase the page width
	* neubot/www: index.html: Include all needed jqplot plugins
	* neubot/www: results.html: Wrap the old page in the new style
	* neubot/www: Wide header
	* neubot/www: Cleanup after wide header patch
	* neubot/www: Add media property to CSS tags
	* neubot/www: Be readable by braille and nongraphic browsers too
	* neubot/www: fix location of favicon.ico
	* neubot/www: index.html: Fix version number
	* neubot/www: libneubot.js: Make sure we always use same time format
	* neubot/www: results.html: Unbreak the plots
	* neubot/www: Note things that should be done
	* neubot/www: small fixes for webui font size
	* Release neubot/0.3.3

Neubot 0.3.2 [2011-01-04]
	* MacOS/: move here neubot.app for MacOS
	* Makefile: add targets to create neubot.app and neubot.app.zip
	* MacOS: Remove private Makefile
	* MacOS: Move README into doc/ directory and rename it
	* MacOS/neubot: Improve copyright notice
	* pathnames.py: MacOS: do not hardcode '/Applications/neubot ...'
	* Makefile: Install icon for all Unix-like systems
	* statusicon.py: Use the scalable neubot icon
	* icons: Change the name of some icons
	* Makefile: remove debian-specific rules to install icon
	* statusicon: By default show the status icon
	* statusicon: Improve right-click menu labels
	* statusicon: cosmetic changes
	* statusicon: Make sure we don't from..import standard library
	* Makefile: install menu entries for all Unix-like OSes
	* Makefile: Remove debian-specific rules for menu entries
	* neubot/ui.py: notify text-ui when the daemon is down
	* neubot/log.py: Move system-dependent bits out of this file
	* neubot/log.py: make sure we don't from..import standard library
	* neubot/log.py: Add a very simple test unit
	* neubot/unix.py: make sure we use LOG_DAEMON
	* BUGS: official ML languages are english and italian
	* http/clients.py: Make sure we print download/upload speed stats
	* bin/neubot: Make sure Python >= 2.5 and < 3.0
	* Make sure website URI is /-terminated
	* _unit_formatter(): Add space between unit and data
	* Globally replace bps with bits/s
	* neubot/speedtest.py: by default use two parallel connections
	* net/test.py: fix comment at the beginning of the file
	* net/streams.py: make sure we print exceptions correctly
	* neubot/notify.py: remove some debugging prints
	* neubot/notify.py: safer dispatching of events
	* neubot/notify.py: make needs_publish() more robust
	* README: add copyright notice
	* www: Improve copyright notice
	* statusicon: Improve copyright notice
	* win32: Improve copyright notice
	* bittorent: Improve copyright notice
	* http: Improve copyright notice
	* net: Improve copyright notice
	* neubot: Make sure all files have new/better notice
	* bin: Improve copyright notice
	* debian: Improve copyright notice
	* Finish improving copyright notice
	* www/results.js: oops upload and dowload labels were swapped
	* neubot/www: Add current version number to the web user interface
	* www/results.js: Make sure we plot all data points
	* www/neubot.js: propagate queue position information
	* net/pollers.py: Simplify task scheduler
	* net/pollers.py: Cosmetic changes
	* net/pollers.py: Get rid of Poller.get_ticks() globally
	* net/pollers.py: Surround stream.closing with try..except
	* net/pollers.py: Always treat SystemExit like KeyboardInterrupt
	* net/pollers.py: move Stats and SimpleStats into utils.py
	* net/pollers.py: Remove unused dispatch() method
	* net/pollers.py: Don't use from..import for standard library
	* net/pollers.py: Allow to break the loop cleanly
	* neubot/ui.py: Break cleanly out of the main loop
	* net/pollers.py: Add timestamping to PollerTask
	* rendezvous.py: On -S do not start a companion speedtest server
	* speedtest.py: Add -d command line option for -S mode
	* rendezvous.py: Notify state.py that connection failed
	* rendezvous.py: Do not wait for a deterministic amount of time
	* rendezvous.py: Give equal tratment to both test servers
	* rendezvous.py: Pass to state.py some timing information
	* neubot/state.py: Use "idle" instead of None to mark inactivity
	* neubot/speedtest.py: Move test server code into a separate mixin
	* neubot/speedtest.py: Move negotiator server code in a separate mixin
	* neubot/speedtest.py: Cosmetics after refactoring into mixins
	* neubot/speedtest.py: Hack to avoid client disconnection
	* neubot/speedtest.py: Improve queue algorithm
	* neubot/speedtest.py: Use connection_lost to improve queue algorithm
	* neubot/speedtest.py: Make sure first session's connection is not special
	* doc: Add documentation for SpeedtestServer
	* neubot/speedtest.py: Periodically log the queue length
	* Release neubot/0.3.2

Neubot 0.3.1 [2010-11-18]
	* [cleanups] remove unused code: prettyprint_exception
	* [cleanups] streams: remove commented out code
	* [fixes] ui: make sure -Dname=value works
	* [fixes] utils: Avoid PyChecker warning
	* [fixes] speedtest: send results through log.info()
	* [fixes] rendezvous: raise number of seconds between each rendezvous
	* [fixes] database: raise the value of MAXROWS
	* [icons] Add neubot icons
	* [icons] debian: Add and install SVG icon
	* [icons] statusicon: Use neubot icon
	* [macosx] log: use syslog wrapper instead of SysLogHandler
	* [macosx] main: MacOS X does not set $DISPLAY
	* [macosx] pathnames: Adjust WWW location
	* [macosx] App skeleton
	* [macosx] neubot.app: Quick and dirty Makefile to create the App
	* [rendezvous8080] rendezvous: Use port 8080 because 9773 might be blocked
	* [bittorent] bittorrent: initial experimental support for BitTorrent
	* [bittorrent] bittorrent: link with neubot
	* [www-misc] neubot.js: Make sure Chrome tab icon does not spin
	* [www-misc] neubot.js: do not bring browser on its knees
	* [www-misc] neubot.html: better links
	* [www-jqplot] www/jqplot: add jqplot sources
	* [www-jqplot] results: use jqplot and plot recent results
	* [webbrowser] main: make sure that browser opens but does not annoy
	* [webbrowser] statusicon: make sure that browser opens but does not annoy
	* [testing] release.sh: modified code that updates ChangeLog
	* [testing] Make-dist.bat: make sure we install images and jqplot
	* [testing] www/results.js: avoid IE8 parsing error
	* [testing] www/results.html: IE8 does not have Canvas
	* [testing] release.sh: removed useless and wrong piece of code
	* [testing] release.sh: simplify code to calculate next version number
	* [testing] make sure `neubot bittorrent' pseudo-test works
	* [testing] Makefile: allow user to write into dist/
	* Release neubot/0.3.1

Neubot 0.3.0 [2010-11-02]
	* log: remove code that hijacks logging.foo() calls
	* release.sh: by default make a new patch release
	* README: up-to-date with http://www.neubot.org/about
	* BUGS: updated, providing much more information
	* INSTALL: updated
	* debian: control: update description etc
	* Update manual page merging from http://www.neubot.org/about
	* setup.py: Update description
	* ui: don't claim to be RESTful
	* win32: use new icon
	* neubot.nsi: remember to autostart neubot
	* neubot.nsi: start-neubot.exe after install (simmetry with APT)
	* win32: recomplied *.exe using the new neubot icon
	* net.connectors: propagate error if connect() times out
	* [www] neubot.css: cosmetics
	* [www] add favicon
	* [www] pages to display latest results
	* [www] link from neubot.html to results.html
	* [docs] README: update with /about
	* [docs] INSTALL: do not reference a dead link
	* [docs] debian: update with /about
	* [docs] manpage updated with /about
	* [docs] manpage typo
	* Release neubot/0.3.0

Neubot 0.2.8 [2010-10-19]
	* start-neubot-daemon: make sure it works once installed
	* speedtest: don't abort renegotiation on already closed connection
	* speedtest: don't linger negotiation if client does not hold a token
	* speedtest: make timeout algorithm more robust
	* start-neubot-daemon: don't assume neubot can re-execute self
	* main: statusicon: lazy import Gtk to avoid ugly warning
	* database: don't print a log message about auto-prune
	* etc/neubot/config: add configuration file
	* doc/manual.txt: new version of the manual using restructured text
	* doc: remove old documentation referring version 0.1 of neubot
	* man/man3: remove old manual page
	* Makefile: remove rules referencing pod
	* BUGS: Update the email address for reporting bugs
	* TODO: remove old entries from the file
	* updated the setup.py script
	* setup.py: this should fix a py2exe warning
	* update the neubot.nsi script
	* release.sh: remove many limitations of this script
	* README: update using bits of the manual page intro
	* Build.but: document how win32 build system works
	* move testing code into neubot.net and remove testing/
	* rendezvous: add support for the second speedtest server
	* database: support for identifying each neubot with a random UUID
	* Revert "setup.py: this should fix a py2exe warning"
	* Update win32 build process after today's mini-hackathon
	* neubot.nsi: roll-out cleaner uninstall and reinstall
	* doc: rename manual page because we might want to add other manpages
	* Add menu entry to show status icon in the notification area
	* Makefile: make sure /etc/init.d/neubot perms are 0755
	* neubot.js: print neubot states in grey when sleeping
	* Release neubot/0.2.8

Neubot 0.2.7 [2010-10-15]
	* Makefile: explain why we don't use sed -i
	* main: dohelp(): use stdout/stderr depending on context
	* INSTALL: reference the online documentation
	* bin: add start-neubot-daemon script
	* database: check sqlite3 file's existence and ownership
	* main: print more details if we can't spawn a subprocess
	* Make sure system and user directories exist
	* database: make sure GET /api/results will never return an empty body
	* Propagate and notify update information
	* speedtest: adjust the uri employed by default
	* utils: getpwnaml{,x}: factor out code to get user info
	* database: use getpwnamlx instead of duplicating code
	* pathnames: make sure the _neubot user owns /var/neubot
	* Release neubot/0.2.7

Neubot 0.2.6 [2010-10-12]
	* Makefile: don't assume pychecker provides --limit option
	* debug: The name might be None
	* notify: Reduce the interval between each periodic()
	* net.streams: Update the code
	* http.handlers: Bugfix queue length calculation
	* http.handlers: bufferize(): Allow also strings
	* http.handlers: Update the code
	* http.handler: Pass to Handler() a reference to the receiver
	* http.clients: Update the code
	* http.server: Update the code
	* http.servers: Avoid pychecker warning, rename 'time' variable
	* http.servers: Increase max-request-per-conn to help speedtest
	* net.streams: send: Reliable behavior if passed an unicode string
	* Help debugging adding explicit destructors
	* notify: Add RENEGOTIATE event for speedtest
	* notify: Attach a timestamp to each event
	* neubot.state: Track, export, and publish neubot state
	* state: Support to pass partial result to the client
	* state: Inform the user/client of an available update
	* database: Rewritten to use sqlite3 as backend
	* fake-db.py: Simple python script to help testing neubot.database
	* speedtest: Add SpeedtestServer and enhance SpeedtestClient
	* speedtest: Notify state changes to the state module
	* speedtest: Guarantee FIFO service and return queue position
	* speedtest: Tell the state module our position in the queue
	* speedtest: Pass the state module our partial results
	* speedtest: client mode: Adjust the default URI
	* speedtest: Integrate with (and borrow code from) database
	* speedtest: Rename variable to avoid pychecker warning
	* speedtest: Let rendezvous control the speedtest
	* speedtest: Import from the file name and not from the module name
	* speedtest: Make sure there are not circular dependencies
	* speedtest: Bugfix client-side negotiation
	* speedtest: Fix deadlock on client disconnection during test
	* config: Rewritten to add interface for UI
	* neubot/www: The static files part of our WebGUI
	* ui: Completely rewritten the user interface
	* rendezvous: Rewritten to use XML rather than JSON
	* rendezvous: Help debugging adding explicit destructors
	* Removed all the deprecated files
	* ui: redirect to /neubot.html if the request is for /
	* main: Rewritten and now referencing the new commands
	* bin/neubot: Simple startup script for neubot
	* utils: Do not import json
	* log: Add some missing bits when going in background
	* utils: Add the code to go in background
	* rendezvous: Add the code to go in background
	* main: Do NOT exchange by mistake an URI and a command
	* rendezvous: Use a default URI if no URI was provided
	* rendezvous: The client too must background by default
	* debian: The -b option is no longer available
	* INSTALL: The -b option is no longer available
	* setup.py: For win32 too use the new bin/neubot startup script
	* utils: Do not attempt to import pwd under Windows
	* database: Make sure connection always exists
	* The frozen executable does not support exit()
	* rendezvous: Make sure that -d works correctly
	* database: Make sure we print help on --help
	* pathnames: Provide system-dependent path names
	* debian: Update the content of the control file
	* debian: updated the fqdn in neubot.list
	* debian: add postinst the code to trust our pgp key
	* Makefile: Install bin/neubot instead of bin/unix/neubot
	* speedtest: Pass the client its real network address
	* speedtest: make sure we print stats before we cleanup
	* speedtest: average latency and time to connect
	* database: add command to delete all the results
	* speedtest: improve algorithm to calculate xfer speed
	* speedtest: make sure self.length always <= len(self.body)
	* speedtest: alternate approach for upload speed measurement
	* bin: removed the old commands for unix and win32
	* Makefile: remove the unused target _docs
	* Makefile: make release: put the same content in deb and tarball
	* ui: add /api/version uri that returns neubot version
	* main: Without arguments try to do the right thing
	* main: Add the "help" internal command
	* ui: add /api/exit uri that exits from the program
	* main: implement start and stop commands
	* debian/neubot: use start and stop commands
	* ui: Make sure that the set command works as expected
	* rendezvous: Improve the way we publish state changes
	* utils: add XML_text(): join the text nodes child of an element node
	* ui: add code to track the state of the local neubot daemon
	* statusicon: Use ui.SimpleStateTracker to track the state
	* statusicon: make sure -n works as expected
	* statusicon: open browser on "activate"
	* debian: create entry into the GNOME menu
	* ui, pathnames: adjust the path where static files are installed
	* Makefile: make sure we install *.pyc with umask 022
	* utils: become_daemon: use the first available unpriv user
	* Add a copy of the manual pages
	* debian: move files into directories to simplify makefile
	* Makefile: written in a more modular way and commented the code
	* speedtest: results += latency's MEAN instead of += N measurements
	* utils: add code to string{,io}-ify DOM
	* state: modify XML format, delegate work to helpers, rework the code
	* ui: update state tracker because XML file format changed
	* utils: add simple/stupid formatter for time units
	* speedtest: pass the web interface formatted units
	* www: updated again the web-pages
	* state: keep latest test results until we start next test
	* statusicon: by default detach from shell and run in background
	* ui: print error on 404 rather than debug message always
	* log: prefix "neubot: " when we're using syslog
	* pathnames: always ignore $HOME when running as root
	* Makefile: make release: chmod 644 stuff in dist
	* Build.bat: add web user interface files to dist/
	* neubot.nsi: add *recursively* the content of dist/
	* Release neubot/0.2.6

Neubot 0.2.5 [2010-09-15]
	* Globally replace Timer with SimpleStats
	* http.handlers: Add maximum-line-length check
	* Globally replace format_bytes() with unit_formatter()
	* statusicon: Zap redundant "del connection" statement
	* utils: Implement file_length()
	* http.utils: Add parse_range()
	* net.pollers: It was a mistake to remove catch-all clauses
	* net.pollers: Random updates and cosmetic changes
	* Globally remove deprecated register_func()
	* net.connectors: Cosmetic changes
	* net.listeners: Cosmetic changes
	* compat: Compatibility with Python2.5's deque()
	* log, database: Python2.5-compatible deque usage
	* net: Do not assume that the ssl module is available
	* net.streams: Avoid pychecker warning
	* http.handlers: Use from..import rather than import
	* Release neubot/0.2.5

Neubot 0.2.4 [2010-09-08]
	* network: Remove unused buffers module
	* http.utils: make sure make_filename() operates on pathquery
	* http.utils: make_filename() is now more readable
	* log: We don't want access-logs to be part of /logs
	* Makefile: Update commented-out rules to create installer using Wine
	* ui: Remove unused import statement
	* ui: UIConnection: Print the offending exception and its stacktrace
	* ui: UIServer: Use multi-line strings for HTML and JS templates
	* ui: UIServer: Handle toggle requests in /
	* ui: UIServer: Mechanism to pull XML updates
	* ui: UIServer: Don't leave an empty line before / and /neubot.js
	* ui: UIServer: Add backlink to /logs and /results
	* net.pollers: Do not assume an update every second
	* net.pollers: sched(): Bugfix scheduling algorithm
	* net: Add support for group-of-streams stats
	* net.pollers: Prepare SimpleStats to replace Timer
	* http.clients: Use SimpleStats rather than Timer
	* net.pollers: Better solution for 'delete while pending'
	* net.pollers: Remove some unused imports
	* doc: INSTALL: uninstall: Use /usr/local rather than /opt
	* speedtest: Wait for stage X to complete before we enter stage X+1
	* speedtest: Speed-adaptive download/upload procedure
	* log: Add support for pretty-printing progress
	* speedtest: Print information on the operation in progress
	* speedtest: By default use a server of the neubot project
	* speedtest: Let the user decide the output format
	* http.handlers: Better protection vs. comet-after-close
	* http.clients: Make sure usage string is easier to understand
	* statusicon: Rewritten using httplib and threading
	* statusicon: Initial implementation of the popup menu
	* statusicon: Ubuntu has deprecated status-icon usage
	* notify: Increase interval between each check for pending events
	* main: Add a new speedtest command that invokes speedtest.main()
	* neubot: Make sure we employ safe_seek() in new code
	* Release neubot/0.2.4

Neubot 0.2.3 [2010-09-02]
	* http.utils: Remove deprecated parse_accept()
	* http.utils: Remove deprecated select_mime()
	* testing: Remove getter.py httpd.py publish.py wget.py
	* net.pollers: Stats: Do not weight the average value
	* http.servers: Use prettyprint() instead of prettyprinter()
	* http.utils: make_filename(): Make sure we don't loop forever
	* http.protocols: Avoid crash in case of comet-after-close
	* notify: Remove guards against comet-after-close
	* notify: Increase robustness of publishing algorithm
	* http.clients: Use prettyprint() instead of prettyprinter()
	* http.clients: We always need to bufferize standard input
	* http.clients: VerboseClient: Adjust comment before got_response
	* http.clients: Improve -I and usage of stdout/stderr for stats
	* ui: Make sure we print the program name on --help
	* ui: UIServer: Do not use ADDRESS and PORT directly
	* ui: dohelp(): By default use the standard error
	* ui: Implement the exit command into the shell
	* ui: Improve the output of the `help' command
	* ui: TestClient: Follow '303 See Other' redirection
	* ui: UIServer: Simple javascript support for tracking state
	* statusicon: It is wrong to append "." to sys.path
	* statusicon: Use 'from..import' rather than 'import'
	* statusicon: Provide some more comments
	* statusicon: Use SimpleClient rather than neubot.http.api
	* statusicon: Add support for command-line options
	* Makefile: make help: More compact help message
	* Makefile: make patches: Removed unused target
	* Makefile: make archive: Remove unused target
	* Makefile: [release+deb] Make the deb target private
	* Makefile: [release+deb] Group all the hidden targets together
	* Makefile: [release+deb] make _deb: Auto-calculate installed-size
	* Makefile: [release+deb] make _deb: Remember to cleanup
	* Makefile: [release+deb] make _archive: Don't create subdir
	* Makefile: [release+deb] make release: Invoke `make _deb'
	* Makefile: make release: Invoke make clean rather than rm -rf dist/
	* Makefile: make release: Adjust verbose message
	* Makefile: make release: Do some work to update apt repository
	* Makefile: Add commented-out rules to create installer using Wine
	* release.sh: Script that automatically makes a new release
	* Release neubot/0.2.3

Neubot 0.2.2 [2010-08-30]
	* http.servers: Detect and handle comet-after-close
	* ui: It is wrong to append "." to sys.path
	* ui: Use dispatch table for known commands
	* ui: dohelp(): Adjust stdout/stderr usage
	* ui: Add 'version' command
	* ui: dohelp(): Make sure we sort commands by name
	* ui: Add quiet and verbose commands
	* ui: Rewrite the client part using SimpleClient
	* ui: In interactive mode we must catch all exceptions
	* ui: Process command line arguments
	* ui: Provide some more documentation comments
	* ui: Use uppercase for global variables
	* ui: Re-write UI server using Server and SimpleConnection
	* ui: Rewritten UIServer in order to rationalize its implementation
	* ui: Do not assume that UIServer will close the connection
	* ui: UIClient: Remember to flush() stdout when we follow
	* net.connectors: Update code and codying style
	* net.connectors: timeout when the delay equals the timeout
	* net.connectors: Add debug statements and implement unit testing
	* net.listeners.py: Update code and codying style
	* net.listeners: Add debug statements and implement unit testing
	* net.streams: Update code and codying style
	* http.clients: Import formatbytes() from neubot.net.pollers
	* http.servers: Import formatbytes() from neubot.net.pollers
	* http.servers: bytes shadows builtin, use nbytes instead
	* http.adaptors: Remove unused oadaptor class
	* http.clients: Add VerboseClient and improve main()
	* http.utils: make_filename(): Deal with name collisions
	* http.clients: Add support for dload/upload/head of multiple URIs
	* net.stream: Add debug statements and propagate changes
	* net.streams: Update .send_ticks after a partial send()
	* net.pollers: formatbytes(): Remove space between value and unit
	* speedtest: Test HTTP latency, download, and upload speed
	* speedtest: Use net.pollers enable/disable stats mechanism
	* net.pollers: Make sure that we export register_func
	* http.handlers: start_receiving(): Be careful before using stream
	* log: Add support for quiet()
	* net.pollers: Simple mechanism to print upload/dload stats
	* http.servers: Add support for POST because speedtest needs it

Neubot 0.2.1 [2010-08-27]
	* http.servers: New module that implements HTTP server
	* http.utils: Add function to extract filename from URI
	* http.utils: Rename prettyprinter() to prettyprint()
	* http.clients: Remember to rewind response-body
	* http.handlers: Improve algorithm to split first-line
	* http.clients: Timer: Auto-reset on begin()
	* http.clients: formatbytes: Use floating point numbers
	* http.clients: USAGE: Better -s explanation
	* net.pollers: Always re-sched self.check_timeout()
	* http.clients: Fix for '-oFILE -o-' corner-case
	* http.clients: Fix for '-iFILE -i-' corner-case
	* notify: Use sched() rather than register_periodic()
	* notify: Use 'from..import' rather than 'import'
	* neubot.net: pollers: Measure average upload/dload speed
	* http.utils: Hide negotiate_mime() helpers
	* http.utils: Move all the imports at the beginning
	* http.clients: Support for download using two connections
	* http.clients: Avoid race between _do_send() and closing()
	* http.servers: Avoid race between constructors and handler
	* Careful error checking when seek(0) fails on a file object

Neubot 0.2.0 [2010-08-23]
	* net.pollers: Explain why we break loop() regardless of tasks
	* http.utils: Add rules to decide the nextstate after headers
	* http.handlers: self.receiver might be None in close()
	* net.streams: cosmetics: Remove one-line comments
	* net.streams: cosmetics: Fix the comment before close()
	* net.streams: cosmetics: Add comment before set_readable etc
	* net.streams: cosmetics: Rewrite the comment in front of recv()
	* net.streams: cosmetics: Rename .isclosing to .isclosed
	* net.streams: cosmetics: Swap check and then/else accordingly
	* net.streams: cosmetics: Add comment before so*() methods
	* http.messages: Improve serialize-headers algorithm
	* http.messages: For now we don't want to export Message
	* http.messages: Use 'from ... import' rather than 'import'
	* http.messages: Move some to-be-removed fields out of Message
	* http.messages: Remove slightly-paranoid checks
	* http.api: Rewrite comment before compose()
	* http.api: compose_(): compose an already existing message
	* http.api: compose_(): Use keyword arguments
	* http: Move compose_() from api to messages
	* http.message: Put all imports at the beginning
	* http.messages: compose(): Sort COMPOSEARGS by key
	* http.messages: Improve 'content-length: 0' explanation
	* http.handlers: Do not start receiving automatically on attach()
	* http.clients: New module that implements HTTP client

Neubot 0.1.9 [2010-08-18]
	* neubot.net: streams: notify() might invoke close()
	* neubot.net: export unregister_periodic from pollers
	* neubot.http: messages: Make the code PEP8-compliant
	* neubot.http: utils: Make the code PEP8-compliant
	* neubot.http: utils: Rename type variable because shadows builtin
	* neubot.http: utils: Rewrite select_mime() to silence pychecker
	* neubot.net: pollers: Remove .closing() from Pollable
	* neubot.net: pollers: Cosmetic changes
	* neubot.net: pollers: remove obsolete comment
	* neubot.net: pollers: stop when there is no I/O to dispatch
	* neubot.net: pollers: Make sure unsched() builds a 3-tuple
	* neubot.net: pollers: Increase interval between check_timeout()
	* neubot.net: pollers: Update why-we-are-careful comment
	* neubot.http: Add new sub-module: handlers.py
	* neubot.http: protocol: Use Handler rather than adaptor

Neubot 0.1.8 [2010-08-14]
	* neubot.net: streams: Remove an obsolete comment
	* neubot.utils: Add support for keyword arguments
	* neubot.net: connectors: Use keyword arguments
	* neubot.net: listeners: Use keyword arguments
	* neubot.net: pollers: Implement a task scheduler into the poller
	* neubot.net: pollers: Modify the task scheduler to support periodic()
	* testing/httpd.py: Automatically prepend "." to sys.path
	* testing/wget.py: Automatically prepend "." to sys.path
	* neubot.net: pollers: Re-implement periodics, funcs with task scheduler
	* neubot.http: api: Chunks were disabled by mistake
	* neubot.net: pollers: Avoid invoking fileno() twice
	* neubot.net: streams: Optimize readable and writable management
	* neubot.http: protocols: Do not lower timeout for passiveclose
	* neubot.net: pollers: Remove 'Nothing to do' warning and sleep

Neubot 0.1.7 [2010-08-04]
	* neubot.http: protocols.py: Catch a specific exception, not all
	* neubot.http: acceptors.py: Rm unneeded exception handling code
	* neubot.http: adaptors.py: Catch specific exceptions, not all
	* neubot.net: poller: Remove unneeded catch-all clauses
	* neubot.measure: Catch a specific exception, not all
	* neubot.negotiate: urlparse.urlsplit() should not raise exceptions
	* neubot.rendezvous: Catch a specific exception, not all
	* testing.publish: Catch a specific exception, not all
	* neubot.container: Don't need to special case KeyboardInterrupt
	* neubot.auto: Improve and comment exception handling
	* neubot.net: Export register_periodic
	* neubot.auto, neubot.measure: Make it possible to interrupt testing
	* neubot.notify: Publish/subscribe mechanism
	* neubot.ui: Export state change via comet
	* neubot.ui: Add follow command
	* neubot.statusicon: Use comet to track neubot state

Neubot 0.1.6 [2010-08-03]
	* Makefile: sha256sum is not always available, so don't use it
	* bin/unix/neubot: Remember to enter in verbose mode if -v is specified
	* neubot.http: Send small messages using a single send()
	* neubot.config: Add 'force' variable to configuration
	* neubot.ui: Correct the methods allowed on "/enable"
	* neubot.ui: Export '/force' option via RESTful API
	* neubot.database: Simple work-around to file locking problem
	* neubot.http: print message before trying to send it
	* neubot.http: Bugfix MIME type negotiation
	* neubot.net: Allow running just one iteration of the poller loop
	* neubot.statusicon: Manage status icon in the notification area
	* neubot.auto: Roll-out a thread-less solution

Neubot 0.1.5 [2010-08-01]
	* neubot.http: Add message-oriented API
	* neubot.http: Add code for MIME type negotiation
	* neubot.net: Avoid sleeping and warn when we sleep
	* neubot.config: Keep most configurable variables
	* neubot.database: Cache and allow to export recent measurements
	* neubot.auto: Make it possible to disable measurements
	* neubot.auto: Record the current state into a variable
	* neubot.auto: Don't test if rendez-vous is too slow
	* neubot.http: adaptor: Read files in bigger chunks to avoid slowdowns
	* neubot.ui: RESTful API for user interfaces attachment
	* neubot.auto: Start a thread for the UI

Neubot 0.1.4 [2010-07-30]
	* neubot.net: streams.py: Deal with "continuous" I/O operations
	* neubot.net: streams.py: Remove the compat parameter from send, recv
	* neubot.net: streams.py: Block send(), recv(), close() if isclosing
	* neubot.log: Wrapper for Python logging module
	* bin: Install neubot.log as the default logger

Neubot 0.1.3 [2010-07-29]
	* Makefile: don't assume we're in a GIT repo when installing
	* neubot: __init__.py: Import libraries before other modules
	* neubot.whitelist: Allow more than one peer per IP address
	* neubot.http: Add support for passive close()

Neubot 0.1.2 [2010-07-22]
	* INSTALL: Fix a typo--Python instead of Neubot
	* neubot.debug: Trace functions "call" and "return"
	* neubot.net: Re-implementation of neubot.network
	* neubot.network: By default use the new neubot.net module
	* neubot.http: Use neubot.net instead of neubot.network

Neubot 0.1.1 [2010-07-21]
	* neubot.whitelist: Temporarily disable white-listing
	* neubot.http: Raise the number of seconds before timeout
	* doc: Improve installation process under Ubuntu
	* doc: Change source file name for manpage
	* doc: incremental changes to manual page
	* debian: Initial support for automatic repository install

Neubot 0.1.0 [2010-06-22]
	* Updated documentation
	* Added manual page for Unix
	* Improved INSTALL file
	* Added support for textual database
	* Improved Makefile
	* Improved Win32 setup
	* Adjusted the verbosity
	* By default be interactive
	* Full support for HEAD requests
	* Added timstamps to logs
	* Removed some deprecated code
	* Improved Unix startup procedure
	* Added support for "latency" measurements
	* Measuring "time to transfer" instead of "speed"
	* Bugfixed clock handling with Win32
	* Improved client mode

Neubot 0.0.6 [2010-06-07]
	* Add support for -V command line option.
	* Use PUT /http/1.0/<uuid> to negotiate measurements.
	* Add 'collecturi' to rendezvous response.
	* Add whitelist mechanism to control who can perform measurements.
	* Implement collection of measurements results.
	* Remove most of the deprecated code.
	* Add 'coordinate' command that runs the coordinator.
	* Move 'testing/' out of 'neubot/' directory.
	* Incremental improvements.
	* Bugfixes.

Neubot 0.0.5 [2010-06-03]
	* Add support for creating Windows installer.
	* Add support for creating Debian package.
	* Remove deprecated file neubot/errors.py.
	* Make neubot/buffers.py PEP8-compliant.
	* Add support for version number comparison.
	* Syntactic sugar for more readable verbose logs.
	* neubot/container.py: Common container for servlet-like classes.
	* neubot/nrendezvous.py: New module implementing rendezvous.
	* neubot/negotiate.py: Module implementing negotiation.
	* neubot/measure.py: Module implementing http measurements.
	* neubot/main.py: Initial support for new-style commands.
	* neubot/auto.py: New-style command to run automatic client.
	* Makefile: Roll-out simplified _install command.
	* Makefile: Merge support for creating debian packages.
	* Makefile: Zap legacy install/uninstall code.
	* bin/unix/neubot: Explicitly require python-2.6.
	* bin/unix/neubot: Use `auto' as the default command.
	* bin/win32/neubot: Modified to invoke `auto' command.
	* Roll-out simple watchdog mechanism to avoid getting stuck.
	* By default install neubot below '/usr/local'

Neubot 0.0.4 [2010-05-26]
	* neubot/utils.py
	    * Add prettyprint_exception() function
	* network/pollers.py
	    * Robust exception handler
	    * Support for robust initialization
	    * PEP8 compliant code
	    * Fine grained exception handling in the core loop
	    * Remove unused imports
	    * Prepend underscore to private methods
	* Employ the new robust initialization mechanism
	* Update documentation
	* network/connections.py
	    * Guard against unexpected behavior
	* Removed deprecated code
	* network/connections.py
	  http/protocols.py
	    * Allow getting socket and peer name
	* More verbose transparency on client and server side
	* neubot/servers.py
	    * Do NOT close connection server side
	* bin/unix/neubot
	    * Handle the INT signal properly
	* Add support for date http header

Neubot 0.0.3 [2010-05-18]
	* bin/unix/neubot: By default be verbose rather than quiet
	* bin/unix/neubot: Revert: Create $HOME/.neubot if non-existent
	* http/utils.py: More flexible prettyprint approach
	* neubot/rendezvous.py: Parse rendez-vous JSON messages
	* neubot/clients.py: Client side rendez-vous (class simpleclient)
	* neubot/servers.py: Server side rendez-vous (class simpleserver)
	* application/coordinator.py: Run the coordinator server
	* application/_neubot.py: Periodically try the rendez-vous

Neubot 0.0.2 [2010-05-14]
	* neubot/http/connectors.py: Client-side connector.
	* neubot/http/acceptors.py: Server-side acceptor.
	* http/clients.py: Marked as deprecated (use connector instead.)
	* bin/neubot neubot/main.py: Removed (now using neubot/application.)
	* bin/unix/neubot neubot/application: New improved startup procedure.
	* Makefile: Be more friendly in the install phase.
	* doc: Fully document the (now complete) neubot/http module.

Neubot 0.0.1 [2010-05-07]
	* Makefile: Code to install/uninstall in Unix-like environments.
	* bin/neubot: Lookup neubot sources and launch it (Unix-only).
	* doc/: Pictures of neubot/network and neubot/http classes.
	* etc/init.d/neubot: Startup/shutdown script for Ubuntu.
	* neubot/http: Generic and client-side HTTP/1.1 support.
	* neubot/main.py: Logic to launch Neubot in Unix-like environments.
	* neubot/network: Support for nonblocking network I/O.
	* neubot/testing: Code to test neubot/network and neubot/http.