Development ToDo

From Solipsis

Table of contents

Architecture

Use pygame, or any other library, for the 2D view (keeping wxWidgets for the rest of the graphical interface) ?

Implementation

Investigate memory leaks with long-running bots (especially with a controller like "walker" or "xmlrpc").

Protocol

Share connection history information between peers to improve peer choice when connecting to the world? (this could be either a dedicated field in DETECT, etc. messages, or an XML fragment in the payload similar to the XML used for entities.met).

Packaging

Use autopackage (http://autopackage.org/) or Klik (http://klik.atekon.de/) for Linux ?

User-level Features

Improve UI possibilities for services ? (e.g. toolbar, etc.)

Algorithmic Features

Algorithm problem: if not enough peers accept to connect with us, we must find other peers further from us. Thus we must keep track of which nodes sent a CLOSE message so that we decide not to try to send them HELLO again (at least during N minutes).

Be more gentle with the network in some cases:

  • don't send too many HELLOs at once, just send the necessary quantity to reach the desired number of peers
  • insert some delays in some places, to reduce instabilities (i.e. avoid spending our time sending HELLOs, CONNECTs and CLOSEs around)
  • don't do more than one move every N second ?

Periodic tasks:

  • keep entities.met up to date
  • periodic UPDATE ?

Evaluate gwebcache for the bootstrap

Technical improvements

Use the logging API everywhere in the navigator.

Revamp exceptions ?

Switch from long to float for coordinates ? (see coordinate units)

Devise some testing infrastructure.

Collect some statistics.

Local Bootstrap

While global bootstrap is about having a handful of initial nodes to build the world, local bootstrap is about each peer being able to connect to the world without having to maintain a centralized, static list of trusted peers.

A mechanism already exists for the Gnutella network. It seems fairly protocol agnostic: it mainly deals with lists of hosts (IP address + port) and is able to maintain a web of local WWW-based host list caches. These caches are regularly updated by P2P nodes so that the cached information remains fresh. They are queried by hosts which want to connect, by means of a simple HTTP query.

A very simple to install PHP version of the Gnutella Web cache exists : GWebCache (http://www.gnucleus.com/gwebcache/). There are other implementations (e.g. [1] (http://www.cryptnet.net/fsp/cpwc/devl.html)).

This system is used daily by thousands or millions of people. We can trust its robustness and its ability to give useful information to peers wanting to join the world.

Things it may be useful to look at

Wax (http://wiki.wxpython.org/index.cgi/Wax), a Python-friendly layer above wxPython.

BuildBot (http://buildbot.sourceforge.net/), a tool which automates complex build tasks.

related web sites