Giter VIP home page Giter VIP logo

vcweb's People

Contributors

accraze avatar alee avatar dependabot[bot] avatar dgalafassi avatar tgpatel avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

tgpatel kborash

vcweb's Issues

async processing support

Sending experiment registration emails & subject pool invitation emails to large number of users are raising a need for proper server-side async processing support (or at a minimum hacking it together client-side by disabling buttons via javascript etc).

refactor participant dashboard redirects

integrate account profile updating and subject pool invitation signups into the participant dashboard instead of convoluted redirect logic in core.views.dashboard

refactor participant and group data value initialization, transfer, and API

This is an area that needs improvement, both documentation-wise and in terms of framework / API support

round started handlers must invoke initialize_data_values with the appropriate parameters in order to initialize data values. If any errors occur in data value initialization, subsequent rounds will fail to run / load properly. This should be declarative instead, defined via the ExperimentConfiguration / RoundConfiguration objects. We can work to come up with a scheme for declaring how participant and data values can be transferred from round to round, and whether or not a round should transfer data values across or not.

Participants should create data values as they participate and generate data, not created at the start of the round and then updated when they generate data. For instance, the boundary effects experiment creates a new harvest decision data value every time a participant selects a harvest decision. The one that "sticks" is their most recent one with is_active=True.

The creation of and transfer of essential group data values has to occur when a round begins, so this may stay the same.

new experiment metadata enhancements

Consider https://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-option---template to create an experiment app template with boilerplate needed to set up a new ExperimentMetadata type including round started handlers, round ended handlers, customizing ExperimentMetadata properties, parameterization, etc.

Another possibility is a custom django management command like ./manage.py newexperiment that uses startapp behind the scenes to create a new vcweb experiment app skeleton.

signals triggering twice

Causing registered experiment handlers to execute twice, advancing the round twice, sending two sets of emails, etc.

refactor update_round_configuration

I think core.views.update_round_configuration can benefit from a similar refactor as the other configuration endpoints by pushing logic into the form. What do you think?

lfp: group cluster treatment

implement group clustering treatment where payment is dependent on performance of all groups within the cluster instead of just the group.

contact email reply-to

Set reply-to header on contact form email to the authenticated user's email if logged-in

duplicate RoundParameterValues

For experiment 115:

In [7]: [rpv.date_created for rpv in RoundParameterValue.objects.filter(parameter__name='regrowth_rate', round_configuration=rc)] Out[7]:
[datetime.datetime(2014, 9, 30, 12, 49, 22, 145468),
datetime.datetime(2014, 9, 30, 12, 49, 22, 146903),
datetime.datetime(2014, 9, 30, 12, 49, 22, 150136),
datetime.datetime(2014, 9, 30, 12, 49, 22, 153204)]

experiments with invalid number of participants

It is possible to create "degenerate" experiments where the number of participants and groups isn't enough to actually run the experiment properly. Should provide some level of validation to warn the user that this is occurring.

Example: creating 10 test participants for the boundary effects experiment AB/BA/AD create 3 groups, 2 with 4 participants and 1 with 2 participants. The group that doesn't get linked to a cluster will end up being degenerate and prevent the experiment from running properly.

This isn't a huge issue because the group requirements is a research protocol issue (register exact # of participants) but we should at least prevent the server side from dying or leaving the database in an inconsistent state.

create scheduled audit tasks

Hook into system_daily_tick or similar signal to perform periodic audits:

  1. set participants can_receive_invitation = False if they are no longer an undergraduate according to asu web service calls
  2. permissions checks on participants & experimenters
  3. generate weekly activity log email with aggregate stats on participant signups, experiment status changes (run or archived), invitations sent

subjectpool: graduate student invitation

participant pk 2042 had an Invitation generated even though their class status is Graduate. It's possible that they changed their class status after the Invitation was generated but please verify that Invitation generation logic is only including undergraduates.

subject pool: add wait list with configurable size

Sometimes invalid participants sign up and have to be removed (like graduate students, etc.). Would be nice to have a wait list of configurable size N that can be promoted to signed up participants in the experiment session when already-signed-up participants are removed.

raven test not working

Despite lots of error reports from sentry, it appears that django integration with sentry is broken at the moment for both vcweb and vcweb-dev.

./manage.py raven test
Sending a test message... DEBUG 2014-09-30 14:59:07,436 [raven.contrib.django.client.DjangoClient|send_remote:563] Sending message of length 4292 to https://vcsentry.asu.edu/api/1/store/
success!
Event ID was '0d756ae953f94807a04f7883372b3db8'
ERROR 2014-09-30 14:59:07,480 [sentry.errors|_target:141] Failed processing job
Traceback (most recent call last):
  File "/opt/virtualenvs/vcweb/lib/python2.7/site-packages/raven/transport/threaded.py", line 139, in _target
    callback(*args, **kwargs)
  File "/opt/virtualenvs/vcweb/lib/python2.7/site-packages/raven/transport/threaded.py", line 161, in send_sync
    failure_cb(e)
  File "/opt/virtualenvs/vcweb/lib/python2.7/site-packages/raven/base.py", line 566, in failed_send
    self._failed_send(e, url, data)
  File "/opt/virtualenvs/vcweb/lib/python2.7/site-packages/raven/base.py", line 538, in _failed_send
    body = e.read()
  File "/usr/lib64/python2.7/socket.py", line 351, in read
    data = self._sock.recv(rbufsize)
  File "/usr/lib64/python2.7/httplib.py", line 543, in read
    return self._read_chunked(amt)
  File "/usr/lib64/python2.7/httplib.py", line 597, in _read_chunked
    raise IncompleteRead(''.join(value))
IncompleteRead: IncompleteRead(3987 bytes read)

participant profile page cannot save

Going to /accounts/profile/ as an undergrad student shows a profile page where the save button is forever disabled.

Steps to reproduce:

  1. drop into the django shell, select a random user participant, set the password and save the user
  2. login as that user
  3. notice you can't do anything after you login.

lfp: large group treatments

2 treatments
group size of 20
no leaderboard
Group average score: 60
Your neighborhood average score: 77
Your total point contribution: 100

T1:
everyone connected, standard fully connected group
can see group score (payment = group average * $.02)
communication goes to entire group

T2:
ego net / lattice network structure, each participant is connected to 4 other participants
neighborhood info and chat
can see group score (payment = group average * $.02)
can see neighborhood score (average contributions of everyone connected to you)

(DONE) add preference questions support to data model dynamic group sizes to maximize group heterogeneity / similarity add time as a participant resource constraints, where a participant is endowed with a set of time and can allocate it to different activities information is spread across network structures

Experiment / ExperimentSession integration

create server endpoint and wire it up to an interface to allow experimenters to automatically move all signup participants from a given ExperimentSession into a given Experiment

Also look into replacing Experiment.start_date with ExperimentSession.scheduled_date. I think this means that Experiments will have a OneToOne with ExperimentSessions. This makes our data model messy though and allows degeneracy as ExperimentSession still needs the ManyToOne with ExperimentMetadata as not all scheduled subject pool experiment sessions are related to vcweb Experiments.

Consider creating an ExperimentSession automatically when creating an experiment that captures the start date and other metadata.

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.