Bounties

From BoofCV
Revision as of 14:43, 28 December 2016 by Peter (talk | contribs)
Jump to navigationJump to search

What are Bounties?

THIS HASN'T STARTED YET AND SUBJECT TO CHANGE

Bounties are an opportunity to get a little bit [1] of money [2] while helping out the development of BoofCV and the community as a whole. Anyone can participate [3] and if the submission is accepted as completed your work will be added to BoofCV and you will get the bounty! Each bounty is broken up into two amounts, base and bonus. The base is the amount you will receive no matter what if you submission is accepted. The bonus is a variable amount that is decided based on the submission's overall quality and how well it meets all the requirements.

It's advised that you publicly announce on BoofCV's message board that you're working on a bounty and provide a link to your project page. This is a collaboration not a competition in the end! Feel free to place comments in the bounty's Google Doc description for clarifications.

Summary of Submission Process
  1. Select bounty from list and read rules
  2. (Suggested) Announce intent to work on bounty
  3. Write code or complete non-coding task for bounty
  4. Submit work for review
  5. Fix issues found during the review and resubmit
  6. If no issues found:
    • Reassign copyright to BoofCV
    • Work is added to BoofCV
    • Bounty is sent to submitter
Wanted dead alive.jpg

[1] The bounties are paid out of pocket and are not intended to compete with what you would get for a commercial contract in the US. Think of it as a nice bonus for a hobby of yours. They are also significantly more than most open source bounties as is.
[2] Bounties are specified in US dollars.
[3] Read the rules below. There are rare exceptions.

Bounties: Infrastructure

Task Base Max Bonus
Generate Webpage Javadoc with Gradle $75
Example/Demonstration Application Enhancements $100 $50
Website for Generating Fiducials and Calibration targets $100 $100
Improved 3D Viewer $50 $150
DeepBoof: Load Caffe Models $200 $150
Assisted Calibration in ROS $100 $50

Bounties: Algorithms

Task Base Max Bonus
AruCo markers in BoofCV $120 $200
Improve Supervised Watershed $100 $50
Improved Image Stitching $150 $125
DeepBoof: 40% Speed Improvement to Convolution Code $150
Unroll Convolution for Interlaced Images $75 $75
Convolution Runtime Regression Tests $50
GMM Background Model $75 $100


Code Requirements

To qualify for an award you must meet all the "requirements" specified in the detailed project description and from the list below. Exceptions can be made, but if a requirement is not meet that can be grounds for the submission not being accepted or hit to the bonus.

  • All submitted code must have unit tests
  • Unit tests should take at most 50ms to complete each
    • Current unit tests take on average 10ms each
    • You should shoot for 2ms or less
  • When applicable, provide a usage example with example data
  • All code and comments must be in English
  • No merge conflict with latest SNAPSHOT
  • All unit tests must pass
  • Regression Tests for Speed and Stability
    • Only required when specifically mentioned in detailed description
    • They will be placed into ValidationBoof

Coding Suggestions

The following are strongly recommended suggestions for submitted code. For the most part ignoring these suggestions will impact the bonus, but in extreme situations can result in code being rejected. BoofCV is fast and small because it follows these practices. If you're code is lacking it would be pointed out in the code review and you will be asked to fix it.

  • Use of existing internal functionality is highly encouraged
    • Don't reinvent the wheel unless there is a good reason
    • Ask if you don't know if that capability exists already!
  • Adding new external libraries is discouraged and will need to be justified
    • We like to keep BoofCV as small as possible
    • Getting external developers to fix bugs or accept patches is often a tedious procedure and slows down development
  • Code should minimize the creation of new memory and should recycle memory as much as possible
    • Ask for examples if you aren't sure how to do this

Rules

Effective as of December 28, 2016

Definitions

  • Awardee, refers to the person receiving the bounty
  • Award, refers to the amount of money award for completing a bounty.
  • Internal Bounty, A bounty which involve submitting and donating new code for integration into BoofCV
  • External Bounty, A bounty which does not involve adding code to BoofCV

Submission for Internal Bounties

  • These bounties involve adding new code to BoofCV and related projects
  • To qualify for a bounty you must submit a pull request on GitHub against the latest SNAPSHOT of BoofCV with your code
  • The pull request must specify which bounty it is for and who will receive the award
  • All of the code included with the pull request must be owned by you
  • Before it can be accepted the copyright/ownership of the code must be transferred over to the BoofCV project
  • The code is considered accepted once it has been merged into the master repository on GitHub
  • Transferring of ownership over to BoofCV project involves the following:
    • The code will be released publicly under the open source licensed used by BoofCV at the time
      • Which is Apache 2.0 at the time of this writing
    • Since BoofCV is not a legal entity the code will be owned by Peter Abeles
    • In the future the code may be transferred to another individual or group (e.g. BoofCV becomes a registered non-profit)
    • The license can only be changed to an open source license approved by the Open Source Initiative in the future

Submission for External Bounties

  • Please see the Google Doc description for how to complete the task as each one is different
  • Examples:
    • Fixing code in another project and getting the patch accepted
    • Creating and hosting a website while making the code publicly available
    • Creating your own project and releasing it as an independent open source project hosted publicly


Awarding of a Bounty

  • After the code has been accepted an individual qualifies to receive the award
    • See submission above for what it means for an award to be 'accepted'
    • The award is specified on the wiki Bounties page and was set by Peter Abeles
    • If the award amount on the page changes then the largest award after the earliest of the following events will be used:
      • Announcement of intent to peruse the bounty by awardee on BoofCV message board
      • Submition of the pull request with qualifying code
    • Mistakes happen and type-os may or may not be honored. Please let us know if you see anything that looks suspicious!
    • The final award amount will be the base award plus the bonus
    • The amount of bonus will vary between $0 and the maximum specified on the bounties webpage
  • Bounties will be awarded to an individual when it is legal to do so within the US and their home country
    • Void where prohibited
  • The awardee is responsible for all taxes and fees associated with the receipt of the award
  • All bounties are specified in US dollars
  • No bounty will be awarded more than once
    • If multiple qualified submissions are received then the time stamp of the e-mail that announces completion will be used
  • Only one individual can receive a bounty
    • If multiple individuals contributed it is up to them to decide who will receive the payment and distribute it to the group
  • A bounty will be award using PayPal
  • The awardee has 45 days from the date of pull request acceptance to fix any issues with receipt of award
  • If a bounty cannot be sent to an individual the individual may select from the charities listed below for a donation to be made in their name or they may forfeit the award.