Code Monkey home page Code Monkey logo

expfactory-deploy's Introduction

The Experiment Factory

DOI DOI Gitter chat

expfactory/static/img/expfactoryticketyellow.png

See our documentation for getting started. If you are new to containers, read our background or paper first. If you want a more guided entry, see the detailed start

The Experiment Factory is software to create a reproducible container that you can easily customize to deploy a set of web-based experiments.

Citation

If the Experiment Factory is useful to you, please cite the paper to support the software and open source development.

Sochat, (2018). The Experiment Factory: Reproducible Experiment Containers. Journal of Open Source Software, 3(22), 521, https://doi.org/10.21105/joss.00521

Contributing

We have many ways to contribute, and will briefly provide resources here to get you started.

How to Contribute

If you are a developer interested in working on the Experiment Factory software you should read out contributing guidelines for details. For contributing containers and experiments, see our user documentation. If you have any questions, please don't hesitate to ask a question. You'll need to lint your code using black:

$ pip install black
$ black expfactory --exclude template.py

Code of Conduct

It's important to treat one another with respect, and maintain a fun and respectful environment for the open source community. Toward this aim, we ask that you review our code of conduct

Background

It's predecessor at Expfactory.org was never able to open up to the public, and this went against the original goal of the software. Further, the badly needed functionality to serve a local battery was poorly met with expfactory-python as time progressed and dependencies changes.

This version is agnostic to the underlying driver of the experiments, and provides reproducible, instantly deployable "container" experiments. What does that mean?

  • You obtain (or build) one container, a battery of experiments.
  • You (optionally) customize it
    • custom variables (e.g., a study identifier) and configurations go into the build recipe
    • you can choose to use your own database (default output is flat files)
    • other options are available at runtime
  • The container can be easily shared.
  • You run the container, optionally specifying a subset and ordering, and collect your results

If you build on Docker Hub anyone else can then pull and use your exact container to collect their own results. It is exact down to the file hash. Note that bases for expfactory were initially provided on Docker Hub and have moved to Quay.io. Dockerfiles in the repository that use the expfactory-builder are also updated. If you need a previous version, please see the tags on the original Docker Hub.

Experiment Library

The experiments themselves are now maintained under expfactory-experiments, official submissions to be found by expfactory can be added to the library (under development) to be tested that they meet minimum requirements.

expfactory-deploy's People

Contributors

dependabot[bot] avatar dev-logan-bennett avatar rwblair avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

expfactory-deploy's Issues

Defer mturk state to mturk api

For once mturk functionality is implemented. View for active assignments should hit the aws api directly so that we don't have to try and keep fresh state in the database that mirrors the state in their api.

Group versions of tasks

  • There are different but equally valid instantiations of an experiment (e.g. using a stop signal with a tone instead of a star) across groups as well as within groups. These should be clumped under standardized names (e.g. “stop signal”), and you should be able to choose the instantiation of the task by group/tag (e.g. poldrack__fmri, poldrack__network, ABCD [although obviously not the ABCD group’s stop signal haha], etc.)
  • If this happens, it would be cool to link the high level task (e.g. stop signal) with the cognitive ontology for a description of the task and the constructs it’s associated with
  • On that note, improved integration with the cognitive ontology could be cool for task/construct exploration. This is vague. Previously this was attempted with the config jsons, but these have not been consistently followed. Maybe if expfactory detects blank sections in the config, it could offer the user a search window to look up cognitive constructs and tag their task.

Setup documentation and sensible defaults

  • Write documentation on docker compose file and settings locations
  • add basic .envs/.local/* files to repo so compose can work out of the box.
  • add admin user to .envs/.local/.django to be autocreated on first startup.

@Dev-Logan-Bennett feel free to add any other things that could of made setup better.

Have a way to have ‘projects’/groups.

Users can be assigned to a project [which can encompass 1 or more batteries], and download data from that project, without having been the one who created that batteries within that project.

More flexibility with response options with surveys.

Not necessarily expfactory-deploy issues but making an issue here since its from the wishlist.

  • Because of the rigidity of the survey template, some of our surveys are coded as experiments, which leaves them open to more bugs, and an inconsistent user experience for our participants - i.e. instead of just clicking a radio button in a survey, you have to click and hit enter for responses in experiments
  • This also is frustrating from a researcher perspective -1. Having to code them, and 2. Many times I’ve been looking for something I know is a survey, but it’s located in expfactory-experiments instead.
  • The following are a list of behaviors that expfactory-surveys doesn’t support:
    1. If the presence of a question is logically dependent on the answer to a previous question, surveys don’t have a way of supporting that behavior. All questions will be presented.
    2. Allow different types of survey questions (i.e., slider), or have an easier way for researchers to create ‘plugins’ for different survey question types.
    3. If a question type == numeric, allow the researcher to be able to define ranges for that numeric value

General info on batteries and their deployments.

It would be nice to go to a battery, and be able to see how they have been deployed, either via local links or through mturk. There is a tab that contains info about mturk deployment, but many useful information is missing or is inaccurate. There is no info about local links deployment - could have a separate tab for this.

Local link info tab:

  • What links were given out and when / Which links were started and when
  • Add a range of time for which links could be active
  • lists current workers, how many experiments they have done, which experiments they have done, what experiments they still have to do, which workers are finished
  • Which workers have consented and date of consent (IRB purposes)

Mturk info and operations:

  • Approve / reject / contact / list current working subs / blacklist
  • Much of the information was located on mturk site (or not at all), there were some bugs with the info collected and presented by expfactory, info isn’t being dynamically updated (i.e., subs who have returned the HIT will still show up as in progress on expfactory.org)
  • lists current workers, how many experiments they have done, which experiments they have done, what experiments they still have to do, which workers are finished
  • Which workers have consented and date of consent (IRB purposes)

MVC for battery creation.

  • Need to be able to add and order specific versions of experiments and their libraries.
  • Be able to edit group ownership of battery itself.

BIDS style download format for experimental data.

Potentially: https://psych-ds.github.io/

  • Have options for download size - single task within battery, single subject, all subs of a task within a battery, whole batteries...etc
  • Have options for download type - json, dict, csv, tsv...etc
  • Have a BIDS-like structure for downloaded data
  • Battery-name and task-name should be consistent with each download
  • Naming structure of tasks should also be consistent with each download
  • Would also be nice if each download outputted a dataset_description that has links to the experiment(s) used on Expfactory, date of download, participants in download

Standardize/improve task naming and data downloading.

The task directory names can be noticeably different from the “official” name that e.g. shows up in a search - when collaborating with others I may have to view their code / config file to make sure I’m grabbing the correct task. It might be nice to standardize these directory names (e.g. task-taskname_group-groupname.js) and have a check for formatting a la BIDS. Somewhat niche, but this did happen while setting up Matilde’s battery, and standardized naming could just help organization in general.

At the same time, expfactory does not like if you have numbers, or capital letters and quietly prevents you from uploading tasks. Either allow these things OR have clear warnings about those, so ross doesn’t have to go into the guts and figure out why tasks aren’t uploading correctly

Maybe add a validator for checking naming and config info?

Small issues that probably won’t exist after a refactoring but let’s make sure that is the case

  • If you search for an experiment, click on one, then go back a page, the query will stay in the search box, but the search will not have re-occurred (all experiments are present in alphabetical order)
  • You cannot update multiple task orders at once when editing a battery. You have to update a single task's order and save the battery.
  • Every time you edit a task’s order number, it takes you back to the first page of the experiment, even if you were on (e.g.) the 3rd. Lots of redundant movement is required; leads to a slow and frustrating battery creation process
  • When you click on an experiment/survey, it logs you out! But if you click the top middle 'Experiment Factory', it logs you back in?
  • When doing an action on expfactory.org (i.e., updating experiments, deleting batteries), the landing page is quite odd. For example, if I were to delete a battery from ‘my batteries’, I land back on to the ‘all batteries’ page. It would be quite helpful to have the landing page stay on ‘my batteries’. There are other actions with odd landing pages, but here are some odd landing pages I’ve (Jamie) encountered.
  • When updating experiments, it brings you to this page where it lists all of experiments again, but doesn’t allow you to update another experiment until you click the ‘Experiments’ button on the header

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.