GettingStarted

From crowdresearch
Revision as of 23:41, 10 May 2015 by Rajan (Talk | contribs) (DEMO or DIE: What is the Release Cycle)

Jump to: navigation, search


Research & Engineering

One of the goals of computer scientists & researchers is to discover innovative ideas and bring them to the real world. We aim to build systems that will help harness collective intelligence of thousands of people around the globe.

Since last few months we have been building the research ideas focused on four core foundation :

  1. Micro+macrotask market: Could the same marketplace scale from 2 to N people not just labeling images, but also Photoshopping my vacation photos or mixing my new song?
  2. Input and output transducers: Tasks get vetted or improved by people on the platform immediately after getting submitted, and before workers are exposed to them. Results are likewise vetted and tweaked.
  3. External quality ratings: Metaphor of credit ratings: rather than just people rating each other, have an (external?) authority or algorithm responsible for credit ratings (A, B, C, etc.)
  4. Open governance: Leadership shared by requesters, workers, (researchers?). Policy changes can be worked out by this group

Getting Started with the Research Foundations

  • Crowdsourcing Research watch After 49.55 minutes Professor Bernstein gives amazing overview of the current state of the research in the crowdsourcing. Slides: pdf
  • Foundations Hangout watch & Slides pdf
  • Synthesis of the ideas Hangout watch & slides
  • Previous Milestones


How to setup the environment?

Fig 1. System Architecture

Local environment

  1. Please go through README

Current folder structure:

  1. Backend: crowdsourcing Serializers, Validators, Viewsets, Models, Views, tests
  2. Front End statcfiles css, js (angular services, controllers) Angular routes Configurations, templates html
  3. Admin csp

System Architecture

  1. Fig 1 shows the overview of the architecture. For more Information please see
  2. Data Models
  3. Front End
  4. Git Strategy
  5. Active Branches: Develop, Staging, Production

If you have questions

  1. Check existing FAQs.
  2. If you don't get answer: add your question to the FAQs list, ping on slack #infra channel, escalate the issue to DRIs


What to work on?

Working on the existing issues

  1. Take a look at the Open Issues
    Fig 2. Release Cycle & Tags
  2. Helpful search tags: Unassigned Open & Critical, Need Backup ,
  3. Choose the issue you would like to work on
  4. Add it to the google doc: Issue Name, Your Name, Your Git Hub Id
  5. If you want to raise request for the new issue or feature (see the section below)

Creating New issue/feature Requests:

  1. If you want to create new issue, task, feature request add it the Fig 2 Github Issues
  2. The Labels in the Fig 2 highlight various tags that needs to be associated with the issue.
  3. Description Write a clear description explaining the new request. Add below tags:-
  4. Add tags 0. Feature Request, 0. Please Prioritize
  5. Add the one tags from 1 to 9 describing category of your request
  6. Assign the issue to yourself and in the description add following DRI handle so that immediate notification will be sent:
# Category Name Add DRI handles in the Description
1 DESIGN @neilthemathguy
2 FRONT END ENGINEERING @nistala, @neilthemathguy, @dmorina
3 SYSTEMS @dmorina, @elsabakiu, @neilthemathguy, @ksetyadi
4 DATA @dmorina, @elsabakiu, @neilthemathguy, @ksetyadi
5 DEPLOYMENT @ksetyadi, @dmorina, @neilthemathguy
6 SECURITY @ksetyadi, @dmorina, @elsabakiu, @neilthemathguy
7 ANALYTICS @neilthemathguy
8 TESTING @swapagarwal, @dmorina, @ksetyadi, @neilthemathguy
9 OTHERS @dmorina, @ksetyadi, @nistala, @neilthemathguy


What are the categories?

Design Dashboard Dashboard Class Class Class


What is the Release Cycle

Three Phase Cycle

  1. Development Saturday, Sunday, Monday, Tuesday, Wednesday
  2. Staging Ready for Production Thursday
  3. Released to Production Friday

How to submit the work

  1. Finish the development and testing
  2. Create the branch with the FEATURE NAME and tag ACTIVE TAG
  3. Add the GIT issue number to the request, it will help to cross reference the release
  4. Create the PULL REQUEST
  5. Update the description of the issue

Timeline for each week

  1. We have weekly milestone schedule
  2. Each release should be 5 days: Saturday, Sunday, Monday, Tuesday, Wednesday
  3. The Pull Request should be raised on Wednesday
  4. DIRs should finish the Merge by Thursday/Friday
  5. Saturday is the DEMO Day

I Need Help

  1. Immediately Ping DRIs
  2. Raise Help Needed Tag on the Git Issue you are working on
  3. In case you need more resources/backup Raise Need Backup Resource Tag on the Git Issue you are working on
  4. The Pull Request should be raised on Wednesday
  5. DIRs should finish the Merge by Thursday/Friday
  6. Saturday is the DEMO Day


Coding Guidelines


Collaboration Guidelines


Example: Hello World Tutorial

Your first contribution

First go through the setup and To get started, we have introduced a simple tutorial to add yourself to the list of contributors on our dev site. It should introduce you to angular.js and to the pull request process on github. This tutorial goes through a subset of the tutorial listed here: https://guides.github.com/activities/hello-world/. You should go through this tutorial to familiarize yourself with git. A sample pull request has been created to go show the intended PR that you will create at the end of this tutorial - https://github.com/crowdresearch/crowdsource-platform/pull/40

Creating a new branch

Create a new branch after checking out the main repo using the following commands.

  1. cd into your root folder of the crowdresearch repo.
  2. git fetch -a
  3. git checkout develop2
  4. git branch [branch-name]
  5. git checkout [branch-name]

Now you're all set to start writing some code!

Writing code

Frontend code is under the /staticfiles folder.

  1. Go to: https://github.com/crowdresearch/crowdsource-platform/blob/develop2/staticfiles/js/crowdsource.routes.js#L71
  2. Create a new url for your own profile page underneath existing urls.
  3. Upload your profile image to: https://github.com/crowdresearch/crowdsource-platform/tree/develop2/staticfiles/images/contributors. We recommend uploading an image that is 200x200 px.
  4. Create a new template at /staticfiles/templates/contributors/<yourname.html>
  5. You can design this page however you'd like.
  6. Now, add yourself to the list of contributors by going to: https://github.com/crowdresearch/crowdsource-platform/blob/develop2/staticfiles/templates/contributors/home.html
  7. Copy the following code snippet and add it after existing contributors. Edit it to include your name and your url.
          <div class="col-sm-2 col-xs-4 thumb">
            <a class="contributor-thumb" href="/contributors/<your url>">
              <img class="thumbnail img-responsive" src="/static/images/contributors/<image_name>.png" />
              <span><Your Name></span> 
            </a>
          </div>

Pushing changes to your branch

Now you need to add your changes. Go back to your terminal and cd into the root crowdsource-platform folder.

  1. git status - This should show you the changes you've made and the files you've edited.
  2. git add staticfiles/templates/contributors/home.html
  3. git add staticfiles/templates/contributors/<your_name_file>.html
  4. git add staticfiles/js/crowdsource.routes.js
  5. git add staticfiles/images/contributors/<your_name_image>.jpg
  6. git commit -m "Adding myself to contributor's page"
  7. git push origin [branch_name]

Creating a Pull Request

We use git pull requests to merge code into the main codebase. Your code is reviewed by DRIs (don't worry we're nice :)) and then approved, after which you can merge it.

  1. Go to https://github.com/crowdresearch/crowdsource-platform/compare
  2. Change compare to your [branch-name] from above.
  3. Click Create pull request.
  4. You should see a list of your changes.

Now notify your DRIs on the infra slack channel by pasting a link to your PR.