Data & Software Accompanying WWW 2018 paper
@article{ma2018web,
title={Web-Based VR Experiments Powered by the Crowd},
author={Ma, Xiao and Cackett, Megan and Park, Leslie and Chien, Eric and Naaman, Mor},
journal={Proceedings of The Web Conference (WWW) 2018},
year={2018}
}
We open source three experiments described in the paper, built using React VR, v1.4.0 and Node.js, which can be accessed using browsers that support WebVR standards.
After building the apps, they were hosted on Heroku, using the mongodb (mongoose) database.
We nested three studies into the same source folder (client) so that we could share common screens, such as welcome screen and the exit screen that contains verification code.
One can only develop / build one study at a time, the way to switch studies is by searching for STUDY SWITCH POINT
and change the config variables at four places, including:
./client/ExperimentConfigs.js: export default Study1Config;
./client/index.vr.js: import App from './Study1/index.vr';
./client/redux/Misc.js: import type { KnownActions } from '../Study1/redux/RootReduxStore';
./client/redux/Misc.js: import RootReduxStore from '../Study1/redux/RootReduxStore';
Note that the numbering of Study 2 and 3 in the paper and software are not consistent...
Common screens were defined in ./client/views
, such as Welcome and Exit screens, keyboards, generic UI styles, etc.
Study specific screens were defined in ./client/Study*/views
. The texts were all configured at ./client/Study*/StandardLanguage.js
, and states managed by redux.
Most of our files were static typed with Flow, if you are not familiar with it or not a fan, feel free to ignore them.
Change the working directory to ./client
, then npm i
to update the required packages, and npm start
.
The VR app will be running at http://localhost:8081/vr/
.
We used a simple Express framework for our server, for logging the data into databases. However, you can do whatever suits you best for this part. Our code is in ./server
for your reference.
- Set the study to the one needs to be deployed by searching for
STUDY SWITCH POINT
(should be four places) - Update the
Configs.js
file under the target study folder. Set: DEV = false; LOG_VRSTATUS = true; SERVER_DOMAIN = 'http://xxx.herokuapp.com';
, thennpm run bundle
from./client
- Initiate a new folder with the following file structure:
.
├── Procfile: "web: node index.js"
├── api (copied from the compiled server/dist/ folder)
│ ├── controllers
│ │ └── Controllers.js
│ ├── models
│ │ └── Models.js
│ └── routes
│ └── index.js
├── index.js (copied from the compiled server/dist/ folder, needs to add one line at bottom)
│ (append `app.use(_express2.default.static('public'));` at the end of file)
├── package.json (copied from the compiled server folder)
└── public
├── build (copied from the bundled react-vr app, from /client/vr/ folder)
│ ├── client.bundle.js
│ ├── client.bundle.js.meta
│ ├── index.bundle.js
│ └── index.bundle.js.meta
├── client.js (need to change the study name to the one deployed in `new VRInstance(..`)
├── index.html (use the one in the template)
└── static_assets
├── browser-logo.jpg
├── home.jpg
├── nav-selection.png
├── ...
└── ...
- Can also use the
template_heroku
folder to start - Then create a Heroku remote to push
- Deploy to Heroku by
git push heroku master
Data available upon request -- please email xiao at jacobs o cornell o edu