General Coding Rules
====================

- Function calls must not block
- All calls should be done from the main thread; a plugin writer
  should be very careful about using threads. Using a separate thread
  should be done via twisted's method deferToThread or callInThread.
  If one is using a separate thread, calls can be launched in the main
  thread using twisted's method callFromThread

- Communication from the activities to the core components should use
  function calls as much as possible when it's for 1-1 communications
- The MessageBus should be used for 1-n asynchronous communications
- Signals should be used for 1-n synchronous communications. The
  signal.emit() call is blocking and should be used with care.
- Signals should reside at least in the module from where they are
  emitted. Best is to store them directly as instance attributes of
  the emitter, when the instance is easily accessible by other
  components (like the Managers for instance)
