The Virtual Commons

building extensible software for collective action research


Google Summer of Code 2012 Ideas

We have the following projects in active development:

  1. client-server networked multiplayer "games" in Java that are deployed via ant/ivy/maven and WebStart
  2. rich web based experiments using Django on the back-end and, jQuery, and Sencha Touch on the front-end

We have over five years of experience working with student developers and are currently mentoring a team of 5 undergraduate computer science students from ASU's engineering capstone course alongside two REUs (Research Experience for Undergraduates) students and a graduate RA. Our experiment software is currently being used here at Arizona State University, at Indiana University - Bloomington, at the University of Maine, in Stockholm, and Bratislava and we hope to make it even more widely accessible with the following improvements.

Web-based projects

We are actively developing a web-based experiment framework for social science researchers that use experiments to study collective action issues ( as well as an HTML5 mobile app entitled Lighter Footprints. The app places people into groups where each participant can learn about and "perform" virtual activities that would reduce their carbon footprint (riding your bike to work or carpooling, taking public transportation, eating locally grown food, turning off your computer at night, etc.). Each activity has an associated number of "green points" that are earned for performing that activity. Groups that earn a certain number of green points can advance in level, unlocking new activities that can be performed.

Activity Verification

This idea is a part of the Lighter Footprints project.

Brief explanation: One important aspect of supporting sustainable activities is that there should be an easy way for us to verify the activities of the users. While sustainable activities can span a whole range, we plan to focus our verification efforts on the following activities: using different modes of transport, participating in recycling, and reducing energy consumption.

We can develop verification methods in several ways:

  1. Develop sophisticated machine learning classifiers that work on small training data sets.
  2. Create a peer-to-peer rating system, that incentivizes participation; massive health (, for example, is a mobile app that incentivizes good eating habits.

Expected results:
A mobile app that provides basic verification of human activity, within a restricted set of activities.

Mentor(s): Hari Sundaram, Pavan Turaga
Knowledge Prerequisite: Java

Visualization of dynamical systems

This is similar in spirit to Bret Victor's KillMath project. We are currently developing methods to visualize dynamical systems using JavaScript and HTML5 Canvas and would like to create an animation of a dynamical system given an annotated set of data points similar to xppaut.

Mentors: Marty Anderies, Miran Bozicevic, Allen Lee

VCWEB improvements

Our experiments frequently require real-time features such as chat. We currently have a working implementation of comet for real-time chat and allowing an experimenter to control client browser state transitions from one screen to another using v6 and tornadio. This support is experimental at the moment and needs to be upgraded to v7+ and tornadio2.

Other areas of improvement include better integration with neo4j (replacing expensive relational traversal queries with graph database queries), and alternative scheduling systems to celery.

Mentor: Allen Lee, Kushal Bandi

Knowledge Prerequisite: Python/Django, JavaScript, some HTML/CSS

Virtual Commons Java Client-Server Projects

These projects represent improvements to the csidex experiment framework, the foraging experiment, or the irrigation experiment.

Project: experiment configuration, installation and deployment improvements

Brief explanation: This project is for someone interested in build, configuration management, and deployment. Configuring and installing our experiment software has a lot of room for improvement. At the moment it requires proper installation and configuration of Ant and Maven and executing commands on the command-line (with a few scripts provided for convenience). There are several areas of improvement depending on student interests:

  • Integrate with a java package installer like
  • Replace Ant+Ivy deployment with pure Maven (or perhaps buildr or sbt)
  • Design and implement a configuration tool that lets users select between different sets of experiment configurations / parameterizations. We run controlled experiments that consist of specific parameterizations and compare data gathered across these parameterizations (called "treatments").
  • Develop a web-based configuration management solution that lets users modify configuration values and download a custom software package

Mentor(s): Allen Lee

Knowledge Prerequisite: Java

Project: Provide integration with online survey software (e.g., Qualtrics)

Brief explanation: Surveys are a key component of our experiments and data analysis. We have been using paper surveys that are completed during or immediately after the experiment has concluded. We'd like to reduce data entry and get better analytics on our surveys by integrating with online survey tools such as Qualtrics (

There are several methods we can employ to relate participant experiment data with survey responses, the most straightforward is to use a combination of date/time + each participant's identifier to generate a hash.

Expected results:

  • Support adding survey URLs to the round configuration
  • Robust design and implementation for associating participant data with survey responses
  • JUnit tests covering any new code

Mentor(s): Allen Lee, Marco Janssen

Knowledge Prerequisite: Java

Project: Incorporate into the csidex network stack

Brief explanation:The csidex framework provides a interfaces for network abstraction with the most stable implementation based on blocking sockets. is a high performance network framework for Java -- integrating it into the csidex network abstraction as a configurable option selected at runtime would be beneficial for experiments that are network-intensive (e.g., the foraging experiment) for both scalability and performance reasons.

Expected results:

  • NettySocketDispatcher that uses Netty as the underlying transport mechanism but conforms to the existing csidex networking interface
  • Can be selected at run-time via appropriate parameterization of an ExperimentConfiguration (choice between traditional blocking sockets and NIO)
  • JUnit tests covering the new code

Knowledge Prerequisite: Java, NIO, multithreading, concurrency

Mentor(s): Allen Lee

Web based game engines


  • Open source is preferred to proprietary engines
  • JavaScript / HTML5 based engines is preferred to Flash based engines

JavaScript engines

Flash based game engines

other resources

RabbitMQ + STOMP

Steps to get RabbitMQ-STOMP to work

  • Compile the RabbitMQ-Stomp adapter
    1. hg clone
    2. follow steps in README, e.g., cd rabbitmq-public-umbrella; make co; make
  • install rabbitmq-stomp/dist/rabbit_stomp.ez properly, following steps in
    1. mkdir $RABBITMQ_SERVER_HOME/plugins
    2. cp dist/rabbit_stomp.ez $RABBITMQ_SERVER_HOME/plugins
    3. rabbitmq-activate-plugins && service rabbitmq-server restart
Syndicate content