turkserver / turkserver-meteor Goto Github PK
View Code? Open in Web Editor NEWWeb-based, real-time behavioral studies and experiments using Meteor
Home Page: http://turkserver.readthedocs.io
License: MIT License
Web-based, real-time behavioral studies and experiments using Meteor
Home Page: http://turkserver.readthedocs.io
License: MIT License
Calling endRound
or startNewRound
should actually cancel the timer for the outstanding round, rather than resulting in an unnecessary no-op callback.
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
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.
Could you give me any cues to address this issue?
Thanks,
Zhitao
Currently, assignment information is published just with instances. Having it published over the entire course of a HIT/task would allow for
Changes in https://github.com/HarvardEconCS/turkserver-meteor/blob/master/lib/turkserver.coffee
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:
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]
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?
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.
This came up during testing. The fix for Meteor-Community-Packages/meteor-partitioner#13, committed in 0.5.7 causes a weird issue where HIT logins throw a partitioner error due to the way collection-hooks retrieve docs after an update.
This can be replicated by simply reloading a tab that is running a turkserver Tinytest with mizzao:[email protected]
. Need to think about the best way to fix this.
The README.MD says that this is a "plugin." Is this meant to be in myapp/packages
and then added with meteor add turkserver-meteor
, or something different altogether?
Thanks
Matt
While we're actively developing features, we're keeping track of them in a Trello (just like Meteor does) instead of GitHub issues:
https://trello.com/b/rQIA4Qo5/turkserver-meteor
Please feel free to comment on any of the bits there.
In https://github.com/HarvardEconCS/turkserver-meteor/blob/master/lib/timers_server.jsx the code to update a round end time is in two places (startNewRound
and endCurrentRound
) but onRoundEnd
is only called in one of them.
This should be fixed after @ldworkin's current project reaches a good break point.
As suggested by @ejolly and Yiling, this would be useful for
It would also allow the combination of different sources of participants in the same experiment.
If a user disconnects in the middle of an instance, their record in Partitioner's Grouping collection stays around, and if they ever try to reconnect, "User already in group" errors get thrown.
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.
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.
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":
Originally reported by @ldworkin. Seems like something like the following happens (more likely when a HIT is banked):
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.
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.
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
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?
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
RoundTimers
upsert
to determine whether to schedule a round end.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:
CollectionHooks.isWithinPublish()
.DDP._CurrentInvocation.get()
.With moment 2.10.3 the following warning appears:
Deprecation warning: moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779
We should either use utcOffset
, or just use moment timezone and display standard timezone abbreviations.
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:
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!
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.
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);
});
This would:
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.
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?
One click message sending would help us respond to questions in the exit survey.
Noticed this on other HITs - the users are cookied or otherwise tracked so they can be identified even when viewing.
We can do this as well, and not have to hard pull the logout when someone submits. This would fix some other issues too.
This would also fix https://trello.com/c/bbTJnM4m/68-can-t-resume-login-into-exit-survey-without-first-clearing-browser-cache
HIT limits should be settable on the batch object instead of as a global settings variable.
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.)
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.
It looks like the command "git clone --recursive https://github.com:HarvardEconCS/turkserver-meteor.git packages/turkserver" should have a slash rather than a colon following "github.com."
Also replace janky table with reactive-table where possible.
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
TurkServer.Assignment
consistently instead of using userId
sCode path not accounted for after refactor, in
https://github.com/HarvardEconCS/turkserver-meteor/blob/master/lib/timers_server.jsx
Add test and fix.
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.
Tutorial link: http://ldworkin.github.io/turkserver-tutorial/
Right now it results in a page not found. I can find the tutorial with the cache, but I just wanted to let you know that it was down.
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!
This will probably require adding a join (possibly reactive, if we want to be 1337 about it) to the tsAdminWorkerData
publication.
Allows us to send messages to individual connected users who may be confused or something.
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
^
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
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.
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.