virtualcommons-svn Mailing List for Virtual Commons Experiment Software
Status: Beta
Brought to you by:
alllee
You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(1) |
Jul
(21) |
Aug
(31) |
Sep
(6) |
Oct
(15) |
Nov
(2) |
Dec
(9) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(4) |
Feb
(6) |
Mar
(12) |
Apr
(52) |
May
(14) |
Jun
(19) |
Jul
(81) |
Aug
(115) |
Sep
(36) |
Oct
(88) |
Nov
(46) |
Dec
(58) |
2010 |
Jan
(52) |
Feb
(55) |
Mar
(48) |
Apr
(15) |
May
(5) |
Jun
(38) |
Jul
(27) |
Aug
(24) |
Sep
(28) |
Oct
(1) |
Nov
(2) |
Dec
(29) |
2011 |
Jan
(87) |
Feb
(39) |
Mar
(63) |
Apr
(42) |
May
(26) |
Jun
(53) |
Jul
(23) |
Aug
(43) |
Sep
(37) |
Oct
(25) |
Nov
(4) |
Dec
(7) |
2012 |
Jan
(73) |
Feb
(79) |
Mar
(62) |
Apr
(28) |
May
(12) |
Jun
(2) |
Jul
(9) |
Aug
(1) |
Sep
(8) |
Oct
|
Nov
(3) |
Dec
(3) |
2013 |
Jan
(8) |
Feb
(16) |
Mar
(38) |
Apr
(74) |
May
(62) |
Jun
(15) |
Jul
(49) |
Aug
(19) |
Sep
(9) |
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
(2) |
May
(25) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <com...@bi...> - 2014-05-25 07:40:25
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/55083aa5fe69/ Changeset: 55083aa5fe69 User: alllee Date: 2014-05-25 09:40:03 Summary: fixing readme references Affected #: 1 file diff -r bfaeaebe5549966397d34d5288c5c852d8ff001f -r 55083aa5fe69ec17544303b6b56f71dc7aa9d9fe README.md --- a/README.md +++ b/README.md @@ -6,16 +6,19 @@ ### features -* participants are placed in randomized groups and go through a series of chat -> investment -> real-time decision +* participants are placed in randomized ordered groups (A -> E where A is upstream and E is downstream) and go through a series of chat -> investment -> real-time decision making rounds * includes comprehension quizzes with detailed feedback, dynamic graph and chart visualizations via the excellent [JFreeChart](http://www.jfree.org/jfreechart) library -* round and experiment parameterization support for variable shocks to the infrastructure and water supply and limited - information where participants can only communicate and see what is going on with their immediate neighbors +* round and experiment parameterization including: + * chat and round duration + * infrastructure decay and shocks to the infrastructure and water supply + * initial endowment and payment exchange rate + * limited information where participants can only communicate with and view information from their immediate neighbors ### how to run the software * [install and setup Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) -* [download and unpack the foraging codebase](https://bitbucket.org/virtualcommons/irrigation/downloads) +* [download and unpack the irrigation codebase](https://bitbucket.org/virtualcommons/irrigation/downloads) * For a quick start demo, run the following from the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, Linux terminal) ``` #!bash @@ -23,8 +26,6 @@ % ant demo # this will start a server, a facilitator, and 5 client windows to form a full group ``` -For more detailed instructions, please refer to the [installation instructions on our wiki](https://bitbucket.org/virtualcommons/irrigation/wiki/Installation). - ### how to contribute This experiment is not under active development. If you'd like to use it to run experiments or want to extend the software, [please let us know](http://vcweb.asu.edu/contact). Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-20 19:06:18
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/bfaeaebe5549/ Changeset: bfaeaebe5549 User: alllee Date: 2014-05-20 21:06:10 Summary: adding a basic feature list Affected #: 1 file diff -r 84d234e8a8aa538df4ef7f92b38b651e3b7ca9e0 -r bfaeaebe5549966397d34d5288c5c852d8ff001f README.md --- a/README.md +++ b/README.md @@ -1,35 +1,29 @@ ### irrigation -A Java Swing collective action / [public goods experiment](http://en.wikipedia.org/wiki/Public_goods_game) that places -participants in an upstream-downstream scenario. Participants choose when to open or close their irrigation gates and -how much to invest in their common infrastructure. +A collective action / [public goods experiment](http://en.wikipedia.org/wiki/Public_goods_game) implemented using Java +Swing and the [csidex](http://bitbucket.org/virtualcommons/csidex) framework that places +participants in an upstream-downstream scenario. Participants are randomly partitioned into groups and can choose when +to open or close their irrigation gates and how much to invest in their common infrastructure. -It is dependent on the [csidex](http://bitbucket.org/virtualcommons/csidex) framework. +### features -### installation requirements +* participants are placed in randomized groups and go through a series of chat -> investment -> real-time decision + making rounds +* includes comprehension quizzes with detailed feedback, dynamic graph and chart visualizations via the excellent [JFreeChart](http://www.jfree.org/jfreechart) library +* round and experiment parameterization support for variable shocks to the infrastructure and water supply and limited + information where participants can only communicate and see what is going on with their immediate neighbors -- JDK 1.7 -- [Apache Ant](http://ant.apache.org) - -### deployment requirements - -Pick one: - -- a webserver to deliver JNLP files (can use Maven and its embedded Jetty webserver) -- networked filesystem where the codebase is installed mounted on each client. - -### how to run - -Quickstart: +### how to run the software * [install and setup Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) * [download and unpack the foraging codebase](https://bitbucket.org/virtualcommons/irrigation/downloads) -* From the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, or any Linux terminal program) +* For a quick start demo, run the following from the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, Linux terminal) ``` #!bash % ant prepare-demo -% ant demo +% ant demo # this will start a server, a facilitator, and 5 client windows to form a full group ``` -For more detailed instructions, please see the [installation instructions on our wiki](https://bitbucket.org/virtualcommons/irrigation/wiki/Installation). + +For more detailed instructions, please refer to the [installation instructions on our wiki](https://bitbucket.org/virtualcommons/irrigation/wiki/Installation). ### how to contribute This experiment is not under active development. If you'd like to use it to run experiments or want to extend the Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-20 19:05:37
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/c2f8d90d09e0/ Changeset: c2f8d90d09e0 User: alllee Date: 2014-05-20 21:05:32 Summary: more readme refinement Affected #: 1 file diff -r b4c22fc8d4523fe56a269b0ac5ad0d4024f850a4 -r c2f8d90d09e0357d96b811c7ff334acb7c774b20 README.md --- a/README.md +++ b/README.md @@ -1,20 +1,25 @@ ### foraging The foraging experiment is a common pool resource experiment where participants are placed in randomized groups and -interact with a spatially explicit virtual resource environment. It is built on the +interact with a spatially explicit renewable resource. It is built on the [csidex](http://bitbucket.org/virtualcommons/csidex) experiment framework and has been used to conduct research studies at [Arizona State University](http://www.asu.edu), [Indiana University](http://www.iu.edu), and the [University of Alaska-Anchorage](http://www.uaa.alaska.edu). ### features -* participants move and interact with a resource in a real-time 2-D grid environment. -* Easily pluggable resource growth dynamics. The default is a parameterized density-dependent growth function but there +* Participants move and interact with a resource in a real-time 2-D grid environment. +* Pluggable resource growth dynamics. The default is a parameterized density-dependent growth function but there are also "patchy" resource growth dynamics where the top half of the grid has a higher chance of regrowth than the bottom half. Arbitrary regrowth dynamics are possible by implementing a Java interface and specifying it in a configuration file. -* support for interactive quizzes, logged chat, message censoring, voting, and sanctioning -* binary and XML savefiles that store every user action in a time ordered stream that can be converted to QuickTime - movies and replayed. +* Flexible experiment and round scoped parameterization via [Java properties files](http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html) used to define experimental treatments. + Experiment scoped parameters apply to the entire experiment whereas round scoped parameters apply to a specific round. +* Support for interactive quizzes, monitored real-time chat with options for censoring, voting, sanctioning, mini trust + games in between rounds, embedded links that uniquely and anonymously identify each participant to Qualtrics surveys + and limited fields of vision. +* Binary and XML savefiles that store every user action (e.g., movement, harvest events, sanction events, chats) in a time + ordered stream that can be converted to a variety of CSV statistics files and into QuickTime movies. Custom data + analysis can be done by extending the SaveFileConverter class and analyzing the OrderedSet of user actions. ### how to run the software @@ -22,11 +27,11 @@ * [install and setup Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) * [download and unpack the foraging codebase](https://bitbucket.org/virtualcommons/foraging/downloads) -* From the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, or any Linux terminal program) +* From the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, or any Linux terminal) ``` #!bash % ant prepare-demo -% ant demo +% ant demo % this will start a server, a facilitator, and 5 clients in the demo treatment ``` For more detailed instructions, please see the [installation instructions on our wiki](https://bitbucket.org/virtualcommons/foraging/wiki/Installation). Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-20 17:34:34
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/b4c22fc8d452/ Changeset: b4c22fc8d452 User: alllee Date: 2014-05-20 19:34:27 Summary: fixing demo targets Affected #: 1 file diff -r 52c90d2a6d2533ab42fd693eab71781c6e6ee657 -r b4c22fc8d4523fe56a269b0ac5ad0d4024f850a4 build.xml --- a/build.xml +++ b/build.xml @@ -32,6 +32,8 @@ <property name="javadoc.private.dir" value="docs/private"/><property name="lib.dir" value="lib"/><property name="remote.debug.port" value="1044"/> + <available file="${conf.dir}/server.xml" property="configuration.exists"/> + <available file="${basedir}/build.properties" property="build.properties.exists"/><!-- Set up the CLASSPATH, includes all jars in the lib directory and all built files for both the main project and the tests --> @@ -113,12 +115,12 @@ <chmod dir="${deploy.dir}" perm="664" type="file" includes="**"/><chmod dir="${deploy.dir}" perm="775" type="dir" includes="**"/></target> - <target name='demo-configuration' depends='check-configuration,compile' unless='configuration.exists'> + <target name='demo-configuration' unless='${configuration.exists}'><copy todir="${conf.dir}"><fileset dir="${conf.dir}/demo"/></copy></target> - <target name='demo-build-properties' depends='check-configuration,compile' unless='build.properties.exists'> + <target name='demo-build-properties' unless='${build.properties.exists}'><copy tofile='${basedir}/build.properties' file='${basedir}/build.properties.example'/></target><target name='prepare-demo' depends='demo-configuration,demo-build-properties,compile'> @@ -130,16 +132,32 @@ <antcall target='server' /></daemons><sequential> + <sleep seconds='2'/> + <antcall target='fac'/> + </sequential> + <sequential> + <sleep seconds='3'/> + <antcall target='client'/> + </sequential> + <sequential> + <sleep seconds='4'/> + <antcall target='client'/> + </sequential> + <sequential><sleep seconds='5'/><antcall target='client'/></sequential><sequential> - <sleep seconds='5'/> - <antcall target='fac'/> + <sleep seconds='6'/> + <antcall target='client'/> + </sequential> + <sequential> + <sleep seconds='7'/> + <antcall target='client'/></sequential></parallel></target> - <target name="deploy" depends="check-configuration,configure" if="configuration.exists"> + <target name="deploy" depends="check-configuration,configure" if="${configuration.exists}"><antcall target="deploy-to"><param name="deploy.dir" value="${web.dir}"/></antcall> @@ -215,10 +233,8 @@ </target><!-- fails if requisite build.properties or src/main/resources/configuration/server.xml do not exist --><target name="check-configuration"> - <available file="${conf.dir}/server.xml" property="configuration.exists"/> - <available file="${basedir}/build.properties" property="build.properties.exists"/> - <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="configuration.exists"/> - <fail message="Please copy build.properties.example to build.properties and edit before proceeding." unless="build.properties.exists"/> + <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="${configuration.exists}"/> + <fail message="Please copy build.properties.example to build.properties and edit before proceeding." unless="${build.properties.exists}"/></target><!-- Compile project source files --><target name="compile" depends="prepare, resolve"> Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-20 17:27:22
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/84d234e8a8aa/ Changeset: 84d234e8a8aa User: alllee Date: 2014-05-20 19:27:17 Summary: fixing demo preparation and adding more clients to demo target Affected #: 2 files diff -r c6d81ee2030703f8a59381b756c42dae0a5610c0 -r 84d234e8a8aa538df4ef7f92b38b651e3b7ca9e0 build.xml --- a/build.xml +++ b/build.xml @@ -35,6 +35,9 @@ <property name="javadoc.dir" value="docs/javadoc"/><property name="javadoc.private.dir" value="docs/private"/><property name="lib.dir" value="lib"/> + <!-- configuration properties and conditions --> + <available file="${conf.dir}/irrigation.xml" property="configuration.exists"/> + <available file="${basedir}/build.properties" property="build.properties.exists"/><!-- Set up the CLASSPATH, includes all jars in the lib directory and all built files for both the main project and the tests --> @@ -119,17 +122,15 @@ </target><!-- fails if requisite build.properties or src/main/resources/configuration/irrigation.xml do not exist --><target name="check-configuration"> - <available file="${conf.dir}/irrigation.xml" property="configuration.exists"/> - <available file="${basedir}/build.properties" property="build.properties.exists"/> - <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="configuration.exists"/> + <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="${configuration.exists}"/><fail message="Please copy build.properties.example to build.properties and edit before proceeding." unless="build.properties.exists"/></target> - <target name='demo-configuration' depends='check-configuration,compile' unless='configuration.exists'> + <target name='demo-configuration' unless='${configuration.exists}'><copy todir="${conf.dir}"><fileset dir="${conf.dir}/demo"/></copy></target> - <target name='demo-build-properties' depends='check-configuration,compile' unless='build.properties.exists'> + <target name='demo-build-properties' unless='${build.properties.exists}'><copy tofile='${basedir}/build.properties' file='${basedir}/build.properties.example'/></target><target name='prepare-demo' depends='demo-configuration,demo-build-properties,compile'> @@ -142,15 +143,31 @@ </daemons><sequential><sleep seconds='5'/> + <antcall target='fac'/> + </sequential> + <sequential> + <sleep seconds='5'/><antcall target='client'/></sequential><sequential> - <sleep seconds='5'/> - <antcall target='fac'/> + <sleep seconds='6'/> + <antcall target='client'/> + </sequential> + <sequential> + <sleep seconds='7'/> + <antcall target='client'/> + </sequential> + <sequential> + <sleep seconds='8'/> + <antcall target='client'/> + </sequential> + <sequential> + <sleep seconds='8'/> + <antcall target='client'/></sequential></parallel></target> - <target name="deploy" depends='check-configuration,configure' if='configuration.exists'> + <target name="deploy" depends='check-configuration,configure' if='${configuration.exists}'><fail message="Please verify that server.address is properly set in build.properties" unless="server.address"/><antcall target="deploy-to"><param name="deploy.dir" value="${web.dir}"/> @@ -206,10 +223,13 @@ <mkdir dir="${dist.dir}"/></target><!-- Clean up build by deleting build directories --> - <target name="clean"> + <target name="purge"><echo message="Removing ${user.home}/.ant/cache"/><delete dir="${user.home}/.ant/cache"/><delete dir="${user.home}/.m2/repository/edu/asu/commons"/> + <antcall target='clean' /> + </target> + <target name='clean'><delete dir="${build.dir}"/><delete dir="${test.build.dir}"/><delete dir="${lib.dir}"/> diff -r c6d81ee2030703f8a59381b756c42dae0a5610c0 -r 84d234e8a8aa538df4ef7f92b38b651e3b7ca9e0 ivy.xml --- a/ivy.xml +++ b/ivy.xml @@ -5,9 +5,7 @@ <ivy-module version="2.0"><info organisation="edu.asu.commons" module="irrigation"/><dependencies> - <dependency org="edu.asu.commons" name="csidex" rev="0.7-SNAPSHOT"> - <exclude module="jnlp-api" /> - </dependency> + <dependency org="edu.asu.commons" name="csidex" rev="0.7-SNAPSHOT" /><dependency org="org.jfree" name="jfreechart" rev="1.0.17"/></dependencies></ivy-module> Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-20 01:20:27
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/c6d81ee20307/ Changeset: c6d81ee20307 User: alllee Date: 2014-05-20 03:20:03 Summary: adjusting readme to use ant demo quickstart Affected #: 1 file diff -r 88b3cbe469f6168b4fd37edd06d99a01090f7aa9 -r c6d81ee2030703f8a59381b756c42dae0a5610c0 README.md --- a/README.md +++ b/README.md @@ -19,25 +19,18 @@ ### how to run -- download the software -- `cp build.properties.example build.properties` and then customize `build.properties` -- copy experiment configuration files to `src/main/resources/configuration`. For a quick demo, try `cp src/main/resources/configuration/demo/* src/main/resources/configuration` -- run `ant deploy` +Quickstart: -After a successful deployment you can: - -- start the server via `ant server` or `java -jar -server server.jar`. - -- start a facilitator via `ant fac`, `java -jar facilitator.jar`, or visiting `${codebase.url}/facilitator.jnlp` in your - browser for Java WebStart. - -- start a client via `ant client`, `java -jar client.jar`, or visiting `${codebase.url}` in your browser to use Java - WebStart. - -NOTE: Java WebStart deployment requires security overrides, either trusted signed jars or adding an exception to the site list on each -client machine for the server hosting the webstart JNLP files and jars. +* [install and setup Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) +* [download and unpack the foraging codebase](https://bitbucket.org/virtualcommons/irrigation/downloads) +* From the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, or any Linux terminal program) +``` +#!bash +% ant prepare-demo +% ant demo +``` +For more detailed instructions, please see the [installation instructions on our wiki](https://bitbucket.org/virtualcommons/irrigation/wiki/Installation). ### how to contribute -This experiment is in dire need of a thorough UI refactor and is _not under active development_. - -Past development has been supported by the [Center for the Study of Institutional Diversity](http://csid.asu.edu) and the [National Science Foundation](http://nsf.gov). +This experiment is not under active development. If you'd like to use it to run experiments or want to extend the +software, [please let us know](http://vcweb.asu.edu/contact). Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-20 01:14:20
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/88b3cbe469f6/ Changeset: 88b3cbe469f6 User: alllee Date: 2014-05-20 03:14:08 Summary: adding ant demo target for quickstart and removing manual ivy download in favor of xmlns:ivy which should work with with all recent versions of ant Affected #: 1 file diff -r 0554cc0a290b3838e5156425a29d5852db54e257 -r 88b3cbe469f6168b4fd37edd06d99a01090f7aa9 build.xml --- a/build.xml +++ b/build.xml @@ -1,99 +1,56 @@ +<?xml version="1.0"?><!-- $Id$ vim:sts=2:sw=2: Version: $Revision$ --> -<project xmlns:ivy='antlib:org.apache.ivy.ant' name="irrigation" default="build-all" basedir="."> - - <!-- ensure ivy availability --> - <!-- - <path id='ivy.lib.path'> - <fileset dir='lib/ivy' includes='*.jar'/> - </path> - <taskdef resource='org/apache/ivy/ant/antlib.xml' - uri='antlib:org.apache.ivy.ant' - classpathref='ivy.lib.path'/> - --> - <property name="ivy.install.version" value="2.3.0" /> - <condition property="ivy.home" value="${env.IVY_HOME}"> - <isset property="env.IVY_HOME" /> - </condition> - <property name="ivy.home" value="${user.home}/.ant" /> - <property name="ivy.jar.dir" value="${ivy.home}/lib" /> - <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" /> - - <target name="download-ivy" unless="offline"> - <mkdir dir="${ivy.jar.dir}"/> - <!-- download Ivy from web site so that it can be used even without any special installation --> - <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" - dest="${ivy.jar.file}" usetimestamp="true"/> - </target> - - <target name="init-ivy" depends="download-ivy"> - <!-- try to load ivy here from ivy home, in case the user has not already dropped - it into ant's lib dir (note that the latter copy will always take precedence). - We will not fail as long as local lib dir exists (it may be empty) and - ivy is in at least one of ant's lib dir or the local lib dir. --> - <path id="ivy.lib.path"> - <fileset dir="${ivy.jar.dir}" includes="*.jar"/> - </path> - <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/> - </target> - - <target name='resolve' depends='init-ivy' description='--> retrieve dependencies with ivy'> - <ivy:retrieve pattern='${lib.dir}/[conf]/[artifact]-[type]-[revision].[ext]'/> - </target> - +<project xmlns:ivy="antlib:org.apache.ivy.ant" name="irrigation" default="build-all" basedir="."> + <target name="resolve" description="--> retrieve dependencies with ivy"> + <!-- <ivy:retrieve pattern='${lib.dir}/[artifact]-[revision].[ext]'/> --> + <ivy:retrieve pattern="${lib.dir}/[artifact]-[revision].[ext]"/> + </target><!-- Load all properties from the build.properties file, then try to define defaults for all the properties. The property definitions in the build.properties file will have precedence. - --> - <property file="build.properties" /> + --> + <property file="build.properties"/><!-- default compilation properties --> - <property name='src.dir' value='src/main/java'/> - <property name='build.dir' value='target/classes'/> - + <property name="src.dir" value="src/main/java"/> + <property name="build.dir" value="target/classes"/><!-- default web & deployment properties --> - <property name='web.dir' value='src/main/webapp'/> - <property name='server.port' value='16001'/> - <property name='codebase.url' value='http://${server.address}/${ant.project.name}'/> - <property name='client.class' value='edu.asu.commons.irrigation.client.IrrigationClient'/> - <property name='facilitator.class' value='edu.asu.commons.irrigation.facilitator.Facilitator'/> - <property name='server.class' value='edu.asu.commons.irrigation.server.IrrigationServer'/> - <property name='framework.jar' value='csidex.jar'/> - - <property name='dist.dir' value='.' /> - - <property name='resources.dir' value='src/main/resources'/> - <property name='conf.dir' value='${resources.dir}/configuration'/> - + <property name="web.dir" value="src/main/webapp"/> + <property name="server.port" value="16001"/> + <property name="codebase.url" value="http://${server.address}/${ant.project.name}"/> + <property name="client.class" value="edu.asu.commons.irrigation.client.IrrigationClient"/> + <property name="facilitator.class" value="edu.asu.commons.irrigation.facilitator.Facilitator"/> + <property name="server.class" value="edu.asu.commons.irrigation.server.IrrigationServer"/> + <property name="framework.jar" value="csidex.jar"/> + <property name="dist.dir" value="."/> + <property name="resources.dir" value="src/main/resources"/> + <property name="conf.dir" value="${resources.dir}/configuration"/><!-- test properties --><property name="test.src.dir" value="src/test/java"/><property name="test.build.dir" value="target/test-classes"/> - <property name="test.results.dir" value="target/surefire-reports" /> - + <property name="test.results.dir" value="target/surefire-reports"/><property name="javadoc.dir" value="docs/javadoc"/><property name="javadoc.private.dir" value="docs/private"/> - <property name='lib.dir' value='lib'/> - + <property name="lib.dir" value="lib"/><!-- Set up the CLASSPATH, includes all jars in the lib directory and all built files for both the main project and the tests --><path id="project.classpath"> - <pathelement location="." /> + <pathelement location="."/><fileset dir="${lib.dir}"> - <include name="**/*.jar" /> + <include name="**/*.jar"/></fileset> - <pathelement location="${build.dir}" /> - <pathelement location="${test.build.dir}" /> - <pathelement location='${resources.dir}' /> + <pathelement location="${build.dir}"/> + <pathelement location="${test.build.dir}"/> + <pathelement location="${resources.dir}"/></path> - - <path id='runtime.classpath'> - <path refid='project.classpath' /> - <pathelement location='${java.home}/lib/javaws.jar' /> + <path id="runtime.classpath"> + <path refid="project.classpath"/> + <pathelement location="${java.home}/lib/javaws.jar"/></path> - <target name="help"><echo> NOTE: At minimum you will need to modify the default web.dir and @@ -113,104 +70,129 @@ deploy - invokes build-all and then copies the client and facilitator jars to ${web.dir} </echo></target> - - <target name='build-all' depends='facilitator-jar, client-jar, server-jar, compile'/> - -<!-- deploys the client + facilitator + csidex jarfiles to the appropriate + <target name="build-all" depends="facilitator-jar, client-jar, server-jar, compile"/> + <!-- deploys the client + facilitator + csidex jarfiles to the appropriate webapps directory. --> - <target name='deploy-to' depends='build-all'> - <mkdir dir='${deploy.dir}'/> + <target name="deploy-to" depends="build-all"> + <mkdir dir="${deploy.dir}"/><!-- copy client jar, facilitator jar, and csidex.jar to web deployment directory --> - <copy todir='${deploy.dir}' overwrite='true'> - <fileset dir='${dist.dir}'> - <include name='client.jar'/> - <include name='facilitator.jar'/> + <copy todir="${deploy.dir}" overwrite="true"> + <fileset dir="${dist.dir}"> + <include name="client.jar"/> + <include name="facilitator.jar"/></fileset> - <fileset dir='${lib.dir}'> - <include name='*.jar'/> + <fileset dir="${lib.dir}"> + <include name="*.jar"/></fileset> - <fileset dir='${resources.dir}/web'> - <include name='index.html'/> - <include name='WEB-INF/**'/> + <fileset dir="${resources.dir}/web"> + <include name="index.html"/> + <include name="WEB-INF/**"/></fileset></copy><!-- copy images --> - <copy todir='${deploy.dir}/images' overwrite='true' failonerror='false'> - <fileset dir='${resources.dir}/images'/> + <copy todir="${deploy.dir}/images" overwrite="true" failonerror="false"> + <fileset dir="${resources.dir}/images"/></copy><!-- copy client and facilitator JNLP descriptor files, replacing url/main class tokens. --> - <copy file='${resources.dir}/web/client.jnlp' todir='${deploy.dir}' overwrite='true'> + <copy file="${resources.dir}/web/client.jnlp" todir="${deploy.dir}" overwrite="true"><filterset> - <filter token='CODEBASE_URL' value='${codebase.url}'/> - <filter token='MAIN_CLASS' value='${client.class}'/> - <filter token='FRAMEWORK_JAR' value='${framework.jar}'/> + <filter token="CODEBASE_URL" value="${codebase.url}"/> + <filter token="MAIN_CLASS" value="${client.class}"/> + <filter token="FRAMEWORK_JAR" value="${framework.jar}"/></filterset></copy> - <copy file='${resources.dir}/web/facilitator.jnlp' todir='${deploy.dir}' overwrite='true'> + <copy file="${resources.dir}/web/facilitator.jnlp" todir="${deploy.dir}" overwrite="true"><filterset> - <filter token='CODEBASE_URL' value='${codebase.url}'/> - <filter token='MAIN_CLASS' value='${facilitator.class}'/> - <filter token='FRAMEWORK_JAR' value='${framework.jar}'/> + <filter token="CODEBASE_URL" value="${codebase.url}"/> + <filter token="MAIN_CLASS" value="${facilitator.class}"/> + <filter token="FRAMEWORK_JAR" value="${framework.jar}"/></filterset></copy> - <chmod dir='${deploy.dir}' perm='664' type='file' includes='**'/> - <chmod dir='${deploy.dir}' perm='775' type='dir' includes='**'/> + <chmod dir="${deploy.dir}" perm="664" type="file" includes="**"/> + <chmod dir="${deploy.dir}" perm="775" type="dir" includes="**"/></target> - - <target name='deploy'> + <!-- fails if requisite build.properties or src/main/resources/configuration/irrigation.xml do not exist --> + <target name="check-configuration"> + <available file="${conf.dir}/irrigation.xml" property="configuration.exists"/> + <available file="${basedir}/build.properties" property="build.properties.exists"/> + <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="configuration.exists"/> + <fail message="Please copy build.properties.example to build.properties and edit before proceeding." unless="build.properties.exists"/> + </target> + <target name='demo-configuration' depends='check-configuration,compile' unless='configuration.exists'> + <copy todir="${conf.dir}"> + <fileset dir="${conf.dir}/demo"/> + </copy> + </target> + <target name='demo-build-properties' depends='check-configuration,compile' unless='build.properties.exists'> + <copy tofile='${basedir}/build.properties' file='${basedir}/build.properties.example'/> + </target> + <target name='prepare-demo' depends='demo-configuration,demo-build-properties,compile'> + </target> + <target name="demo" depends="prepare-demo"> + <antcall target='deploy'/> + <parallel> + <daemons> + <antcall target='server' /> + </daemons> + <sequential> + <sleep seconds='5'/> + <antcall target='client'/> + </sequential> + <sequential> + <sleep seconds='5'/> + <antcall target='fac'/> + </sequential> + </parallel> + </target> + <target name="deploy" depends='check-configuration,configure' if='configuration.exists'><fail message="Please verify that server.address is properly set in build.properties" unless="server.address"/> - <antcall target='deploy-to'> - <param name='deploy.dir' value='${web.dir}'/> + <antcall target="deploy-to"> + <param name="deploy.dir" value="${web.dir}"/></antcall></target> - - <target name='client-jar' depends='server-jar'> - <antcall target='build-jar'> - <param name='main.class' value='${client.class}'/> - <param name='jar.name' value='client.jar'/> + <target name="client-jar" depends="server-jar"> + <antcall target="build-jar"> + <param name="main.class" value="${client.class}"/> + <param name="jar.name" value="client.jar"/></antcall></target> - - <target name='facilitator-jar' depends='client-jar'> - <antcall target='build-jar'> - <param name='main.class' value='${facilitator.class}'/> - <param name='jar.name' value='facilitator.jar'/> + <target name="facilitator-jar" depends="client-jar"> + <antcall target="build-jar"> + <param name="main.class" value="${facilitator.class}"/> + <param name="jar.name" value="facilitator.jar"/></antcall></target> - - - <target name='server-jar' depends='compile, configure'> - <antcall target='build-jar'> - <param name='main.class' value='${server.class}'/> - <param name='jar.name' value='server.jar'/> + <target name="server-jar" depends="compile, configure"> + <antcall target="build-jar"> + <param name="main.class" value="${server.class}"/> + <param name="jar.name" value="server.jar"/></antcall></target> - - <target name='build-jar'> - <manifestclasspath property='manifest.classpath' jarfile='${jar.name}'> - <classpath refid='project.classpath'/> + <target name="build-jar"> + <manifestclasspath property="manifest.classpath" jarfile="${jar.name}"> + <classpath refid="project.classpath"/></manifestclasspath> - <chmod dir='${build.dir}' perm='a+rx' type='dir' includes='**'/> - <chmod dir='${build.dir}' perm='a+r' type='file' includes='**'/> - <manifest file='manifest.mf'> + <chmod dir="${build.dir}" perm="a+rx" type="dir" includes="**"/> + <chmod dir="${build.dir}" perm="a+r" type="file" includes="**"/> + <manifest file="manifest.mf"><attribute name="Main-Class" value="${main.class}"/> - <attribute name='Class-Path' value='${manifest.classpath}'/> + <attribute name="Class-Path" value="${manifest.classpath}"/></manifest> - <jar destfile='${dist.dir}/${jar.name}' manifest='manifest.mf'> - <fileset dir='${build.dir}'> - <include name='edu/asu/commons/**'/> - <include name='data/**'/> - <include name='conf/**'/> - <include name='images/**'/> + <jar destfile="${dist.dir}/${jar.name}" manifest="manifest.mf"> + <fileset dir="${build.dir}"> + <include name="edu/asu/commons/**"/> + <include name="data/**"/> + <include name="conf/**"/> + <include name="images/**"/></fileset></jar> - <chmod file='${dist.dir}/${jar.name}' perm='664'/> + <chmod file="${dist.dir}/${jar.name}" perm="664"/><!-- <signjar destDir="target/signed" alias="vcommons" keystore="/home/alllee/.keystore" @@ -218,151 +200,113 @@ --></target><!-- Prepare for a build by creating appropriate directories --> - <target name="prepare" depends='resolve'> + <target name="prepare" depends="resolve"><mkdir dir="${build.dir}"/><mkdir dir="${test.build.dir}"/> - <mkdir dir='${dist.dir}'/> + <mkdir dir="${dist.dir}"/></target> - <!-- Clean up build by deleting build directories --><target name="clean"> - <echo message="Removing ${user.home}/.ant/cache" /> - <delete dir='${user.home}/.ant/cache' /> - <delete dir='${user.home}/.m2/repository/edu/asu/commons' /> + <echo message="Removing ${user.home}/.ant/cache"/> + <delete dir="${user.home}/.ant/cache"/> + <delete dir="${user.home}/.m2/repository/edu/asu/commons"/><delete dir="${build.dir}"/><delete dir="${test.build.dir}"/> - <delete dir='${lib.dir}'/> - <delete file='server.jar'/> - <delete file='client.jar'/> - <delete file='facilitator.jar'/> + <delete dir="${lib.dir}"/> + <delete file="server.jar"/> + <delete file="client.jar"/> + <delete file="facilitator.jar"/></target> - <!-- Compile project source files --> - <target name='compile' depends="prepare"> - <javac srcdir="${src.dir}" - destdir="${build.dir}" - debug="on" - optimize="off" - deprecation="on" - includeantruntime='true' - source="1.7" - target="1.7" - > - <compilerarg value='-Xlint:unchecked'/> - <classpath refid="project.classpath" /> + <target name="compile" depends="prepare"> + <javac srcdir="${src.dir}" destdir="${build.dir}" debug="on" optimize="off" deprecation="on" includeantruntime="true" source="1.7" target="1.7"> + <compilerarg value="-Xlint:unchecked"/> + <classpath refid="project.classpath"/></javac> - <copy todir='${build.dir}/images' failonerror='false'> - <fileset dir='${resources.dir}/images'/> + <copy todir="${build.dir}/images" failonerror="false"> + <fileset dir="${resources.dir}/images"/></copy></target> - - <target name='configure'> - <copy todir='${build.dir}/conf'> - <fileset dir='${conf.dir}'/> + <target name="configure"> + <copy todir="${build.dir}/conf"> + <fileset dir="${conf.dir}"/><filterset> - <filter token='SERVER_ADDRESS' value='${server.address}'/> - <filter token='PORT_NUMBER' value='${server.port}'/> - <filter token='CODEBASE_URL' value='${codebase.url}'/> + <filter token="SERVER_ADDRESS" value="${server.address}"/> + <filter token="PORT_NUMBER" value="${server.port}"/> + <filter token="CODEBASE_URL" value="${codebase.url}"/></filterset></copy></target> - - <target name='profile' depends='test'> - <java jar='${project.profiler}' classpathref='project.classpath' fork='true'> - <arg value='${hprof.file}'/> + <target name="profile" depends="test"> + <java jar="${project.profiler}" classpathref="project.classpath" fork="true"> + <arg value="${hprof.file}"/></java><!-- do something like java -jar PerfAnal.jar <hprof.txt> --></target> - <!-- Build project documentation --><target name="docs"> - <javadoc sourcepath="${src.dir}" - destdir="${javadoc.dir}" - packagenames="*" - source="1.7" - classpathref='project.classpath' - link='http://java.sun.com/javase/6/docs/api/ - http://commons.asu.edu/src/csidex/api' - overview="${src.dir}/overview.html" /> + <javadoc sourcepath="${src.dir}" destdir="${javadoc.dir}" packagenames="*" source="1.7" classpathref="project.classpath" link="http://java.sun.com/javase/6/docs/api/ http://commons.asu.edu/src/csidex/api" overview="${src.dir}/overview.html"/></target> - <!-- RUN TARGETS --> - <target name='client' depends='compile'> - <java classname='${client.class}' - classpathref='runtime.classpath' - fork='yes'/> + <target name="client" depends="compile"> + <java classname="${client.class}" classpathref="runtime.classpath" fork="yes"/></target> - - <target name='fac' depends='compile'> - <java classname='${facilitator.class}' - classpathref='runtime.classpath' - fork='yes'/> + <target name="fac" depends="compile"> + <java classname="${facilitator.class}" classpathref="runtime.classpath" fork="yes"/></target> - - <target name='deploy-server' depends='deploy, server' /> - - <target name='server' depends='compile'> + <target name="deploy-server" depends="deploy, server"/> + <target name="server" depends="compile"><!-- make sure we update the configuration --> - <copy todir='${build.dir}/conf' overwrite='true'> - <fileset dir='${conf.dir}'/> + <copy todir="${build.dir}/conf" overwrite="true"> + <fileset dir="${conf.dir}"/><filterset> - <filter token='SERVER_ADDRESS' value='${server.address}'/> - <filter token='PORT_NUMBER' value='${server.port}'/> - <filter token='CODEBASE_URL' value='${codebase.url}'/> + <filter token="SERVER_ADDRESS" value="${server.address}"/> + <filter token="PORT_NUMBER" value="${server.port}"/> + <filter token="CODEBASE_URL" value="${codebase.url}"/></filterset></copy> - <java classname='${server.class}' classpathref='runtime.classpath' fork='yes'> + <java classname="${server.class}" classpathref="runtime.classpath" fork="yes"><jvmarg value="-server"/></java></target> - - <!-- Compile Tests --><target name="compile-tests" depends="compile"> - <javac srcdir="${test.src.dir}" - destdir="${test.build.dir}" - source="1.7" - target="1.7" - debug="on"> + <javac srcdir="${test.src.dir}" destdir="${test.build.dir}" source="1.7" target="1.7" debug="on"><!-- <compilerarg value='-Xlint:unchecked'/> --> - <classpath refid="project.classpath" /> + <classpath refid="project.classpath"/></javac></target> - <!-- Run Tests --> - <target name="test" depends="compile-tests"> - <delete dir="${test.results.dir}"/> - <mkdir dir="${test.results.dir}"/> - <junit fork="yes" haltonfailure="yes" printsummary="yes"> - <classpath refid="project.classpath" /> - <batchtest todir="${test.results.dir}" > - <formatter usefile="no" type="plain" /> - <formatter type="xml" /> - <fileset dir="${test.build.dir}"> - <include name="**/*Test.class" /> - </fileset> - </batchtest> - </junit> - </target> - - <property name='savefile.converter.class' value='edu.asu.commons.irrigation.data.IrrigationSaveFileConverter'/> + <target name="test" depends="compile-tests"> + <delete dir="${test.results.dir}"/> + <mkdir dir="${test.results.dir}"/> + <junit fork="yes" haltonfailure="yes" printsummary="yes"> + <classpath refid="project.classpath"/> + <batchtest todir="${test.results.dir}"> + <formatter usefile="no" type="plain"/> + <formatter type="xml"/> + <fileset dir="${test.build.dir}"> + <include name="**/*Test.class"/> + </fileset> + </batchtest> + </junit> + </target> + <property name="savefile.converter.class" value="edu.asu.commons.irrigation.data.IrrigationSaveFileConverter"/><!-- default savefile directory is the raw-data directory --><property name="savefile.dir" value="raw-data"/> - <target name='convert' depends='compile'> - <java classname='${savefile.converter.class}' classpathref='project.classpath' fork='yes'> - <arg value='${savefile.dir}'/> + <target name="convert" depends="compile"> + <java classname="${savefile.converter.class}" classpathref="project.classpath" fork="yes"> + <arg value="${savefile.dir}"/></java> - </target> - + </target><!-- Run Test on GUI --><target name="guitest" depends="compile-tests"><java fork="yes" classname="junit.swingui.TestRunner" taskname="JUnit" failonerror="true" dir="${basedir}"> - <jvmarg value="-Djunit.test.path=${test.build.dir}" /> - <sysproperty key="basedir" value="${basedir}" /> - <classpath> - <path refid="project.classpath" /> - </classpath> + <jvmarg value="-Djunit.test.path=${test.build.dir}"/> + <sysproperty key="basedir" value="${basedir}"/> + <classpath> + <path refid="project.classpath"/> + </classpath></java></target> - </project> Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-19 21:54:34
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/52c90d2a6d25/ Changeset: 52c90d2a6d25 User: alllee Date: 2014-05-19 23:54:28 Summary: fixing links Affected #: 1 file diff -r da65372bec1c802f770d04f755503aff774d2d17 -r 52c90d2a6d2533ab42fd693eab71781c6e6ee657 README.md --- a/README.md +++ b/README.md @@ -21,22 +21,22 @@ Quickstart: * [install and setup Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) -* [download and unpack the foraging codebase](/virtualcommons/foraging/downloads) +* [download and unpack the foraging codebase](https://bitbucket.org/virtualcommons/foraging/downloads) * From the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, or any Linux terminal program) ``` #!bash % ant prepare-demo % ant demo ``` -For more detailed instructions, please see the [installation instructions on our wiki](wiki/Installation). +For more detailed instructions, please see the [installation instructions on our wiki](https://bitbucket.org/virtualcommons/foraging/wiki/Installation). ### publications Data generated from the foraging framework has been published in [Lab Experiments for the Study of Social-Ecological Systems](http://www.sciencemag.org/cgi/content/abstract/328/5978/613). -Archives of the [the configuration files used](src/main/resources/configuration/iu/archived) and the +Archives of the [the configuration files used](https://bitbucket.org/virtualcommons/foraging/src/tip/src/main/resources/configuration/iu/archived/) and the [generated data](http://dev.commons.asu.edu/data/foraging/2008/all-iu-foraging-data.zip) are available. ### status -This project is not under active development but is actively maintained. If you'd like to add new features or experience -bugs using it, please let us know. +This project is not under active development but is actively maintained. If you'd like to add new features or find any +bugs, please [let us know](http://vcweb.asu.edu/contact). Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-19 21:33:41
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/da65372bec1c/ Changeset: da65372bec1c User: alllee Date: 2014-05-19 23:33:35 Summary: updating readme to use streamlined ant targets Affected #: 2 files diff -r c0ec89e0b2a2dac8d6ecdcf1dd1c9f08f176390b -r da65372bec1c802f770d04f755503aff774d2d17 README.md --- a/README.md +++ b/README.md @@ -20,17 +20,22 @@ Quickstart: -* [install Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) -* download and unpack the foraging codebase -* `% cp build.properties.example build.properties` -* `% cp src/main/resources/configuration/demo/* src/main/resources/configuration` -* `% ant deploy` - -For more detailed instructions, please see our [wiki](wiki/Home). +* [install and setup Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) +* [download and unpack the foraging codebase](/virtualcommons/foraging/downloads) +* From the command-line (e.g., Windows PowerShell or Command Prompt, Mac OSX Terminal.app, or any Linux terminal program) +``` +#!bash +% ant prepare-demo +% ant demo +``` +For more detailed instructions, please see the [installation instructions on our wiki](wiki/Installation). ### publications -* [Lab Experiments for the Study of Social-Ecological Systems](http://www.sciencemag.org/cgi/content/abstract/328/5978/613) +Data generated from the foraging framework has been published in +[Lab Experiments for the Study of Social-Ecological Systems](http://www.sciencemag.org/cgi/content/abstract/328/5978/613). +Archives of the [the configuration files used](src/main/resources/configuration/iu/archived) and the +[generated data](http://dev.commons.asu.edu/data/foraging/2008/all-iu-foraging-data.zip) are available. ### status This project is not under active development but is actively maintained. If you'd like to add new features or experience diff -r c0ec89e0b2a2dac8d6ecdcf1dd1c9f08f176390b -r da65372bec1c802f770d04f755503aff774d2d17 build.xml --- a/build.xml +++ b/build.xml @@ -4,35 +4,9 @@ Version: $Revision$ --><project xmlns:ivy="antlib:org.apache.ivy.ant" name="foraging" default="build-all" basedir="."> - <!-- ensure ivy availability --> - <property name="ivy.install.version" value="2.3.0"/> - <condition property="ivy.home" value="${env.IVY_HOME}"> - <isset property="env.IVY_HOME"/> - </condition> - <property name="ivy.home" value="${user.home}/.ant"/> - <property name="ivy.jar.dir" value="${ivy.home}/lib"/> - <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/> - <available file="${conf.dir}/server.xml" property="configuration.exists"/> - <available file="${basedir}/build.properties" property="build.properties.exists"/> - <target name="download-ivy" unless="offline"> - <mkdir dir="${ivy.jar.dir}"/> - <!-- download Ivy from web site so that it can be used even without any special installation --> - <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" dest="${ivy.jar.file}" usetimestamp="true"/> - </target> - <target name="init-ivy" depends="download-ivy"> - <!-- try to load ivy here from ivy home, in case the user has not already dropped - it into ant's lib dir (note that the latter copy will always take precedence). - We will not fail as long as local lib dir exists (it may be empty) and - ivy is in at least one of ant's lib dir or the local lib dir. --> - <path id="ivy.lib.path"> - <fileset dir="${ivy.jar.dir}" includes="*.jar"/> - </path> - <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/> - </target><!-- Load all properties from the build.properties file, - then try to define defaults for all the properties. - The property definitions in the build.properties file - will have precedence. + then define defaults for all the properties. + NOTE: property definitions in the build.properties file take precedence. --><property file="build.properties"/><!-- default compilation properties --> @@ -139,34 +113,33 @@ <chmod dir="${deploy.dir}" perm="664" type="file" includes="**"/><chmod dir="${deploy.dir}" perm="775" type="dir" includes="**"/></target> - <target name='demo-configuration' depends='compile' unless='configuration.exists'> + <target name='demo-configuration' depends='check-configuration,compile' unless='configuration.exists'><copy todir="${conf.dir}"><fileset dir="${conf.dir}/demo"/></copy></target> - <target name='demo-build-properties' depends='compile' unless='build.properties.exists'> + <target name='demo-build-properties' depends='check-configuration,compile' unless='build.properties.exists'><copy tofile='${basedir}/build.properties' file='${basedir}/build.properties.example'/></target> - <target name='demo-prepare' depends='compile,demo-configuration,demo-build-properties'> + <target name='prepare-demo' depends='demo-configuration,demo-build-properties,compile'></target> - <target name="demo" depends="compile,demo-prepare"> - <antcall target="configure"/> + <target name="demo" depends="prepare-demo"><antcall target='deploy'/><parallel><daemons><antcall target='server' /></daemons><sequential> - <sleep seconds='10'/> + <sleep seconds='5'/><antcall target='client'/></sequential><sequential> - <sleep seconds='10'/> + <sleep seconds='5'/><antcall target='fac'/></sequential></parallel></target> - <target name="deploy" depends="check-configuration" if="configuration.exists"> + <target name="deploy" depends="check-configuration,configure" if="configuration.exists"><antcall target="deploy-to"><param name="deploy.dir" value="${web.dir}"/></antcall> @@ -211,13 +184,13 @@ <chmod file="${dist.dir}/${jar.name}" perm="664"/></target><!-- Prepare for a build by creating appropriate directories --> - <target name="prepare" depends="init-ivy"> + <target name="prepare"><mkdir dir="${build.dir}"/><mkdir dir="${test.build.dir}"/><mkdir dir="${dist.dir}"/><mkdir dir="${lib.dir}"/></target> - <target name="resolve" depends="init-ivy" description="--> retrieve dependencies with ivy"> + <target name="resolve" description="retrieve dependencies with ivy"><!-- FIXME: should include revision numbers as well, e.g., <ivy:retrieve pattern='${lib.dir}/[artifact]-[revision].[ext]'/> but this makes the rewritten JNLP files a bit trickier. revisit after we implement dropwizard, spark or other @@ -242,6 +215,8 @@ </target><!-- fails if requisite build.properties or src/main/resources/configuration/server.xml do not exist --><target name="check-configuration"> + <available file="${conf.dir}/server.xml" property="configuration.exists"/> + <available file="${basedir}/build.properties" property="build.properties.exists"/><fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="configuration.exists"/><fail message="Please copy build.properties.example to build.properties and edit before proceeding." unless="build.properties.exists"/></target> @@ -286,7 +261,7 @@ <java classname="${facilitator.class}" classpathref="project.classpath" fork="yes"/></target><target name="deploy-server" depends="deploy, server"/> - <target name="server" depends="compile,check-configuration" if="configuration.exists"> + <target name="server" depends="compile,check-configuration"><!-- make sure we update the configuration --><copy todir="${build.dir}/conf" overwrite="true"><fileset dir="${conf.dir}"/> @@ -300,7 +275,7 @@ <jvmarg value="-server"/></java></target> - <target name="server-debug" depends="compile,check-configuration" if="configuration.exists"> + <target name="server-debug" depends="compile,check-configuration"><!-- make sure we update the configuration --><copy todir="${build.dir}/conf" overwrite="true"><fileset dir="${conf.dir}"/> Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-19 17:32:23
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/c0ec89e0b2a2/ Changeset: c0ec89e0b2a2 User: alllee Date: 2014-05-19 19:32:17 Summary: adding demo target using parallel execution to start the server, facilitator, and client applications Affected #: 2 files diff -r c7317bcbb694f3f257e96cd183ceecf92e04adf4 -r c0ec89e0b2a2dac8d6ecdcf1dd1c9f08f176390b .hgignore --- a/.hgignore +++ b/.hgignore @@ -16,4 +16,4 @@ manifest.mf .settings *.orig - +docs diff -r c7317bcbb694f3f257e96cd183ceecf92e04adf4 -r c0ec89e0b2a2dac8d6ecdcf1dd1c9f08f176390b build.xml --- a/build.xml +++ b/build.xml @@ -12,6 +12,8 @@ <property name="ivy.home" value="${user.home}/.ant"/><property name="ivy.jar.dir" value="${ivy.home}/lib"/><property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/> + <available file="${conf.dir}/server.xml" property="configuration.exists"/> + <available file="${basedir}/build.properties" property="build.properties.exists"/><target name="download-ivy" unless="offline"><mkdir dir="${ivy.jar.dir}"/><!-- download Ivy from web site so that it can be used even without any special installation --> @@ -56,7 +58,6 @@ <property name="javadoc.private.dir" value="docs/private"/><property name="lib.dir" value="lib"/><property name="remote.debug.port" value="1044"/> - <!-- Set up the CLASSPATH, includes all jars in the lib directory and all built files for both the main project and the tests --> @@ -81,8 +82,9 @@ Available targets: compile - Compile all the source code and tests. - clean - Remove all compiled source and test classes. - clean-build - Same as clean, but leave ~/.ant and ~/.m2 untouched + clean - Remove all compiled source and test classes and build artifacts. + purge - Purges all configuration files and the csidex maven/ivy jars in addition to running a clean + demo - runs a quickstart demo using configuration files from src/main/resources/configuration/demo and the sample build.properties docs - Create JavaDoc documentation for all source code. test - Run all JUnit in the test source tree. build-all - builds the client, server, and facilitator jars. @@ -137,7 +139,34 @@ <chmod dir="${deploy.dir}" perm="664" type="file" includes="**"/><chmod dir="${deploy.dir}" perm="775" type="dir" includes="**"/></target> - <target name="deploy" depends='check-configuration' if='configuration.present'> + <target name='demo-configuration' depends='compile' unless='configuration.exists'> + <copy todir="${conf.dir}"> + <fileset dir="${conf.dir}/demo"/> + </copy> + </target> + <target name='demo-build-properties' depends='compile' unless='build.properties.exists'> + <copy tofile='${basedir}/build.properties' file='${basedir}/build.properties.example'/> + </target> + <target name='demo-prepare' depends='compile,demo-configuration,demo-build-properties'> + </target> + <target name="demo" depends="compile,demo-prepare"> + <antcall target="configure"/> + <antcall target='deploy'/> + <parallel> + <daemons> + <antcall target='server' /> + </daemons> + <sequential> + <sleep seconds='10'/> + <antcall target='client'/> + </sequential> + <sequential> + <sleep seconds='10'/> + <antcall target='fac'/> + </sequential> + </parallel> + </target> + <target name="deploy" depends="check-configuration" if="configuration.exists"><antcall target="deploy-to"><param name="deploy.dir" value="${web.dir}"/></antcall> @@ -186,16 +215,18 @@ <mkdir dir="${build.dir}"/><mkdir dir="${test.build.dir}"/><mkdir dir="${dist.dir}"/> - <mkdir dir='${lib.dir}'/> + <mkdir dir="${lib.dir}"/></target> - <target name='resolve' depends='init-ivy' description='--> retrieve dependencies with ivy'> - <ivy:retrieve pattern='${lib.dir}/[artifact].[ext]'/> + <target name="resolve" depends="init-ivy" description="--> retrieve dependencies with ivy"> + <!-- FIXME: should include revision numbers as well, e.g., + <ivy:retrieve pattern='${lib.dir}/[artifact]-[revision].[ext]'/> + but this makes the rewritten JNLP files a bit trickier. revisit after we implement dropwizard, spark or other + smarter web deployment + --> + <ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"/></target> - <!-- Clean up build by deleting build directories --> + <!-- Clean project directory only, leaving ~/.ant and ~/.m2 untouched --><target name="clean"> - <echo message="Removing ${user.home}/.ant/cache" /> - <delete dir='${user.home}/.ant/cache' /> - <delete dir='${user.home}/.m2/repository/edu/asu/commons' /><delete dir="${build.dir}"/><delete dir="${test.build.dir}"/><delete dir="${lib.dir}"/> @@ -203,14 +234,16 @@ <delete file="client.jar"/><delete file="facilitator.jar"/></target> - <!-- Clean project directory only, leaving ~/.ant and ~/.m2 untouched --> - <target name="clean-build"> - <delete dir="${build.dir}"/> - <delete dir="${test.build.dir}"/> - <delete dir="${lib.dir}"/> - <delete file="server.jar"/> - <delete file="client.jar"/> - <delete file="facilitator.jar"/> + <!-- delete ivy and maven caches to force reload a new csidex snapshot --> + <target name="purge" depends="clean"> + <echo message="Removing ${user.home}/.ant/cache"/> + <delete dir="${user.home}/.ant/cache"/> + <delete dir="${user.home}/.m2/repository/edu/asu/commons"/> + </target> + <!-- fails if requisite build.properties or src/main/resources/configuration/server.xml do not exist --> + <target name="check-configuration"> + <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="configuration.exists"/> + <fail message="Please copy build.properties.example to build.properties and edit before proceeding." unless="build.properties.exists"/></target><!-- Compile project source files --><target name="compile" depends="prepare, resolve"> @@ -240,7 +273,10 @@ </target><!-- Build project documentation --><target name="docs"> - <javadoc sourcepath="${src.dir}" destdir="${javadoc.dir}" packagenames="*" source="1.6" classpathref="project.classpath" link="http://java.sun.com/javase/6/docs/api/ http://commons.asu.edu/src/csidex/api" overview="${src.dir}/overview.html"/> + <javadoc sourcepath="${src.dir}" destdir="${javadoc.dir}" packagenames="*" source="1.7" classpathref="project.classpath" overview="${src.dir}/overview.html"> + <link href="http://docs.oracle.com/javase/7/docs/api/"/> + <link href="http://commons.asu.edu/src/csidex/api"/> + </javadoc></target><!-- RUN TARGETS --><target name="client" depends="compile"> @@ -250,13 +286,7 @@ <java classname="${facilitator.class}" classpathref="project.classpath" fork="yes"/></target><target name="deploy-server" depends="deploy, server"/> - <target name='check-configuration'> - <available file='${conf.dir}/server.xml' property='configuration.present'/> - <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" - unless="configuration.present" /> - </target> - - <target name="server" depends="compile,check-configuration" if='configuration.present'> + <target name="server" depends="compile,check-configuration" if="configuration.exists"><!-- make sure we update the configuration --><copy todir="${build.dir}/conf" overwrite="true"><fileset dir="${conf.dir}"/> @@ -266,13 +296,11 @@ <filter token="CODEBASE_URL" value="${codebase.url}"/></filterset></copy> - <java classname="${server.class}" classpathref="project.classpath" fork="yes"><jvmarg value="-server"/></java></target> - - <target name="server-debug" depends="compile,check-configuration" if='configuration.present'> + <target name="server-debug" depends="compile,check-configuration" if="configuration.exists"><!-- make sure we update the configuration --><copy todir="${build.dir}/conf" overwrite="true"><fileset dir="${conf.dir}"/> @@ -282,16 +310,12 @@ <filter token="CODEBASE_URL" value="${codebase.url}"/></filterset></copy> - <java classname="${server.class}" classpathref="project.classpath" fork="yes"><jvmarg value="-server"/> - <!-- Enable remote debugging --><jvmarg value="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${remote.debug.port}"/> - </java></target> - <!-- Compile Tests --><target name="compile-tests" depends="compile"><javac srcdir="${test.src.dir}" destdir="${test.build.dir}" source="1.6" target="1.6" debug="on"> Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-19 07:17:02
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/c7317bcbb694/ Changeset: c7317bcbb694 User: alllee Date: 2014-05-19 09:16:53 Summary: adding link to wiki Affected #: 1 file diff -r ec25c67ab799a17c856d0e1ac4d06d94623d65dc -r c7317bcbb694f3f257e96cd183ceecf92e04adf4 README.md --- a/README.md +++ b/README.md @@ -18,14 +18,15 @@ ### how to run the software +Quickstart: + * [install Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) * download and unpack the foraging codebase * `% cp build.properties.example build.properties` * `% cp src/main/resources/configuration/demo/* src/main/resources/configuration` * `% ant deploy` -* To run a server: `ant server` or `java -jar -server server.jar` -* To run the facilitator: `ant fac` or `java -jar facilitator.jar` or visit `${codebase.url}/facilitator.jnlp` where `${codebase.url}` is as defined in your `build.properties` file -* To run a client: `ant client` or `java -jar client.jar` or visit `${codebase.url}` + +For more detailed instructions, please see our [wiki](wiki/Home). ### publications Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-18 06:50:59
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/ec25c67ab799/ Changeset: ec25c67ab799 User: alllee Date: 2014-05-18 08:50:50 Summary: README.md edited online with Bitbucket Affected #: 1 file diff -r f42fdf9c630a9eafc71741ff43ed22335b145c25 -r ec25c67ab799a17c856d0e1ac4d06d94623d65dc README.md --- a/README.md +++ b/README.md @@ -18,15 +18,14 @@ ### how to run the software - * [install Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) - * download and unpack the foraging codebase - * `% cp build.properties.example build.properties` - * `% cp src/main/resources/configuration/demo/* src/main/resources/configuration` - * `% ant deploy` - * To run a server: `ant server` or `java -jar -server server.jar` - * To run the facilitator: `ant fac` or `java -jar facilitator.jar` or visit `${codebase.url}/facilitator.jnlp` where `${codebase.url}` - is as defined in your `build.properties` file - * To run a client: `ant client` or `java -jar client.jar` or visit `${codebase.url}` +* [install Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) +* download and unpack the foraging codebase +* `% cp build.properties.example build.properties` +* `% cp src/main/resources/configuration/demo/* src/main/resources/configuration` +* `% ant deploy` +* To run a server: `ant server` or `java -jar -server server.jar` +* To run the facilitator: `ant fac` or `java -jar facilitator.jar` or visit `${codebase.url}/facilitator.jnlp` where `${codebase.url}` is as defined in your `build.properties` file +* To run a client: `ant client` or `java -jar client.jar` or visit `${codebase.url}` ### publications Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-18 06:48:30
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/f42fdf9c630a/ Changeset: f42fdf9c630a User: alllee Date: 2014-05-18 08:48:17 Summary: fixing readme formatting Affected #: 1 file diff -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f -r f42fdf9c630a9eafc71741ff43ed22335b145c25 README.md --- a/README.md +++ b/README.md @@ -19,13 +19,10 @@ ### how to run the software * [install Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) - * download the foraging codebase - * ```bash - % cp build.properties.example build.properties - % cp src/main/resources/configuration/demo/* src/main/resources/configuration - % ant deploy - % - ``` + * download and unpack the foraging codebase + * `% cp build.properties.example build.properties` + * `% cp src/main/resources/configuration/demo/* src/main/resources/configuration` + * `% ant deploy` * To run a server: `ant server` or `java -jar -server server.jar` * To run the facilitator: `ant fac` or `java -jar facilitator.jar` or visit `${codebase.url}/facilitator.jnlp` where `${codebase.url}` is as defined in your `build.properties` file Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-18 06:46:21
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/66b15a4c6438/ Changeset: 66b15a4c6438 User: alllee Date: 2014-05-18 08:46:08 Summary: adding demo configuration and rudimentary docs Affected #: 11 files diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f README.md --- /dev/null +++ b/README.md @@ -0,0 +1,40 @@ +### foraging + +The foraging experiment is a common pool resource experiment where participants are placed in randomized groups and +interact with a spatially explicit virtual resource environment. It is built on the +[csidex](http://bitbucket.org/virtualcommons/csidex) experiment framework and has been used to conduct research studies +at [Arizona State University](http://www.asu.edu), [Indiana University](http://www.iu.edu), and the [University of Alaska-Anchorage](http://www.uaa.alaska.edu). + +### features + +* participants move and interact with a resource in a real-time 2-D grid environment. +* Easily pluggable resource growth dynamics. The default is a parameterized density-dependent growth function but there + are also "patchy" resource growth dynamics where the top half of the grid has a higher chance of regrowth than the + bottom half. Arbitrary regrowth dynamics are possible by implementing a Java interface and specifying it in a + configuration file. +* support for interactive quizzes, logged chat, message censoring, voting, and sanctioning +* binary and XML savefiles that store every user action in a time ordered stream that can be converted to QuickTime + movies and replayed. + +### how to run the software + + * [install Java, Ant, and Maven](https://bitbucket.org/virtualcommons/csidex/wiki/Home) + * download the foraging codebase + * ```bash + % cp build.properties.example build.properties + % cp src/main/resources/configuration/demo/* src/main/resources/configuration + % ant deploy + % + ``` + * To run a server: `ant server` or `java -jar -server server.jar` + * To run the facilitator: `ant fac` or `java -jar facilitator.jar` or visit `${codebase.url}/facilitator.jnlp` where `${codebase.url}` + is as defined in your `build.properties` file + * To run a client: `ant client` or `java -jar client.jar` or visit `${codebase.url}` + +### publications + +* [Lab Experiments for the Study of Social-Ecological Systems](http://www.sciencemag.org/cgi/content/abstract/328/5978/613) + +### status +This project is not under active development but is actively maintained. If you'd like to add new features or experience +bugs using it, please let us know. diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -4,7 +4,6 @@ import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/README.txt --- /dev/null +++ b/src/main/resources/configuration/demo/README.txt @@ -0,0 +1,13 @@ +Fall 2011/Spring 2012 Foraging experiments, Treatment 1 + +Stationary resource +Limited vision + +Practice Round +Trust Game +Round 1-3 +Trust Game +Round 4-6, in-round communication +Trust Game +Survey + diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/round0.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round0.xml @@ -0,0 +1,102 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Foraging XML-ized experiment round configuration</comment> +<entry key="resource-width">13</entry> +<entry key="resource-depth">13</entry> +<entry key="practice-round">true</entry> +<entry key="private-property">true</entry> +<entry key="duration">240</entry> +<entry key="quiz">true</entry> +<entry key="q1">C</entry> +<entry key="q2">B</entry> +<entry key='tokens-field-of-vision'>true</entry> +<entry key='subjects-field-of-vision'>true</entry> +<entry key='instructions'> +<![CDATA[ +<h2>Practice Round Instructions</h2> +<hr> +<p> + Once everyone has finished the quiz, we will start a practice round of the token + task. +</p> +<p> +During the practice round, you will have {duration} to practice with the +experimental environment. The decisions you make in this round will NOT influence +your earnings. At the beginning of the practice round {initialDistribution} of the +cells are occupied with green tokens. The environment is a {self.resourceWidth} x +{self.resourceDepth} grid of cells. +</p> +<p> +During this practice round, and <b>only during</b> this practice round, you are able +to reset the tokens displayed on the screen by pressing the <b>R</b> key. When you +press the <b>R</b> key you will reset the distribution of the tokens to randomly occupying +{initialDistribution} of the cells with tokens. +</p> +<p><b>Do you have any questions?</b> If you have any questions at this time please raise your hand and someone will come over to your station and answer it.</p> +]]> +</entry> + +<entry key="quiz-instructions"> +<![CDATA[ +<h2>Quiz</h2> +<hr> +<p> + In a moment, you will do a practice round of the token task. Before we go to + the practice round, answer the following questions to make sure you understand + the instructions. You will earn {quizCorrectAnswerReward} for each correct answer. +</p> +<br><br> +<form> +<span class='q1'>Q1. Which of these statements is NOT correct?</span><br> +<input type="radio" name="q1" value="A">A. Your decisions of where to collect tokens affects the regeneration of tokens.<br> +<input type="radio" name="q1" value="B">B. When you have collected all tokens on the screen, no new tokens will appear.<br> +<input type="radio" name="q1" value="C">C. Tokens grow from the middle of the screen.<br> +<input type="radio" name="q1" value="D">D. To collect a token you need to press the space bar while your yellow dot <img src="@CODEBASE_URL@/images/gem-self.gif"></img> is on a cell with a token.<br> +<br><br> +<span class='q2'>Q2. Which sequence of situations is not possible?</span><br> +<img src="@CODEBASE_URL@/images/question2.jpg"></img><br> +<input type="radio" name="q2" value="A">A<br> +<input type="radio" name="q2" value="B">B<br> +<input type="radio" name="q2" value="C">C<br> +<input type="submit" name="submit" value="Submit"><br> +</form> +]]> +</entry> +<entry key='quiz-results'> + <![CDATA[ + <h2>Quiz Results</h2> + <hr> + <p> + {if (allCorrect)} + You have answered all the questions correctly and earned <b>{totalQuizEarnings}</b>. + {else} + You answered {numberCorrect} out of {totalQuestions} questions correctly and earned <b>{totalQuizEarnings}</b>. Questions you've answered + incorrectly are highlighted in red. Please see below for more details. + {endif} + </p> + <br><hr> +<form> +<span class='q1'>Q1. Which of these statements is NOT correct?</span><br> + <b>{incorrect_q1} + In this question, "A", "B", and "D" are all true. "C" is false. Tokens only + regenerate when there are other tokens present in their immediately neighboring + cells. They do not spontaneously generate from the middle of the screen. + </b> +<br> +A. Your decisions of where to collect tokens affects the regeneration of tokens.<br> +B. When you have collected all tokens on the screen, no new tokens will appear.<br> +C. Tokens grow from the middle of the screen.<br> +D. To collect a token you need to press the space bar while your yellow dot <img src="@CODEBASE_URL@/images/gem-self.gif"></img> is on a cell with a token.<br> +<br> +<span class='q2'>Q2. Which sequence of situations is not possible?</span><br> + <b> + {incorrect_q2} + In this question, sequence "B" is not possible. Tokens cannot regenerate on an empty screen as shown in sequence B. + </b> + <br> +<img src="@CODEBASE_URL@/images/question2.jpg"></img><br> +</form> + ]]> +</entry> +</properties> diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/round1.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round1.xml @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Foraging XML experiment round configuration</comment> +<entry key="display-group-tokens">true</entry> +<entry key="clients-per-group">5</entry> +<entry key="duration">240</entry> +<entry key="resource-depth">29</entry> +<entry key="resource-width">29</entry> +<entry key='trust-game'>true</entry> +<entry key='always-explicit'>true</entry> +<entry key='max-cell-occupancy'>1</entry> +<entry key='tokens-field-of-vision'>true</entry> +<entry key='subjects-field-of-vision'>true</entry> +<entry key="instructions"> +<![CDATA[ +<h1>Round {self.roundNumber} Instructions</h1> +<hr> +<p> + This is the first round of the experiment. The length of the round is + {duration}. As in the practice round you can collect green tokens but now + you will earn <b>{dollarsPerToken}</b> for each token collected. You + <b>cannot</b> reset the distribution of green tokens. +</p> +<h3>Groups</h3> +<hr> +<p> +In this round the renewable resource will become five times bigger. You will share +this larger environment with four other random players in this room. Each +participant in the room has been randomly assigned to one of several equal-sized +{self.clientsPerGroup} person groups and everyone in your group has been randomly +assigned a number from 1 to {self.clientsPerGroup}. You will stay in the same group for +the entire experiment, and each person's number from 1 to {self.clientsPerGroup} will +remain the same throughout the experiment. The other members of your group will +appear on the screen as blue dots <img src="@CODEBASE_URL@/images/gem-other.gif"> +with a white number embedded in the dot. +</p> +<p> + In each round of the token task, you can see how many tokens each player has + collected at the top right corner of the screen. On the top left corner of the + screen you will see the remaining time in the round. +</p> +<h3>Vision Range</h3> +<hr> +<p>You can only see other participants or resource units within your vision range. +The figure below indicates the vision range compared to the entire environment. +</p> +<img src="@CODEBASE_URL@/images/vision-range.jpg"> + +<h3>Anonymity</h3> +<hr> +<p> + Because group membership was randomly assigned by the computer, neither you nor + the experimenter will be able to identify which person in the room has been + assigned to a particular group or number within a group. Your anonymity is + guaranteed. +</p> +<h3>Tokens</h3> +<hr> + <p> + Each group has its own set of token resources. + </p> +<p><b>Do you have any questions so far?</b> If you have any questions at this time, raise your hand and someone will come over to your station and answer it.</p> +]]> +</entry> +</properties> diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/round2.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round2.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Foraging XML-ized experiment round configuration</comment> +<entry key="display-group-tokens">true</entry> +<entry key="clients-per-group">5</entry> +<entry key="duration">240</entry> +<entry key="resource-depth">29</entry> +<entry key="resource-width">29</entry> + +<!-- enable field of vision for tokens and subjects --> +<entry key='tokens-field-of-vision'>true</entry> +<entry key='subjects-field-of-vision'>true</entry> + +<entry key='initial-distribution'>.25</entry> +<entry key='always-explicit'>true</entry> +<entry key='max-cell-occupancy'>1</entry> +</properties> diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/round3.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round3.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Foraging XML-ized experiment round configuration</comment> +<entry key="display-group-tokens">true</entry> +<entry key="clients-per-group">5</entry> +<entry key="duration">240</entry> +<entry key="resource-depth">29</entry> +<entry key="resource-width">29</entry> + +<!-- enable field of vision for tokens and subjects --> +<entry key='tokens-field-of-vision'>true</entry> +<entry key='subjects-field-of-vision'>true</entry> + +<entry key='always-explicit'>true</entry> +<entry key='max-cell-occupancy'>1</entry> + +<!-- resource regrowth parameters --> +<entry key="initial-distribution">.25</entry> + + +</properties> diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/round4.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round4.xml @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Foraging XML-ized experiment round configuration</comment> +<entry key="display-group-tokens">true</entry> +<entry key="clients-per-group">5</entry> +<entry key="resource-depth">29</entry> +<entry key="resource-width">29</entry> +<entry key="duration">240</entry> + +<!-- have a trust game before this round begins --> +<entry key='trust-game'>true</entry> +<!-- enable field of vision for tokens and subjects --> +<entry key='tokens-field-of-vision'>true</entry> +<entry key='subjects-field-of-vision'>true</entry> + +<entry key='always-explicit'>true</entry> +<entry key='max-cell-occupancy'>1</entry> + +<entry key='in-round-chat-enabled'>true</entry> +<entry key="initial-distribution">.25</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round {self.roundNumber} Instructions</h3> +<hr> +<p> + This round is the same as the previous rounds with one exception. You will be + able to communicate with the other <b>visible</b> participants in your group + <b>during</b> the round. If you cannot see another participant in + your vision range, you will not see their chats and they will not see your + chats. +</p> +<p> + To communicate, hit the enter key, type your message, and then hit the enter key + again. You must hit the enter key before every message you type, otherwise + control will return to the game screen where you can use the arrow keys to move + around. +</p> + +<p> + The length of this round is {duration}. +</p> +<p><b>Do you have any questions?</b> If you have any questions at this time please raise your hand and someone will come over to your station and answer it.</p> +]]> +</entry> +</properties> diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/round5.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round5.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Foraging XML-ized experiment round configuration</comment> +<entry key="display-group-tokens">true</entry> +<entry key="clients-per-group">5</entry> +<entry key="resource-depth">29</entry> +<entry key="resource-width">29</entry> +<entry key="duration">240</entry> + +<entry key="initial-distribution">.25</entry> + +<entry key='always-explicit'>true</entry> +<entry key='max-cell-occupancy'>1</entry> +<entry key="in-round-chat-enabled">true</entry> +<entry key='tokens-field-of-vision'>true</entry> +<entry key='subjects-field-of-vision'>true</entry> +</properties> diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/round6.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round6.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Foraging XML-ized experiment round configuration</comment> +<entry key="display-group-tokens">true</entry> +<entry key="clients-per-group">5</entry> +<entry key="resource-depth">29</entry> +<entry key="resource-width">29</entry> +<entry key="duration">240</entry> + +<entry key='tokens-field-of-vision'>true</entry> +<entry key='subjects-field-of-vision'>true</entry> + +<entry key="initial-distribution">.25</entry> +<!-- in round chat enabled --> +<entry key="in-round-chat-enabled">true</entry> + +<entry key='always-explicit'>true</entry> +<entry key='max-cell-occupancy'>1</entry> +<entry key='trust-game'>true</entry> +</properties> diff -r 3b154d01c272860d2bd44aaf3b09c308a8ec7c91 -r 66b15a4c64388305cd2421ce47a4fed50c6bef8f src/main/resources/configuration/demo/server.xml --- /dev/null +++ b/src/main/resources/configuration/demo/server.xml @@ -0,0 +1,252 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Costly Sanctioning XML-ized experiment round configuration</comment> +<entry key="hostname">@SERVER_ADDRESS@</entry> +<entry key="port">@PORT_NUMBER@</entry> +<entry key="round0">round0.xml</entry> +<entry key="round1">round1.xml</entry> +<entry key="round2">round2.xml</entry> +<entry key="round3">round3.xml</entry> +<entry key="round4">round4.xml</entry> +<entry key="round5">round5.xml</entry> +<entry key="round6">round6.xml</entry> +<entry key="wait-for-participants">true</entry> +<entry key="number-of-rounds">7</entry> +<entry key="facilitator-instructions"> +<![CDATA[ +<p> + This facilitator interface allows you to control the experiment. In general you + will be following a sequence similar to this: + <ol> + <li>Show instructions</li> + <li>Start round</li> + <li>After round is over + <ol> + <li>show trust game if necessary</li> + <li>start standalone chat round if necessary</li> + </ol> + </li> + <li>Goto 1.</li> + </ol> +</p> +]]> +</entry> + +<entry key='field-of-vision-instructions'> +<![CDATA[ +Your vision is limited in this experiment. The area that is visible to you will be +shaded. +]]> +</entry> + +<entry key="welcome-instructions"> +<![CDATA[ +<h1>Welcome</h1> +<hr> +<p> +Welcome to the experiment. The experiment will begin shortly after everyone has been +assigned a station. +<br><br> +Please <b>wait quietly</b> and <b>do not close this window, open any other applications, or communicate with any of the other participants</b>. +</p> +]]> +</entry> + +<entry key="general-instructions"> +<![CDATA[ +<h1>General Instructions</h1> +<hr> +<p> + <b>Welcome</b>. You have already earned {showUpPayment} dollars just for showing up at this experiment. +</p> +<p> +You can earn more, up to a maximum of about 40 dollars, by participating in this +experiment which will take about an hour to an hour and a half. The amount of money +you earn depends on your decisions AND the decisions of other people in this room +over the course of the experiment. +</p> +<h2>How to participate</h2> +<hr> +<p> +You will appear on the screen as a yellow dot <img src="@CODEBASE_URL@/images/gem-self.gif"></img>. +You can move by pressing the four arrow keys on your keyboard. +</p> +<p> + You can move up, down, left, or right. You have to press a key for each and + every move of your yellow dot. As you move around you can collect green diamond + shaped tokens <img src="@CODEBASE_URL@/images/gem-token.gif"></img> and earn two + cents for each collected token. To collect a token, move your yellow dot over a + green token and <b>press the space bar</b>. Simply moving your avatar over a + token does NOT collect that token. +</p> + +<h2>Tokens</h2> +<hr> +<p> +The tokens that you collect have the potential to regenerate. After you have +collected a green token, a new token can re-appear on that empty cell. The rate at +which new tokens appear is dependent on the number of adjacent cells with tokens. +The more tokens in the eight cells that surround an empty cell, the faster a new +token will appear on that empty cell. In other words, <b>existing tokens can +generate new tokens</b>. To illustrate this, please refer to Image 1 and Image 2. +The middle cell in Image 1 denoted with an X has a greater chance of regeneration +than the middle cell in Image 2. When all neighboring cells are empty, there is +<b>no chance for regeneration</b>. +</p> +<table width="100%"> +<tr> +<td align="center"><b>Image 1</b></td> +<td align="center"><b>Image 2</b></td> +</tr> +<tr> +<td align="center"> + <img src="@CODEBASE_URL@/images/8neighbors.jpg" alt="image 1"> +</td> +<td align="center"> + <img src="@CODEBASE_URL@/images/5neighbors.jpg" alt="image 2"> +</td> +</tr> +</table> + +<h2>Best Strategy</h2> +<hr> +<p> +The chance that a token will regenerate on an empty cell increases as there are +more tokens surrounding it. Therefore, you want to have as many tokens around an +empty cell as possible. However, you also need empty cells to benefit from this +regrowth. The best arrangement of tokens that maximizes overall regrowth is the +checkerboard diagram shown below. +<br> +<img src="@CODEBASE_URL@/images/foraging-checkerboard.png" alt="Checkerboard Resource"> +</p> +]]> +</entry> + +<entry key='trust-game-instructions'> +<![CDATA[ +<h1>Instructions</h1> +<hr> +<p> + You will now participate in an exercise where you will be matched with a random + person in your group. In this exercise there are two roles, Player 1 and Player 2. + Your job is to design strategies for both Player 1 and Player 2 roles. When you + are randomly paired with another member of your group you may be selected as + Player 1 <b>or</b> Player 2. The results of randomly pairing your strategies + with the other group member's strategies will be shown to you at the <b>end of + the experiment</b>. +</p> + +<h2>How to participate</h2> +<hr> +<ol> + <li>Player 1 will first receive an endowment of one dollar and has to decide <b>how much to keep</b>. The remaining amount is <b>sent to Player 2</b>. + <li>The amount Player 1 sends to Player 2 is tripled by the system and then + given to Player 2. Player 2 must then decide <b>how much to keep</b> and <b>how much to send back to Player 1</b>. +</ol> +<p> +For example, if Player 1 sends 0 cents to Player 2, Player 1 earns 1 dollar and +Player 2 earns 0 cents. However, if Player 1 sends 1 dollar to Player 2, 3 dollars +would be sent to Player 2. Player 2 then decides to return $1.75 back to Player 1. +In this case, Player 1 earns $1.75, and Player 2 earns $1.25. +</p> +<p> +Please fill in the following form to design your strategies as Player 1 or Player 2. +<br> +<b>If you have any questions, please raise your hand. Are there any questions?</b> +</p> +]]> +</entry> + +<entry key="chat-instructions"> +<![CDATA[ +<p> +You can chat with the other participants in your group during this round. +You may discuss any aspect of the experiment with the other participants in your group with two exceptions: +<ol> + <li>You <b>may not promise side-payments after the experiment is completed or threaten anyone with any consequence after the experiment is finished</b>.</li> + <li>You <b>may not reveal your actual identity</b></li> +</ol> +<p> +We are monitoring the chat traffic while you chat. If we detect any violation of the +rules we will have to stop the experiment and remove the offending group from the +room. +</p> +<p> + You will see other participants labeled from A to {self.lastChatHandle} in the chat + window. You can send a chat message by typing into the textfield and pressing + the enter key. +</p> +]]> +</entry> +<entry key="same-as-previous-round-instructions"> +<![CDATA[ +<h3>Round {self.roundNumber} Instructions</h3> +<hr> +<p>Round {self.roundNumber} is the same as the previous round.</p> +<p>The length of this round is {duration}.</p> +<p><b>Do you have any questions?</b> If you have any questions at this time please raise your hand and someone will come over to your station and answer it.</p> +]]> +</entry> +<entry key='facilitator-debriefing'> +<![CDATA[ +<h3>Round {self.roundNumber} results</h3> +<hr> +<table border=1 cellspacing=3 cellpadding=3> +<tr> +<th>Participant</th><th>Current tokens</th><th>Current income</th><th>Quiz earnings</th><th>Trust game earnings</th><th>Total income</th> +</tr> +{clientDataList: {data | +<tr align="RIGHT"><td>{data.id}</td><td>{data.currentTokens}</td><td>{data.currentIncome}</td><td>{data.quizEarnings}</td><td>{data.trustGameEarnings}</td><td>{data.grandTotalIncome}</td></tr> +}} +</table> +]]> +</entry> +<entry key='client-debriefing'> +<![CDATA[ +<h1>{if (self.practiceRound)}Practice Round{else}Round {self.roundNumber}{endif} Results</h1> +<hr> +<ul> +<li>Tokens collected in this round: {clientData.currentTokens}</li> +<li>Income from tokens collected: {clientData.currentIncome}</li> +<li>Quiz earnings: {clientData.quizEarnings}</li> +<li>Show up payment: {showUpPayment}</li> +</ul> +{if (showExitInstructions && !clientData.trustGameLog.empty) } +<h2>Trust Game Earnings</h2> +<hr> +<ul> +{clientData.trustGameLog: {trustGameLog| +<li>Trust Game #{i}: {trustGameLog}</li> +}} +</ul> +Your total trust game earnings: <b>{clientData.trustGameEarnings}</b>. +{endif} +<h2>Total Income</h2> +<hr> +<p> +Your <b>total income</b> is <b>{clientData.grandTotalIncome}</b>. +</p> +{if (showExitInstructions)} +<h2>Exit Survey</h2> +<hr> +<p> +This was the last round, but not the end of the experiment. We ask that you please carefully fill out a brief survey as we prepare your payments. +</p> +<h2>Payment</h2> +<hr> +<p> +When payments are ready we will call you up one by one. Please wait until your +computer number, <b>{clientData.id}</b>, is called to turn in your survey and +receive payment. Please answer the survey carefully and thank you for +participating. +</p> +<p> +NOTE: Please <b>answer the survey completely (there may be a back side)</b> +and <b>bring all your belongings with you</b> when you come up to +receive your payment to help us speed up the payment process. +</p> +{endif} +]]> +</entry> +</properties> Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-17 08:17:49
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/0554cc0a290b/ Changeset: 0554cc0a290b User: alllee Date: 2014-05-17 10:17:42 Summary: adding demo configuration Affected #: 24 files diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/README.txt --- /dev/null +++ b/src/main/resources/configuration/demo/README.txt @@ -0,0 +1,1 @@ +Demo irrigation treatment with full vision and high variable shocks to infrastructure in the last 10 rounds diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/irrigation.xml --- /dev/null +++ b/src/main/resources/configuration/demo/irrigation.xml @@ -0,0 +1,641 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment server configuration</comment> +<entry key="hostname">@SERVER_ADDRESS@</entry> +<entry key="port">@PORT_NUMBER@</entry> +<entry key="number-of-rounds">22</entry> +<entry key="round0">round0.xml</entry> +<entry key="round1">round1.xml</entry> +<entry key="round2">round2.xml</entry> +<entry key="round3">round3.xml</entry> +<entry key="round4">round4.xml</entry> +<entry key="round5">round5.xml</entry> +<entry key="round6">round6.xml</entry> +<entry key="round7">round7.xml</entry> +<entry key="round8">round8.xml</entry> +<entry key="round9">round9.xml</entry> +<entry key="round10">round10.xml</entry> +<entry key="round11">round11.xml</entry> +<entry key="round12">round12.xml</entry> +<entry key="round13">round13.xml</entry> +<entry key="round14">round14.xml</entry> +<entry key="round15">round15.xml</entry> +<entry key="round16">round16.xml</entry> +<entry key="round17">round17.xml</entry> +<entry key="round18">round18.xml</entry> +<entry key="round19">round19.xml</entry> +<entry key="round20">round20.xml</entry> +<entry key="round21">round21.xml</entry> + +<entry key="wait-for-participants">true</entry> +<entry key='chat-duration'>20</entry> +<entry key='round-duration'>50</entry> +<entry key='field-of-vision'>0</entry> + +<entry key="q1">49</entry> +<entry key="a1">49%</entry> +<entry key="explanation1">An existing infrastructure efficiency of 20% + 29 tokens invested = 49% infrastructure efficiency.</entry> +<entry key="q2">5</entry> +<entry key="a2">5 cubic feet per second</entry> +<entry key="explanation2"> +<![CDATA[ +An existing infrastructure efficiency of 35% + 15 tokens invested = 50% infrastructure efficiency for the current round. +An infrastructure efficiency of 50% corresponds to a water delivery capacity of 5 cubic feet per second. +]]> +</entry> +<entry key="q3">5</entry> +<entry key='a3'>5 cubic feet per second</entry> +<entry key="explanation3">Since there is only 30 cubic feet per second of water +available, the irrigation infrastructure capacity of 35 cubic feet per +second will not be fully used. When A opens their gate, they take 25 of the +30 cubic feet per second out of the canal, leaving 5 cubic feet per second for +B. +</entry> +<entry key="q4">25</entry> +<entry key="a4">25 cubic feet per second</entry> +<entry key="explanation4">If A has 25 cfps available and does not take any +water, the same amount is available for the people downstream. Since B, C and +D do not take water, 25 cfps is available for E.</entry> +<entry key="q5">7</entry> +<entry key="a5">7 tokens</entry> +<entry key="explanation5">If you invest 7 out of 10 tokens, you keep 3 tokens for yourself. If you apply 202 cubic feet of water to your field you will earn 4 tokens. 3 + 4 = 7 tokens </entry> +<entry key="q6">19</entry> +<entry key="a6">19 tokens</entry> +<entry key="explanation6">If you invest all 10 tokens, you keep 0 tokens from +your initial endowment. If you apply 555 cubic feet of water to your field +you will earn 19 tokens. 0 + 19 = 19 tokens.</entry> + +<entry key='final-instructions'> +<![CDATA[ +<p> +The experiment is almost over. We have a brief survey for you to fill out while the +facilitator prepares your payments. When the facilitator has finished preparing +payments and you have all completed your surveys your computer number will be +called. You can then go next door to receive your payment. For privacy reasons we +must pay you one at a time. +</p> +<p> +Thanks for participating! +</p> +]]> +</entry> + +<entry key="initial-instructions"> +<![CDATA[ +<h1>Instructions</h1> +<hr> +<p> +You have already earned {showUpPayment} by showing up for this exercise. You +can earn more, up to a maximum of about {maximumPayment}, by participating in this +experiment which will take about an hour to an hour and a half. The amount of money +you earn depends on your decisions AND the decisions of other people in this room +over the course of the experiment. +</p> +<h2>Groups</h2> +<hr> +You will be participating in this exercise as a part of a group of +{self.clientsPerGroup} participants. Your group has been formed by randomly +selecting you and four other participants in the room. +</p> +<h2>How to participate</h2> +<hr> +<p> +This exercise mimics decisions people make in irrigation systems. In each round you will receive {self.tokenEndowment} +tokens. You can choose to invest in the irrigation infrastructure or keep the tokens. Based on the <b>water delivery +capacity</b> of the irrigation infrastructure and the availability of water you will be able to grow crops. The total +number of tokens you can earn in a round is the sum of your tokens not invested plus the tokens you earn from growing +crops. Each token is worth {dollarsPerToken}. In each round you will first decide how much to invest in the irrigation +infrastructure. Based on the combined contributions of all 5 participants in your group in each round, your group can +maintain the capacity of the irrigation infrastructure for growing crops. +</p> + +<p> +We will now start a practice round to help illustrate the experiment. Before each +round in this experiment you will have a chat period of {self.chatDuration} seconds +where you can send text messages to the other participants. +{self.restrictedVisibilityInstructions} + +You may discuss any aspect of the exercise with two important exceptions: +</p> +<ol> +<li>You are <b>not allowed</b> to promise the other participants +side-payments or threaten them with any consequence after the experiment is +finished. +</li> +<li>You are <b>not allowed to reveal your real identity</b>.</li> +</ol> +<p> +We will be monitoring the chat traffic. If we detect any violation of these rules, +we will have to remove <b>all members of the group where the violation occurred</b> +from the experiment. That group will have to wait until the entire experiment is +finished to receive payment. +</p> +]]> +</entry> + +<entry key='game-screenshot-instructions'> +<![CDATA[ +<img src="http://dev.commons.asu.edu/irrigation/images/game-interface-screenshot.jpg"> +]]> +</entry> + +<entry key="facilitator-instructions"> +<![CDATA[ +<p> + This facilitator interface allows you to control the experiment. In general you + will be following a sequence similar to this: +</p> +<ol> + <li>Show instructions</li> + <li>Start round</li> + <li>After round is over, start standalone chat round if necessary</li> + <li>Goto 1.</li> +</ol> +]]> +</entry> + +<entry key="welcome-instructions"> +<![CDATA[ +<h1>Welcome</h1> +<hr> +<p> +Welcome to the experiment. We will begin shortly after everyone has been +assigned a station. +<br><br> +Please <b>wait quietly</b> and <b>do not close this window, open any other applications, or communicate with any of the other participants</b>. +</p> +]]> +</entry> + + + + +<entry key="quiz-instructions"> +<![CDATA[ +<h2>Quiz</h2> +<hr> +<p> +The first two questions deal with irrigation infrastructure investment. +<b>Please refer to Table 1 of your handout</b>. +</p> +<form> +<p>Question 1:<br> +Given an existing infrastructure efficiency of 20%, if the five participants invest +a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure +efficiency?<br> +<input type="text" name="q1" value = "">% +</p> +<p>Question 2:<br> +Suppose the infrastructure efficiency in the last round was 60%. For the current +round, the efficiency will decline by an amount of 25% for a resulting +infrastructure efficiency of 35%. If the members of your group invest a total of 15 +tokens, what will be your group's resulting water delivery capacity?<br> +<input type="text" name="q2" value = ""> cubic feet per second +</p> +<p> +The next two questions deal with the capacity of the irrigation system in relation +to the actual amount of water available. +</p> +<p> +Question 3:<br> +If the irrigation efficiency is between 71 and 80%, the water delivery capacity of +the irrigation system is 35 cubic feet per second. Suppose the water supply +available to your group is 30 cubic feet per second and A opens their gate, +diverting water at 25 cubic feet per second. What is the available water flow for +B? +<br> +<input type='text' name='q3' value=''> cubic feet per second +</p> +<p>Question 4:<br> +If the available water delivery capacity is 25 cubic feet per second and A, B, C, +and D are not using water, how much cubic feet of water per second is available for +E?<br> +<input type='text' name='q4' value=''> cubic feet per second +</p> +<p> +The final two questions cover the number of tokens you can earn in within a round. +<b>Please refer to Table 2 of your handout</b>. +</p> +<p>Question 5:<br> +If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of +water to your fields, what is the total number of tokens you will have earned at the +end of the round?<br> +<input type="text" name="q5" value="">tokens +</p> +<p>Question 6:<br> +If you invest all 10 tokens you start with and you apply 555 cubic feet of water to +your fields, what is the total number of tokens you will have earned at the end of +the round?<br> +<input type="text" name="q6" value="">tokens +</p> +<input type="submit" name="submit" value="Submit"><br> +</form> +]]> +</entry> + +<entry key='water-collected-to-tokens-table'> +<![CDATA[ +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Water applied to your field</th> +<th>Tokens earned</th> +</tr> +</thead> +<tbody> +<tr> +<td>< 150</td><td>0</td> +</tr> +<tr> +<td>150-199</td><td>1</td> +</tr> +<tr> +<td>200-249</td><td>4</td> +</tr> +<tr> +<td>250-299</td><td>10</td> +</tr> +<tr> +<td>300-349</td><td>15</td> +</tr> +<tr> +<td>350-399</td><td>18</td> +</tr> +<tr> +<td>400-499</td><td>19</td> +</tr> +<tr> +<td>500-549</td><td>20</td> +</tr> +<tr> +<td>550-649</td><td>19</td> +</tr> +<tr> +<td>650-699</td><td>18</td> +</tr> +<tr> +<td>700-749</td><td>15</td> +</tr> +<tr> +<td>750-799</td><td>10</td> +</tr> +<tr> +<td>800-849</td><td>4</td> +</tr> +<tr> +<td>850-899</td><td>1</td> +</tr> +<tr> +<td>> 899</td><td>0</td> +</tr> +</tbody> +</table> +]]> +</entry> +<entry key='chat-instructions'> +<![CDATA[ +<h3>Chat Instructions</h3> +<hr> +<p> +You may now chat for {self.chatDuration} seconds with the other members of your group. +{self.restrictedVisibilityInstructions} +You may discuss any aspect of the exercise with two important exceptions: +</p> +<ol> +<li>You are <b>not allowed</b> to promise the other participants +side-payments or threaten them with any consequence after the experiment is +finished. +</li> +<li>You are <b>not allowed to reveal your real identity</b>.</li> +</ol> +<p> +We will be monitoring the chat traffic. If we detect any violation of these rules, +we will have to remove <b>all members of the group where the violation occurred</b> +from the experiment. That group will have to wait until the entire experiment is +finished to receive payment. +</p> +<p> +You can send messages by typing in the text field at the bottom of the screen +and then pressing the return key. The time left for the discussion is displayed with +a progress bar above the text field at the bottom of the screen. +</p> +]]> +</entry> + +<entry key="investment-instructions"> +<![CDATA[ +<h1>Current infrastructure condition</h1> + <hr> + <h2>Current infrastructure efficiency: {actualInfrastructureEfficiency}%</h2> + <h2>Current water delivery capacity: {waterDeliveryCapacity} cubic feet per second</h2> + <h2>Available water supply: {self.waterSupplyCapacity} cubic feet per second</h2> +<h1>Investment Instructions</h1> +<hr> +<p> +You have been endowed with {self.tokenEndowment} tokens to invest. You must make a decision about +how much you wish to invest in the irrigation infrastructure by choosing a number +between 0 and {self.tokenEndowment}. You can see the relationship between total +investment and irrigation infrastructure in the table below. After you have entered +the number of tokens you'd like to invest, hit the enter key or click the submit +button to confirm your investment. When everybody has made their decision, the total +investment will be calculated and the overall irrigation infrastructure will be +displayed. Each token you invest corresponds to one percent of infrastructure +efficiency, so if you invest 10 tokens you are contributing 10% to the overall +infrastructure efficiency. +</p> +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Irrigation Infrastructure Efficiency (percent)</th> +<th>Water delivery capacity (cubic feet per second)</th> +</tr> +</thead> +<tbody> +<tr> +<td> ≤ 45</td><td>0</td> +</tr> +<tr> +<td>46-51</td><td>5</td> +</tr> +<tr> +<td>52-55</td><td>10</td> +</tr> +<tr> +<td>56-58</td><td>15</td> +</tr> +<tr> +<td>59-61</td><td>20</td> +</tr> +<tr> +<td>62-65</td><td>25</td> +</tr> +<tr> +<td>66-70</td><td>30</td> +</tr> +<tr> +<td>71-80</td><td>35</td> +</tr> +<tr> +<td>81-100</td><td>40</td> +</tr> +</tbody> +</table> +]]> +</entry> +<entry key='client-debriefing'> +<![CDATA[ +<h1>{if (self.practiceRound)}Practice Round{else}Round {self.roundNumber}{endif} Results</h1> +<hr> + <table border=3 cellpadding=5 cellspacing=5> + <tr> + <th>Position</th> + <th>Initial token endowment</th> + <th>Tokens invested</th> + <th>Tokens not invested</th> + <th>Tokens earned from growing crops</th> + <th>Total tokens earned this round</th> + <th>Dollars earned this round</th> + <th>Total dollars earned</th> + </tr> + {dataModel.orderedVisibleClients: {clientData| + <tr align='center' bgcolor='{if (clientData.self)}#FFFFCC{else}#CCCCCC{endif}'> + <td>{clientData.priorityString}</td> + <td>{self.tokenEndowment}</td> + <td>{clientData.investedTokens}</td> + <td>{clientData.uninvestedTokens}</td> + <td>{clientData.tokensEarnedFromWaterCollected}</td> + <td>{clientData.allTokensEarnedThisRound}</td> + <td>{clientData.totalDollarsEarnedThisRound}</td> + <td>{clientData.grandTotalIncome}</td> + </tr> + }} + </table> + <h2>Earnings</h2> + <hr> + <p> + You are in position {clientData.priorityString} and received + {clientData.totalDollarsEarnedThisRound} this past round. Your + <b>total income</b> is <b>{clientData.grandTotalIncome}</b>, including + the {showUpPayment} show-up bonus and {clientData.quizEarnings} for + answering {clientData.correctQuizAnswers} quiz questions correctly. + </p> + {if (self.practiceRound)} + <p><b>NOTE: this was a practice round and did not contribute to your earnings.</b></p> + {endif} + {if (showExitInstructions)} + <h2>Exit Survey</h2> + <hr> + <p> + This was the last round, but not the end of the experiment. We ask that you please carefully fill out a brief survey as we prepare your payments. + </p> + <h2>Payment: You Are Computer Number {clientData.id.stationNumber}</h2> + <hr> + <p> + <b>Please note the computer number listed above and write it on your survey.</b> + When payments are ready we will call you up one by one. Please wait until + your computer number, <b>{clientData.id.stationNumber}</b>, is called to turn in your + survey and receive payment. + <b>NOTE: Please answer the survey completely (there may be a back side)</b> + and <b>bring all your belongings with you</b> when you come up to receive + your payment to help us speed up the payment process. + </p> + {endif} +]]> +</entry> +<entry key="same-as-previous-round-instructions"> + <![CDATA[ + <h2>Round {self.roundNumber} Instructions</h2> + <hr> + <p>Round {self.roundNumber} is the same as the previous round.</p> + <p>{self.specialInstructions}</p> + <p>The length of this round is {self.roundDurationInSeconds} seconds.</p> + <p><b>Do you have any questions?</b> If you have any questions at this time + please raise your hand and someone will come over to your station and + answer it. + </p> + ]]> +</entry> +<entry key="contribution-summary"> +<![CDATA[ +<h1>Contributions Summary</h1> +<hr> +<p> +Your group invested a total of <b>{groupDataModel.totalContributedTokens} tokens</b> this round, resulting in an infrastructure efficiency of <b>{groupDataModel.infrastructureEfficiency}%</b> and a water delivery capacity of <b>{groupDataModel.irrigationCapacity} cubic feet per second</b>. +The amount of water available to pass through your canal is <b>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</b>. +</p> +<table border=2 cellspacing=2 cellpadding=3> +<tr> +<th></th></th><th>Infrastructure Efficiency</th><th>Water Delivery Capacity</th><th>Water Availability</th> +</tr> +<tr align='center'> +<td>Before Investment</td><td>{groupDataModel.infrastructureEfficiencyBeforeInvestment}%</td><td>{groupDataModel.irrigationCapacityBeforeInvestment} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +<tr align='center'> +<td>After Investment</td><td>{groupDataModel.infrastructureEfficiency}%</td><td>{groupDataModel.irrigationCapacity} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +</table> +]]> +</entry> +<entry key="special-instructions"> +<![CDATA[ +<h2>Special Instructions</h2> +<hr> +{if (self.restrictedVisibility)} +<p>You can only <b>communicate with and observe the actions</b> of your <b>immediate neighbors</b>.</p> +{endif} +<p> +{if (self.infrastructureEfficiencyReset)} +The irrigation infrastructure efficiency has been <b>reset to {initialInfrastructureEfficiency}%</b> with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{else} +The irrigation infrastructure efficiency carried over from the previous round is +{initialInfrastructureEfficiency}% but has declined by +{self.infrastructureDegradationFactor} and is now <b>{actualInfrastructureEfficiency}%</b> +with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{endif} +</p> +<p>The <b>available water supply is {self.waterSupplyCapacity} cubic feet per second</b>.</p> +]]> +</entry> +<entry key="restricted-visibility-instructions"> +<![CDATA[{if (self.restrictedVisibility)}<b>NOTE:</b> In this experiment you can <b>only communicate with and observe the actions of your immediate neighbors</b>.{endif}]]> +</entry> +<entry key="facilitator-debriefing"> +<![CDATA[ +<h3>Round {self.roundNumber} results</h3> +<hr> +<table border=1 cellspacing=3 cellpadding=3> +<tr><th>Participant</th><th>Current tokens</th><th>Current income</th><th>Quiz earnings</th><th>Total income</th></tr> +{clientDataList: {data | +<tr align="RIGHT"><td>{data}</td><td>{data.allTokensEarnedThisRound}</td><td>{data.totalDollarsEarnedThisRound}</td><td>{data.quizEarnings}</td><td>{data.grandTotalIncome}</td></tr> +}} +</table> +{if (self.lastRound)} +<h2><font color='blue'>The experiment is over. Please prepare payments.</font></h2> +{endif} +]]> +</entry> +<entry key='quiz-results'> + <![CDATA[ + <h2>Quiz Results</h2> + <hr> + <p> + {if (allCorrect)} + You have answered all the questions correctly and earned <b>{totalQuizEarnings}</b>. + {else} + You answered {numberCorrect} out of {totalQuestions} questions correctly and earned <b>{totalQuizEarnings}</b>. Questions you've answered + incorrectly are highlighted in red. Please see below for more details. + {endif} + </p> + <br> + <hr> + <p><span class='q1'>Question 1:</span><br> + Given an existing infrastructure efficiency of 20%, if the five participants invest + a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure + efficiency? + <br><b>{incorrect_q1} + An existing infrastructure efficiency of 20% + 29 tokens invested = 49% infrastructure efficiency.</b> + </p> + <p><span class='q2'>Question 2:</span><br> + Suppose the infrastructure efficiency in the last round was 60%. For the current + round, the efficiency will decline by an amount of 25% for a resulting + infrastructure efficiency of 35%. If the members of your group invest a total of 15 + tokens, what will be your group's resulting water delivery capacity?<br> + <b>{incorrect_q2} + An existing infrastructure efficiency of 35% + 15 tokens invested = 50% infrastructure efficiency for the current round. + An infrastructure efficiency of 50% corresponds to a water delivery capacity of 5 cubic feet per second.</b> + </p> + <p><span class='q3'>Question 3:</span><br> + If the irrigation efficiency is between 71 and 80%, the water delivery capacity of + the irrigation system is 35 cubic feet per second. Suppose the water supply + available to your group is 30 cubic feet per second and A opens their gate, + diverting water at 25 cubic feet per second. What is the available water flow for + B?<br> + <b>{incorrect_q3} + Since there is only 30 cubic feet per second of water available, the irrigation infrastructure capacity of 35 cubic feet + per second will not be fully used. When A opens their gate, they take 25 of the 30 cubic feet per second out of the + canal, leaving 5 cubic feet per second for B.</b> + </p> + <p><span class='q4'>Question 4:</span><br> + If the available water delivery capacity is 25 cubic feet per second and A, B, C, and D are not using water, how much cubic feet of water per second is available for E?<br> + <b>{incorrect_q4} + If A has 25 cfps available and does not take any water, the same amount is available for the people + downstream. Since B, C and D do not take water, 25 cfps is available for E. + </b> + </p> + <p> + <span class='q5'>Question 5:</span><br> + If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of + water to your fields, what is the total number of tokens you will have earned at the + end of the round?<br> + <b>{incorrect_q5} + If you invest 7 out of 10 tokens, you keep 3 tokens for yourself. If you apply 202 cubic feet of water to your field you will earn 4 tokens. 3 + 4 = 7 tokens</b> + </p> + <p><span class='q6'>Question 6:</span><br> + If you invest all 10 tokens you start with and you apply 555 cubic feet of water to + your fields, what is the total number of tokens you will have earned at the end of + the round?<br> + <b>{incorrect_q6} + If you invest all 10 tokens, you keep 0 tokens from your initial endowment. If you apply 555 cubic feet of + water to your field you will earn 19 tokens. 0 + 19 = 19 tokens. + </b> + </p> + ]]> +</entry> + + +<entry key="investment-instructions"> +<![CDATA[ +<p> +You have been endowed with 10 tokens to invest. You must make a decision about +how much you wish to invest [0,10] in the irrigation infrastructure. You can +see the relationship between total investment and irrigation infrastructure in +the table below. After you have entered the number of tokens you'd like to +invest, hit the enter key or click the submit button to confirm your +investment. When everybody has made their decision, the total investment will +be calculated and the overall irrigation infrastructure will be displayed. +Each token you invest corresponds to one percent of infrastructure efficiency, +so if you invest 10 tokens you are contributing 10% to the overall +infrastructure efficiency. +</p> +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Irrigation Infrastructure Efficiency (percent)</th> +<th>Water delivery capacity (cubic feet per second)</th> +</tr> +</thead> +<tbody> +<tr> +<td> ≤ 45</td><td>0</td> +</tr> +<tr> +<td>46-51</td><td>5</td> +</tr> +<tr> +<td>52-55</td><td>10</td> +</tr> +<tr> +<td>56-58</td><td>15</td> +</tr> +<tr> +<td>59-61</td><td>20</td> +</tr> +<tr> +<td>62-65</td><td>25</td> +</tr> +<tr> +<td>66-70</td><td>30</td> +</tr> +<tr> +<td>71-80</td><td>35</td> +</tr> +<tr> +<td>81-100</td><td>40</td> +</tr> +</tbody> +</table> +]]> +</entry> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round0.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round0.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="practice-round">true</entry> +<entry key='reset-infrastructure-efficiency'>true</entry> +<entry key='initial-infrastructure-efficiency'>50</entry> + + +<entry key="instructions"> +<![CDATA[ +<p> +We will now start with two practice rounds. This practice round will not contribute +to your earnings. If you have any questions feel free to raise your hand and to ask +your question. +<br> +<b>Do you have any questions?</b> +</p> +]]> +</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round1.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round1.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key="practice-round">true</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Practice Round 2</h3> +<p> +This is the second practice round of the experiment. If you have any questions +after participating in the first round, please ask them now. +</p> +]]> +</entry> +</properties> + diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round10.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round10.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round11.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round11.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round12.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round12.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='reset-infrastructure-efficiency'>true</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 11 Instructions</h3> +<p> +In the past rounds the infrastructure efficiency declined from one round to +the next at a constant amount of 25%. In the following rounds the <b>average +decline</b> of the infrastructure efficiency will remain the same, but the +<b>actual amount</b> of decline can vary from round to round. This means that +in some rounds the decline will be larger than 25% and some rounds the decline +will be smaller than 25%. Before each round begins you will continue to make a +decision on how much to invest in the irrigation infrastructure. After all of +your investment contributions have been submitted the resulting level of +infrastructure efficiency will be displayed and then the round will begin. If +you have any questions, please ask them now. +</p> +{self.specialInstructions} +]]> +</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round13.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round13.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round14.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round14.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round15.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round15.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key='infrastructure-degradation-factor'>80</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round16.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round16.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key='infrastructure-degradation-factor'>10</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round17.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round17.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key='infrastructure-degradation-factor'>5</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round18.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round18.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key='infrastructure-degradation-factor'>10</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round19.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round19.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>80</entry> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round2.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round2.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='reset-infrastructure-efficiency'>true</entry> + +<entry key="instructions"> +<![CDATA[ +<h2>Round {self.roundNumber} Instructions</h2> +<p> +This is the first actual round of the experiment. Before this round begins +you will have the opportunity to text chat with the other participants in your +group, then decide on your level of investment in the irrigation +infrastructure. After the total irrigation infrastructure investment has been +determined you will begin the experiment and make decisions on when to open +your irrigation gates and grow crops. +</p> +{self.specialInstructions} +]]> +</entry> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round20.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round20.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round21.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round21.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round3.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round3.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round4.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round4.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round5.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round5.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round6.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round6.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round7.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round7.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round8.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round8.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> diff -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 -r 0554cc0a290b3838e5156425a29d5852db54e257 src/main/resources/configuration/demo/round9.xml --- /dev/null +++ b/src/main/resources/configuration/demo/round9.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +</properties> Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-17 08:16:21
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/05f8ba36a3a3/ Changeset: 05f8ba36a3a3 User: alllee Date: 2014-05-17 10:16:14 Summary: adding irrigation readme Affected #: 1 file diff -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 -r 05f8ba36a3a3426649c859aa8f2c20f90093a939 README.md --- /dev/null +++ b/README.md @@ -0,0 +1,43 @@ +### irrigation +A Java Swing collective action / [public goods experiment](http://en.wikipedia.org/wiki/Public_goods_game) that places +participants in an upstream-downstream scenario. Participants choose when to open or close their irrigation gates and +how much to invest in their common infrastructure. + +It is dependent on the [csidex](http://bitbucket.org/virtualcommons/csidex) framework. + +### installation requirements + +- JDK 1.7 +- [Apache Ant](http://ant.apache.org) + +### deployment requirements + +Pick one: + +- a webserver to deliver JNLP files (can use Maven and its embedded Jetty webserver) +- networked filesystem where the codebase is installed mounted on each client. + +### how to run + +- download the software +- `cp build.properties.example build.properties` and then customize `build.properties` +- copy experiment configuration files to `src/main/resources/configuration`. For a quick demo, try `cp src/main/resources/configuration/demo/* src/main/resources/configuration` +- run `ant deploy` + +After a successful deployment you can: + +- start the server via `ant server` or `java -jar -server server.jar`. + +- start a facilitator via `ant fac`, `java -jar facilitator.jar`, or visiting `${codebase.url}/facilitator.jnlp` in your + browser for Java WebStart. + +- start a client via `ant client`, `java -jar client.jar`, or visiting `${codebase.url}` in your browser to use Java + WebStart. + +NOTE: Java WebStart deployment requires security overrides, either trusted signed jars or adding an exception to the site list on each +client machine for the server hosting the webstart JNLP files and jars. + +### how to contribute +This experiment is in dire need of a thorough UI refactor and is _not under active development_. + +Past development has been supported by the [Center for the Study of Institutional Diversity](http://csid.asu.edu) and the [National Science Foundation](http://nsf.gov). Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-16 05:05:19
|
23 new commits in foraging: https://bitbucket.org/virtualcommons/foraging/commits/ccf7619af326/ Changeset: ccf7619af326 User: brsaylor Date: 2013-09-06 01:13:25 Summary: Visually differentiate resource zones with token image and line When the show-resource-zones parameter is set to true, tokens on the top half of the board are drawn using the normal image and tokens on the bottom half of the board are drawn using an alternate image. Also, a thin horizontal line is drawn in the middle. Affected #: 4 files diff -r 4aeac01665735e7d2c07775fb9139394218a2394 -r ccf7619af3266a9dea0c1b056b33c47fce204d0f src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -442,6 +442,14 @@ return getProperty("resource-generator", ResourceDispenser.Type.DENSITY_DEPENDENT.toString()); } + /** + * Returns true if the top and bottom resource zones should be indicated visually + * using a line and different token images. + */ + public boolean showResourceZones() { + return getBooleanProperty("show-resource-zones", false); + } + public int getWorldWidth() { return getResourceWidth() * getResourceWorldScale(); } diff -r 4aeac01665735e7d2c07775fb9139394218a2394 -r ccf7619af3266a9dea0c1b056b33c47fce204d0f src/main/java/edu/asu/commons/foraging/ui/GridView.java --- a/src/main/java/edu/asu/commons/foraging/ui/GridView.java +++ b/src/main/java/edu/asu/commons/foraging/ui/GridView.java @@ -33,9 +33,9 @@ * If the parameters call for a background, this object is created so that * the scaling calculation does not have to be performed for each paint. */ - protected Image tokenImage, otherSubjectImage, selfImage, selfExplicitCollectionModeImage, beingSanctionedImage, sanctioningImage, monitorImage; + protected Image tokenImage, tokenImageB, otherSubjectImage, selfImage, selfExplicitCollectionModeImage, beingSanctionedImage, sanctioningImage, monitorImage; - protected Image scaledTokenImage, scaledOtherSubjectImage, scaledSelfImage, + protected Image scaledTokenImage, scaledTokenImageB, scaledOtherSubjectImage, scaledSelfImage, scaledSelfExplicitCollectionModeImage, scaledBeingSanctionedImage, scaledSanctioningImage, scaledMonitorImage; /** @@ -94,6 +94,7 @@ int cellWidth = (int) dw; int cellHeight = (int) dh; scaledTokenImage = tokenImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + scaledTokenImageB = tokenImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledOtherSubjectImage = otherSubjectImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledSelfImage = selfImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledSelfExplicitCollectionModeImage = selfExplicitCollectionModeImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); @@ -138,6 +139,9 @@ if (tokenImage == null) { tokenImage = loadImage("images/gem-token.gif"); } + if (tokenImageB == null) { + tokenImageB = loadImage("images/gem-token-b.gif"); + } if (selfImage == null) { selfImage = loadImage("images/gem-self.gif"); } diff -r 4aeac01665735e7d2c07775fb9139394218a2394 -r ccf7619af3266a9dea0c1b056b33c47fce204d0f src/main/java/edu/asu/commons/foraging/ui/SubjectView.java --- a/src/main/java/edu/asu/commons/foraging/ui/SubjectView.java +++ b/src/main/java/edu/asu/commons/foraging/ui/SubjectView.java @@ -8,7 +8,10 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.geom.Ellipse2D; +import java.awt.geom.Line2D; +import java.awt.Image; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.Map; @@ -61,6 +64,9 @@ private double fieldOfVisionOffset; + // Set from the the show-resource-zones parameter + private boolean showResourceZones; + public SubjectView(Dimension screenSize, ClientDataModel dataModel) { super(screenSize); this.dataModel = dataModel; @@ -73,6 +79,7 @@ public void setup(RoundConfiguration configuration) { viewSubjectsField = null; viewTokensField = null; + showResourceZones = configuration.showResourceZones(); synchronized (collectedTokens) { collectedTokens.clear(); tokenFieldOfVisionEnabled = configuration.isTokensFieldOfVisionEnabled(); @@ -105,14 +112,43 @@ } protected void paintTokens(Graphics2D graphics2D) { + + // When showing the resource zones, paint top and bottom tokens using different images, + // and draw a line between the zones. + HashSet<Point> resourcePositionsA = new HashSet<Point>(); + HashSet<Point> resourcePositionsB = new HashSet<Point>(); + int midHeight = (int) boardSize.getHeight() / 2; + if (showResourceZones) { + for (Point point : dataModel.getResourcePositions()) { + if (point.y < midHeight) { + resourcePositionsA.add(point); + } else { + resourcePositionsB.add(point); + } + } + double lineY = scaleYDouble((double) midHeight); + graphics2D.setColor(Color.WHITE); + graphics2D.draw(new Line2D.Double(0, lineY, scaleXDouble(boardSize.getWidth()), lineY)); + } + // three cases - show all food on the game board, show all food within // visible radius of the current player, or don't show any food. if (tokenFieldOfVisionEnabled) { viewTokensField.setCenter(dataModel.getCurrentPosition()); - paintCollection(dataModel.getResourcePositions(), graphics2D, scaledTokenImage, this, viewTokensField); + if (showResourceZones) { + paintCollection(resourcePositionsA, graphics2D, scaledTokenImage, this, viewTokensField); + paintCollection(resourcePositionsB, graphics2D, scaledTokenImageB, this, viewTokensField); + } else { + paintCollection(dataModel.getResourcePositions(), graphics2D, scaledTokenImage, this, viewTokensField); + } } else { - paintCollection(dataModel.getResourcePositions(), graphics2D, scaledTokenImage); + if (showResourceZones) { + paintCollection(resourcePositionsA, graphics2D, scaledTokenImage); + paintCollection(resourcePositionsB, graphics2D, scaledTokenImageB); + } else { + paintCollection(dataModel.getResourcePositions(), graphics2D, scaledTokenImage); + } } // display animation for food that has been eaten. long elapsedTime = 0; @@ -148,9 +184,18 @@ } private void paintToken(Point point, Graphics2D graphics2D, int width, int height) { + + Image image; + if (showResourceZones) { + // Use token image for zone A or zone B depending on board position + image = (point.y < (int) boardSize.getHeight() / 2) ? scaledTokenImage : scaledTokenImageB; + } else { + image = scaledTokenImage; + } + int x = scaleX(point.x); int y = scaleY(point.y); - graphics2D.drawImage(scaledTokenImage, x, y, width, height, null); + graphics2D.drawImage(image, x, y, width, height, null); } protected void paintSubjects(Graphics2D graphics2D) { diff -r 4aeac01665735e7d2c07775fb9139394218a2394 -r ccf7619af3266a9dea0c1b056b33c47fce204d0f src/main/resources/images/gem-token-b.gif Binary file src/main/resources/images/gem-token-b.gif has changed https://bitbucket.org/virtualcommons/foraging/commits/333c7df73c7b/ Changeset: 333c7df73c7b User: brsaylor Date: 2013-09-10 03:55:31 Summary: Assign participants to different zones, use different avatar styles Affected #: 14 files diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc .hgignore --- a/.hgignore +++ b/.hgignore @@ -1,5 +1,8 @@ syntax:glob src/main/resources/configuration/*.* +src/main/webapp/facilitator.jnlp +src/main/webapp/client.jnlp +src/main/webapp/images/* *~ target *.jar diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/java/edu/asu/commons/foraging/client/ClientDataModel.java --- a/src/main/java/edu/asu/commons/foraging/client/ClientDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/client/ClientDataModel.java @@ -54,6 +54,10 @@ private Map<Identifier, Point> clientPositions; private Map<Identifier, Integer> clientTokens; + + // Clients need to know the zones of all other clients in the group. This + // maps client ID's to zone numbers. + private Map<Identifier, Integer> clientZones; private Map<Point, Resource> resourceDistribution; @@ -126,6 +130,7 @@ clear(); Map<Identifier, ClientData> clientDataMap = groupDataModel.getClientDataMap(); Identifier[] ids = new Identifier[clientDataMap.size()]; + clientZones = new HashMap<Identifier, Integer>(); // ensure that the allClientIdentifiers natural ordering is by assigned number. for (Map.Entry<Identifier, ClientData> entry : clientDataMap.entrySet()) { Identifier id = entry.getKey(); @@ -133,6 +138,7 @@ int index = data.getAssignedNumber() - 1; ids[index] = id; // clientAssignedNumbers.put(id, data.getAssignedNumber()); + clientZones.put(id, data.getZone()); } allClientIdentifiers.addAll(Arrays.asList(ids)); setGroupDataModel(groupDataModel); @@ -290,4 +296,11 @@ throw new UnsupportedOperationException("3D support is currently unavailable"); } + /** + * Return the zone number of the client with the given ID. + */ + public int getClientZone(Identifier id) { + return clientZones.get(id); + } + } diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -450,6 +450,14 @@ return getBooleanProperty("show-resource-zones", false); } + /** + * Returns true if participants should be assigned to resource zones. + * Different images will be used for avatars depending on assigned zone. + */ + public boolean areZonesAssigned() { + return getBooleanProperty("assign-zones", false); + } + public int getWorldWidth() { return getResourceWidth() * getResourceWorldScale(); } diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/java/edu/asu/commons/foraging/model/ClientData.java --- a/src/main/java/edu/asu/commons/foraging/model/ClientData.java +++ b/src/main/java/edu/asu/commons/foraging/model/ClientData.java @@ -81,6 +81,10 @@ private double trustGameIncome = 0.0d; private int correctQuizAnswers = 0; + // This client's zone number when the assign-zones parameter is set to true. + // If assign-zones is not set to true, zone is set to 0. + private int zone = 0; + public void setTrustGamePlayerOneAmountToKeep(double trustGamePlayerOneAmountToKeep) { this.trustGamePlayerOneAmountToKeep = trustGamePlayerOneAmountToKeep; } @@ -465,6 +469,14 @@ double cellWidth = roundConfiguration.getResourceWidth() / (double) clientsPerGroup; int x = (int) ((cellWidth / 2) + (cellWidth * (getAssignedNumber() - 1))); int y = roundConfiguration.getResourceDepth() / 2; + + // Position the client on the correct side of the border between + // zones. + if (roundConfiguration.areZonesAssigned()) { + if (zone == 0) + y--; + } + setPosition(new Point(x, y)); } else { @@ -686,5 +698,11 @@ return trustGameEarnings; } + public int getZone() { + return zone; + } + public void setZone(int zone) { + this.zone = zone; + } } diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java @@ -81,6 +81,9 @@ private ArrayList<Strategy> selectedRules; + // Used when assigning clients to zones + private int nextZone = 0; + public GroupDataModel(ServerDataModel serverDataModel) { this(serverDataModel, nextGroupId++); } @@ -512,6 +515,15 @@ } public void addClient(ClientData clientData) { + + // Assign the client to a zone, if this round has zone assignment + if (getRoundConfiguration().areZonesAssigned()) { + clientData.setZone(nextZone); + nextZone = (nextZone == 1 ? 0 : 1); + } else { + clientData.setZone(0); + } + clients.put(clientData.getId(), clientData); clientData.setAssignedNumber(clients.size()); clientData.setGroupDataModel(this); diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/java/edu/asu/commons/foraging/ui/GridView.java --- a/src/main/java/edu/asu/commons/foraging/ui/GridView.java +++ b/src/main/java/edu/asu/commons/foraging/ui/GridView.java @@ -33,11 +33,17 @@ * If the parameters call for a background, this object is created so that * the scaling calculation does not have to be performed for each paint. */ - protected Image tokenImage, tokenImageB, otherSubjectImage, selfImage, selfExplicitCollectionModeImage, beingSanctionedImage, sanctioningImage, monitorImage; + protected Image tokenImage, otherSubjectImage, selfImage, selfExplicitCollectionModeImage, beingSanctionedImage, sanctioningImage, monitorImage; - protected Image scaledTokenImage, scaledTokenImageB, scaledOtherSubjectImage, scaledSelfImage, + protected Image scaledTokenImage, scaledOtherSubjectImage, scaledSelfImage, scaledSelfExplicitCollectionModeImage, scaledBeingSanctionedImage, scaledSanctioningImage, scaledMonitorImage; + // The following are different versions of the images above to be shown in + // Zone B. + protected Image tokenImageB, otherSubjectImageB, selfImageB, selfExplicitCollectionModeImageB, beingSanctionedImageB, sanctioningImageB, monitorImageB; + protected Image scaledTokenImageB, scaledOtherSubjectImageB, scaledSelfImageB, + scaledSelfExplicitCollectionModeImageB, scaledBeingSanctionedImageB, scaledSanctioningImageB, scaledMonitorImageB; + /** * Represents the width and height of a grid cell, respectively. */ @@ -93,14 +99,23 @@ // get scaled instances of the originals int cellWidth = (int) dw; int cellHeight = (int) dh; + scaledTokenImage = tokenImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); - scaledTokenImageB = tokenImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledOtherSubjectImage = otherSubjectImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledSelfImage = selfImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledSelfExplicitCollectionModeImage = selfExplicitCollectionModeImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledBeingSanctionedImage = beingSanctionedImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledSanctioningImage = sanctioningImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledMonitorImage = monitorImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + + scaledTokenImageB = tokenImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + scaledOtherSubjectImageB = otherSubjectImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + scaledSelfImageB = selfImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + scaledSelfExplicitCollectionModeImageB = selfExplicitCollectionModeImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + scaledBeingSanctionedImageB = beingSanctionedImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + scaledSanctioningImageB = sanctioningImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + scaledMonitorImageB = monitorImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + System.err.println("cell width: " + dw); System.err.println("cell height: " + dh); System.err.println("x offset: " + xoffset); @@ -139,9 +154,6 @@ if (tokenImage == null) { tokenImage = loadImage("images/gem-token.gif"); } - if (tokenImageB == null) { - tokenImageB = loadImage("images/gem-token-b.gif"); - } if (selfImage == null) { selfImage = loadImage("images/gem-self.gif"); } @@ -161,6 +173,29 @@ if (monitorImage == null) { monitorImage = loadImage("images/gem-self-explicit.gif"); } + + if (tokenImageB == null) { + tokenImageB = loadImage("images/gem-token-b.gif"); + } + if (selfImageB == null) { + selfImageB = loadImage("images/gem-self-b.gif"); + } + if (otherSubjectImageB == null) { + otherSubjectImageB = loadImage("images/gem-other-b.gif"); + } + if (selfExplicitCollectionModeImageB == null) { + selfExplicitCollectionModeImageB = loadImage("images/gem-self-explicit-b.gif"); + } + if (beingSanctionedImageB == null) { + beingSanctionedImageB = loadImage("images/gem-red-b.gif"); + } + if (sanctioningImageB == null) { + sanctioningImageB = loadImage("images/gem-purple-b.gif"); + } + // FIXME: generate a new image for the monitor, for now just use the explicit-mode image. + if (monitorImageB == null) { + monitorImageB = loadImage("images/gem-self-explicit-b.gif"); + } } private Image loadImage(String path) { diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/java/edu/asu/commons/foraging/ui/SubjectView.java --- a/src/main/java/edu/asu/commons/foraging/ui/SubjectView.java +++ b/src/main/java/edu/asu/commons/foraging/ui/SubjectView.java @@ -257,30 +257,37 @@ } private void drawParticipant(Graphics2D graphics2D, Identifier id, int x, int y) { + // The image to use is determined based on the client's assigned zone. + Image image; if (dataModel.isBeingSanctioned(id)) { graphics2D.setColor(Color.CYAN); graphics2D.fillRect(x, y, getCellWidth(), getCellHeight()); - graphics2D.drawImage(scaledBeingSanctionedImage, x, y, this); + image = dataModel.getClientZone(id) == 1 ? scaledBeingSanctionedImageB : scaledBeingSanctionedImage; + graphics2D.drawImage(image, x, y, this); } else if (dataModel.isSanctioning(id)) { graphics2D.setColor(Color.WHITE); graphics2D.fillRect(x, y, getCellWidth(), getCellHeight()); - graphics2D.drawImage(scaledSanctioningImage, x, y, this); + image = dataModel.getClientZone(id) == 1 ? scaledSanctioningImageB : scaledSanctioningImage; + graphics2D.drawImage(image, x, y, this); } // else if (id.equals(dataModel.getMonitorId())) { // graphics2D.drawImage(scaledMonitorImage, x, y, this); // } else if (id.equals(dataModel.getId())) { if (dataModel.isExplicitCollectionMode()) { - graphics2D.drawImage(scaledSelfExplicitCollectionModeImage, x, y, this); + image = dataModel.getClientZone(id) == 1 ? scaledSelfExplicitCollectionModeImageB : scaledSelfExplicitCollectionModeImage; + graphics2D.drawImage(image, x, y, this); } else { //System.out.println("Is a self image"); - graphics2D.drawImage(scaledSelfImage, x, y, this); + image = dataModel.getClientZone(id) == 1 ? scaledSelfImageB : scaledSelfImage; + graphics2D.drawImage(image, x, y, this); } } else { - graphics2D.drawImage(scaledOtherSubjectImage, x, y, this); + image = dataModel.getClientZone(id) == 1? scaledOtherSubjectImageB : scaledOtherSubjectImage; + graphics2D.drawImage(image, x, y, this); } } diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/resources/images/freeze-self-b.gif Binary file src/main/resources/images/freeze-self-b.gif has changed diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/resources/images/gem-gray-b.gif Binary file src/main/resources/images/gem-gray-b.gif has changed diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/resources/images/gem-other-b.gif Binary file src/main/resources/images/gem-other-b.gif has changed diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/resources/images/gem-purple-b.gif Binary file src/main/resources/images/gem-purple-b.gif has changed diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/resources/images/gem-red-b.gif Binary file src/main/resources/images/gem-red-b.gif has changed diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/resources/images/gem-self-b.gif Binary file src/main/resources/images/gem-self-b.gif has changed diff -r ccf7619af3266a9dea0c1b056b33c47fce204d0f -r 333c7df73c7b95fad4d7095a081446542396b5cc src/main/resources/images/gem-self-explicit-b.gif Binary file src/main/resources/images/gem-self-explicit-b.gif has changed https://bitbucket.org/virtualcommons/foraging/commits/b15b2e0aa27a/ Changeset: b15b2e0aa27a User: brsaylor Date: 2013-09-10 22:48:54 Summary: Implement restrictions on travel between zones Affected #: 3 files diff -r 333c7df73c7b95fad4d7095a081446542396b5cc -r b15b2e0aa27add648b1edcd949234ea1e00a3963 src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -458,6 +458,14 @@ return getBooleanProperty("assign-zones", false); } + /** + * Returns true if participants assigned to the given zone should be + * restricted from crossing the border. + */ + public boolean isTravelRestricted(int zone) { + return getBooleanProperty("restrict-travel-zone-" + zone, false); + } + public int getWorldWidth() { return getResourceWidth() * getResourceWorldScale(); } diff -r 333c7df73c7b95fad4d7095a081446542396b5cc -r b15b2e0aa27add648b1edcd949234ea1e00a3963 src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java @@ -465,7 +465,7 @@ if (serverDataModel.isValidPosition(newPosition)) { // check occupancy - if ( isCellAvailable(newPosition) ) { + if ( isCellAvailable(newPosition) && isCellAllowed(clientData, newPosition)) { // System.err.println("setting position: " + newPosition); clientData.setPosition(newPosition); @@ -494,6 +494,23 @@ } return true; } + + /** + * Return true if the participant represented by clientData is allowed to + * move to the given position (assuming the position is valid and + * available), based on zone rules. + */ + private boolean isCellAllowed(ClientData clientData, Point position) { + if (serverDataModel.getRoundConfiguration().areZonesAssigned() == false || + serverDataModel.getRoundConfiguration().isTravelRestricted(clientData.getZone()) == false) { + return true; + } + int positionZone = position.y < serverDataModel.getBoardHeight() / 2 ? 0 : 1; + if (positionZone != clientData.getZone()) { + return false; + } + return true; + } public void collectToken(ClientData clientData) { Point position = clientData.getPoint(); diff -r 333c7df73c7b95fad4d7095a081446542396b5cc -r b15b2e0aa27add648b1edcd949234ea1e00a3963 src/main/java/edu/asu/commons/foraging/ui/GridView.java --- a/src/main/java/edu/asu/commons/foraging/ui/GridView.java +++ b/src/main/java/edu/asu/commons/foraging/ui/GridView.java @@ -108,6 +108,7 @@ scaledSanctioningImage = sanctioningImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledMonitorImage = monitorImage.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); + // Scale the Zone B images scaledTokenImageB = tokenImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledOtherSubjectImageB = otherSubjectImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); scaledSelfImageB = selfImageB.getScaledInstance(cellWidth, cellHeight, IMAGE_SCALING_STRATEGY); @@ -174,6 +175,7 @@ monitorImage = loadImage("images/gem-self-explicit.gif"); } + // Load the Zone B images if (tokenImageB == null) { tokenImageB = loadImage("images/gem-token-b.gif"); } https://bitbucket.org/virtualcommons/foraging/commits/63922287e66d/ Changeset: 63922287e66d User: brsaylor Date: 2013-12-10 01:25:02 Summary: Update deploy.bat and jetty.bat, add process-output-data.bat for Jim's laptop Affected #: 3 files diff -r b15b2e0aa27add648b1edcd949234ea1e00a3963 -r 63922287e66d9e66354d754b91e710a3f0b1adeb deploy.bat --- a/deploy.bat +++ b/deploy.bat @@ -1,10 +1,10 @@ -::REM set ANT_HOME to the location where you unpacked Ant. Inside this -::REM directory should be bin and lib directories containing the Ant -::REM executables and library dependencies. -::REM set JAVA_HOME to the location of the installed JDK (customize as necessary) -REM This script will not work unless you make sure that ANT_HOME, M2_HOME, and JAVA_HOME are pointing at the correct location. -set ANT_HOME=C:\tools\ant -set M2_HOME=C:\tools\maven -set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_31 -set PATH=%M2_HOME%\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%PATH% -ant clean deploy server +::REM set ANT_HOME to the location where you unpacked Ant. Inside this +::REM directory should be bin and lib directories containing the Ant +::REM executables and library dependencies. +::REM set JAVA_HOME to the location of the installed JDK (customize as necessary) +REM This script will not work unless you make sure that ANT_HOME, M2_HOME, and JAVA_HOME are pointing at the correct location. +set ANT_HOME=C:\JavaLibraries\apache-ant-1.9.2 +set M2_HOME=C:\JavaLibraries\apache-maven-3.1.1 +set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45 +set PATH=%M2_HOME%\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%PATH% +ant deploy server diff -r b15b2e0aa27add648b1edcd949234ea1e00a3963 -r 63922287e66d9e66354d754b91e710a3f0b1adeb jetty.bat --- a/jetty.bat +++ b/jetty.bat @@ -1,11 +1,11 @@ -REM set M2_HOME to the location where you unpacked Maven. Inside this -REM directory should be bin and lib directories containing the Maven -REM executables and library dependencies. -REM ******* -REM You MUST RUN deploy.bat or server.bat before this to properly compile and -REM configure this application. -set ANT_HOME=C:\tools\ant -set M2_HOME=C:\tools\maven -set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_26 -set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%M2_HOME%\bin;%PATH% -mvn jetty:run +REM set M2_HOME to the location where you unpacked Maven. Inside this +REM directory should be bin and lib directories containing the Maven +REM executables and library dependencies. +REM ******* +REM You MUST RUN deploy.bat or server.bat before this to properly compile and +REM configure this application. +set ANT_HOME=C:\JavaLibraries\apache-ant-1.9.2 +set M2_HOME=C:\JavaLibraries\apache-maven-3.1.1 +set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45 +set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%M2_HOME%\bin;%PATH% +mvn jetty:run diff -r b15b2e0aa27add648b1edcd949234ea1e00a3963 -r 63922287e66d9e66354d754b91e710a3f0b1adeb process-output-data.bat --- /dev/null +++ b/process-output-data.bat @@ -0,0 +1,5 @@ +set ANT_HOME=C:\JavaLibraries\apache-ant-1.9.2 +set M2_HOME=C:\JavaLibraries\apache-maven-3.1.1 +set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_45 +set PATH=%M2_HOME%\bin;%ANT_HOME%\bin;%JAVA_HOME%\bin;%PATH% +ant convert https://bitbucket.org/virtualcommons/foraging/commits/98945f5feedf/ Changeset: 98945f5feedf User: brsaylor Date: 2014-01-22 23:44:32 Summary: Add robot-controlled feature for testing Affected #: 2 files diff -r 63922287e66d9e66354d754b91e710a3f0b1adeb -r 98945f5feedfe375617294616143e52edd06c959 src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -900,4 +900,26 @@ return getParentConfiguration().getPlayerTwoAmountToKeepValidation(); } + /** + * If true, all player input will be automatically generated. + */ + public boolean isRobotControlled() { + return getBooleanProperty("robot-controlled", false); + } + + /** + * When the robot-controlled parameter is true, specifies the number of + * moves per second each player will make. + */ + public int getRobotMovesPerSecond() { + return getIntProperty("robot-moves-per-second", 10); + } + + /** + * Probability that a robot-controlled player will attempt to harvest after + * making a move + */ + public double getRobotHarvestProbability() { + return getDoubleProperty("robot-harvest-probability", 0.5d); + } } diff -r 63922287e66d9e66354d754b91e710a3f0b1adeb -r 98945f5feedfe375617294616143e52edd06c959 src/main/java/edu/asu/commons/foraging/ui/GameWindow2D.java --- a/src/main/java/edu/asu/commons/foraging/ui/GameWindow2D.java +++ b/src/main/java/edu/asu/commons/foraging/ui/GameWindow2D.java @@ -6,11 +6,13 @@ import java.awt.Component; import java.awt.Dimension; import java.awt.Point; +import java.awt.AWTException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.KeyAdapter; +import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -20,6 +22,8 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import java.util.logging.Logger; +import java.util.Random; import javax.swing.Box; import javax.swing.BoxLayout; @@ -40,6 +44,7 @@ import javax.swing.text.StyledDocument; import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.StyleSheet; +import javax.swing.SwingWorker; import edu.asu.commons.event.ClientReadyEvent; import edu.asu.commons.event.Event; @@ -120,6 +125,11 @@ private HtmlEditorPane votingInstructionsEditorPane; private JScrollPane votingInstructionsScrollPane; + // SwingWorker for generating robot keypresses + private SwingWorker robotWorker; + + private final static Logger logger = Logger.getLogger( GameWindow2D.class.getName() ); + // private EnergyLevel energyLevel; public GameWindow2D(ForagingClient client) { @@ -130,6 +140,7 @@ // feed subject view the available screen size so that // it can adjust appropriately when given a board size // int width = (int) Math.min(Math.floor(size.getWidth()), Math.floor(size.getHeight() * 0.85)); + this.robotWorker = null; initGuiComponents(); } @@ -588,6 +599,67 @@ } }; SwingUtilities.invokeLater(runnable); + + if (configuration.isRobotControlled()) { + startRobotWorker(configuration); + } + } + + /** + * Start the SwingWorker thread that generates random player input + */ + public void startRobotWorker(final RoundConfiguration configuration) { + + // java.awt.Robot was my first choice for generating keyboard input; + // however, it doesn't seem to have permission to run in Java Web Start + // applications. + + robotWorker = new SwingWorker<Void, Void>() { + @Override + public Void doInBackground() { + + KeyListener keyListener = mainPanel.getKeyListeners()[0]; + + KeyEvent keyPressedEvent; + KeyEvent keyReleasedEvent; + int[] arrowKeyCodes = { + KeyEvent.VK_UP, + KeyEvent.VK_DOWN, + KeyEvent.VK_LEFT, + KeyEvent.VK_RIGHT + }; + int keyCode; + Random random = new Random(); + int sleepInterval = 1000 / configuration.getRobotMovesPerSecond(); + double harvestProbability = configuration.getRobotHarvestProbability(); + + while (!isCancelled()) { + + // Move in a random direction + keyCode = arrowKeyCodes[random.nextInt(4)]; + keyPressedEvent = new KeyEvent(mainPanel, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, keyCode, KeyEvent.CHAR_UNDEFINED); + keyReleasedEvent = new KeyEvent(mainPanel, KeyEvent.KEY_RELEASED, System.currentTimeMillis(), 0, keyCode, KeyEvent.CHAR_UNDEFINED); + keyListener.keyPressed(keyPressedEvent); + keyListener.keyReleased(keyReleasedEvent); + + if (random.nextDouble() < harvestProbability) { + // Collect a token + keyPressedEvent = new KeyEvent(mainPanel, KeyEvent.KEY_PRESSED, System.currentTimeMillis(), 0, KeyEvent.VK_SPACE, ' '); + keyReleasedEvent = new KeyEvent(mainPanel, KeyEvent.KEY_RELEASED, System.currentTimeMillis(), 0, KeyEvent.VK_SPACE, ' '); + keyListener.keyPressed(keyPressedEvent); + keyListener.keyReleased(keyReleasedEvent); + } + + try { + Thread.sleep(sleepInterval); + } catch (InterruptedException e) { + return null; + } + } + return null; + } + }; + robotWorker.execute(); } public void displayErrorMessage(String errorMessage) { @@ -812,6 +884,12 @@ } public synchronized void endRound(final EndRoundEvent event) { + + if (robotWorker != null) { + robotWorker.cancel(true); + robotWorker = null; + } + Runnable runnable = new Runnable() { public void run() { if (inRoundChatPanel != null) { https://bitbucket.org/virtualcommons/foraging/commits/697de419e5ce/ Changeset: 697de419e5ce User: brsaylor Date: 2014-01-23 00:42:59 Summary: Add server-debug ant target and remote.debug.port build property Affected #: 1 file diff -r 98945f5feedfe375617294616143e52edd06c959 -r 697de419e5cefe9f056ea962dec2b649390dadf4 build.xml --- a/build.xml +++ b/build.xml @@ -55,6 +55,8 @@ <property name="javadoc.dir" value="docs/javadoc"/><property name="javadoc.private.dir" value="docs/private"/><property name="lib.dir" value="lib"/> + <property name="remote.debug.port" value="1044"/> + <!-- Set up the CLASSPATH, includes all jars in the lib directory and all built files for both the main project and the tests --> @@ -243,6 +245,7 @@ <fail message="Did not find any configuration files in ${conf.dir}, please copy over an appropriate set of configuration files into ${conf.dir}" unless="configuration.present" /></target> + <target name="server" depends="compile,check-configuration" if='configuration.present'><!-- make sure we update the configuration --><copy todir="${build.dir}/conf" overwrite="true"> @@ -258,6 +261,27 @@ <jvmarg value="-server"/></java></target> + + <target name="server-debug" depends="compile,check-configuration" if='configuration.present'> + <!-- make sure we update the configuration --> + <copy todir="${build.dir}/conf" overwrite="true"> + <fileset dir="${conf.dir}"/> + <filterset> + <filter token="SERVER_ADDRESS" value="${server.address}"/> + <filter token="PORT_NUMBER" value="${server.port}"/> + <filter token="CODEBASE_URL" value="${codebase.url}"/> + </filterset> + </copy> + + <java classname="${server.class}" classpathref="project.classpath" fork="yes"> + <jvmarg value="-server"/> + + <!-- Enable remote debugging --> + <jvmarg value="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${remote.debug.port}"/> + + </java> + </target> + <!-- Compile Tests --><target name="compile-tests" depends="compile"><javac srcdir="${test.src.dir}" destdir="${test.build.dir}" source="1.6" target="1.6" debug="on"> https://bitbucket.org/virtualcommons/foraging/commits/8d8b4b9a5852/ Changeset: 8d8b4b9a5852 User: brsaylor Date: 2014-02-18 01:50:26 Summary: Update version of csidex dependency Affected #: 2 files diff -r 697de419e5cefe9f056ea962dec2b649390dadf4 -r 8d8b4b9a5852224165b3665b30cd58380bd92f66 ivy.xml --- a/ivy.xml +++ b/ivy.xml @@ -5,7 +5,7 @@ <ivy-module version="2.0"><info organisation="edu.asu.commons" module="foraging"/><dependencies> - <dependency org="edu.asu.commons" name="csidex" rev="0.6-SNAPSHOT" /> + <dependency org="edu.asu.commons" name="csidex" rev="0.7-SNAPSHOT" /><dependency org="net.java.dev.jogl" name="jogl" rev="1.1.1-rc6"/><dependency org="javax.media" name="jmf" rev="2.1.1e"/><dependency org="javax.jnlp" name="javaws" rev="1.6.0_30"/> diff -r 697de419e5cefe9f056ea962dec2b649390dadf4 -r 8d8b4b9a5852224165b3665b30cd58380bd92f66 pom.xml --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ <dependency><groupId>edu.asu.commons</groupId><artifactId>csidex</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.7-SNAPSHOT</version></dependency><dependency><groupId>net.java.dev.jogl</groupId> https://bitbucket.org/virtualcommons/foraging/commits/407bef83e188/ Changeset: 407bef83e188 User: brsaylor Date: 2014-02-18 03:50:09 Summary: Implement chat-with-team-only parameter Affected #: 2 files diff -r 8d8b4b9a5852224165b3665b30cd58380bd92f66 -r 407bef83e188d490b7ca62a81bc4e0bcb644b43d src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -486,6 +486,14 @@ return isChatRoundEnabled() || isInRoundChatEnabled() || isCensoredChat(); } + /** + * Returns true if chat messages should be sent only to participants in the + * same team as the sender (i.e. assigned to the same zone). + */ + public boolean isChatWithTeamOnly() { + return getBooleanProperty("chat-with-team-only", false); + } + public int getMaximumResourceAge() { return getIntProperty("maximum-resource-age", 10); } diff -r 8d8b4b9a5852224165b3665b30cd58380bd92f66 -r 407bef83e188d490b7ca62a81bc4e0bcb644b43d src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -772,21 +772,50 @@ Identifier target = request.getTarget(); ClientData clientData = clients.get(source); ArrayList<Identifier> targets = new ArrayList<Identifier>(); + RoundConfiguration currentConfiguration = getCurrentRoundConfiguration(); if (Identifier.ALL.equals(target)) { // relay to all clients in this client's group. - RoundConfiguration currentConfiguration = getCurrentRoundConfiguration(); // check for field of vision if (currentConfiguration.isFieldOfVisionEnabled()) { // FIXME: replace with clientData.getFieldOfVision? Circle circle = new Circle(clientData.getPosition(), currentConfiguration.getViewSubjectsRadius()); - targets.addAll(clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); + if (currentConfiguration.isChatWithTeamOnly()) { + // Send the message to all team members within field of vision + for (Identifier id : clientData.getGroupDataModel().getClientIdentifiersWithin(circle)) { + if (clients.get(id).getZone() == clientData.getZone()) { + targets.add(id); + } + } + } else { + // Send the message to all group members within field of vision + targets.addAll(clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); + } } else { - targets.addAll(clientData.getGroupDataModel().getClientIdentifiers()); + if (currentConfiguration.isChatWithTeamOnly()) { + // Send the message to all team members + for (Identifier id : clientData.getGroupDataModel().getClientIdentifiers()) { + if (clients.get(id).getZone() == clientData.getZone()) { + targets.add(id); + } + } + } else { + // Send the message to all group members + targets.addAll(clientData.getGroupDataModel().getClientIdentifiers()); + } } } else { - targets.add(request.getTarget()); + // Single target + if (currentConfiguration.isChatWithTeamOnly()) { + // Send the message to the target only if it's on the same team + if (clients.get(target).getZone() == clientData.getZone()) { + targets.add(target); + } + } else { + // Send the message to the target + targets.add(target); + } } sendChatEvent(request, targets); persister.store(request); https://bitbucket.org/virtualcommons/foraging/commits/e9e1bada0289/ Changeset: e9e1bada0289 User: brsaylor Date: 2014-02-19 00:45:28 Summary: Implement sanction-team-members-only parameter for real-time sanctioning Affected #: 2 files diff -r 407bef83e188d490b7ca62a81bc4e0bcb644b43d -r e9e1bada0289ccb9add33fdbbc408a93fdd084ca src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -282,6 +282,10 @@ return isRealTimeSanctioningEnabled() || isPostRoundSanctioningEnabled(); } + public boolean isSanctioningWithinTeamOnly() { + return getBooleanProperty("sanction-team-members-only", false); + } + public boolean shouldCheckOccupancy() { return getMaximumOccupancyPerCell() < getClientsPerGroup(); } diff -r 407bef83e188d490b7ca62a81bc4e0bcb644b43d -r e9e1bada0289ccb9add33fdbbc408a93fdd084ca src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -538,12 +538,17 @@ ClientData targetClient = clients.get(request.getTarget()); // validate request // FIXME:Added a new test condition to check for the simplified version of sanctioning + boolean teamError = getCurrentRoundConfiguration().isSanctioningWithinTeamOnly() && sourceClient.getZone() != targetClient.getZone(); boolean invalidSanctionRequest = sourceClient.getCurrentTokens() == 0 || targetClient.getCurrentTokens() == 0 - || sourceClient.getGroupDataModel().isResourceDistributionEmpty(); + || sourceClient.getGroupDataModel().isResourceDistributionEmpty() || teamError; if (invalidSanctionRequest) { // ignore the sanction request, send a message to the sanctioner. getLogger().warning("Ignoring token reduction request, sending new client error message event to : " + sourceClient.getId()); - if (getCurrentRoundConfiguration().isSanctioningEnabled()) { + if (teamError) { + transmit(new ClientMessageEvent(sourceClient.getId(), + String.format("Ignoring token reduction request: # %d is not on your team.", targetClient.getAssignedNumber()))); + } + else if (getCurrentRoundConfiguration().isSanctioningEnabled()) { transmit(new ClientMessageEvent(sourceClient.getId(), String.format("Ignoring token reduction request: # %d does not have any tokens to reduce.", targetClient.getAssignedNumber()))); } https://bitbucket.org/virtualcommons/foraging/commits/40e8c8faeac4/ Changeset: 40e8c8faeac4 User: brsaylor Date: 2014-02-19 04:02:20 Summary: Implement team-0-size parameter for configuring uneven team/zone assignment Affected #: 3 files diff -r e9e1bada0289ccb9add33fdbbc408a93fdd084ca -r 40e8c8faeac4b31cbc04ef128281ba2c5e382956 src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -243,6 +243,21 @@ } /** + * Number of participants in each group to be assigned to the given + * zone/team, which may be 0 or 1. The default value is half the group size, + * rounded up. + * + * @return + */ + public int getMaxTeamSize(int zone) { + if (zone == 0) { + return getIntProperty("team-0-size", getClientsPerGroup() / 2 + getClientsPerGroup() % 2); + } else { + return getClientsPerGroup() - getMaxTeamSize(0); + } + } + + /** * Returns an int specifying how many tokens the sanctioner must pay to * penalize another player. * diff -r e9e1bada0289ccb9add33fdbbc408a93fdd084ca -r 40e8c8faeac4b31cbc04ef128281ba2c5e382956 src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java --- a/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java +++ b/src/main/java/edu/asu/commons/foraging/model/GroupDataModel.java @@ -81,8 +81,9 @@ private ArrayList<Strategy> selectedRules; - // Used when assigning clients to zones + // Used when assigning clients to zones/teams private int nextZone = 0; + private int[] currentTeamSize = {0, 0}; public GroupDataModel(ServerDataModel serverDataModel) { this(serverDataModel, nextGroupId++); @@ -533,10 +534,16 @@ public void addClient(ClientData clientData) { - // Assign the client to a zone, if this round has zone assignment + // Assign the client to a zone/team, if this round has zone assignment if (getRoundConfiguration().areZonesAssigned()) { - clientData.setZone(nextZone); - nextZone = (nextZone == 1 ? 0 : 1); + int thisZone = nextZone; + clientData.setZone(thisZone); + currentTeamSize[thisZone]++; + nextZone = (thisZone + 1) % 2; + if (currentTeamSize[nextZone] >= getRoundConfiguration().getMaxTeamSize(nextZone)) { + // The next team is full, so continue to assign to this team + nextZone = thisZone; + } } else { clientData.setZone(0); } @@ -557,6 +564,8 @@ public void clear() { clients.clear(); + nextZone = 0; + currentTeamSize[0] = currentTeamSize[1] = 0; cleanupRound(); } diff -r e9e1bada0289ccb9add33fdbbc408a93fdd084ca -r 40e8c8faeac4b31cbc04ef128281ba2c5e382956 src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -1062,8 +1062,10 @@ // 2. when we move from a private property round to a open access round // 3. when the clients per group in the current round is different from the // clients per group in the next round (FIXME: is this too broad or can #2 just be a special case of this?) + // 4. when the team sizes change return currentRoundConfiguration.shouldRandomizeGroup() - || (previousRoundConfiguration.getClientsPerGroup() != currentRoundConfiguration.getClientsPerGroup()); + || (previousRoundConfiguration.getClientsPerGroup() != currentRoundConfiguration.getClientsPerGroup()) + || (previousRoundConfiguration.getMaxTeamSize(0) != currentRoundConfiguration.getMaxTeamSize(0)); } private void shuffleParticipants() { https://bitbucket.org/virtualcommons/foraging/commits/7e896ce9d991/ Changeset: 7e896ce9d991 User: brsaylor Date: 2014-02-19 22:37:16 Summary: Don't restrict chat based on field of vision during pre-round chat Affected #: 1 file diff -r 40e8c8faeac4b31cbc04ef128281ba2c5e382956 -r 7e896ce9d9917afc4117d3106d07558c57bf7d4f src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -781,7 +781,7 @@ if (Identifier.ALL.equals(target)) { // relay to all clients in this client's group. // check for field of vision - if (currentConfiguration.isFieldOfVisionEnabled()) { + if (serverState == ServerState.ROUND_IN_PROGRESS && currentConfiguration.isFieldOfVisionEnabled()) { // FIXME: replace with clientData.getFieldOfVision? Circle circle = new Circle(clientData.getPosition(), currentConfiguration.getViewSubjectsRadius()); if (currentConfiguration.isChatWithTeamOnly()) { https://bitbucket.org/virtualcommons/foraging/commits/9db9f560e0dc/ Changeset: 9db9f560e0dc User: brsaylor Date: 2014-02-20 01:20:00 Summary: Replace chat-with-team-only parameter with chat-allowed-<zoneA>-<zoneB> Affected #: 2 files diff -r 7e896ce9d9917afc4117d3106d07558c57bf7d4f -r 9db9f560e0dc3588566964974d515c8a3c533e20 src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -506,11 +506,11 @@ } /** - * Returns true if chat messages should be sent only to participants in the - * same team as the sender (i.e. assigned to the same zone). + * Returns true if chat messages should be allowed from participants + * assigned to zoneA to participants assigned to zoneB */ - public boolean isChatWithTeamOnly() { - return getBooleanProperty("chat-with-team-only", false); + public boolean isChatAllowed(int zoneA, int zoneB) { + return getBooleanProperty("chat-allowed-" + zoneA + "-" + zoneB, true); } public int getMaximumResourceAge() { diff -r 7e896ce9d9917afc4117d3106d07558c57bf7d4f -r 9db9f560e0dc3588566964974d515c8a3c533e20 src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -784,41 +784,25 @@ if (serverState == ServerState.ROUND_IN_PROGRESS && currentConfiguration.isFieldOfVisionEnabled()) { // FIXME: replace with clientData.getFieldOfVision? Circle circle = new Circle(clientData.getPosition(), currentConfiguration.getViewSubjectsRadius()); - if (currentConfiguration.isChatWithTeamOnly()) { - // Send the message to all team members within field of vision - for (Identifier id : clientData.getGroupDataModel().getClientIdentifiersWithin(circle)) { - if (clients.get(id).getZone() == clientData.getZone()) { - targets.add(id); - } + // Send the message to all allowed recipients within field of vision + for (Identifier id : clientData.getGroupDataModel().getClientIdentifiersWithin(circle)) { + if (id.equals(source) || currentConfiguration.isChatAllowed(clientData.getZone(), clients.get(id).getZone())) { + targets.add(id); } - } else { - // Send the message to all group members within field of vision - targets.addAll(clientData.getGroupDataModel().getClientIdentifiersWithin(circle)); } } else { - if (currentConfiguration.isChatWithTeamOnly()) { - // Send the message to all team members - for (Identifier id : clientData.getGroupDataModel().getClientIdentifiers()) { - if (clients.get(id).getZone() == clientData.getZone()) { - targets.add(id); - } + // Send the message to all allowed recipients + for (Identifier id : clientData.getGroupDataModel().getClientIdentifiers()) { + if (id.equals(source) || currentConfiguration.isChatAllowed(clientData.getZone(), clients.get(id).getZone())) { + targets.add(id); } - } else { - // Send the message to all group members - targets.addAll(clientData.getGroupDataModel().getClientIdentifiers()); } } } else { - // Single target - if (currentConfiguration.isChatWithTeamOnly()) { - // Send the message to the target only if it's on the same team - if (clients.get(target).getZone() == clientData.getZone()) { - targets.add(target); - } - } else { - // Send the message to the target + // Single target. Send the message if chat is allowed to the given recipient + if (target.equals(source) || currentConfiguration.isChatAllowed(clientData.getZone(), clients.get(target).getZone())) { targets.add(target); } } https://bitbucket.org/virtualcommons/foraging/commits/6c4ff82c7ab5/ Changeset: 6c4ff82c7ab5 User: brsaylor Date: 2014-02-20 01:57:38 Summary: Replace sanction-team-members-only param with sanction-allowed-<zoneA>-<zoneB> Affected #: 2 files diff -r 9db9f560e0dc3588566964974d515c8a3c533e20 -r 6c4ff82c7ab5e0d24021d8fd8a963e99346f0d80 src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java --- a/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java +++ b/src/main/java/edu/asu/commons/foraging/conf/RoundConfiguration.java @@ -297,8 +297,12 @@ return isRealTimeSanctioningEnabled() || isPostRoundSanctioningEnabled(); } - public boolean isSanctioningWithinTeamOnly() { - return getBooleanProperty("sanction-team-members-only", false); + /** + * Returns true if participants assigned to zoneA should be allowed to + * sanction participants assigned to zoneB + */ + public boolean isSanctioningAllowed(int zoneA, int zoneB) { + return getBooleanProperty("sanction-allowed-" + zoneA + "-" + zoneB, true); } public boolean shouldCheckOccupancy() { diff -r 9db9f560e0dc3588566964974d515c8a3c533e20 -r 6c4ff82c7ab5e0d24021d8fd8a963e99346f0d80 src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -538,7 +538,7 @@ ClientData targetClient = clients.get(request.getTarget()); // validate request // FIXME:Added a new test condition to check for the simplified version of sanctioning - boolean teamError = getCurrentRoundConfiguration().isSanctioningWithinTeamOnly() && sourceClient.getZone() != targetClient.getZone(); + boolean teamError = ! getCurrentRoundConfiguration().isSanctioningAllowed(sourceClient.getZone(), targetClient.getZone()); boolean invalidSanctionRequest = sourceClient.getCurrentTokens() == 0 || targetClient.getCurrentTokens() == 0 || sourceClient.getGroupDataModel().isResourceDistributionEmpty() || teamError; if (invalidSanctionRequest) { @@ -546,7 +546,8 @@ getLogger().warning("Ignoring token reduction request, sending new client error message event to : " + sourceClient.getId()); if (teamError) { transmit(new ClientMessageEvent(sourceClient.getId(), - String.format("Ignoring token reduction request: # %d is not on your team.", targetClient.getAssignedNumber()))); + String.format("Ignoring token reduction request: You cannot punish members of %s team.", + sourceClient.getZone() == targetClient.getZone() ? "your" : "the other"))); } else if (getCurrentRoundConfiguration().isSanctioningEnabled()) { transmit(new ClientMessageEvent(sourceClient.getId(), https://bitbucket.org/virtualcommons/foraging/commits/050920cefc60/ Changeset: 050920cefc60 User: brsaylor Date: 2014-03-13 23:47:30 Summary: Fix incorrect chat handles after group reassignment Affected #: 1 file diff -r 6c4ff82c7ab5e0d24021d8fd8a963e99346f0d80 -r 050920cefc6009652f1cc31bb85fde6e54f92c8f src/main/java/edu/asu/commons/foraging/server/ForagingServer.java --- a/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java +++ b/src/main/java/edu/asu/commons/foraging/server/ForagingServer.java @@ -812,9 +812,14 @@ } private void sendChatEvent(ChatRequest request, Collection<Identifier> identifiers) { - sendFacilitatorMessage... [truncated message content] |
From: <com...@bi...> - 2014-05-14 19:43:58
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/f49c9b048e5c/ Changeset: f49c9b048e5c User: alllee Date: 2014-05-14 21:43:30 Summary: round configuration instruction fixes to include special instructions Affected #: 22 files diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2009/t2/round12.xml --- a/src/main/resources/configuration/asu/2009/t2/round12.xml +++ b/src/main/resources/configuration/asu/2009/t2/round12.xml @@ -20,7 +20,7 @@ infrastructure efficiency will be displayed and then the round will begin. If you have any questions, please ask them now. </p> - +{self.specialInstructions} ]]></entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2009/t2/round13.xml --- a/src/main/resources/configuration/asu/2009/t2/round13.xml +++ b/src/main/resources/configuration/asu/2009/t2/round13.xml @@ -5,13 +5,4 @@ <entry key='infrastructure-degradation-factor'>10</entry> -<entry key="instructions"> -<![CDATA[ -<h3>Round 12 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round10.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round10.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round10.xml @@ -3,12 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 9 Instructions</h3> -<p> -This round is the same as the previous round. -</p> -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round11.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round11.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round11.xml @@ -3,13 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 10 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round12.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round12.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round12.xml @@ -20,7 +20,7 @@ infrastructure efficiency will be displayed and then the round will begin. If you have any questions, please ask them now. </p> - +{self.specialInstructions} ]]></entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round13.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round13.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round13.xml @@ -4,14 +4,4 @@ <comment>Irrigation experiment round configuration</comment><entry key='infrastructure-degradation-factor'>10</entry> - -<entry key="instructions"> -<![CDATA[ -<h3>Round 12 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round14.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round14.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round14.xml @@ -5,13 +5,4 @@ <entry key='infrastructure-degradation-factor'>10</entry> -<entry key="instructions"> -<![CDATA[ -<h3>Round 13 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round15.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round15.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round15.xml @@ -2,16 +2,5 @@ <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties><comment>Irrigation experiment round configuration</comment> - <entry key='infrastructure-degradation-factor'>80</entry> - -<entry key="instructions"> -<![CDATA[ -<h3>Round 14 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round16.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round16.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round16.xml @@ -3,15 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment><entry key='infrastructure-degradation-factor'>10</entry> - - -<entry key="instructions"> -<![CDATA[ -<h3>Round 15 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round17.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round17.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round17.xml @@ -3,13 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment><entry key='infrastructure-degradation-factor'>5</entry> -<entry key="instructions"> -<![CDATA[ -<h3>Round 16 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round18.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round18.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round18.xml @@ -3,14 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment><entry key='infrastructure-degradation-factor'>10</entry> - -<entry key="instructions"> -<![CDATA[ -<h3>Round 17 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round19.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round19.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round19.xml @@ -5,13 +5,4 @@ <entry key='infrastructure-degradation-factor'>80</entry> -<entry key="instructions"> -<![CDATA[ -<h3>Round 18 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round2.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round2.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round2.xml @@ -7,7 +7,7 @@ <entry key="instructions"><![CDATA[ -<h3>Round 1 Instructions</h3> +<h2>Round {self.roundNumber} Instructions</h2><p> This is the first actual round of the experiment. Before this round begins you will have the opportunity to text chat with the other participants in your @@ -16,6 +16,7 @@ determined you will begin the experiment and make decisions on when to open your irrigation gates and grow crops. </p> +{self.specialInstructions} ]]></entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round20.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round20.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round20.xml @@ -5,13 +5,4 @@ <entry key='infrastructure-degradation-factor'>10</entry> -<entry key="instructions"> -<![CDATA[ -<h3>Round 19 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round21.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round21.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round21.xml @@ -5,12 +5,4 @@ <entry key='infrastructure-degradation-factor'>10</entry> -<entry key="instructions"> -<![CDATA[ -<h3>Round 20 Instructions</h3> -<p> -This is the final round. -</p> -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round3.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round3.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round3.xml @@ -3,13 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 2 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round4.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round4.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round4.xml @@ -3,12 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 3 Instructions</h3> -<p> -This round is the same as the previous round. -</p> -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round5.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round5.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round5.xml @@ -3,12 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 4 Instructions</h3> -<p> -This round is the same as the previous round. -</p> -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round6.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round6.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round6.xml @@ -2,14 +2,4 @@ <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"><properties><comment>Irrigation experiment round configuration</comment> - -<entry key="instructions"> -<![CDATA[ -<h3>Round 5 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round7.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round7.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round7.xml @@ -3,13 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 6 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round8.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round8.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round8.xml @@ -3,12 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 7 Instructions</h3> -<p> -This round is the same as the previous round. -</p> -]]> -</entry></properties> diff -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc -r f49c9b048e5c455f6ae8078ad5d9280cd9876b11 src/main/resources/configuration/asu/2014/stiglitz/round9.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/round9.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/round9.xml @@ -3,13 +3,4 @@ <properties><comment>Irrigation experiment round configuration</comment> -<entry key="instructions"> -<![CDATA[ -<h3>Round 8 Instructions</h3> -<p> -This round is the same as the previous round. -</p> - -]]> -</entry></properties> Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-14 06:41:37
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/69fe6de7e90a/ Changeset: 69fe6de7e90a User: alllee Date: 2014-05-14 08:41:21 Summary: fixing display bugs with unrestricted visibility Affected #: 3 files diff -r 449d95d0bcd4b3d31237f6c076878cd0db92458c -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc src/main/java/edu/asu/commons/irrigation/client/CanalPanel.java --- a/src/main/java/edu/asu/commons/irrigation/client/CanalPanel.java +++ b/src/main/java/edu/asu/commons/irrigation/client/CanalPanel.java @@ -103,7 +103,7 @@ int priority = clientData.getPriority(); Gate gate = gates[priority]; // draw the irrigation canal - if (clientDataModel.getClientData().isDownstreamAndOutOfRange(clientData)) { + if (restrictedVisibility && clientDataModel.getClientData().isDownstreamAndOutOfRange(clientData)) { graphics2D.setColor(Color.WHITE); graphics2D.fillRect(gate.getX(), gate.getY(), gate.getWidth(), gate.getHeight()); @@ -114,7 +114,7 @@ gate.getWidth(), gate.getHeight()); } // draw the irrigation gate inlets - if (clientDataModel.getClientData().isImmediateNeighbor(clientData)) { + if (!restrictedVisibility || (restrictedVisibility && clientDataModel.getClientData().isImmediateNeighbor(clientData))) { graphics2D.setColor(Color.BLUE); graphics2D.fillRect(gate.getOpeningsX(), gate.getOpeningsY(), gate.getOpeningsWidth(), gate.getOpeningsHeight()); @@ -295,7 +295,7 @@ && (particles[i].x >= gates[0].getOpeningsX() && particles[i].x <= (gates[0].getOpeningsX() + gateBuffer)) && (particles[i].y >= reservoirHeight - gateBuffer && particles[i].y <= reservoirHeight)) { - if (restrictedVisibility && sortedClients.get(0).isImmediateNeighbor(thisClientData) || !restrictedVisibility) + if ((restrictedVisibility && sortedClients.get(0).isImmediateNeighbor(thisClientData)) || !restrictedVisibility) { // if we are in the restricted visibility condition AND gate 0 is an immediate neighbor of this client OR we are not in a restricted // visibility condition at all, put this ball in the diff -r 449d95d0bcd4b3d31237f6c076878cd0db92458c -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc src/main/java/edu/asu/commons/irrigation/client/IrrigationClient.java --- a/src/main/java/edu/asu/commons/irrigation/client/IrrigationClient.java +++ b/src/main/java/edu/asu/commons/irrigation/client/IrrigationClient.java @@ -172,6 +172,7 @@ channel.add(this, new EventTypeProcessor<RoundStartedEvent>(RoundStartedEvent.class) { public void handle(RoundStartedEvent event) { clientDataModel.initialize(event); + System.err.println("restricted visibility? " + getRoundConfiguration().isRestrictedVisibility()); experimentGameWindow.startRound(); } }); diff -r 449d95d0bcd4b3d31237f6c076878cd0db92458c -r 69fe6de7e90a5e1cd7314721ddbbdd5f54f11abc src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java --- a/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java +++ b/src/main/java/edu/asu/commons/irrigation/server/IrrigationServer.java @@ -239,8 +239,7 @@ ArrayList<ClientData> allTargets = new ArrayList<ClientData>(); if (Identifier.ALL.equals(target)) { // relay to all clients in this client's group. - boolean restrictedVisibility = getRoundConfiguration() - .isRestrictedVisibility(); + boolean restrictedVisibility = getRoundConfiguration().isRestrictedVisibility(); for (ClientData clientData : clients.get(source).getGroupDataModel().getClientDataMap().values()) { Identifier targetId = clientData.getId(); if (targetId.equals(source) Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-14 06:02:30
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/449d95d0bcd4/ Changeset: 449d95d0bcd4 User: alllee Date: 2014-05-14 08:02:16 Summary: fixing ant classpaths to deal with system JNLP / javaws jar Affected #: 3 files diff -r 6980e9b67d64badd72d0c4a1dcad43313514a975 -r 449d95d0bcd4b3d31237f6c076878cd0db92458c build.xml --- a/build.xml +++ b/build.xml @@ -89,6 +89,11 @@ <pathelement location='${resources.dir}' /></path> + <path id='runtime.classpath'> + <path refid='project.classpath' /> + <pathelement location='${java.home}/lib/javaws.jar' /> + </path> + <target name="help"><echo> NOTE: At minimum you will need to modify the default web.dir and @@ -284,13 +289,13 @@ <!-- RUN TARGETS --><target name='client' depends='compile'><java classname='${client.class}' - classpathref='project.classpath' + classpathref='runtime.classpath' fork='yes'/></target><target name='fac' depends='compile'><java classname='${facilitator.class}' - classpathref='project.classpath' + classpathref='runtime.classpath' fork='yes'/></target> @@ -306,7 +311,7 @@ <filter token='CODEBASE_URL' value='${codebase.url}'/></filterset></copy> - <java classname='${server.class}' classpathref='project.classpath' fork='yes'> + <java classname='${server.class}' classpathref='runtime.classpath' fork='yes'><jvmarg value="-server"/></java></target> diff -r 6980e9b67d64badd72d0c4a1dcad43313514a975 -r 449d95d0bcd4b3d31237f6c076878cd0db92458c pom.xml --- a/pom.xml +++ b/pom.xml @@ -29,9 +29,16 @@ </repositories><dependencies><dependency> + <groupId>javax.jnlp</groupId> + <artifactId>jnlp-api</artifactId> + <version>7.0</version> + <scope>system</scope> + <systemPath>${java.home}/lib/javaws.jar</systemPath> + </dependency> + <dependency><groupId>junit</groupId><artifactId>junit</artifactId> - <version>4.10</version> + <version>4.11</version><scope>test</scope></dependency><dependency> diff -r 6980e9b67d64badd72d0c4a1dcad43313514a975 -r 449d95d0bcd4b3d31237f6c076878cd0db92458c src/main/resources/configuration/asu/2014/stiglitz/irrigation.xml --- a/src/main/resources/configuration/asu/2014/stiglitz/irrigation.xml +++ b/src/main/resources/configuration/asu/2014/stiglitz/irrigation.xml @@ -31,6 +31,7 @@ <entry key="wait-for-participants">true</entry><entry key='chat-duration'>20</entry><entry key='round-duration'>50</entry> +<entry key='field-of-vision'>0</entry><entry key="q1">49</entry><entry key="a1">49%</entry> Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-14 00:36:02
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/6980e9b67d64/ Changeset: 6980e9b67d64 User: alllee Date: 2014-05-14 02:35:43 Summary: experiment configuration for stiglitz visit Affected #: 24 files diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/README.txt --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/README.txt @@ -0,0 +1,1 @@ +2009 t2 treatment with shorter communication rounds for Joseph Stiglitz visit diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/irrigation.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/irrigation.xml @@ -0,0 +1,640 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment server configuration</comment> +<entry key="hostname">@SERVER_ADDRESS@</entry> +<entry key="port">@PORT_NUMBER@</entry> +<entry key="number-of-rounds">22</entry> +<entry key="round0">round0.xml</entry> +<entry key="round1">round1.xml</entry> +<entry key="round2">round2.xml</entry> +<entry key="round3">round3.xml</entry> +<entry key="round4">round4.xml</entry> +<entry key="round5">round5.xml</entry> +<entry key="round6">round6.xml</entry> +<entry key="round7">round7.xml</entry> +<entry key="round8">round8.xml</entry> +<entry key="round9">round9.xml</entry> +<entry key="round10">round10.xml</entry> +<entry key="round11">round11.xml</entry> +<entry key="round12">round12.xml</entry> +<entry key="round13">round13.xml</entry> +<entry key="round14">round14.xml</entry> +<entry key="round15">round15.xml</entry> +<entry key="round16">round16.xml</entry> +<entry key="round17">round17.xml</entry> +<entry key="round18">round18.xml</entry> +<entry key="round19">round19.xml</entry> +<entry key="round20">round20.xml</entry> +<entry key="round21">round21.xml</entry> + +<entry key="wait-for-participants">true</entry> +<entry key='chat-duration'>20</entry> +<entry key='round-duration'>50</entry> + +<entry key="q1">49</entry> +<entry key="a1">49%</entry> +<entry key="explanation1">An existing infrastructure efficiency of 20% + 29 tokens invested = 49% infrastructure efficiency.</entry> +<entry key="q2">5</entry> +<entry key="a2">5 cubic feet per second</entry> +<entry key="explanation2"> +<![CDATA[ +An existing infrastructure efficiency of 35% + 15 tokens invested = 50% infrastructure efficiency for the current round. +An infrastructure efficiency of 50% corresponds to a water delivery capacity of 5 cubic feet per second. +]]> +</entry> +<entry key="q3">5</entry> +<entry key='a3'>5 cubic feet per second</entry> +<entry key="explanation3">Since there is only 30 cubic feet per second of water +available, the irrigation infrastructure capacity of 35 cubic feet per +second will not be fully used. When A opens their gate, they take 25 of the +30 cubic feet per second out of the canal, leaving 5 cubic feet per second for +B. +</entry> +<entry key="q4">25</entry> +<entry key="a4">25 cubic feet per second</entry> +<entry key="explanation4">If A has 25 cfps available and does not take any +water, the same amount is available for the people downstream. Since B, C and +D do not take water, 25 cfps is available for E.</entry> +<entry key="q5">7</entry> +<entry key="a5">7 tokens</entry> +<entry key="explanation5">If you invest 7 out of 10 tokens, you keep 3 tokens for yourself. If you apply 202 cubic feet of water to your field you will earn 4 tokens. 3 + 4 = 7 tokens </entry> +<entry key="q6">19</entry> +<entry key="a6">19 tokens</entry> +<entry key="explanation6">If you invest all 10 tokens, you keep 0 tokens from +your initial endowment. If you apply 555 cubic feet of water to your field +you will earn 19 tokens. 0 + 19 = 19 tokens.</entry> + +<entry key='final-instructions'> +<![CDATA[ +<p> +The experiment is almost over. We have a brief survey for you to fill out while the +facilitator prepares your payments. When the facilitator has finished preparing +payments and you have all completed your surveys your computer number will be +called. You can then go next door to receive your payment. For privacy reasons we +must pay you one at a time. +</p> +<p> +Thanks for participating! +</p> +]]> +</entry> + +<entry key="initial-instructions"> +<![CDATA[ +<h1>Instructions</h1> +<hr> +<p> +You have already earned {showUpPayment} by showing up for this exercise. You +can earn more, up to a maximum of about {maximumPayment}, by participating in this +experiment which will take about an hour to an hour and a half. The amount of money +you earn depends on your decisions AND the decisions of other people in this room +over the course of the experiment. +</p> +<h2>Groups</h2> +<hr> +You will be participating in this exercise as a part of a group of +{self.clientsPerGroup} participants. Your group has been formed by randomly +selecting you and four other participants in the room. +</p> +<h2>How to participate</h2> +<hr> +<p> +This exercise mimics decisions people make in irrigation systems. In each round you will receive {self.tokenEndowment} +tokens. You can choose to invest in the irrigation infrastructure or keep the tokens. Based on the <b>water delivery +capacity</b> of the irrigation infrastructure and the availability of water you will be able to grow crops. The total +number of tokens you can earn in a round is the sum of your tokens not invested plus the tokens you earn from growing +crops. Each token is worth {dollarsPerToken}. In each round you will first decide how much to invest in the irrigation +infrastructure. Based on the combined contributions of all 5 participants in your group in each round, your group can +maintain the capacity of the irrigation infrastructure for growing crops. +</p> + +<p> +We will now start a practice round to help illustrate the experiment. Before each +round in this experiment you will have a chat period of {self.chatDuration} seconds +where you can send text messages to the other participants. +{self.restrictedVisibilityInstructions} + +You may discuss any aspect of the exercise with two important exceptions: +</p> +<ol> +<li>You are <b>not allowed</b> to promise the other participants +side-payments or threaten them with any consequence after the experiment is +finished. +</li> +<li>You are <b>not allowed to reveal your real identity</b>.</li> +</ol> +<p> +We will be monitoring the chat traffic. If we detect any violation of these rules, +we will have to remove <b>all members of the group where the violation occurred</b> +from the experiment. That group will have to wait until the entire experiment is +finished to receive payment. +</p> +]]> +</entry> + +<entry key='game-screenshot-instructions'> +<![CDATA[ +<img src="http://dev.commons.asu.edu/irrigation/images/game-interface-screenshot.jpg"> +]]> +</entry> + +<entry key="facilitator-instructions"> +<![CDATA[ +<p> + This facilitator interface allows you to control the experiment. In general you + will be following a sequence similar to this: +</p> +<ol> + <li>Show instructions</li> + <li>Start round</li> + <li>After round is over, start standalone chat round if necessary</li> + <li>Goto 1.</li> +</ol> +]]> +</entry> + +<entry key="welcome-instructions"> +<![CDATA[ +<h1>Welcome</h1> +<hr> +<p> +Welcome to the experiment. We will begin shortly after everyone has been +assigned a station. +<br><br> +Please <b>wait quietly</b> and <b>do not close this window, open any other applications, or communicate with any of the other participants</b>. +</p> +]]> +</entry> + + + + +<entry key="quiz-instructions"> +<![CDATA[ +<h2>Quiz</h2> +<hr> +<p> +The first two questions deal with irrigation infrastructure investment. +<b>Please refer to Table 1 of your handout</b>. +</p> +<form> +<p>Question 1:<br> +Given an existing infrastructure efficiency of 20%, if the five participants invest +a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure +efficiency?<br> +<input type="text" name="q1" value = "">% +</p> +<p>Question 2:<br> +Suppose the infrastructure efficiency in the last round was 60%. For the current +round, the efficiency will decline by an amount of 25% for a resulting +infrastructure efficiency of 35%. If the members of your group invest a total of 15 +tokens, what will be your group's resulting water delivery capacity?<br> +<input type="text" name="q2" value = ""> cubic feet per second +</p> +<p> +The next two questions deal with the capacity of the irrigation system in relation +to the actual amount of water available. +</p> +<p> +Question 3:<br> +If the irrigation efficiency is between 71 and 80%, the water delivery capacity of +the irrigation system is 35 cubic feet per second. Suppose the water supply +available to your group is 30 cubic feet per second and A opens their gate, +diverting water at 25 cubic feet per second. What is the available water flow for +B? +<br> +<input type='text' name='q3' value=''> cubic feet per second +</p> +<p>Question 4:<br> +If the available water delivery capacity is 25 cubic feet per second and A, B, C, +and D are not using water, how much cubic feet of water per second is available for +E?<br> +<input type='text' name='q4' value=''> cubic feet per second +</p> +<p> +The final two questions cover the number of tokens you can earn in within a round. +<b>Please refer to Table 2 of your handout</b>. +</p> +<p>Question 5:<br> +If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of +water to your fields, what is the total number of tokens you will have earned at the +end of the round?<br> +<input type="text" name="q5" value="">tokens +</p> +<p>Question 6:<br> +If you invest all 10 tokens you start with and you apply 555 cubic feet of water to +your fields, what is the total number of tokens you will have earned at the end of +the round?<br> +<input type="text" name="q6" value="">tokens +</p> +<input type="submit" name="submit" value="Submit"><br> +</form> +]]> +</entry> + +<entry key='water-collected-to-tokens-table'> +<![CDATA[ +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Water applied to your field</th> +<th>Tokens earned</th> +</tr> +</thead> +<tbody> +<tr> +<td>< 150</td><td>0</td> +</tr> +<tr> +<td>150-199</td><td>1</td> +</tr> +<tr> +<td>200-249</td><td>4</td> +</tr> +<tr> +<td>250-299</td><td>10</td> +</tr> +<tr> +<td>300-349</td><td>15</td> +</tr> +<tr> +<td>350-399</td><td>18</td> +</tr> +<tr> +<td>400-499</td><td>19</td> +</tr> +<tr> +<td>500-549</td><td>20</td> +</tr> +<tr> +<td>550-649</td><td>19</td> +</tr> +<tr> +<td>650-699</td><td>18</td> +</tr> +<tr> +<td>700-749</td><td>15</td> +</tr> +<tr> +<td>750-799</td><td>10</td> +</tr> +<tr> +<td>800-849</td><td>4</td> +</tr> +<tr> +<td>850-899</td><td>1</td> +</tr> +<tr> +<td>> 899</td><td>0</td> +</tr> +</tbody> +</table> +]]> +</entry> +<entry key='chat-instructions'> +<![CDATA[ +<h3>Chat Instructions</h3> +<hr> +<p> +You may now chat for {self.chatDuration} seconds with the other members of your group. +{self.restrictedVisibilityInstructions} +You may discuss any aspect of the exercise with two important exceptions: +</p> +<ol> +<li>You are <b>not allowed</b> to promise the other participants +side-payments or threaten them with any consequence after the experiment is +finished. +</li> +<li>You are <b>not allowed to reveal your real identity</b>.</li> +</ol> +<p> +We will be monitoring the chat traffic. If we detect any violation of these rules, +we will have to remove <b>all members of the group where the violation occurred</b> +from the experiment. That group will have to wait until the entire experiment is +finished to receive payment. +</p> +<p> +You can send messages by typing in the text field at the bottom of the screen +and then pressing the return key. The time left for the discussion is displayed with +a progress bar above the text field at the bottom of the screen. +</p> +]]> +</entry> + +<entry key="investment-instructions"> +<![CDATA[ +<h1>Current infrastructure condition</h1> + <hr> + <h2>Current infrastructure efficiency: {actualInfrastructureEfficiency}%</h2> + <h2>Current water delivery capacity: {waterDeliveryCapacity} cubic feet per second</h2> + <h2>Available water supply: {self.waterSupplyCapacity} cubic feet per second</h2> +<h1>Investment Instructions</h1> +<hr> +<p> +You have been endowed with {self.tokenEndowment} tokens to invest. You must make a decision about +how much you wish to invest in the irrigation infrastructure by choosing a number +between 0 and {self.tokenEndowment}. You can see the relationship between total +investment and irrigation infrastructure in the table below. After you have entered +the number of tokens you'd like to invest, hit the enter key or click the submit +button to confirm your investment. When everybody has made their decision, the total +investment will be calculated and the overall irrigation infrastructure will be +displayed. Each token you invest corresponds to one percent of infrastructure +efficiency, so if you invest 10 tokens you are contributing 10% to the overall +infrastructure efficiency. +</p> +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Irrigation Infrastructure Efficiency (percent)</th> +<th>Water delivery capacity (cubic feet per second)</th> +</tr> +</thead> +<tbody> +<tr> +<td> ≤ 45</td><td>0</td> +</tr> +<tr> +<td>46-51</td><td>5</td> +</tr> +<tr> +<td>52-55</td><td>10</td> +</tr> +<tr> +<td>56-58</td><td>15</td> +</tr> +<tr> +<td>59-61</td><td>20</td> +</tr> +<tr> +<td>62-65</td><td>25</td> +</tr> +<tr> +<td>66-70</td><td>30</td> +</tr> +<tr> +<td>71-80</td><td>35</td> +</tr> +<tr> +<td>81-100</td><td>40</td> +</tr> +</tbody> +</table> +]]> +</entry> +<entry key='client-debriefing'> +<![CDATA[ +<h1>{if (self.practiceRound)}Practice Round{else}Round {self.roundNumber}{endif} Results</h1> +<hr> + <table border=3 cellpadding=5 cellspacing=5> + <tr> + <th>Position</th> + <th>Initial token endowment</th> + <th>Tokens invested</th> + <th>Tokens not invested</th> + <th>Tokens earned from growing crops</th> + <th>Total tokens earned this round</th> + <th>Dollars earned this round</th> + <th>Total dollars earned</th> + </tr> + {dataModel.orderedVisibleClients: {clientData| + <tr align='center' bgcolor='{if (clientData.self)}#FFFFCC{else}#CCCCCC{endif}'> + <td>{clientData.priorityString}</td> + <td>{self.tokenEndowment}</td> + <td>{clientData.investedTokens}</td> + <td>{clientData.uninvestedTokens}</td> + <td>{clientData.tokensEarnedFromWaterCollected}</td> + <td>{clientData.allTokensEarnedThisRound}</td> + <td>{clientData.totalDollarsEarnedThisRound}</td> + <td>{clientData.grandTotalIncome}</td> + </tr> + }} + </table> + <h2>Earnings</h2> + <hr> + <p> + You are in position {clientData.priorityString} and received + {clientData.totalDollarsEarnedThisRound} this past round. Your + <b>total income</b> is <b>{clientData.grandTotalIncome}</b>, including + the {showUpPayment} show-up bonus and {clientData.quizEarnings} for + answering {clientData.correctQuizAnswers} quiz questions correctly. + </p> + {if (self.practiceRound)} + <p><b>NOTE: this was a practice round and did not contribute to your earnings.</b></p> + {endif} + {if (showExitInstructions)} + <h2>Exit Survey</h2> + <hr> + <p> + This was the last round, but not the end of the experiment. We ask that you please carefully fill out a brief survey as we prepare your payments. + </p> + <h2>Payment: You Are Computer Number {clientData.id.stationNumber}</h2> + <hr> + <p> + <b>Please note the computer number listed above and write it on your survey.</b> + When payments are ready we will call you up one by one. Please wait until + your computer number, <b>{clientData.id.stationNumber}</b>, is called to turn in your + survey and receive payment. + <b>NOTE: Please answer the survey completely (there may be a back side)</b> + and <b>bring all your belongings with you</b> when you come up to receive + your payment to help us speed up the payment process. + </p> + {endif} +]]> +</entry> +<entry key="same-as-previous-round-instructions"> + <![CDATA[ + <h2>Round {self.roundNumber} Instructions</h2> + <hr> + <p>Round {self.roundNumber} is the same as the previous round.</p> + <p>{self.specialInstructions}</p> + <p>The length of this round is {self.roundDurationInSeconds} seconds.</p> + <p><b>Do you have any questions?</b> If you have any questions at this time + please raise your hand and someone will come over to your station and + answer it. + </p> + ]]> +</entry> +<entry key="contribution-summary"> +<![CDATA[ +<h1>Contributions Summary</h1> +<hr> +<p> +Your group invested a total of <b>{groupDataModel.totalContributedTokens} tokens</b> this round, resulting in an infrastructure efficiency of <b>{groupDataModel.infrastructureEfficiency}%</b> and a water delivery capacity of <b>{groupDataModel.irrigationCapacity} cubic feet per second</b>. +The amount of water available to pass through your canal is <b>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</b>. +</p> +<table border=2 cellspacing=2 cellpadding=3> +<tr> +<th></th></th><th>Infrastructure Efficiency</th><th>Water Delivery Capacity</th><th>Water Availability</th> +</tr> +<tr align='center'> +<td>Before Investment</td><td>{groupDataModel.infrastructureEfficiencyBeforeInvestment}%</td><td>{groupDataModel.irrigationCapacityBeforeInvestment} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +<tr align='center'> +<td>After Investment</td><td>{groupDataModel.infrastructureEfficiency}%</td><td>{groupDataModel.irrigationCapacity} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +</table> +]]> +</entry> +<entry key="special-instructions"> +<![CDATA[ +<h2>Special Instructions</h2> +<hr> +{if (self.restrictedVisibility)} +<p>You can only <b>communicate with and observe the actions</b> of your <b>immediate neighbors</b>.</p> +{endif} +<p> +{if (self.infrastructureEfficiencyReset)} +The irrigation infrastructure efficiency has been <b>reset to {initialInfrastructureEfficiency}%</b> with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{else} +The irrigation infrastructure efficiency carried over from the previous round is +{initialInfrastructureEfficiency}% but has declined by +{self.infrastructureDegradationFactor} and is now <b>{actualInfrastructureEfficiency}%</b> +with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{endif} +</p> +<p>The <b>available water supply is {self.waterSupplyCapacity} cubic feet per second</b>.</p> +]]> +</entry> +<entry key="restricted-visibility-instructions"> +<![CDATA[{if (self.restrictedVisibility)}<b>NOTE:</b> In this experiment you can <b>only communicate with and observe the actions of your immediate neighbors</b>.{endif}]]> +</entry> +<entry key="facilitator-debriefing"> +<![CDATA[ +<h3>Round {self.roundNumber} results</h3> +<hr> +<table border=1 cellspacing=3 cellpadding=3> +<tr><th>Participant</th><th>Current tokens</th><th>Current income</th><th>Quiz earnings</th><th>Total income</th></tr> +{clientDataList: {data | +<tr align="RIGHT"><td>{data}</td><td>{data.allTokensEarnedThisRound}</td><td>{data.totalDollarsEarnedThisRound}</td><td>{data.quizEarnings}</td><td>{data.grandTotalIncome}</td></tr> +}} +</table> +{if (self.lastRound)} +<h2><font color='blue'>The experiment is over. Please prepare payments.</font></h2> +{endif} +]]> +</entry> +<entry key='quiz-results'> + <![CDATA[ + <h2>Quiz Results</h2> + <hr> + <p> + {if (allCorrect)} + You have answered all the questions correctly and earned <b>{totalQuizEarnings}</b>. + {else} + You answered {numberCorrect} out of {totalQuestions} questions correctly and earned <b>{totalQuizEarnings}</b>. Questions you've answered + incorrectly are highlighted in red. Please see below for more details. + {endif} + </p> + <br> + <hr> + <p><span class='q1'>Question 1:</span><br> + Given an existing infrastructure efficiency of 20%, if the five participants invest + a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure + efficiency? + <br><b>{incorrect_q1} + An existing infrastructure efficiency of 20% + 29 tokens invested = 49% infrastructure efficiency.</b> + </p> + <p><span class='q2'>Question 2:</span><br> + Suppose the infrastructure efficiency in the last round was 60%. For the current + round, the efficiency will decline by an amount of 25% for a resulting + infrastructure efficiency of 35%. If the members of your group invest a total of 15 + tokens, what will be your group's resulting water delivery capacity?<br> + <b>{incorrect_q2} + An existing infrastructure efficiency of 35% + 15 tokens invested = 50% infrastructure efficiency for the current round. + An infrastructure efficiency of 50% corresponds to a water delivery capacity of 5 cubic feet per second.</b> + </p> + <p><span class='q3'>Question 3:</span><br> + If the irrigation efficiency is between 71 and 80%, the water delivery capacity of + the irrigation system is 35 cubic feet per second. Suppose the water supply + available to your group is 30 cubic feet per second and A opens their gate, + diverting water at 25 cubic feet per second. What is the available water flow for + B?<br> + <b>{incorrect_q3} + Since there is only 30 cubic feet per second of water available, the irrigation infrastructure capacity of 35 cubic feet + per second will not be fully used. When A opens their gate, they take 25 of the 30 cubic feet per second out of the + canal, leaving 5 cubic feet per second for B.</b> + </p> + <p><span class='q4'>Question 4:</span><br> + If the available water delivery capacity is 25 cubic feet per second and A, B, C, and D are not using water, how much cubic feet of water per second is available for E?<br> + <b>{incorrect_q4} + If A has 25 cfps available and does not take any water, the same amount is available for the people + downstream. Since B, C and D do not take water, 25 cfps is available for E. + </b> + </p> + <p> + <span class='q5'>Question 5:</span><br> + If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of + water to your fields, what is the total number of tokens you will have earned at the + end of the round?<br> + <b>{incorrect_q5} + If you invest 7 out of 10 tokens, you keep 3 tokens for yourself. If you apply 202 cubic feet of water to your field you will earn 4 tokens. 3 + 4 = 7 tokens</b> + </p> + <p><span class='q6'>Question 6:</span><br> + If you invest all 10 tokens you start with and you apply 555 cubic feet of water to + your fields, what is the total number of tokens you will have earned at the end of + the round?<br> + <b>{incorrect_q6} + If you invest all 10 tokens, you keep 0 tokens from your initial endowment. If you apply 555 cubic feet of + water to your field you will earn 19 tokens. 0 + 19 = 19 tokens. + </b> + </p> + ]]> +</entry> + + +<entry key="investment-instructions"> +<![CDATA[ +<p> +You have been endowed with 10 tokens to invest. You must make a decision about +how much you wish to invest [0,10] in the irrigation infrastructure. You can +see the relationship between total investment and irrigation infrastructure in +the table below. After you have entered the number of tokens you'd like to +invest, hit the enter key or click the submit button to confirm your +investment. When everybody has made their decision, the total investment will +be calculated and the overall irrigation infrastructure will be displayed. +Each token you invest corresponds to one percent of infrastructure efficiency, +so if you invest 10 tokens you are contributing 10% to the overall +infrastructure efficiency. +</p> +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Irrigation Infrastructure Efficiency (percent)</th> +<th>Water delivery capacity (cubic feet per second)</th> +</tr> +</thead> +<tbody> +<tr> +<td> ≤ 45</td><td>0</td> +</tr> +<tr> +<td>46-51</td><td>5</td> +</tr> +<tr> +<td>52-55</td><td>10</td> +</tr> +<tr> +<td>56-58</td><td>15</td> +</tr> +<tr> +<td>59-61</td><td>20</td> +</tr> +<tr> +<td>62-65</td><td>25</td> +</tr> +<tr> +<td>66-70</td><td>30</td> +</tr> +<tr> +<td>71-80</td><td>35</td> +</tr> +<tr> +<td>81-100</td><td>40</td> +</tr> +</tbody> +</table> +]]> +</entry> + +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round0.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round0.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="practice-round">true</entry> +<entry key='reset-infrastructure-efficiency'>true</entry> +<entry key='initial-infrastructure-efficiency'>50</entry> + + +<entry key="instructions"> +<![CDATA[ +<p> +We will now start with two practice rounds. This practice round will not contribute +to your earnings. If you have any questions feel free to raise your hand and to ask +your question. +<br> +<b>Do you have any questions?</b> +</p> +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round1.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round1.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key="practice-round">true</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Practice Round 2</h3> +<p> +This is the second practice round of the experiment. If you have any questions +after participating in the first round, please ask them now. +</p> +]]> +</entry> +</properties> + diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round10.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round10.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 9 Instructions</h3> +<p> +This round is the same as the previous round. +</p> +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round11.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round11.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 10 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round12.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round12.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='reset-infrastructure-efficiency'>true</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 11 Instructions</h3> +<p> +In the past rounds the infrastructure efficiency declined from one round to +the next at a constant amount of 25%. In the following rounds the <b>average +decline</b> of the infrastructure efficiency will remain the same, but the +<b>actual amount</b> of decline can vary from round to round. This means that +in some rounds the decline will be larger than 25% and some rounds the decline +will be smaller than 25%. Before each round begins you will continue to make a +decision on how much to invest in the irrigation infrastructure. After all of +your investment contributions have been submitted the resulting level of +infrastructure efficiency will be displayed and then the round will begin. If +you have any questions, please ask them now. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round13.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round13.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 12 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round14.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round14.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 13 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round15.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round15.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>80</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 14 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round16.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round16.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key='infrastructure-degradation-factor'>10</entry> + + +<entry key="instructions"> +<![CDATA[ +<h3>Round 15 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round17.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round17.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key='infrastructure-degradation-factor'>5</entry> +<entry key="instructions"> +<![CDATA[ +<h3>Round 16 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round18.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round18.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> +<entry key='infrastructure-degradation-factor'>10</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 17 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round19.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round19.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>80</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 18 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round2.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round2.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='reset-infrastructure-efficiency'>true</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 1 Instructions</h3> +<p> +This is the first actual round of the experiment. Before this round begins +you will have the opportunity to text chat with the other participants in your +group, then decide on your level of investment in the irrigation +infrastructure. After the total irrigation infrastructure investment has been +determined you will begin the experiment and make decisions on when to open +your irrigation gates and grow crops. +</p> +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round20.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round20.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 19 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round21.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round21.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key='infrastructure-degradation-factor'>10</entry> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 20 Instructions</h3> +<p> +This is the final round. +</p> +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round3.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round3.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 2 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round4.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round4.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 3 Instructions</h3> +<p> +This round is the same as the previous round. +</p> +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round5.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round5.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 4 Instructions</h3> +<p> +This round is the same as the previous round. +</p> +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round6.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round6.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 5 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round7.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round7.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 6 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round8.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round8.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 7 Instructions</h3> +<p> +This round is the same as the previous round. +</p> +]]> +</entry> +</properties> diff -r 496c1e002df4023dd3250e98289df426c2b1c47c -r 6980e9b67d64badd72d0c4a1dcad43313514a975 src/main/resources/configuration/asu/2014/stiglitz/round9.xml --- /dev/null +++ b/src/main/resources/configuration/asu/2014/stiglitz/round9.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> +<properties> +<comment>Irrigation experiment round configuration</comment> + +<entry key="instructions"> +<![CDATA[ +<h3>Round 8 Instructions</h3> +<p> +This round is the same as the previous round. +</p> + +]]> +</entry> +</properties> Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-13 22:13:23
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/496c1e002df4/ Changeset: 496c1e002df4 User: alllee Date: 2014-05-14 00:13:08 Summary: adding readmes to describe treatments Affected #: 4 files diff -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 -r 496c1e002df4023dd3250e98289df426c2b1c47c src/main/resources/configuration/asu/2009/t1/README.txt --- /dev/null +++ b/src/main/resources/configuration/asu/2009/t1/README.txt @@ -0,0 +1,1 @@ +final 10 rounds has infrastructure degradation with low variability diff -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 -r 496c1e002df4023dd3250e98289df426c2b1c47c src/main/resources/configuration/asu/2009/t2/README.txt --- /dev/null +++ b/src/main/resources/configuration/asu/2009/t2/README.txt @@ -0,0 +1,1 @@ +final 10 rounds has infrastructure degradation with high variability diff -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 -r 496c1e002df4023dd3250e98289df426c2b1c47c src/main/resources/configuration/asu/2009/t3/README.txt --- /dev/null +++ b/src/main/resources/configuration/asu/2009/t3/README.txt @@ -0,0 +1,1 @@ +water supply shocks, low variability diff -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 -r 496c1e002df4023dd3250e98289df426c2b1c47c src/main/resources/configuration/asu/2009/t4/README.txt --- /dev/null +++ b/src/main/resources/configuration/asu/2009/t4/README.txt @@ -0,0 +1,1 @@ +water supply shocks, high variability Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-13 22:10:36
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/d329f6fb640a/ Changeset: d329f6fb640a User: alllee Date: 2014-05-14 00:10:17 Summary: updating ASU 2009 experiment configuration files, adding improved instructions and debriefing with access to templated data variables Affected #: 6 files diff -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 ivy.xml --- a/ivy.xml +++ b/ivy.xml @@ -5,7 +5,9 @@ <ivy-module version="2.0"><info organisation="edu.asu.commons" module="irrigation"/><dependencies> - <dependency org="edu.asu.commons" name="csidex" rev="0.7-SNAPSHOT"/> + <dependency org="edu.asu.commons" name="csidex" rev="0.7-SNAPSHOT"> + <exclude module="jnlp-api" /> + </dependency><dependency org="org.jfree" name="jfreechart" rev="1.0.17"/></dependencies></ivy-module> diff -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 src/main/resources/configuration/asu/2009/t1/irrigation.xml --- a/src/main/resources/configuration/asu/2009/t1/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/t1/irrigation.xml @@ -4,6 +4,7 @@ <comment>Irrigation experiment server configuration</comment><entry key="hostname">@SERVER_ADDRESS@</entry><entry key="port">@PORT_NUMBER@</entry> +<entry key="number-of-rounds">22</entry><entry key="round0">round0.xml</entry><entry key="round1">round1.xml</entry><entry key="round2">round2.xml</entry> @@ -28,7 +29,6 @@ <entry key="round21">round21.xml</entry><entry key="wait-for-participants">true</entry> -<entry key="number-of-rounds">22</entry><entry key="q1">49</entry><entry key="a1">49%</entry> @@ -78,36 +78,42 @@ ]]></entry> -<!-- FIXME: lots of parameterizable fields here. should make instructions -template-language-pluggable ---><entry key="initial-instructions"><![CDATA[ +<h1>Instructions</h1> +<hr><p> -You have already earned 5 dollars by showing up for this exercise. You can earn -more, up to an extra 25 dollars. You will participate in this exercise as a part of -a group of five participants. Your group has been formed by randomly assigning you -to FOUR other participants in the room. +You have already earned {showUpPayment} by showing up for this exercise. You +can earn more, up to a maximum of about {maximumPayment}, by participating in this +experiment which will take about an hour to an hour and a half. The amount of money +you earn depends on your decisions AND the decisions of other people in this room +over the course of the experiment. </p> +<h2>Groups</h2> +<hr> +You will be participating in this exercise as a part of a group of +{self.clientsPerGroup} participants. Your group has been formed by randomly +selecting you and four other participants in the room. +</p> +<h2>How to participate</h2> +<hr><p> -The amount of money you earn will depend on the decisions made by you and the other -members of your group. This exercise mimics decisions people make in irrigation -systems. In each round you will receive 10 tokens which you can invest in the -irrigation infrastructure. Based on the <b>water delivery capacity</b> of the -irrigation infrastructure and the availability of water you will be able to -grow crops. Tokens earned in a round is the sum of tokens not invested plus -tokens earned by growing crops. Each token is worth 5 cents. In each round you -will first decide how much to invest in the irrigation infrastructure. Based -on the combined contributions of all 5 participants in your group in each -round, your group can maintain the capacity of the irrigation infrastructure -for growing crops. +This exercise mimics decisions people make in irrigation systems. In each round you will receive {self.tokenEndowment} +tokens. You can choose to invest in the irrigation infrastructure or keep the tokens. Based on the <b>water delivery +capacity</b> of the irrigation infrastructure and the availability of water you will be able to grow crops. The total +number of tokens you can earn in a round is the sum of your tokens not invested plus the tokens you earn from growing +crops. Each token is worth {dollarsPerToken}. In each round you will first decide how much to invest in the irrigation +infrastructure. Based on the combined contributions of all 5 participants in your group in each round, your group can +maintain the capacity of the irrigation infrastructure for growing crops. </p><p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of {self.chatDuration} seconds where you can -send text messages to the other participants. You may discuss any aspect of the -exercise with two important exceptions: +round in this experiment you will have a chat period of {self.chatDuration} seconds +where you can send text messages to the other participants. +{self.restrictedVisibilityInstructions} + +You may discuss any aspect of the exercise with two important exceptions: </p><ol><li>You are <b>not allowed</b> to promise the other participants @@ -131,62 +137,64 @@ ]]></entry> - <entry key="facilitator-instructions"><![CDATA[ -<h3>Facilitator Instructions</h3><p> -Welcome to the facilitator interface. This interface allows you to control -the experiment. You may only modify configuration parameters <b>before</b> -you start the experiment by selecting the Configuration menu. When all the -participants are ready to begin the experiment, you can start the experiment -by selecting Experiment -> Start. After a round has been completed you -will be able to view the statistics for all of the participants. You can -begin the next round by selecting Round -> Start. + This facilitator interface allows you to control the experiment. In general you + will be following a sequence similar to this: +</p> +<ol> + <li>Show instructions</li> + <li>Start round</li> + <li>After round is over, start standalone chat round if necessary</li> + <li>Goto 1.</li> +</ol> +]]> +</entry> + +<entry key="welcome-instructions"> +<![CDATA[ +<h1>Welcome</h1> +<hr> +<p> +Welcome to the experiment. We will begin shortly after everyone has been +assigned a station. +<br><br> +Please <b>wait quietly</b> and <b>do not close this window, open any other applications, or communicate with any of the other participants</b>. </p> ]]></entry> -<entry key="welcome-instructions"> + +<entry key="quiz-instructions"><![CDATA[ -<center> -<h3>Welcome to the CARL lab. Please wait quietly and do not close this window or open any -other applications.</h3> -<h3>The experiment will begin shortly after everyone has been -assigned a station.</h3></center> -]]> -</entry> - - -<entry key="quiz-page1"> -<![CDATA[ +<h2>Quiz</h2> +<hr><p> The first two questions deal with irrigation infrastructure investment. <b>Please refer to Table 1 of your handout</b>. </p> - <form> -Question 1:<br> +<p>Question 1:<br> Given an existing infrastructure efficiency of 20%, if the five participants invest a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure efficiency?<br><input type="text" name="q1" value = "">% -<br><br> - -Question 2:<br> +</p> +<p>Question 2:<br> Suppose the infrastructure efficiency in the last round was 60%. For the current round, the efficiency will decline by an amount of 25% for a resulting infrastructure efficiency of 35%. If the members of your group invest a total of 15 tokens, what will be your group's resulting water delivery capacity?<br> - <input type="text" name="q2" value = ""> cubic feet per second -<br><br> - -<b>The next two questions deal with the capacity of the irrigation system in relation -to the actual amount of water available.</b> -<br><br> +</p> +<p> +The next two questions deal with the capacity of the irrigation system in relation +to the actual amount of water available. +</p> +<p> Question 3:<br> If the irrigation efficiency is between 71 and 80%, the water delivery capacity of the irrigation system is 35 cubic feet per second. Suppose the water supply @@ -195,40 +203,30 @@ B? <br><input type='text' name='q3' value=''> cubic feet per second -<br><br> -Question 4: +</p> +<p>Question 4:<br> If the available water delivery capacity is 25 cubic feet per second and A, B, C, and D are not using water, how much cubic feet of water per second is available for E?<br><input type='text' name='q4' value=''> cubic feet per second -<br><br> - -<input type="submit" name="submit" value="Submit"><br> -<br> - -]]> -</entry> - -<entry key="quiz-page2"> -<![CDATA[ +</p><p> The final two questions cover the number of tokens you can earn in within a round. -<b>Please refer to table 2 of your handout</b>. +<b>Please refer to Table 2 of your handout</b>. </p> -<form> -Question 5:<br> +<p>Question 5:<br> If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of water to your fields, what is the total number of tokens you will have earned at the end of the round?<br><input type="text" name="q5" value="">tokens -<br><br> -Question 6:<br> +</p> +<p>Question 6:<br> If you invest all 10 tokens you start with and you apply 555 cubic feet of water to your fields, what is the total number of tokens you will have earned at the end of the round?<br><input type="text" name="q6" value="">tokens -<br><br> -<input type="submit" name="submit" value="Submit"> +</p> +<input type="submit" name="submit" value="Submit"><br></form> ]]></entry> @@ -292,12 +290,14 @@ </table> ]]></entry> - <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for {self.chatDuration} seconds with the other members of your group. You may -discuss any aspect of the exercise with two important exceptions: +<hr> +<p> +You may now chat for {self.chatDuration} seconds with the other members of your group. +{self.restrictedVisibilityInstructions} +You may discuss any aspect of the exercise with two important exceptions: </p><ol><li>You are <b>not allowed</b> to promise the other participants @@ -322,6 +322,267 @@ <entry key="investment-instructions"><![CDATA[ +<h1>Current infrastructure condition</h1> + <hr> + <h2>Current infrastructure efficiency: {actualInfrastructureEfficiency}%</h2> + <h2>Current water delivery capacity: {waterDeliveryCapacity} cubic feet per second</h2> + <h2>Available water supply: {self.waterSupplyCapacity} cubic feet per second</h2> +<h1>Investment Instructions</h1> +<hr> +<p> +You have been endowed with {self.tokenEndowment} tokens to invest. You must make a decision about +how much you wish to invest in the irrigation infrastructure by choosing a number +between 0 and {self.tokenEndowment}. You can see the relationship between total +investment and irrigation infrastructure in the table below. After you have entered +the number of tokens you'd like to invest, hit the enter key or click the submit +button to confirm your investment. When everybody has made their decision, the total +investment will be calculated and the overall irrigation infrastructure will be +displayed. Each token you invest corresponds to one percent of infrastructure +efficiency, so if you invest 10 tokens you are contributing 10% to the overall +infrastructure efficiency. +</p> +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Irrigation Infrastructure Efficiency (percent)</th> +<th>Water delivery capacity (cubic feet per second)</th> +</tr> +</thead> +<tbody> +<tr> +<td> ≤ 45</td><td>0</td> +</tr> +<tr> +<td>46-51</td><td>5</td> +</tr> +<tr> +<td>52-55</td><td>10</td> +</tr> +<tr> +<td>56-58</td><td>15</td> +</tr> +<tr> +<td>59-61</td><td>20</td> +</tr> +<tr> +<td>62-65</td><td>25</td> +</tr> +<tr> +<td>66-70</td><td>30</td> +</tr> +<tr> +<td>71-80</td><td>35</td> +</tr> +<tr> +<td>81-100</td><td>40</td> +</tr> +</tbody> +</table> +]]> +</entry> +<entry key='client-debriefing'> +<![CDATA[ +<h1>{if (self.practiceRound)}Practice Round{else}Round {self.roundNumber}{endif} Results</h1> +<hr> + <table border=3 cellpadding=5 cellspacing=5> + <tr> + <th>Position</th> + <th>Initial token endowment</th> + <th>Tokens invested</th> + <th>Tokens not invested</th> + <th>Tokens earned from growing crops</th> + <th>Total tokens earned this round</th> + <th>Dollars earned this round</th> + <th>Total dollars earned</th> + </tr> + {dataModel.orderedVisibleClients: {clientData| + <tr align='center' bgcolor='{if (clientData.self)}#FFFFCC{else}#CCCCCC{endif}'> + <td>{clientData.priorityString}</td> + <td>{self.tokenEndowment}</td> + <td>{clientData.investedTokens}</td> + <td>{clientData.uninvestedTokens}</td> + <td>{clientData.tokensEarnedFromWaterCollected}</td> + <td>{clientData.allTokensEarnedThisRound}</td> + <td>{clientData.totalDollarsEarnedThisRound}</td> + <td>{clientData.grandTotalIncome}</td> + </tr> + }} + </table> + <h2>Earnings</h2> + <hr> + <p> + You are in position {clientData.priorityString} and received + {clientData.totalDollarsEarnedThisRound} this past round. Your + <b>total income</b> is <b>{clientData.grandTotalIncome}</b>, including + the {showUpPayment} show-up bonus and {clientData.quizEarnings} for + answering {clientData.correctQuizAnswers} quiz questions correctly. + </p> + {if (self.practiceRound)} + <p><b>NOTE: this was a practice round and did not contribute to your earnings.</b></p> + {endif} + {if (showExitInstructions)} + <h2>Exit Survey</h2> + <hr> + <p> + This was the last round, but not the end of the experiment. We ask that you please carefully fill out a brief survey as we prepare your payments. + </p> + <h2>Payment: You Are Computer Number {clientData.id.stationNumber}</h2> + <hr> + <p> + <b>Please note the computer number listed above and write it on your survey.</b> + When payments are ready we will call you up one by one. Please wait until + your computer number, <b>{clientData.id.stationNumber}</b>, is called to turn in your + survey and receive payment. + <b>NOTE: Please answer the survey completely (there may be a back side)</b> + and <b>bring all your belongings with you</b> when you come up to receive + your payment to help us speed up the payment process. + </p> + {endif} +]]> +</entry> +<entry key="same-as-previous-round-instructions"> + <![CDATA[ + <h2>Round {self.roundNumber} Instructions</h2> + <hr> + <p>Round {self.roundNumber} is the same as the previous round.</p> + <p>{self.specialInstructions}</p> + <p>The length of this round is {self.roundDurationInSeconds} seconds.</p> + <p><b>Do you have any questions?</b> If you have any questions at this time + please raise your hand and someone will come over to your station and + answer it. + </p> + ]]> +</entry> +<entry key="contribution-summary"> +<![CDATA[ +<h1>Contributions Summary</h1> +<hr> +<p> +Your group invested a total of <b>{groupDataModel.totalContributedTokens} tokens</b> this round, resulting in an infrastructure efficiency of <b>{groupDataModel.infrastructureEfficiency}%</b> and a water delivery capacity of <b>{groupDataModel.irrigationCapacity} cubic feet per second</b>. +The amount of water available to pass through your canal is <b>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</b>. +</p> +<table border=2 cellspacing=2 cellpadding=3> +<tr> +<th></th></th><th>Infrastructure Efficiency</th><th>Water Delivery Capacity</th><th>Water Availability</th> +</tr> +<tr align='center'> +<td>Before Investment</td><td>{groupDataModel.infrastructureEfficiencyBeforeInvestment}%</td><td>{groupDataModel.irrigationCapacityBeforeInvestment} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +<tr align='center'> +<td>After Investment</td><td>{groupDataModel.infrastructureEfficiency}%</td><td>{groupDataModel.irrigationCapacity} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +</table> +]]> +</entry> +<entry key="special-instructions"> +<![CDATA[ +<h2>Special Instructions</h2> +<hr> +{if (self.restrictedVisibility)} +<p>You can only <b>communicate with and observe the actions</b> of your <b>immediate neighbors</b>.</p> +{endif} +<p> +{if (self.infrastructureEfficiencyReset)} +The irrigation infrastructure efficiency has been <b>reset to {initialInfrastructureEfficiency}%</b> with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{else} +The irrigation infrastructure efficiency carried over from the previous round is +{initialInfrastructureEfficiency}% but has declined by +{self.infrastructureDegradationFactor} and is now <b>{actualInfrastructureEfficiency}%</b> +with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{endif} +</p> +<p>The <b>available water supply is {self.waterSupplyCapacity} cubic feet per second</b>.</p> +]]> +</entry> +<entry key="restricted-visibility-instructions"> +<![CDATA[{if (self.restrictedVisibility)}<b>NOTE:</b> In this experiment you can <b>only communicate with and observe the actions of your immediate neighbors</b>.{endif}]]> +</entry> +<entry key="facilitator-debriefing"> +<![CDATA[ +<h3>Round {self.roundNumber} results</h3> +<hr> +<table border=1 cellspacing=3 cellpadding=3> +<tr><th>Participant</th><th>Current tokens</th><th>Current income</th><th>Quiz earnings</th><th>Total income</th></tr> +{clientDataList: {data | +<tr align="RIGHT"><td>{data}</td><td>{data.allTokensEarnedThisRound}</td><td>{data.totalDollarsEarnedThisRound}</td><td>{data.quizEarnings}</td><td>{data.grandTotalIncome}</td></tr> +}} +</table> +{if (self.lastRound)} +<h2><font color='blue'>The experiment is over. Please prepare payments.</font></h2> +{endif} +]]> +</entry> +<entry key='quiz-results'> + <![CDATA[ + <h2>Quiz Results</h2> + <hr> + <p> + {if (allCorrect)} + You have answered all the questions correctly and earned <b>{totalQuizEarnings}</b>. + {else} + You answered {numberCorrect} out of {totalQuestions} questions correctly and earned <b>{totalQuizEarnings}</b>. Questions you've answered + incorrectly are highlighted in red. Please see below for more details. + {endif} + </p> + <br> + <hr> + <p><span class='q1'>Question 1:</span><br> + Given an existing infrastructure efficiency of 20%, if the five participants invest + a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure + efficiency? + <br><b>{incorrect_q1} + An existing infrastructure efficiency of 20% + 29 tokens invested = 49% infrastructure efficiency.</b> + </p> + <p><span class='q2'>Question 2:</span><br> + Suppose the infrastructure efficiency in the last round was 60%. For the current + round, the efficiency will decline by an amount of 25% for a resulting + infrastructure efficiency of 35%. If the members of your group invest a total of 15 + tokens, what will be your group's resulting water delivery capacity?<br> + <b>{incorrect_q2} + An existing infrastructure efficiency of 35% + 15 tokens invested = 50% infrastructure efficiency for the current round. + An infrastructure efficiency of 50% corresponds to a water delivery capacity of 5 cubic feet per second.</b> + </p> + <p><span class='q3'>Question 3:</span><br> + If the irrigation efficiency is between 71 and 80%, the water delivery capacity of + the irrigation system is 35 cubic feet per second. Suppose the water supply + available to your group is 30 cubic feet per second and A opens their gate, + diverting water at 25 cubic feet per second. What is the available water flow for + B?<br> + <b>{incorrect_q3} + Since there is only 30 cubic feet per second of water available, the irrigation infrastructure capacity of 35 cubic feet + per second will not be fully used. When A opens their gate, they take 25 of the 30 cubic feet per second out of the + canal, leaving 5 cubic feet per second for B.</b> + </p> + <p><span class='q4'>Question 4:</span><br> + If the available water delivery capacity is 25 cubic feet per second and A, B, C, and D are not using water, how much cubic feet of water per second is available for E?<br> + <b>{incorrect_q4} + If A has 25 cfps available and does not take any water, the same amount is available for the people + downstream. Since B, C and D do not take water, 25 cfps is available for E. + </b> + </p> + <p> + <span class='q5'>Question 5:</span><br> + If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of + water to your fields, what is the total number of tokens you will have earned at the + end of the round?<br> + <b>{incorrect_q5} + If you invest 7 out of 10 tokens, you keep 3 tokens for yourself. If you apply 202 cubic feet of water to your field you will earn 4 tokens. 3 + 4 = 7 tokens</b> + </p> + <p><span class='q6'>Question 6:</span><br> + If you invest all 10 tokens you start with and you apply 555 cubic feet of water to + your fields, what is the total number of tokens you will have earned at the end of + the round?<br> + <b>{incorrect_q6} + If you invest all 10 tokens, you keep 0 tokens from your initial endowment. If you apply 555 cubic feet of + water to your field you will earn 19 tokens. 0 + 19 = 19 tokens. + </b> + </p> + ]]> +</entry> + + +<entry key="investment-instructions"> +<![CDATA[ <p> You have been endowed with 10 tokens to invest. You must make a decision about how much you wish to invest [0,10] in the irrigation infrastructure. You can diff -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 src/main/resources/configuration/asu/2009/t2/irrigation.xml --- a/src/main/resources/configuration/asu/2009/t2/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/t2/irrigation.xml @@ -4,6 +4,7 @@ <comment>Irrigation experiment server configuration</comment><entry key="hostname">@SERVER_ADDRESS@</entry><entry key="port">@PORT_NUMBER@</entry> +<entry key="number-of-rounds">22</entry><entry key="round0">round0.xml</entry><entry key="round1">round1.xml</entry><entry key="round2">round2.xml</entry> @@ -28,7 +29,6 @@ <entry key="round21">round21.xml</entry><entry key="wait-for-participants">true</entry> -<entry key="number-of-rounds">22</entry><entry key="q1">49</entry><entry key="a1">49%</entry> @@ -78,36 +78,42 @@ ]]></entry> -<!-- FIXME: lots of parameterizable fields here. should make instructions -template-language-pluggable ---><entry key="initial-instructions"><![CDATA[ +<h1>Instructions</h1> +<hr><p> -You have already earned 5 dollars by showing up for this exercise. You can earn -more, up to an extra 25 dollars. You will participate in this exercise as a part of -a group of five participants. Your group has been formed by randomly assigning you -to FOUR other participants in the room. +You have already earned {showUpPayment} by showing up for this exercise. You +can earn more, up to a maximum of about {maximumPayment}, by participating in this +experiment which will take about an hour to an hour and a half. The amount of money +you earn depends on your decisions AND the decisions of other people in this room +over the course of the experiment. </p> +<h2>Groups</h2> +<hr> +You will be participating in this exercise as a part of a group of +{self.clientsPerGroup} participants. Your group has been formed by randomly +selecting you and four other participants in the room. +</p> +<h2>How to participate</h2> +<hr><p> -The amount of money you earn will depend on the decisions made by you and the other -members of your group. This exercise mimics decisions people make in irrigation -systems. In each round you will receive 10 tokens which you can invest in the -irrigation infrastructure. Based on the <b>water delivery capacity</b> of the -irrigation infrastructure and the availability of water you will be able to -grow crops. Tokens earned in a round is the sum of tokens not invested plus -tokens earned by growing crops. Each token is worth 5 cents. In each round you -will first decide how much to invest in the irrigation infrastructure. Based -on the combined contributions of all 5 participants in your group in each -round, your group can maintain the capacity of the irrigation infrastructure -for growing crops. +This exercise mimics decisions people make in irrigation systems. In each round you will receive {self.tokenEndowment} +tokens. You can choose to invest in the irrigation infrastructure or keep the tokens. Based on the <b>water delivery +capacity</b> of the irrigation infrastructure and the availability of water you will be able to grow crops. The total +number of tokens you can earn in a round is the sum of your tokens not invested plus the tokens you earn from growing +crops. Each token is worth {dollarsPerToken}. In each round you will first decide how much to invest in the irrigation +infrastructure. Based on the combined contributions of all 5 participants in your group in each round, your group can +maintain the capacity of the irrigation infrastructure for growing crops. </p><p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of {self.chatDuration} seconds where you can -send text messages to the other participants. You may discuss any aspect of the -exercise with two important exceptions: +round in this experiment you will have a chat period of {self.chatDuration} seconds +where you can send text messages to the other participants. +{self.restrictedVisibilityInstructions} + +You may discuss any aspect of the exercise with two important exceptions: </p><ol><li>You are <b>not allowed</b> to promise the other participants @@ -131,62 +137,64 @@ ]]></entry> - <entry key="facilitator-instructions"><![CDATA[ -<h3>Facilitator Instructions</h3><p> -Welcome to the facilitator interface. This interface allows you to control -the experiment. You may only modify configuration parameters <b>before</b> -you start the experiment by selecting the Configuration menu. When all the -participants are ready to begin the experiment, you can start the experiment -by selecting Experiment -> Start. After a round has been completed you -will be able to view the statistics for all of the participants. You can -begin the next round by selecting Round -> Start. + This facilitator interface allows you to control the experiment. In general you + will be following a sequence similar to this: +</p> +<ol> + <li>Show instructions</li> + <li>Start round</li> + <li>After round is over, start standalone chat round if necessary</li> + <li>Goto 1.</li> +</ol> +]]> +</entry> + +<entry key="welcome-instructions"> +<![CDATA[ +<h1>Welcome</h1> +<hr> +<p> +Welcome to the experiment. We will begin shortly after everyone has been +assigned a station. +<br><br> +Please <b>wait quietly</b> and <b>do not close this window, open any other applications, or communicate with any of the other participants</b>. </p> ]]></entry> -<entry key="welcome-instructions"> + +<entry key="quiz-instructions"><![CDATA[ -<center> -<h3>Welcome to the CARL lab. Please wait quietly and do not close this window or open any -other applications.</h3> -<h3>The experiment will begin shortly after everyone has been -assigned a station.</h3></center> -]]> -</entry> - - -<entry key="quiz-page1"> -<![CDATA[ +<h2>Quiz</h2> +<hr><p> The first two questions deal with irrigation infrastructure investment. <b>Please refer to Table 1 of your handout</b>. </p> - <form> -Question 1:<br> +<p>Question 1:<br> Given an existing infrastructure efficiency of 20%, if the five participants invest a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure efficiency?<br><input type="text" name="q1" value = "">% -<br><br> - -Question 2:<br> +</p> +<p>Question 2:<br> Suppose the infrastructure efficiency in the last round was 60%. For the current round, the efficiency will decline by an amount of 25% for a resulting infrastructure efficiency of 35%. If the members of your group invest a total of 15 tokens, what will be your group's resulting water delivery capacity?<br> - <input type="text" name="q2" value = ""> cubic feet per second -<br><br> - -<b>The next two questions deal with the capacity of the irrigation system in relation -to the actual amount of water available.</b> -<br><br> +</p> +<p> +The next two questions deal with the capacity of the irrigation system in relation +to the actual amount of water available. +</p> +<p> Question 3:<br> If the irrigation efficiency is between 71 and 80%, the water delivery capacity of the irrigation system is 35 cubic feet per second. Suppose the water supply @@ -195,40 +203,30 @@ B? <br><input type='text' name='q3' value=''> cubic feet per second -<br><br> -Question 4: +</p> +<p>Question 4:<br> If the available water delivery capacity is 25 cubic feet per second and A, B, C, and D are not using water, how much cubic feet of water per second is available for E?<br><input type='text' name='q4' value=''> cubic feet per second -<br><br> - -<input type="submit" name="submit" value="Submit"><br> -<br> - -]]> -</entry> - -<entry key="quiz-page2"> -<![CDATA[ +</p><p> The final two questions cover the number of tokens you can earn in within a round. -<b>Please refer to table 2 of your handout</b>. +<b>Please refer to Table 2 of your handout</b>. </p> -<form> -Question 5:<br> +<p>Question 5:<br> If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of water to your fields, what is the total number of tokens you will have earned at the end of the round?<br><input type="text" name="q5" value="">tokens -<br><br> -Question 6:<br> +</p> +<p>Question 6:<br> If you invest all 10 tokens you start with and you apply 555 cubic feet of water to your fields, what is the total number of tokens you will have earned at the end of the round?<br><input type="text" name="q6" value="">tokens -<br><br> -<input type="submit" name="submit" value="Submit"> +</p> +<input type="submit" name="submit" value="Submit"><br></form> ]]></entry> @@ -292,12 +290,14 @@ </table> ]]></entry> - <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for {self.chatDuration} seconds with the other members of your group. You may -discuss any aspect of the exercise with two important exceptions: +<hr> +<p> +You may now chat for {self.chatDuration} seconds with the other members of your group. +{self.restrictedVisibilityInstructions} +You may discuss any aspect of the exercise with two important exceptions: </p><ol><li>You are <b>not allowed</b> to promise the other participants @@ -322,6 +322,267 @@ <entry key="investment-instructions"><![CDATA[ +<h1>Current infrastructure condition</h1> + <hr> + <h2>Current infrastructure efficiency: {actualInfrastructureEfficiency}%</h2> + <h2>Current water delivery capacity: {waterDeliveryCapacity} cubic feet per second</h2> + <h2>Available water supply: {self.waterSupplyCapacity} cubic feet per second</h2> +<h1>Investment Instructions</h1> +<hr> +<p> +You have been endowed with {self.tokenEndowment} tokens to invest. You must make a decision about +how much you wish to invest in the irrigation infrastructure by choosing a number +between 0 and {self.tokenEndowment}. You can see the relationship between total +investment and irrigation infrastructure in the table below. After you have entered +the number of tokens you'd like to invest, hit the enter key or click the submit +button to confirm your investment. When everybody has made their decision, the total +investment will be calculated and the overall irrigation infrastructure will be +displayed. Each token you invest corresponds to one percent of infrastructure +efficiency, so if you invest 10 tokens you are contributing 10% to the overall +infrastructure efficiency. +</p> +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Irrigation Infrastructure Efficiency (percent)</th> +<th>Water delivery capacity (cubic feet per second)</th> +</tr> +</thead> +<tbody> +<tr> +<td> ≤ 45</td><td>0</td> +</tr> +<tr> +<td>46-51</td><td>5</td> +</tr> +<tr> +<td>52-55</td><td>10</td> +</tr> +<tr> +<td>56-58</td><td>15</td> +</tr> +<tr> +<td>59-61</td><td>20</td> +</tr> +<tr> +<td>62-65</td><td>25</td> +</tr> +<tr> +<td>66-70</td><td>30</td> +</tr> +<tr> +<td>71-80</td><td>35</td> +</tr> +<tr> +<td>81-100</td><td>40</td> +</tr> +</tbody> +</table> +]]> +</entry> +<entry key='client-debriefing'> +<![CDATA[ +<h1>{if (self.practiceRound)}Practice Round{else}Round {self.roundNumber}{endif} Results</h1> +<hr> + <table border=3 cellpadding=5 cellspacing=5> + <tr> + <th>Position</th> + <th>Initial token endowment</th> + <th>Tokens invested</th> + <th>Tokens not invested</th> + <th>Tokens earned from growing crops</th> + <th>Total tokens earned this round</th> + <th>Dollars earned this round</th> + <th>Total dollars earned</th> + </tr> + {dataModel.orderedVisibleClients: {clientData| + <tr align='center' bgcolor='{if (clientData.self)}#FFFFCC{else}#CCCCCC{endif}'> + <td>{clientData.priorityString}</td> + <td>{self.tokenEndowment}</td> + <td>{clientData.investedTokens}</td> + <td>{clientData.uninvestedTokens}</td> + <td>{clientData.tokensEarnedFromWaterCollected}</td> + <td>{clientData.allTokensEarnedThisRound}</td> + <td>{clientData.totalDollarsEarnedThisRound}</td> + <td>{clientData.grandTotalIncome}</td> + </tr> + }} + </table> + <h2>Earnings</h2> + <hr> + <p> + You are in position {clientData.priorityString} and received + {clientData.totalDollarsEarnedThisRound} this past round. Your + <b>total income</b> is <b>{clientData.grandTotalIncome}</b>, including + the {showUpPayment} show-up bonus and {clientData.quizEarnings} for + answering {clientData.correctQuizAnswers} quiz questions correctly. + </p> + {if (self.practiceRound)} + <p><b>NOTE: this was a practice round and did not contribute to your earnings.</b></p> + {endif} + {if (showExitInstructions)} + <h2>Exit Survey</h2> + <hr> + <p> + This was the last round, but not the end of the experiment. We ask that you please carefully fill out a brief survey as we prepare your payments. + </p> + <h2>Payment: You Are Computer Number {clientData.id.stationNumber}</h2> + <hr> + <p> + <b>Please note the computer number listed above and write it on your survey.</b> + When payments are ready we will call you up one by one. Please wait until + your computer number, <b>{clientData.id.stationNumber}</b>, is called to turn in your + survey and receive payment. + <b>NOTE: Please answer the survey completely (there may be a back side)</b> + and <b>bring all your belongings with you</b> when you come up to receive + your payment to help us speed up the payment process. + </p> + {endif} +]]> +</entry> +<entry key="same-as-previous-round-instructions"> + <![CDATA[ + <h2>Round {self.roundNumber} Instructions</h2> + <hr> + <p>Round {self.roundNumber} is the same as the previous round.</p> + <p>{self.specialInstructions}</p> + <p>The length of this round is {self.roundDurationInSeconds} seconds.</p> + <p><b>Do you have any questions?</b> If you have any questions at this time + please raise your hand and someone will come over to your station and + answer it. + </p> + ]]> +</entry> +<entry key="contribution-summary"> +<![CDATA[ +<h1>Contributions Summary</h1> +<hr> +<p> +Your group invested a total of <b>{groupDataModel.totalContributedTokens} tokens</b> this round, resulting in an infrastructure efficiency of <b>{groupDataModel.infrastructureEfficiency}%</b> and a water delivery capacity of <b>{groupDataModel.irrigationCapacity} cubic feet per second</b>. +The amount of water available to pass through your canal is <b>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</b>. +</p> +<table border=2 cellspacing=2 cellpadding=3> +<tr> +<th></th></th><th>Infrastructure Efficiency</th><th>Water Delivery Capacity</th><th>Water Availability</th> +</tr> +<tr align='center'> +<td>Before Investment</td><td>{groupDataModel.infrastructureEfficiencyBeforeInvestment}%</td><td>{groupDataModel.irrigationCapacityBeforeInvestment} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +<tr align='center'> +<td>After Investment</td><td>{groupDataModel.infrastructureEfficiency}%</td><td>{groupDataModel.irrigationCapacity} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +</table> +]]> +</entry> +<entry key="special-instructions"> +<![CDATA[ +<h2>Special Instructions</h2> +<hr> +{if (self.restrictedVisibility)} +<p>You can only <b>communicate with and observe the actions</b> of your <b>immediate neighbors</b>.</p> +{endif} +<p> +{if (self.infrastructureEfficiencyReset)} +The irrigation infrastructure efficiency has been <b>reset to {initialInfrastructureEfficiency}%</b> with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{else} +The irrigation infrastructure efficiency carried over from the previous round is +{initialInfrastructureEfficiency}% but has declined by +{self.infrastructureDegradationFactor} and is now <b>{actualInfrastructureEfficiency}%</b> +with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{endif} +</p> +<p>The <b>available water supply is {self.waterSupplyCapacity} cubic feet per second</b>.</p> +]]> +</entry> +<entry key="restricted-visibility-instructions"> +<![CDATA[{if (self.restrictedVisibility)}<b>NOTE:</b> In this experiment you can <b>only communicate with and observe the actions of your immediate neighbors</b>.{endif}]]> +</entry> +<entry key="facilitator-debriefing"> +<![CDATA[ +<h3>Round {self.roundNumber} results</h3> +<hr> +<table border=1 cellspacing=3 cellpadding=3> +<tr><th>Participant</th><th>Current tokens</th><th>Current income</th><th>Quiz earnings</th><th>Total income</th></tr> +{clientDataList: {data | +<tr align="RIGHT"><td>{data}</td><td>{data.allTokensEarnedThisRound}</td><td>{data.totalDollarsEarnedThisRound}</td><td>{data.quizEarnings}</td><td>{data.grandTotalIncome}</td></tr> +}} +</table> +{if (self.lastRound)} +<h2><font color='blue'>The experiment is over. Please prepare payments.</font></h2> +{endif} +]]> +</entry> +<entry key='quiz-results'> + <![CDATA[ + <h2>Quiz Results</h2> + <hr> + <p> + {if (allCorrect)} + You have answered all the questions correctly and earned <b>{totalQuizEarnings}</b>. + {else} + You answered {numberCorrect} out of {totalQuestions} questions correctly and earned <b>{totalQuizEarnings}</b>. Questions you've answered + incorrectly are highlighted in red. Please see below for more details. + {endif} + </p> + <br> + <hr> + <p><span class='q1'>Question 1:</span><br> + Given an existing infrastructure efficiency of 20%, if the five participants invest + a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure + efficiency? + <br><b>{incorrect_q1} + An existing infrastructure efficiency of 20% + 29 tokens invested = 49% infrastructure efficiency.</b> + </p> + <p><span class='q2'>Question 2:</span><br> + Suppose the infrastructure efficiency in the last round was 60%. For the current + round, the efficiency will decline by an amount of 25% for a resulting + infrastructure efficiency of 35%. If the members of your group invest a total of 15 + tokens, what will be your group's resulting water delivery capacity?<br> + <b>{incorrect_q2} + An existing infrastructure efficiency of 35% + 15 tokens invested = 50% infrastructure efficiency for the current round. + An infrastructure efficiency of 50% corresponds to a water delivery capacity of 5 cubic feet per second.</b> + </p> + <p><span class='q3'>Question 3:</span><br> + If the irrigation efficiency is between 71 and 80%, the water delivery capacity of + the irrigation system is 35 cubic feet per second. Suppose the water supply + available to your group is 30 cubic feet per second and A opens their gate, + diverting water at 25 cubic feet per second. What is the available water flow for + B?<br> + <b>{incorrect_q3} + Since there is only 30 cubic feet per second of water available, the irrigation infrastructure capacity of 35 cubic feet + per second will not be fully used. When A opens their gate, they take 25 of the 30 cubic feet per second out of the + canal, leaving 5 cubic feet per second for B.</b> + </p> + <p><span class='q4'>Question 4:</span><br> + If the available water delivery capacity is 25 cubic feet per second and A, B, C, and D are not using water, how much cubic feet of water per second is available for E?<br> + <b>{incorrect_q4} + If A has 25 cfps available and does not take any water, the same amount is available for the people + downstream. Since B, C and D do not take water, 25 cfps is available for E. + </b> + </p> + <p> + <span class='q5'>Question 5:</span><br> + If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of + water to your fields, what is the total number of tokens you will have earned at the + end of the round?<br> + <b>{incorrect_q5} + If you invest 7 out of 10 tokens, you keep 3 tokens for yourself. If you apply 202 cubic feet of water to your field you will earn 4 tokens. 3 + 4 = 7 tokens</b> + </p> + <p><span class='q6'>Question 6:</span><br> + If you invest all 10 tokens you start with and you apply 555 cubic feet of water to + your fields, what is the total number of tokens you will have earned at the end of + the round?<br> + <b>{incorrect_q6} + If you invest all 10 tokens, you keep 0 tokens from your initial endowment. If you apply 555 cubic feet of + water to your field you will earn 19 tokens. 0 + 19 = 19 tokens. + </b> + </p> + ]]> +</entry> + + +<entry key="investment-instructions"> +<![CDATA[ <p> You have been endowed with 10 tokens to invest. You must make a decision about how much you wish to invest [0,10] in the irrigation infrastructure. You can diff -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 -r d329f6fb640a43e9349e9ba1dc349475f474f5c0 src/main/resources/configuration/asu/2009/t3/irrigation.xml --- a/src/main/resources/configuration/asu/2009/t3/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/t3/irrigation.xml @@ -4,6 +4,7 @@ <comment>Irrigation experiment server configuration</comment><entry key="hostname">@SERVER_ADDRESS@</entry><entry key="port">@PORT_NUMBER@</entry> +<entry key="number-of-rounds">22</entry><entry key="round0">round0.xml</entry><entry key="round1">round1.xml</entry><entry key="round2">round2.xml</entry> @@ -28,7 +29,6 @@ <entry key="round21">round21.xml</entry><entry key="wait-for-participants">true</entry> -<entry key="number-of-rounds">22</entry><entry key="q1">49</entry><entry key="a1">49%</entry> @@ -78,36 +78,42 @@ ]]></entry> -<!-- FIXME: lots of parameterizable fields here. should make instructions -template-language-pluggable ---><entry key="initial-instructions"><![CDATA[ +<h1>Instructions</h1> +<hr><p> -You have already earned 5 dollars by showing up for this exercise. You can earn -more, up to an extra 25 dollars. You will participate in this exercise as a part of -a group of five participants. Your group has been formed by randomly assigning you -to FOUR other participants in the room. +You have already earned {showUpPayment} by showing up for this exercise. You +can earn more, up to a maximum of about {maximumPayment}, by participating in this +experiment which will take about an hour to an hour and a half. The amount of money +you earn depends on your decisions AND the decisions of other people in this room +over the course of the experiment. </p> +<h2>Groups</h2> +<hr> +You will be participating in this exercise as a part of a group of +{self.clientsPerGroup} participants. Your group has been formed by randomly +selecting you and four other participants in the room. +</p> +<h2>How to participate</h2> +<hr><p> -The amount of money you earn will depend on the decisions made by you and the other -members of your group. This exercise mimics decisions people make in irrigation -systems. In each round you will receive 10 tokens which you can invest in the -irrigation infrastructure. Based on the <b>water delivery capacity</b> of the -irrigation infrastructure and the availability of water you will be able to -grow crops. Tokens earned in a round is the sum of tokens not invested plus -tokens earned by growing crops. Each token is worth 5 cents. In each round you -will first decide how much to invest in the irrigation infrastructure. Based -on the combined contributions of all 5 participants in your group in each -round, your group can maintain the capacity of the irrigation infrastructure -for growing crops. +This exercise mimics decisions people make in irrigation systems. In each round you will receive {self.tokenEndowment} +tokens. You can choose to invest in the irrigation infrastructure or keep the tokens. Based on the <b>water delivery +capacity</b> of the irrigation infrastructure and the availability of water you will be able to grow crops. The total +number of tokens you can earn in a round is the sum of your tokens not invested plus the tokens you earn from growing +crops. Each token is worth {dollarsPerToken}. In each round you will first decide how much to invest in the irrigation +infrastructure. Based on the combined contributions of all 5 participants in your group in each round, your group can +maintain the capacity of the irrigation infrastructure for growing crops. </p><p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of {self.chatDuration} seconds where you can -send text messages to the other participants. You may discuss any aspect of the -exercise with two important exceptions: +round in this experiment you will have a chat period of {self.chatDuration} seconds +where you can send text messages to the other participants. +{self.restrictedVisibilityInstructions} + +You may discuss any aspect of the exercise with two important exceptions: </p><ol><li>You are <b>not allowed</b> to promise the other participants @@ -131,62 +137,64 @@ ]]></entry> - <entry key="facilitator-instructions"><![CDATA[ -<h3>Facilitator Instructions</h3><p> -Welcome to the facilitator interface. This interface allows you to control -the experiment. You may only modify configuration parameters <b>before</b> -you start the experiment by selecting the Configuration menu. When all the -participants are ready to begin the experiment, you can start the experiment -by selecting Experiment -> Start. After a round has been completed you -will be able to view the statistics for all of the participants. You can -begin the next round by selecting Round -> Start. + This facilitator interface allows you to control the experiment. In general you + will be following a sequence similar to this: +</p> +<ol> + <li>Show instructions</li> + <li>Start round</li> + <li>After round is over, start standalone chat round if necessary</li> + <li>Goto 1.</li> +</ol> +]]> +</entry> + +<entry key="welcome-instructions"> +<![CDATA[ +<h1>Welcome</h1> +<hr> +<p> +Welcome to the experiment. We will begin shortly after everyone has been +assigned a station. +<br><br> +Please <b>wait quietly</b> and <b>do not close this window, open any other applications, or communicate with any of the other participants</b>. </p> ]]></entry> -<entry key="welcome-instructions"> + +<entry key="quiz-instructions"><![CDATA[ -<center> -<h3>Welcome to the CARL lab. Please wait quietly and do not close this window or open any -other applications.</h3> -<h3>The experiment will begin shortly after everyone has been -assigned a station.</h3></center> -]]> -</entry> - - -<entry key="quiz-page1"> -<![CDATA[ +<h2>Quiz</h2> +<hr><p> The first two questions deal with irrigation infrastructure investment. <b>Please refer to Table 1 of your handout</b>. </p> - <form> -Question 1:<br> +<p>Question 1:<br> Given an existing infrastructure efficiency of 20%, if the five participants invest a <b>total of 29 additional tokens</b>, what is the new irrigation infrastructure efficiency?<br><input type="text" name="q1" value = "">% -<br><br> - -Question 2:<br> +</p> +<p>Question 2:<br> Suppose the infrastructure efficiency in the last round was 60%. For the current round, the efficiency will decline by an amount of 25% for a resulting infrastructure efficiency of 35%. If the members of your group invest a total of 15 tokens, what will be your group's resulting water delivery capacity?<br> - <input type="text" name="q2" value = ""> cubic feet per second -<br><br> - -<b>The next two questions deal with the capacity of the irrigation system in relation -to the actual amount of water available.</b> -<br><br> +</p> +<p> +The next two questions deal with the capacity of the irrigation system in relation +to the actual amount of water available. +</p> +<p> Question 3:<br> If the irrigation efficiency is between 71 and 80%, the water delivery capacity of the irrigation system is 35 cubic feet per second. Suppose the water supply @@ -195,40 +203,30 @@ B? <br><input type='text' name='q3' value=''> cubic feet per second -<br><br> -Question 4: +</p> +<p>Question 4:<br> If the available water delivery capacity is 25 cubic feet per second and A, B, C, and D are not using water, how much cubic feet of water per second is available for E?<br><input type='text' name='q4' value=''> cubic feet per second -<br><br> - -<input type="submit" name="submit" value="Submit"><br> -<br> - -]]> -</entry> - -<entry key="quiz-page2"> -<![CDATA[ +</p><p> The final two questions cover the number of tokens you can earn in within a round. -<b>Please refer to table 2 of your handout</b>. +<b>Please refer to Table 2 of your handout</b>. </p> -<form> -Question 5:<br> +<p>Question 5:<br> If you invest 7 of the 10 tokens you start with and you apply 202 cubic feet of water to your fields, what is the total number of tokens you will have earned at the end of the round?<br><input type="text" name="q5" value="">tokens -<br><br> -Question 6:<br> +</p> +<p>Question 6:<br> If you invest all 10 tokens you start with and you apply 555 cubic feet of water to your fields, what is the total number of tokens you will have earned at the end of the round?<br><input type="text" name="q6" value="">tokens -<br><br> -<input type="submit" name="submit" value="Submit"> +</p> +<input type="submit" name="submit" value="Submit"><br></form> ]]></entry> @@ -292,12 +290,14 @@ </table> ]]></entry> - <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for {self.chatDuration} seconds with the other members of your group. You may -discuss any aspect of the exercise with two important exceptions: +<hr> +<p> +You may now chat for {self.chatDuration} seconds with the other members of your group. +{self.restrictedVisibilityInstructions} +You may discuss any aspect of the exercise with two important exceptions: </p><ol><li>You are <b>not allowed</b> to promise the other participants @@ -322,6 +322,267 @@ <entry key="investment-instructions"><![CDATA[ +<h1>Current infrastructure condition</h1> + <hr> + <h2>Current infrastructure efficiency: {actualInfrastructureEfficiency}%</h2> + <h2>Current water delivery capacity: {waterDeliveryCapacity} cubic feet per second</h2> + <h2>Available water supply: {self.waterSupplyCapacity} cubic feet per second</h2> +<h1>Investment Instructions</h1> +<hr> +<p> +You have been endowed with {self.tokenEndowment} tokens to invest. You must make a decision about +how much you wish to invest in the irrigation infrastructure by choosing a number +between 0 and {self.tokenEndowment}. You can see the relationship between total +investment and irrigation infrastructure in the table below. After you have entered +the number of tokens you'd like to invest, hit the enter key or click the submit +button to confirm your investment. When everybody has made their decision, the total +investment will be calculated and the overall irrigation infrastructure will be +displayed. Each token you invest corresponds to one percent of infrastructure +efficiency, so if you invest 10 tokens you are contributing 10% to the overall +infrastructure efficiency. +</p> +<table border="1" cellspacing="2" cellpadding="2"> +<thead> +<tr> +<th>Irrigation Infrastructure Efficiency (percent)</th> +<th>Water delivery capacity (cubic feet per second)</th> +</tr> +</thead> +<tbody> +<tr> +<td> ≤ 45</td><td>0</td> +</tr> +<tr> +<td>46-51</td><td>5</td> +</tr> +<tr> +<td>52-55</td><td>10</td> +</tr> +<tr> +<td>56-58</td><td>15</td> +</tr> +<tr> +<td>59-61</td><td>20</td> +</tr> +<tr> +<td>62-65</td><td>25</td> +</tr> +<tr> +<td>66-70</td><td>30</td> +</tr> +<tr> +<td>71-80</td><td>35</td> +</tr> +<tr> +<td>81-100</td><td>40</td> +</tr> +</tbody> +</table> +]]> +</entry> +<entry key='client-debriefing'> +<![CDATA[ +<h1>{if (self.practiceRound)}Practice Round{else}Round {self.roundNumber}{endif} Results</h1> +<hr> + <table border=3 cellpadding=5 cellspacing=5> + <tr> + <th>Position</th> + <th>Initial token endowment</th> + <th>Tokens invested</th> + <th>Tokens not invested</th> + <th>Tokens earned from growing crops</th> + <th>Total tokens earned this round</th> + <th>Dollars earned this round</th> + <th>Total dollars earned</th> + </tr> + {dataModel.orderedVisibleClients: {clientData| + <tr align='center' bgcolor='{if (clientData.self)}#FFFFCC{else}#CCCCCC{endif}'> + <td>{clientData.priorityString}</td> + <td>{self.tokenEndowment}</td> + <td>{clientData.investedTokens}</td> + <td>{clientData.uninvestedTokens}</td> + <td>{clientData.tokensEarnedFromWaterCollected}</td> + <td>{clientData.allTokensEarnedThisRound}</td> + <td>{clientData.totalDollarsEarnedThisRound}</td> + <td>{clientData.grandTotalIncome}</td> + </tr> + }} + </table> + <h2>Earnings</h2> + <hr> + <p> + You are in position {clientData.priorityString} and received + {clientData.totalDollarsEarnedThisRound} this past round. Your + <b>total income</b> is <b>{clientData.grandTotalIncome}</b>, including + the {showUpPayment} show-up bonus and {clientData.quizEarnings} for + answering {clientData.correctQuizAnswers} quiz questions correctly. + </p> + {if (self.practiceRound)} + <p><b>NOTE: this was a practice round and did not contribute to your earnings.</b></p> + {endif} + {if (showExitInstructions)} + <h2>Exit Survey</h2> + <hr> + <p> + This was the last round, but not the end of the experiment. We ask that you please carefully fill out a brief survey as we prepare your payments. + </p> + <h2>Payment: You Are Computer Number {clientData.id.stationNumber}</h2> + <hr> + <p> + <b>Please note the computer number listed above and write it on your survey.</b> + When payments are ready we will call you up one by one. Please wait until + your computer number, <b>{clientData.id.stationNumber}</b>, is called to turn in your + survey and receive payment. + <b>NOTE: Please answer the survey completely (there may be a back side)</b> + and <b>bring all your belongings with you</b> when you come up to receive + your payment to help us speed up the payment process. + </p> + {endif} +]]> +</entry> +<entry key="same-as-previous-round-instructions"> + <![CDATA[ + <h2>Round {self.roundNumber} Instructions</h2> + <hr> + <p>Round {self.roundNumber} is the same as the previous round.</p> + <p>{self.specialInstructions}</p> + <p>The length of this round is {self.roundDurationInSeconds} seconds.</p> + <p><b>Do you have any questions?</b> If you have any questions at this time + please raise your hand and someone will come over to your station and + answer it. + </p> + ]]> +</entry> +<entry key="contribution-summary"> +<![CDATA[ +<h1>Contributions Summary</h1> +<hr> +<p> +Your group invested a total of <b>{groupDataModel.totalContributedTokens} tokens</b> this round, resulting in an infrastructure efficiency of <b>{groupDataModel.infrastructureEfficiency}%</b> and a water delivery capacity of <b>{groupDataModel.irrigationCapacity} cubic feet per second</b>. +The amount of water available to pass through your canal is <b>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</b>. +</p> +<table border=2 cellspacing=2 cellpadding=3> +<tr> +<th></th></th><th>Infrastructure Efficiency</th><th>Water Delivery Capacity</th><th>Water Availability</th> +</tr> +<tr align='center'> +<td>Before Investment</td><td>{groupDataModel.infrastructureEfficiencyBeforeInvestment}%</td><td>{groupDataModel.irrigationCapacityBeforeInvestment} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +<tr align='center'> +<td>After Investment</td><td>{groupDataModel.infrastructureEfficiency}%</td><td>{groupDataModel.irrigationCapacity} cubic feet per second</td><td>{groupDataModel.actualWaterDeliveryCapacity} cubic feet per second</td> +</tr> +</table> +]]> +</entry> +<entry key="special-instructions"> +<![CDATA[ +<h2>Special Instructions</h2> +<hr> +{if (self.restrictedVisibility)} +<p>You can only <b>communicate with and observe the actions</b> of your <b>immediate neighbors</b>.</p> +{endif} +<p> +{if (self.infrastructureEfficiencyReset)} +The irrigation infrastructure efficiency has been <b>reset to {initialInfrastructureEfficiency}%</b> with a corresponding <b>water delivery capacity of {waterDeliveryCapacity} cubic feet per second</b>. +{else} +The irrigation infrastructure efficiency carried over from the previous round is +{initialInfrastructureEfficiency}% but has declined by +{self.infrastructureDegradationFactor} and is now <b>{actualInfrastructureEfficiency}%</b> +with a corresponding <b>water d... [truncated message content] |
From: <com...@bi...> - 2014-05-12 22:43:25
|
1 new commit in foraging: https://bitbucket.org/virtualcommons/foraging/commits/cda6e467569b/ Changeset: cda6e467569b User: alllee Date: 2014-05-13 00:43:15 Summary: version bumps Affected #: 2 files diff -r 1fa58fd4e98ca404d4f53f1183fb733d9bbd7e53 -r cda6e467569bada824847fa5d20942662d482e72 ivy.xml --- a/ivy.xml +++ b/ivy.xml @@ -5,9 +5,8 @@ <ivy-module version="2.0"><info organisation="edu.asu.commons" module="foraging"/><dependencies> - <dependency org="edu.asu.commons" name="csidex" rev="0.6-SNAPSHOT" /> + <dependency org="edu.asu.commons" name="csidex" rev="0.7-SNAPSHOT" /><dependency org="net.java.dev.jogl" name="jogl" rev="1.1.1-rc6"/><dependency org="javax.media" name="jmf" rev="2.1.1e"/> - <dependency org="javax.jnlp" name="javaws" rev="1.6.0_30"/></dependencies></ivy-module> diff -r 1fa58fd4e98ca404d4f53f1183fb733d9bbd7e53 -r cda6e467569bada824847fa5d20942662d482e72 pom.xml --- a/pom.xml +++ b/pom.xml @@ -66,20 +66,15 @@ </repositories><dependencies><dependency> - <groupId>javax.jnlp</groupId> - <artifactId>javaws</artifactId> - <version>1.6.0_30</version> - </dependency> - <dependency><groupId>junit</groupId><artifactId>junit</artifactId> - <version>4.10</version> + <version>4.11</version><scope>test</scope></dependency><dependency><groupId>edu.asu.commons</groupId><artifactId>csidex</artifactId> - <version>0.6-SNAPSHOT</version> + <version>0.7-SNAPSHOT</version></dependency><dependency><groupId>net.java.dev.jogl</groupId> @@ -87,9 +82,9 @@ <version>1.1.1-rc6</version></dependency><dependency> - <groupId>commons-lang</groupId> - <artifactId>commons-lang</artifactId> - <version>2.4</version> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>3.3.2</version></dependency><dependency><groupId>javax.media</groupId> @@ -103,7 +98,7 @@ <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId> - <version>2.6.1</version> + <version>2.9.1</version><configuration><links><link>http://commons.asu.edu/api/csidex/</link> @@ -113,26 +108,22 @@ </plugin><plugin><artifactId>maven-compiler-plugin</artifactId> - <version>2.3.2</version> + <version>3.1</version><configuration> - <source>1.6</source> - <target>1.6</target> + <source>1.7</source> + <target>1.7</target></configuration></plugin><plugin><groupId>org.mortbay.jetty</groupId> - <artifactId>maven-jetty-plugin</artifactId> - <version>6.1.22</version> + <artifactId>jetty-maven-plugin</artifactId> + <version>8.1.15.v20140411</version><configuration> - <connectors> - <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector"> - <port>8080</port> - <maxIdleTime>60000</maxIdleTime> - </connector> - </connectors> + <stopKey>STOP</stopKey> + <stopPort>9999</stopPort><contextPath>/</contextPath><webDefaultXml>src/main/resources/web/webdefault.xml</webDefaultXml> - <scanIntervalSeconds>10</scanIntervalSeconds> + <scanIntervalSeconds>5</scanIntervalSeconds></configuration></plugin></plugins> Repository URL: https://bitbucket.org/virtualcommons/foraging/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |
From: <com...@bi...> - 2014-05-12 22:25:43
|
1 new commit in irrigation: https://bitbucket.org/virtualcommons/irrigation/commits/24aadba65e1d/ Changeset: 24aadba65e1d User: alllee Date: 2014-05-13 00:25:34 Summary: fixing template references in older config files Affected #: 8 files diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 build.xml --- a/build.xml +++ b/build.xml @@ -13,7 +13,7 @@ uri='antlib:org.apache.ivy.ant' classpathref='ivy.lib.path'/> --> - <property name="ivy.install.version" value="2.2.0" /> + <property name="ivy.install.version" value="2.3.0" /><condition property="ivy.home" value="${env.IVY_HOME}"><isset property="env.IVY_HOME" /></condition> @@ -40,7 +40,7 @@ </target><target name='resolve' depends='init-ivy' description='--> retrieve dependencies with ivy'> - <ivy:retrieve pattern='${lib.dir}/[artifact].[ext]'/> + <ivy:retrieve pattern='${lib.dir}/[conf]/[artifact]-[type]-[revision].[ext]'/></target><!-- Load all properties from the build.properties file, @@ -240,8 +240,8 @@ optimize="off" deprecation="on" includeantruntime='true' - source="1.6" - target="1.6" + source="1.7" + target="1.7" ><compilerarg value='-Xlint:unchecked'/><classpath refid="project.classpath" /> @@ -274,7 +274,7 @@ <javadoc sourcepath="${src.dir}" destdir="${javadoc.dir}" packagenames="*" - source="1.6" + source="1.7" classpathref='project.classpath' link='http://java.sun.com/javase/6/docs/api/ http://commons.asu.edu/src/csidex/api' @@ -316,8 +316,8 @@ <target name="compile-tests" depends="compile"><javac srcdir="${test.src.dir}" destdir="${test.build.dir}" - source="1.6" - target="1.6" + source="1.7" + target="1.7" debug="on"><!-- <compilerarg value='-Xlint:unchecked'/> --><classpath refid="project.classpath" /> diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 ivy.xml --- a/ivy.xml +++ b/ivy.xml @@ -5,8 +5,7 @@ <ivy-module version="2.0"><info organisation="edu.asu.commons" module="irrigation"/><dependencies> - <dependency org="edu.asu.commons" name="csidex" rev="0.5-SNAPSHOT"/> - <dependency org="org.jfree" name="jfreechart" rev="1.0.14"/> - <dependency org="javax.jnlp" name="javaws" rev="1.6.0_30"/> + <dependency org="edu.asu.commons" name="csidex" rev="0.7-SNAPSHOT"/> + <dependency org="org.jfree" name="jfreechart" rev="1.0.17"/></dependencies></ivy-module> diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 pom.xml --- a/pom.xml +++ b/pom.xml @@ -37,12 +37,12 @@ <dependency><groupId>edu.asu.commons</groupId><artifactId>csidex</artifactId> - <version>0.5-SNAPSHOT</version> + <version>0.7-SNAPSHOT</version></dependency><dependency><groupId>org.jfree</groupId><artifactId>jfreechart</artifactId> - <version>1.0.14</version> + <version>1.0.17</version></dependency><dependency><groupId>net.java.dev.jgoodies</groupId> @@ -54,22 +54,16 @@ <artifactId>forms</artifactId><version>1.1.0</version></dependency> - <dependency> - <groupId>javax.jnlp</groupId> - <artifactId>javaws</artifactId> - <version>1.6.0_30</version> - <scope>provided</scope> - </dependency></dependencies><build><finalName>irrigation</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId> - <version>2.3.2</version> + <version>3.1</version><configuration> - <source>1.6</source> - <target>1.6</target> + <source>1.7</source> + <target>1.7</target></configuration></plugin><plugin> diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 src/main/resources/configuration/asu/2009/mixed-pretest/irrigation.xml --- a/src/main/resources/configuration/asu/2009/mixed-pretest/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/mixed-pretest/irrigation.xml @@ -102,7 +102,7 @@ <p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of %d seconds where you can +round in this experiment you will have a chat period of {self.chatDuration} seconds where you can send text messages to the other participants. You may discuss any aspect of the exercise with two important exceptions: </p> @@ -286,7 +286,7 @@ <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for %d seconds with the other members of your group. You may +You may now chat for {self.chatDuration} seconds with the other members of your group. You may discuss any aspect of the exercise with two important exceptions: </p><ol> diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 src/main/resources/configuration/asu/2009/t1/irrigation.xml --- a/src/main/resources/configuration/asu/2009/t1/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/t1/irrigation.xml @@ -105,7 +105,7 @@ <p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of %d seconds where you can +round in this experiment you will have a chat period of {self.chatDuration} seconds where you can send text messages to the other participants. You may discuss any aspect of the exercise with two important exceptions: </p> @@ -296,7 +296,7 @@ <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for %d seconds with the other members of your group. You may +You may now chat for {self.chatDuration} seconds with the other members of your group. You may discuss any aspect of the exercise with two important exceptions: </p><ol> diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 src/main/resources/configuration/asu/2009/t2/irrigation.xml --- a/src/main/resources/configuration/asu/2009/t2/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/t2/irrigation.xml @@ -105,7 +105,7 @@ <p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of %d seconds where you can +round in this experiment you will have a chat period of {self.chatDuration} seconds where you can send text messages to the other participants. You may discuss any aspect of the exercise with two important exceptions: </p> @@ -296,7 +296,7 @@ <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for %d seconds with the other members of your group. You may +You may now chat for {self.chatDuration} seconds with the other members of your group. You may discuss any aspect of the exercise with two important exceptions: </p><ol> diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 src/main/resources/configuration/asu/2009/t3/irrigation.xml --- a/src/main/resources/configuration/asu/2009/t3/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/t3/irrigation.xml @@ -105,7 +105,7 @@ <p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of %d seconds where you can +round in this experiment you will have a chat period of {self.chatDuration} seconds where you can send text messages to the other participants. You may discuss any aspect of the exercise with two important exceptions: </p> @@ -296,7 +296,7 @@ <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for %d seconds with the other members of your group. You may +You may now chat for {self.chatDuration} seconds with the other members of your group. You may discuss any aspect of the exercise with two important exceptions: </p><ol> diff -r 46ab6623575d00e9f80a101c6c773a535a999f0a -r 24aadba65e1d39ba5b323e0a945f2667a0dd95d6 src/main/resources/configuration/asu/2009/t4/irrigation.xml --- a/src/main/resources/configuration/asu/2009/t4/irrigation.xml +++ b/src/main/resources/configuration/asu/2009/t4/irrigation.xml @@ -105,7 +105,7 @@ <p> We will now start a practice round to help illustrate the experiment. Before each -round in this experiment you will have a chat period of %d seconds where you can +round in this experiment you will have a chat period of {self.chatDuration} seconds where you can send text messages to the other participants. You may discuss any aspect of the exercise with two important exceptions: </p> @@ -296,7 +296,7 @@ <entry key='chat-instructions'><![CDATA[ <h3>Chat Instructions</h3> -You may now chat for %d seconds with the other members of your group. You may +You may now chat for {self.chatDuration} seconds with the other members of your group. You may discuss any aspect of the exercise with two important exceptions: </p><ol> Repository URL: https://bitbucket.org/virtualcommons/irrigation/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. |