Preference Router

Thomas von der Elbe ThomasvonderElbe at gmx.de
Wed Mar 24 12:54:33 EDT 2010


Hello folks,

We require a preference router to enable free-range voting. This job
is open and if anyone wants to tackle it, that would be great!
 
A preference router is a server that provides HTTP redirection 
services for registered voters.  It may be coded as a service of 
Votorola (Java), a service of another project, or as a stand-alone 
project of its own (any language).  Here is Mike's preliminary design 
sketch.  Comments and critique are welcome.

STRUCTURE
---------
The preference router (R) is associated 1:1 with a pollwiki (PW).^[1]

        (PW)
        /|\
       / | \
      /  |  \
     /   |   \        PW  pollwiki (common issues)
    /    |    \       PS  pollserver (Votorola and others)
  (PS)--(R)---(PS)    R   preference router
    \    |    /       TS  trustserver (common registrants)
     \   |   /
      \  |  /
       \ | /
        \|/
        (TS)

The router is associated with multiple pollservers (PS) and
trustservers (TS, but only 1 in the initial impl).  It has any number
of Web clients (PW, and many others not shown).  The router accepts
requests from these clients in this format:
 
  R-URL ? PS-PARAMS [& R-PARAMS]

  where:

    R-URL = URL of the router
    PS-PARAMS = parameters for the pollserver
    R-PARAMS = parameters for the routing service

FUNCTION
--------
The router ultimately replies to each request with a 303 redirect to:

  PS-URL ? PS-PARAMS

PS-URL is the URL of the user's preferred pollserver.  It is
determined as follows.  First the router discovers the identity of the
requesting user by one of these methods:

  a) A cookie.  The user ID is cached as a cookie in cases (b) and (c)
     below.

  b) Querying the associated pollwiki for a logged-in user, via
     either:
     * http://www.mediawiki.org/wiki/API:Query_-_Meta#userinfo_.2F_ui
     * Special:Mypage

  c) Asking the user for his/her ID (the ID need not be
     authenticated).

  *  Other methods (future), such as browser extensions that expose a
     user ID for preference purposes.

The user's preferred type of pollserver ("Votorola", "Adhocracy",
etc.) is then fetched from the registration list (ultimately from the
TS/streetwiki).  It is translated to a local PS-URL via a routing
table.  The routing table is stored in the pollwiki, under editorial
supervision of the router administrator and others.

EXAMPLE
-------
Here is the routing table, pointing to our local pollservers
(suppose):

  Adhocracy = http://e.adhocracy.cc/
  Votorola = http://u.zelea.com:8080/v/w/e/

A request URL is posted (say) to a discussion forum:

  http://router.erehwon.org/?a=v&u=Abd-LomaxdesignCom&p=m

I see the URL and I click on it.  The router discovers my username
from the pollwiki (because I'm permanently logged in there).  It then
discovers my preference for Votorola servers, which I've encoded on my
user page (because our pollwiki is also going to be a streetwiki).  My
request is therefore redirected to:

  http://u.zelea.com:8080/v/w/e/?a=v&u=Abd-LomaxdesignCom&p=m

I can then click on the Vote button, or browse around for other
candidates.


We need preference routing for step 3c of the plans.^[1] But if we
code it sooner, then the open architecture (shared voter register,
issues, electoral districts, and so forth) might be more attractive to
other projects, and more likely to succeed.

[1] http://u.zelea.com/wiki/User:Mike-ZeleaCom/p/vop


Best, 
Thomas





More information about the Votorola mailing list