Giter VIP home page Giter VIP logo

turkserver-meteor's Introduction

turkserver-meteor Build Status

TurkServer is a package for building interactive web-based user experiments on the Meteor web app framework. It uses Meteor's powerful publish/subscribe data model and reactivity to make building real-time user interfaces less error-prone, and provides facilities for deploying your app and collecting data.

Features

  • Design interfaces using the power and flexibility of Meteor.
  • Multi-user, interactive experiments are as easy to build as single-user experiments.
  • Highly configurable randomization of treatments.
  • Deploying experiments from a live web interface and watch the progress of experiments in real time.

Here's an example of how TurkServer was used to run a month-long prisoner's dilemma experiment:

TurkServer

Getting Started

See the guide, which has information about getting started, system architecture, experiment design, and examples.

To add this to a Meteor app, follow these instructions:

  1. Install Meteor and create a Meteor app.
  2. meteor add mizzao:turkserver to install the package and its dependencies.
  3. Start your app with the meteor command.
  4. Navigate to /turkserver to log into the administration interface, and develop your experiment!

Documentation

See the API documentation to get an idea of what you can use in your app.

This documentation is generated directly from JSDoc comments in the code. To build the documentation locally, make sure you have meteor-jsdoc installed:

npm install -g meteor-jsdoc

Then build and view the docs with the following commands:

meteor-jsdoc build
meteor-jsdoc start

The documentation will be visible as a Meteor app on the specified port (default 3333).

Research

If you use TurkServer in your work and publish a paper, please cite

Andrew Mao, Yiling Chen, Krzysztof Z. Gajos, David Parkes, Ariel D. Procaccia, and Haoqi Zhang. TurkServer: Enabling Synchronous and Longitudinal Online Experiments. In the Fourth Workshop on Human Computation (HCOMP 2012).

Note that this paper doesn't refer to the latest version of the system, but it is the same core idea. We plan to publish an improved paper detailing the methods behind TurkServer in the near future.

Developing and Contributing

See more information about contributing.

turkserver-meteor's People

Contributors

alicexigao avatar elliotsalisbury avatar josephcc avatar kcarnold avatar kgao avatar ldworkin avatar meonkeys avatar mizzao avatar morteza avatar readmecritic avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

turkserver-meteor's Issues

More efficient round ending code

Calling endRound or startNewRound should actually cancel the timer for the outstanding round, rather than resulting in an unnecessary no-op callback.

Clean up janky worker data display in worker search

  • Replace list of e-mails received Ids with actual table of emails received, like how completed assignments is shown
  • Replace quals and values with a table of actual quals
  • Possibly display available times as well

This will probably require adding a join (possibly reactive, if we want to be 1337 about it) to the tsAdminWorkerData publication.

Example application

I happened upon turkserver-meteor today, it looks great!

I'm hacking around a bit trying to install it side by side with the wordplay example. Here's what I've done so far.

meteor create --example wordplay
cp smart.json wordplay

smart.json has the following:

{
  "packages": {
    "turkserver-meteor": {
      "path": "/Users/amarder/Desktop/turkserver-meteor/"
    }
  }
}

Then I try running wordplay:

cd wordplay
mrt

This installs turkserver-meteor and all its dependencies in .../wordplay/packages/ and the starts the wordplay game successfully. Unfortunately, when I browse to http://localhost:3000/turkserver I still see the wordplay game not the admin interface for turkserver.

Any suggestions on how to get a proof of concept up and running? I'd be happy to help however I can.

Occasional HIT submission issues.

Seems like turkSubmitTo is sometimes not set and the following error appears:

Oops, looks like there's no route on the client or the server for url: "https://tarsonis.eecs.harvard.edu/mturk/externalSubmit.

@ldworkin found this bug earlier. Not a deal breaker because people can just reload and submit. It seems like it can be fixed by just setting our own submission URL in these rare cases.

Other sources:

Can't Run the Example

Hi Andrew,

I tried to run the CrowdMapper, the example you included in the tutorial.

meteor --settings settings.json

However, I got an error.

Oops, looks like there's no route on the client or the server for url: "http://localhost:3000/."

The TurkServer seems working well.

screen shot 2015-07-08 at 10 01 48 pm

Could you give me any cues to address this issue?

Thanks,
Zhitao

Documentation

I've started a new documentation site here: https://turkserver.meteor.com, which we can fill in with pictures and references as development continues.

This site itself is a meteor app at /docs, so please feel free to contribute if you're in the mood for any writing.

Handling idle users from admin interface

This might be a feature request, but just wanted to see if it was hidden somewhere. Had an issue where a user submitted an assignment after I forced the experiment instance to end through the admin interface , but turkserver still shows them as connected. Is there a way to disconnect them?

Related, it would also be nice to be able to disconnect a user who has been sitting in an experiment without completing it for a significant amount of time. Is there a suggestion for how to do this, even programmatically?

Passing arguments to Partitioner.directOperation

I'm trying to pass in an argument to the function executed by Partitioner.directOperation but it doesn't seem to be working. Am I incorrectly specifying this or is that not currently possible? This doesn't seem to work and results in nothing being returned:

var userName = 'Me'
Partitioner.directOperation(function(userName){
    return Database.findOne({"User":userName});
});

And just to make sure I'm not messing up a mongo db query, the following two don't work either:

var userName = 'Me'
Partitioner.directOperation(function(userName){
    console.log(userName); //returns undefined
});

var userName = 'Me'
//Produces TypeError: string is not a function
Partitioner.directOperation(userName, function(){
    console.log(userName); 
});

The actual context is a Client that makes a Meteor.call('someMethod', Meteor.userId()) during the exit survey. Because they no longer have access to the partitioned collection I setup for the main experiment (because they're in the exit survey) I'm instead doing a server side collection lookup based on their Meteor user ID, hence the need to pass their id to Partitioner.directOperation

Error deploying on Meteor

I have followed up the steps outlined in the README and was able to set up the test server locally.However, Whenver I try to deploy I get the error

Deploying to turkserverexp.meteor.com. Bundling...
  downloading npm-bcrypt at version 0.7.7 ...  done

Errors prevented deploying:
While building the application:
error: mizzao:turkserver is not compatible with architecture 'os.linux.x86_64'

Any thoughts?

Unintuitive controls for deselecting current HIT to create a new HIT

There's seems to be an issue when trying to create a a new HIT from the HITs menu in the admin interface such that, if you click on an outstanding HIT then click away, the "Create New HIT" dialogue box fails to appear. It only seem to reappear when logging out of the admin interface, refreshing, and logging back in. It will appear initially before clicking on an outstanding HIT.

Select Batch Assigner from Admin Interface

I'm not sure if this is currently possible, but it would be convenient to be able to select and attach a new Assigner to a new Batch when it's created directly from the GUI admin interface.

Is there a currently suggested method for doing this programmatically? E.g. in server/

Tracker.autorun(function(){
    Batches.find().forEach(function(batch){TurkServer.Batch.getBatch(batch._id).setAssigner(new TurkServer.Assigners.MyAssigner);
});

Prevent inadvertent subscriptions to all of Meteor.users

As we discovered in @ldworkin's project today. This is tricky, because we need to consider the use of Meteor.users.find() in all of the following cases:

  • Server-side code: should be unaffected, or else bugs will ensue.
  • Unauthenticated publish: should throw an error, but hard to detect; possibly requires modifications to collection-hooks. Also, might not be a big issue because users always authenticate (except in HIT preview?)
  • Authenticated publish: should throw an error if not in group, and not admin. Detect using CollectionHooks.isWithinPublish().
  • Method call: should throw an error if not in group and not admin. Detect using DDP._CurrentInvocation.get().

Overhaul lobby API

  • Use TurkServer.Assignment consistently instead of using userIds
  • Provide a cleaner interface for taking people in and out of the lobby (no manual removal required)

Generalize login to support sources other than MTurk

As suggested by @ejolly and Yiling, this would be useful for

  • recording participation from subjects in physical labs
  • recruiting participants from systems outside of MTurk, paid or unpaid

It would also allow the combination of different sources of participants in the same experiment.

License

I realize that this is all very nascent. However, it would be nice to know what terms the code is offered under. Throwing up a simple statement and a link to a BSD, MIT, Apache, or GPL license would suffice.
Thanks!
Matt

Continued confusion about install

Meteor is getting easier to use. The elimination of meteorite was a real blessing. But this has left a lot of apps' docs in (even greater) shambles (than before), in particular with regard to the "installation instructions."

As they exist, the step-by-step instructions for the current version of turkserver-meteor do not work. There are a few "help me" threads that contain fixes, but those all continue to refer to mrt. This framework is clearly going to be invaluable to our work, but only once we actually get it to run.

Could you glance at those instructions, looking for the one or two tiny details that have been omitted, and point us in the right direction?

Thanks for (what looks to be) amazing work on this.
Garrison

Installation error

I receive the following error when I want to add TurkServer package to my app.

meteor add mizzao:turkserver
=> Errors while adding packages:

While selecting package versions:
error: Conflict: Constraint [email protected] is not satisfied by stylus 2.511.0_1.
Constraints on package "stylus":

Incredibly slow build times using Turkserver with Meteor 1.2

I've seen that some people have generally experienced issues with slower build times for apps after upgrading to Meteor 1.2, but any app I have that includes Turkserver is incredibly slow to build in comparison to apps that don't include Turkserver with the latest version of both Meteor and Turkserver. Are there any suggestions for dealing with this (e.g. package add options, removing irrelevant packages), or do we simply have to wait until the build speed issues are taken care of on the Meteor side of things?

"Voice of God" feature

Allows us to send messages to individual connected users who may be confused or something.

Add buttons to approve assignments and pay bonuses

Add buttons to the Assignments - Completed page to approve all assignments and pay all bonus. These would just be UI wrappers around Assignment.approve and Assignment.payBonus, but would be automatically called on every completed assignment in the current batch. Should probably have a "warning" popup that tells you how many workers would be affected, and how much it would cost, and then lets you confirm.

Cannot install

Hi,

I am running Ubunti 14.04 and have meteor installed. When trying to install turkserver into meteor (by following your steps), it gives following error messages:

~/crowdmapper $ meteor add mizzao:turkserver

analysis: updating npm dependencies -- json2csv, simple-statistics, zerorpc...
In file included from ../deps/msgpack/msgpack/type/fixint.hpp:22:0,
from ../deps/msgpack/msgpack/type.hpp:3,
from ../deps/msgpack/msgpack/object.hpp:409,
from ../deps/msgpack/object.cpp:18:
../deps/msgpack/msgpack/type/int.hpp: In function ‘void msgpack::operator<<(msgpack::object&, signed char)’:
../deps/msgpack/msgpack/type/int.hpp:145:76: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v : o.type = type::POSITIVE_INTEGER, o.via.u64 = v; }
^
../deps/msgpack/msgpack/type/int.hpp: In function ‘void msgpack::operator<<(msgpack::object&, short int)’:
../deps/msgpack/msgpack/type/int.hpp:148:76: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v : o.type = type::POSITIVE_INTEGER, o.via.u64 = v; }
^
../deps/msgpack/msgpack/type/int.hpp: In function ‘void msgpack::operator<<(msgpack::object&, int)’:
../deps/msgpack/msgpack/type/int.hpp:151:76: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v : o.type = type::POSITIVE_INTEGER, o.via.u64 = v; }
^
../deps/msgpack/msgpack/type/int.hpp: In function ‘void msgpack::operator<<(msgpack::object&, long int)’:
../deps/msgpack/msgpack/type/int.hpp:154:76: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v : o.type = type::POSITIVE_INTEGER, o.via.u64 = v; }
^
../deps/msgpack/msgpack/type/int.hpp: In function ‘void msgpack::operator<<(msgpack::object&, long long int)’:
../deps/msgpack/msgpack/type/int.hpp:157:76: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v : o.type = type::POSITIVE_INTEGER, o.via.u64 = v; }
^
In file included from ../deps/msgpack/msgpack/type.hpp:3:0,
from ../deps/msgpack/msgpack/object.hpp:409,
from ../deps/msgpack/object.cpp:18:
../deps/msgpack/msgpack/type/fixint.hpp: In function ‘void msgpack::operator<<(msgpack::object&, msgpack::type::fix_int8)’:
../deps/msgpack/msgpack/type/fixint.hpp:118:88: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v.get() < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v.get() : o.type = type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
^
In file included from ../deps/msgpack/msgpack/type.hpp:3:0,
from ../deps/msgpack/msgpack/object.hpp:409,
from ../deps/msgpack/object.cpp:18:
../deps/msgpack/msgpack/type/fixint.hpp: In function ‘void msgpack::operator<<(msgpack::object&, msgpack::type::fix_int16)’:
../deps/msgpack/msgpack/type/fixint.hpp:121:88: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v.get() < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v.get() : o.type = type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
^
../deps/msgpack/msgpack/type/fixint.hpp: In function ‘void msgpack::operator<<(msgpack::object&, msgpack::type::fix_int32)’:
../deps/msgpack/msgpack/type/fixint.hpp:124:88: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v.get() < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v.get() : o.type = type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
^
../deps/msgpack/msgpack/type/fixint.hpp: In function ‘void msgpack::operator<<(msgpack::object&, msgpack::type::fix_int64)’:
../deps/msgpack/msgpack/type/fixint.hpp:127:88: warning: enumeral and non-enumeral type in conditional expression [enabled by default]
{ v.get() < 0 ? o.type = type::NEGATIVE_INTEGER, o.via.i64 = v.get() : o.type = type::POSITIVE_INTEGER, o.via.u64 = v.get(); }
^
../deps/msgpack/unpack.c: In function ‘template_callback_root’:
../deps/msgpack/unpack.c:59:1: warning: missing initializer for field ‘type’ of ‘msgpack_object’ [-Wmissing-field-initializers]
{ msgpack_object o = {}; return o; }
^
In file included from ../deps/msgpack/msgpack/unpack.h:22:0,
from ../deps/msgpack/unpack.c:18:
../deps/msgpack/msgpack/object.h:76:22: note: ‘type’ declared here
msgpack_object_type type;
^
../binding.cc:28:17: fatal error: zmq.h: No such file or directory

include <zmq.h>

^
compilation terminated.
make: *** [Release/obj.target/zmq/binding.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/home/schalk/.meteor/packages/meteor-tool/.1.1.4.xvre8c++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:267:23)
gyp ERR! stack at ChildProcess.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:820:12)
gyp ERR! System Linux 3.13.0-37-generic
gyp ERR! command "node" "/home/schalk/.meteor/packages/meteor-tool/.1.1.4.xvre8c++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/schalk/crowdmapper/packages/analysis/.npm/package-new-1o9f3rt/node_modules/zerorpc/node_modules/zmq
gyp ERR! node -v v0.10.36
gyp ERR! node-gyp -v v1.0.1
gyp ERR! not ok

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the zmq package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls zmq
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 3.13.0-37-generic
npm ERR! command "/home/schalk/.meteor/packages/meteor-tool/.1.1.4.xvre8c++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/node" "/home/schalk/.meteor/packages/meteor-tool/.1.1.4.xvre8c++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/bin/npm" "install"
"[email protected]"
npm ERR! cwd /home/schalk/crowdmapper/packages/analysis/.npm/package-new-1o9f3rt
npm ERR! node -v v0.10.36
npm ERR! npm -v 1.4.28
npm ERR! code ELIFECYCLE
npm ERR! not ok code 0

=> Errors while adding packages:

While building package analysis:
error: couldn't install npm package
error: File not found: .npm/package/node_modules/simple-statistics/src/simple_statistics.js

Automated checking for duplicate IP addresses

For the future, to minimize smurfing from when one person joins synchronous games from multiple accounts. IP tracking is currently turned on but we don't really do much with it other than record it.

Smurfing happens rarely, in my experience. Sometimes this is legit when it's actually two people behind the same NAT, but usually we want to be able to investigate and see what is going on.

Worst case smurfing that's happened to me is when 25 accounts from India did the same HIT consecutively, but that was in 2011 and I haven't seen it since Amazon clamped down on identity tracking.

'node-gyp rebuild' installation error when adding turkserver to a meteor app

Hi Andrew,

I was wondering if you could help me with the following problem. Today I was trying to add turkserver to my Meteor application, but I kept getting this error:

C:\Users\PC4all\Meteor\exp_cs>meteor add mizzao:turkserver

mizzao:turkserver: updating npm dependencies -- request, libxmljs,
validator, querystring, async, deepmerge...
gypnpm ERR! Windows_NT 6.1.7601
npm ERR! argv
"C:\Users\PC4all\AppData\Local.meteor\packages\meteor-tool\1.1.3\mt-os
.windows.x86_32\dev_bundle\bin\node.exe"
"C:\Users\PC4all\AppData\Local.meteor\packages\meteor-tool\1.1.3\mt-os
.windows.x86_32\dev_bundle\bin\node_modules\npm\bin\npm-cli.js"
"install" "[email protected]"
npm ERR! node v0.10.36
npm ERR! npm v2.7.3
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 7
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the libxmljs package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls libxmljs
npm ERR! There is likely additional logging output above.

=> Babel active on file extensions: es6.js, es6, jsx
=> Errors while adding packages:

While building package mizzao:turkserver:
error: couldn't install npm package

I am developing my Meteor application on a Windows 7 machine and from what I have been able to gather from posts on forums, the error seems to be related to that fact (I did not find any posts describing the same problem on Linux machines).

Any help would be greatly appreciated!

Thanks,
Zlatko

How to contact users via mail glyphicon

Is there something additional required to setup this functionality or should it simply work based on the AWS key info in the settings file? Workers don't seem to be receiving messages sent using the turkserver admin interface.

Make startNewRound safe for reentrancy

  • add an index on RoundTimers
  • use upsert to determine whether to schedule a round end.
  • check and end round in one database operation
  • add tests if possible

User login lost when a HIT opens simultaneously in multiple tabs

Originally reported by @ldworkin. Seems like something like the following happens (more likely when a HIT is banked):

  • User opens HIT from dashboard (1)
  • User accidentally opens the same HIT in a separate tab, from dashboard (2)
  • HIT 1 authenticates and stores login token to local storage
  • HIT 2 authenticates but does not see the local storage token from HIT 1, as that is on a 3 second poll
  • HIT 2 overwrites the login token in local storage, causing HIT 1 to log out and be unresponsive

A workaround is to tell users not to open the HIT in multiple tabs, but we should make this more robust. It does seem like Meteor in general is less likely to observe this issue because there is no URL-generated auto login. It is a rather edge case when two URL logins are opened nearly simultaneously.

Handle completed assignments that may not have submitted properly

Often times trying to access any options from the Assignments-Completed menu (i.e. Refresh Assignment States, Approve All Assignments or Pay All Bonuses) do not work and return:
Error: GetAssignment: This operation can be called with a status of: Reviewable,Approved,Rejected (1448302123263) [500]

This happens despite other Mturk API queries made by TurkServer working just fine (e.g. checking account balance, creating new HITs, adding assignments, etc). Restarting the meteor app+Turkserver, or the hosting server doesn't seem to work. Functionality only seems to return randomly after some time has passed not using TurkServer, or if the mongodb is wiped and the entire bundled app redeployed to a server with a clean database.

Refactor admin/experimenter interface into separate app

This would:

  • reduce the amount of code transmitted to experiment clients
  • not force experiments to use the packages required by the admin console
  • allow for easier development of the console

The core TurkServer code would need to be put in its own package. The main hurdle is to figure out a way to easily deploy two meteor apps on the same DB and have oplogging set up properly.

Issue with Meteor.call()/Meteor methods after page reload

I was wondering if you have ever experienced an issue like the following.

When people accept our experiment HIT, we initially keep them in the lobby and we set their lobby status to "not ready". Before their status is changed to "ready" they have to go through a couple of pages (one with a short outline of the HIT, and another one with full description of the game). They navigate from one page to the next by simply clicking a button. When the corresponding button is clicked, we invoke a Meteor method on the server side (using Meteor.call()) which updates the document of that user in a collection which keeps track of the user's progress before their lobby status is changed to ready, and this document is used to render the appropriate template on the client side (much like the "Recruiting" collection is used in the Prisoner's Dilemma app of @ldworkin).

Everything seems fine if people do not reload their page - they easily navigate through all these pages. However, if, for some reason, they reload their page, the Meteor.call() statement invoked upon a button click, does not start the execution of the corresponding server-side Meteor method (though, the click event itself is registered on the client side). The funny thing is that upon restarting the server (which I do by simply re-deploying the app on Modulus), all calls to Meteor methods are processed (multiple clicks before the restart result in equally many executions of the corresponding Meteor method). It is as if they are postponed until the client-server connection is "properly" re-established with the server restart.

Do you have any ideas on where the problem may lie?

Any help would be very much appreciated!

Basic instructions don't work

Following the basic instructions isn't sufficient to get the /turkserver route working.

meteor create someapp
cd someapp 
git clone --recursive https://github.com:HarvardEconCS/turkserver-meteor.git packages/turkserver
mrt update turkserver
meteor

The first issue seems to be that running mrt update turkserver from the someapp directory does nothing, however, running it from the turkserver directory does.

Missing documentation for basic setup and hosting.

I've looked around, but there doesn't seem to be any documentation on basic project setup and workflow for integrating directly with Mechanical Turk. The Crowd Mapper project is really a bit dense to try to parse through and figure out a beginning workflow. Does something like this exist? If you can provide me with a real good starting point, I'd be happy to produce some documentation to help others that might be looking to work with TurkServer-Meteor.

Add a "get batch by name" method

Avoid the need to query Mongo with var batchId = Batches.findOne({name: "batchName"})._id before using any Batches API method. Better to have it all within the API when possible. (Occurred to me when writing the tutorial.)

Not a TurkServer issue: No route on the client or the server for url

It seems to me that this is more of an iron-router and not a TurkServer issue, but I could really use some help. I have a collection Recruitng and when I query it on the client side within a template helper, there seems to be no problem. For example, the following works perfectly fine.

Template.lobbyRecruiting.helpers({
    active: function() {
        var obj = Recruiting.findOne();
        // calculate and return something
    }
});

But, if I include code (again, on the client side) like

Tracker.autorun( function() {
    var obj = Recruiting.findOne();
    // do something
});

or

Recruiting.find().observeChanges({
    added: function(id) {
        // do something
    }
});

then the following template

"Oops, looks like there's no route on the client 
or the server for url: "http://myapp.meteor.com/some_route." 

gets shown for every some_route that I have defined.

What's interesting is that the TurkServer routes (http://myapp.meteor.com/turkserver/) continue to work without any problems. Also, I do not get any errors on the server side. And it's worth mentioning that the Recruiting collection is not being partitioned. But since I was able to query it and retrieve the needed data within template helpers, I don't think this is the problem.

Any help would be greatly appreciated!

TurkServer now requires Meteor 1.2

Hi people,

Recently I am not being able to install turkserver successfully. I followed the instructions, first I git clone the repo, then I executed the command:

meteor add mizzao:turkserver

an error appears as:

screen shot 2015-10-02 at 16 36 36

Previously, I could not only successfully install turkserver, but also deploy apps using turkserver on meteor.com.

Here is package info of my app:
meteor-platform
accounts-ui
accounts-password
benjaminrh:event-hooks
accounts-base
mizzao:user-status
sgi:sprintfjs
momentjs:moment
npm-bcrypt
iron:router
mizzao:turkserver
coffeescript
mizzao:partitioner
underscore
twbs:bootstrap
d3js:d3
d3
grigio:babel
sacha:spin
matb33:bootstrap-progress-bars
meteorhacks:kadira
peppelg:on-login-logout
cfs:standard-packages
cfs:filesystem
mquandalle:bower

Here is version info of my app:
[email protected]
[email protected]
[email protected]
[email protected]
aldeed:[email protected]
[email protected]
[email protected]
benjaminrh:[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
cfs:[email protected]
[email protected]
[email protected]
[email protected]
d3js:[email protected]
dandv:[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
grigio:[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.