Difference between revisions of "Bounties"

From BoofCV
Jump to navigationJump to search
 
(43 intermediate revisions by the same user not shown)
Line 1: Line 1:
== What are Bounties? ==


''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 and if the task is accepted as completed you will get the bounty [3]!  Each bounty is broken up into two amounts, base and bonus.  The base is the amount you will receive no matter what if you complete the task.  The bonus is a variable amount that is decided based on the quality of the code and if it meet all the requirements.  Can't be bothered to write unit and/or regression tests?  Won't fix memory management issues that were pointed out? Expect a hit to the bonus.
= What are Bounties? =


It's advised that you publicly announce on [https://groups.google.com/forum/#!forum/boofcv BoofCV's message board] that you're working on a bounty and provide a link to your project pageThis is a collaboration not a competition in the end!  Feel free to place comments in the bounty's Google Doc description for clarificationsIf a link is not yet provided to a Google Doc description that bounty has yet to be activated.
''Bounties are an opportunity to get a little bit [1] of money while helping out the development of BoofCV and the community as a whole.''  Anyone can participate [2] and if the submission is accepted your work will be added to BoofCV and you will get the bounty!  Each bounty is broken up into two amounts, base and bonusThe base is the amount you will receive no matter what if you submission is acceptedThe bonus is a variable amount that is decided based on the submission's overall quality and how well it meets all the requirements.


'''THIS HASN'T STARTED YET AND THE BOUNTIES BELOW ARE HIGHLY LIKELY TO CHANGE'''
It's advised that you publicly announce on [https://groups.google.com/forum/#!forum/boofcv 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.
 
<center>
{|
|
{| class="wikitable" style="width:500px; color:black; background-color:white; font-size:120%; text-align:left;"
! style="font-size:140%; text-align:center;" | Submission Process
|-
|
# Select bounty from list and read rules
# (Suggested) [https://groups.google.com/forum/#!forum/boofcv Announce] intent to work on bounty
# Write code or complete non-coding task for bounty
# [[#Submision|Submit work for review]]
# Fix issues found during the review and resubmit
# If accepted:
#* Assign Apache 2.0 License
#* [[Donating to BoofCV|Transfer of Copyright]]
#* Bounty is sent to submitter
|}
|
[[File:Wanted_dead_alive.jpg|center]]
|}
</center>


'''[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 [https://www.bountysource.com/ open source bounties] as is.<br>
'''[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 [https://www.bountysource.com/ open source bounties] as is.<br>
'''[2]''' Bounties are specified in US dollars.<br>
'''[2]''' Read the rules below.  There are rare exceptions.
'''[3]''' Read the rules below.  There are rare exceptions.


== Bounties: Infrastructure ==
== Bounties: Infrastructure ==
Line 15: Line 35:
{| class="wikitable sortable" style="width:600px;"
{| class="wikitable sortable" style="width:600px;"
!style="width: 70%; "| Task
!style="width: 70%; "| Task
!style="width: 15%; text-align:center;"| Max Award
!style="width: 15%; text-align:center;"| Base
!style="width: 15%; text-align:center;"| Base
!style="width: 15%; text-align:center;"| Max Bonus
|-
|-
| [https://docs.google.com/document/d/1_v7HNDXJnwp5dO9Y6ZE5r-6EIb3SUIssWT_9IuilZKw/edit?usp=sharing Generate Webpage Javadoc with Gradle]
| Tutorials, Examples, Projects
| $75
| ???
|  
| ???
|-
|-
| [https://docs.google.com/document/d/1bH6hpkrep1v4bsf6B-fytq9ylhCnIyPgRrtXvC5J-50/edit?usp=sharing Example/Demonstration Application Enhancements]
| Increase Concurrency of Gradle Build Without Changing Published Jars
| $100
| ???
| $50
| ???
|-
|-
| [https://docs.google.com/document/d/17en0SC1tB7eGTCOS-gjsncXYOkS9wk2r-7v7hSIVU9k/edit?usp=sharing Website for Generating Fiducials and Calibration targets]
| [https://docs.google.com/document/d/17en0SC1tB7eGTCOS-gjsncXYOkS9wk2r-7v7hSIVU9k/edit?usp=sharing Website for Generating Fiducials and Calibration targets]
| $100
| $300
| $100
| $200
|-
| [https://docs.google.com/document/d/1BvshBUZ3iUk4S78Di2UfCb4L_NFDh8NDm2F4hHfs6LI/edit?usp=sharing Improved 3D Viewer]
| $50
| $150
|-
|-
| [https://docs.google.com/document/d/1sEbSctiB_GC4-OZiRV9yWI2NNlaqa_I4_hnh9RolCaQ/edit?usp=sharing DeepBoof: Load Caffe Models]
| [https://docs.google.com/document/d/1sEbSctiB_GC4-OZiRV9yWI2NNlaqa_I4_hnh9RolCaQ/edit?usp=sharing DeepBoof: Load Caffe Models]
| $200
| $450
| $150
| $300
|-
|-
| [https://docs.google.com/document/d/1nX0ZXHPnA6T1bWlXzT_qO63UHH0mjqOTGg0BdNBOD88/edit?usp=sharing Assisted Calibration in ROS]
| [https://docs.google.com/document/d/1nX0ZXHPnA6T1bWlXzT_qO63UHH0mjqOTGg0BdNBOD88/edit?usp=sharing Assisted Calibration in ROS]
| $100
| $250
| $50
| $200
|}
|}
Awards are specified in USD.  Max award is the base amount plus the maximum bonus. 
[*] The base award is awarded through [http://bountysource.com BountySource]


== Bounties: Algorithms ==
== Bounties: Algorithms ==
Line 47: Line 66:
{| class="wikitable sortable" style="width:600px;"
{| class="wikitable sortable" style="width:600px;"
!style="width: 70%; "| Task
!style="width: 70%; "| Task
!style="width: 15%; text-align:center;"| Max Award
!style="width: 15%; text-align:center;"| Base
!style="width: 15%; text-align:center;"| Base
!style="width: 15%; text-align:center;"| Max Bonus
|-
|-
| [https://docs.google.com/document/d/17D4N2FuTklJ-Yx_v1_vE_y9egnhNvewrzVClf0CRv-0/edit?usp=sharing AruCo markers in BoofCV]
| Create Vectorized Low Level Image Processing
| $120
| ???
| $200
| ???
|-
| Barcode Reader
| ???
| ???
|-
| Damaged QR Code Detector
| ???
| ???
|-
| Implementation of "Fast global image smoothing based on weighted least squares"
| ???
| ???
|-
|-
| [https://docs.google.com/document/d/1DM2Aw9K5sKF9_pNqQ71RecmEtWBRXDnscU-9n_06U_Y/edit?usp=sharing Improve Supervised Watershed]
| [https://docs.google.com/document/d/1DM2Aw9K5sKF9_pNqQ71RecmEtWBRXDnscU-9n_06U_Y/edit?usp=sharing Improve Supervised Watershed]
| $100
| $200
| $50
| $150
|-  
|-  
| [https://docs.google.com/document/d/11hq6g_qDyvwOK-9FJWxfzRZeJ3nl4NtzoL7kARPiHbE/edit?usp=sharing Improved Image Stitching]
| [https://docs.google.com/document/d/11hq6g_qDyvwOK-9FJWxfzRZeJ3nl4NtzoL7kARPiHbE/edit?usp=sharing Improved Image Stitching]
| $275
| $150
| $150
| $125
|-
|-
| [https://docs.google.com/document/d/1rxIDnkPjpr8xaI13hrMbiihuLEb_HOFtQw4dLKokGSo/edit?usp=sharing DeepBoof: 40% Speed Improvement to Convolution Code]
| [https://docs.google.com/document/d/1rxIDnkPjpr8xaI13hrMbiihuLEb_HOFtQw4dLKokGSo/edit?usp=sharing DeepBoof: 40% Speed Improvement to Convolution Code]
| $150
| $250
|  
| $250
|-
| [https://docs.google.com/document/d/1nMIVOawLGrcvpfhI4KGAwjIBTyMWv-P_UGO7b_a1ihs/edit?usp=sharing 40% Speed Improvement to 1D and 2D Image Convolution]
| $250
| $250
|-
|-
| [https://docs.google.com/document/d/1sQpCg-hSDYZvg0DlkVRcpCcmCmfFelrRY9HE4ce_4LE/edit?usp=sharing Unroll Convolution for Interlaced Images]
| [https://docs.google.com/document/d/1sQpCg-hSDYZvg0DlkVRcpCcmCmfFelrRY9HE4ce_4LE/edit?usp=sharing Unroll Convolution for Interlaced Images]
| $75
| $200
| $75
| $125
|-  
|-  
| [https://docs.google.com/document/d/1BqUK24OTLQY-GnPoabDuk1NhXuoiuiRAjqu-BIxoWCs/edit?usp=sharing Convolution Runtime Regression Tests]
| [https://docs.google.com/document/d/1BqUK24OTLQY-GnPoabDuk1NhXuoiuiRAjqu-BIxoWCs/edit?usp=sharing Convolution Runtime Regression Tests]
| $50
| $50
|
| $50
|-
|-
| [https://docs.google.com/document/d/1lNQr0VGV130AQNRq1YgInEVdJazdh4gycD4wMbB-O6E/edit?usp=sharing GMM Background Model]
| [https://docs.google.com/document/d/1lNQr0VGV130AQNRq1YgInEVdJazdh4gycD4wMbB-O6E/edit?usp=sharing <s>GMM Background Model</s>]
| $75
| <s>$200</s>
| $100
| <s>$150</s>
|}
|}
Awards are specified in USD.  Max award is the base amount plus the maximum bonus.
[*] The base award is awarded through [http://bountysource.com BountySource]


== Code Requirements ==
= Code Requirements =


To qualify for the award you must meet all the requirements specified in the detailed project descriptionThe following is also always "required".  If a requirement is not meet that can be grounds for code not being accepted or a sever hit to the bonus.
Code submitted to a bounty needs to meet applicable requirements below for quality control purposesFailure to meet a requirement will be pointed out in the code review.  Minor issues are likely to be allowed but will affect your bonus.


* All submitted code must have unit tests
* All submitted code must have good unit test coverage
* Unit tests should take at most 50ms to complete each
* Unit tests should take at most 50ms to complete each
** Current unit tests take on average 10ms each
** Current unit tests take on average 10ms each, shoot for 2ms or less
** You should shoot for 2ms or less
* When applicable, provide a usage example with example data
* When applicable, provide a usage example with example data
* All code and comments must be in English
* All code and comments must be in English
* All code must be in pure Java unless specified otherwise
* No merge conflict with latest SNAPSHOT
* No merge conflict with latest SNAPSHOT
* All unit tests must pass
* All unit tests must pass
* Regression Tests for Speed and Stability
* Maximize use of existing internal functionality
** Only required when specifically mentioned in detailed description
** Not sure if a capability already exists? Ask!
** They will be placed into [https://github.com/lessthanoptimal/ValidationBoof ValidationBoof]
* Adding new external libraries is discouraged and will need to be justified
* Code should minimize the creation of new memory and use a single thread


== Coding Suggestions ==
= Rules =


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.
Effective as of January 3, 2017
 
* 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 ==


''Definitions''
''Definitions''
Line 115: Line 143:
* Internal Bounty, A bounty which involve submitting and donating new code for integration into BoofCV
* 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
* External Bounty, A bounty which does not involve adding code to BoofCV
* Maintainers, see list of people [[BoofCV Developers|here]].
== Submission ==
''Submission for Internal Bounties''  Internal bounties involve adding new code to BoofCV and related projects.


''Submission for Internal Bounties''
* These bounties involve adding new code to the BoofCV project
* To qualify for a bounty you must submit a pull request on [http://github.com GitHub] against the latest [https://github.com/lessthanoptimal/BoofCV/tree/SNAPSHOT SNAPSHOT] of BoofCV with your code
* To qualify for a bounty you must submit a pull request on [http://github.com GitHub] against the latest [https://github.com/lessthanoptimal/BoofCV/tree/SNAPSHOT SNAPSHOT] of BoofCV with your code
* The pull request must specify which bounty it is for and who will receive the award
** The pull request must specify which bounty it is for and who will receive the award
** Donating code without declaring intent for a bounty voids your claim for any bounties as a result of that code donation
* All of the code included with the pull request must be owned by you
* 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
* Code's copyright formust be reassigned
** The code will be released publicly under an Apache 2.0 license
** Copyright will be transferred over to Peter Abeles, see [[Donating to BoofCV]] for why
** Your name/organization will be listed as an author after donating
* The code is considered accepted once it has been merged into the master repository on GitHub
* 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:
* Final acceptance of a submission is at the sole discretion of BoofCV's maintainer
** 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
''Submission for External Bounties''  External submissions are for modifications external to the main code base.
** 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 [https://opensource.org/licenses 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
* Please see the Google Doc description for how to complete the task as each one is different
* Examples:
* Examples:
** Fixing code in another project and getting the patch accepted
** Fixing code in another project and getting the patch accepted
** Creating and hosting a website while making the code publicly available
** 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  
** Creating your own project and releasing it as an independent open source project hosted publicly


== Awarding ==
This section describes how the bounty will be awarded.


''Awarding of a Bounty''
* After the code has been accepted the submitter qualifies to receive the award
 
** See submission above for what it means for a submision to be 'accepted'
* The amount of the award is specified on the wiki's Bounties page
** 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 pursue the bounty by awardee on BoofCV message board
*** Submission 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
* Bounties will be awarded to an individual when it is legal to do so within the US and their home country
** Void where prohibited
** Void where prohibited
Line 145: Line 185:
* All bounties are specified in US dollars
* All bounties are specified in US dollars
* No bounty will be awarded more than once
* No bounty will be awarded more than once
** If multiple qualified bounties are received then time stamp on GitHub will be used to decide who gets the award
** If multiple qualified submissions are received then the time stamp of the e-mail/pull request that announces completion will be used
* Only one individual can receive a bounty
* Only one individual can receive a bounty
** If multiple individuals contributed it is up to them to decide who will receive the payment
** If multiple individuals contributed it is up to them to decide who will receive the payment and distribute it to the group
* After code has been accepted an individual qualifies to receive the award
** If no agreement can be reached then the person who created the first repository will receive the award
** The award is specified on the wiki Bounties page and was set by Peter Abeles
* A bounty will be award using [https://www.paypal.com PayPal] and/or [https://www.bountysource.com/ bountysource]
** If the award amount on the page changes then the largest award after the following events will be used
* If the bounty is cross posted to bountysource then a portion of the award will be collected from there.
*** Announcement of 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
* A bounty will be award using [https://www.paypal.com PayPal]
* The awardee has 45 days from the date of pull request acceptance to fix any issues with receipt of award
* The awardee has 45 days from the date of pull request acceptance to fix any issues with receipt of award
* Falsifying time stamps or other attempts to mislead will result in the forfeiture of all bounties
* 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.
* 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.
** [https://www.eff.org/ Electronic Frontier Foundation]
** [https://www.eff.org/ Electronic Frontier Foundation]
** [https://wikimediafoundation.org Wikimedia Foundation]
** [https://wikimediafoundation.org Wikimedia Foundation]
** [http://www.redcross.org/donations/ways-to-donate American Red Cross]
** [http://www.redcross.org/donations/ways-to-donate American Red Cross]

Latest revision as of 15:30, 14 October 2021

What are Bounties?

Bounties are an opportunity to get a little bit [1] of money while helping out the development of BoofCV and the community as a whole. Anyone can participate [2] and if the submission is accepted 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.

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 accepted:
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] Read the rules below. There are rare exceptions.

Bounties: Infrastructure

Task Max Award Base
Tutorials, Examples, Projects ??? ???
Increase Concurrency of Gradle Build Without Changing Published Jars ??? ???
Website for Generating Fiducials and Calibration targets $300 $200
DeepBoof: Load Caffe Models $450 $300
Assisted Calibration in ROS $250 $200

Awards are specified in USD. Max award is the base amount plus the maximum bonus.

[*] The base award is awarded through BountySource

Bounties: Algorithms

Task Max Award Base
Create Vectorized Low Level Image Processing ??? ???
Barcode Reader ??? ???
Damaged QR Code Detector ??? ???
Implementation of "Fast global image smoothing based on weighted least squares" ??? ???
Improve Supervised Watershed $200 $150
Improved Image Stitching $275 $150
DeepBoof: 40% Speed Improvement to Convolution Code $250 $250
40% Speed Improvement to 1D and 2D Image Convolution $250 $250
Unroll Convolution for Interlaced Images $200 $125
Convolution Runtime Regression Tests $50 $50
GMM Background Model $200 $150

Awards are specified in USD. Max award is the base amount plus the maximum bonus.

[*] The base award is awarded through BountySource

Code Requirements

Code submitted to a bounty needs to meet applicable requirements below for quality control purposes. Failure to meet a requirement will be pointed out in the code review. Minor issues are likely to be allowed but will affect your bonus.

  • All submitted code must have good unit test coverage
  • Unit tests should take at most 50ms to complete each
    • Current unit tests take on average 10ms each, shoot for 2ms or less
  • When applicable, provide a usage example with example data
  • All code and comments must be in English
  • All code must be in pure Java unless specified otherwise
  • No merge conflict with latest SNAPSHOT
  • All unit tests must pass
  • Maximize use of existing internal functionality
    • Not sure if a capability already exists? Ask!
  • Adding new external libraries is discouraged and will need to be justified
  • Code should minimize the creation of new memory and use a single thread

Rules

Effective as of January 3, 2017

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
  • Maintainers, see list of people here.

Submission

Submission for Internal Bounties Internal 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
    • Donating code without declaring intent for a bounty voids your claim for any bounties as a result of that code donation
  • All of the code included with the pull request must be owned by you
  • Code's copyright formust be reassigned
    • The code will be released publicly under an Apache 2.0 license
    • Copyright will be transferred over to Peter Abeles, see Donating to BoofCV for why
    • Your name/organization will be listed as an author after donating
  • The code is considered accepted once it has been merged into the master repository on GitHub
  • Final acceptance of a submission is at the sole discretion of BoofCV's maintainer

Submission for External Bounties External submissions are for modifications external to the main code base.

  • 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

This section describes how the bounty will be awarded.

  • After the code has been accepted the submitter qualifies to receive the award
    • See submission above for what it means for a submision to be 'accepted'
  • The amount of the award is specified on the wiki's Bounties page
    • 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 pursue the bounty by awardee on BoofCV message board
      • Submission 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/pull request 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
    • If no agreement can be reached then the person who created the first repository will receive the award
  • A bounty will be award using PayPal and/or bountysource
  • If the bounty is cross posted to bountysource then a portion of the award will be collected from there.
  • The awardee has 45 days from the date of pull request acceptance to fix any issues with receipt of award
  • Falsifying time stamps or other attempts to mislead will result in the forfeiture of all bounties
  • 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.