http://git-wip-us.apache.org/repos/asf/predictionio-site/blob/9d2bd407/community/contribute-code/index.html
----------------------------------------------------------------------
diff --git a/community/contribute-code/index.html 
b/community/contribute-code/index.html
index 23e970c..2e44a13 100644
--- a/community/contribute-code/index.html
+++ b/community/contribute-code/index.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html><head><title>Contribute Code</title><meta 
charset="utf-8"/><meta content="IE=edge,chrome=1" 
http-equiv="X-UA-Compatible"/><meta name="viewport" 
content="width=device-width, initial-scale=1.0"/><meta class="swiftype" 
name="title" data-type="string" content="Contribute Code"/><link 
rel="canonical" 
href="https://predictionio.apache.org/community/contribute-code/"/><link 
href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link 
href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link 
href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800"
 rel="stylesheet"/><link 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" 
rel="stylesheet"/><link href="/stylesheets/application-eccfc6cb.css" 
rel="stylesheet" type="text/css"/><script 
src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script><script
 src="//cdn.mathjax.org/mathjax/latest/Math
 Jax.js?config=TeX-AMS-MML_HTMLorMML"></script><script 
src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: 
true });}catch(e){}</script></head><body><div id="global"><header><div 
class="container" id="header-wrapper"><div class="row"><div 
class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a 
href="#"></a><a href="http://predictionio.apache.org/";><img alt="Apache 
PredictionIO" id="logo" 
src="/images/logos/logo-ee2b9bb3.png"/></a><span>®</span></div><div 
id="menu-wrapper"><div id="pill-wrapper"><a class="pill left" 
href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right" 
href="//github.com/apache/incubator-predictionio/">OPEN 
SOURCE</a></div></div><img class="mobile-search-bar-toggler hidden-md 
hidden-lg" 
src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div 
id="search-bar-row-wrapper"><div class="container-fluid" 
id="search-bar-row"><div class="row"><div class="col-md-9 col-sm-11 
col-xs-11"><div class
 ="hidden-md hidden-lg" id="mobile-page-heading-wrapper"><p>PredictionIO 
Docs</p><h4>Contribute Code</h4></div><h4 class="hidden-sm 
hidden-xs">PredictionIO Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1 
hidden-md hidden-lg"><img id="left-menu-indicator" 
src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3 
col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form 
class="search-form"><img class="search-box-toggler hidden-xs hidden-sm" 
src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img 
src="/images/icons/search-glass-704bd4ff.png"/><input type="text" 
id="st-search-input" class="st-search-input" placeholder="Search 
Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg" 
src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div 
class="mobile-left-menu-toggler hidden-md 
hidden-lg"></div></div></div></div><div id="page" class="container-fluid"><div 
class="row"><div id="left-menu-wrapper" class="col-md
 -3"><nav id="nav-main"><ul><li class="level-1"><a class="expandible" 
href="/"><span>Apache PredictionIO® Documentation</span></a><ul><li 
class="level-2"><a class="final" href="/"><span>Welcome to Apache 
PredictionIO®</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Getting Started</span></a><ul><li 
class="level-2"><a class="final" href="/start/"><span>A Quick 
Intro</span></a></li><li class="level-2"><a class="final" 
href="/install/"><span>Installing Apache PredictionIO</span></a></li><li 
class="level-2"><a class="final" href="/start/download/"><span>Downloading an 
Engine Template</span></a></li><li class="level-2"><a class="final" 
href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li 
class="level-2"><a class="final" href="/start/customize/"><span>Customizing the 
Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Integrating with Your App</span></a><ul><li class="level-2"><a 
class="final" hr
 ef="/appintegration/"><span>App Integration Overview</span></a></li><li 
class="level-2"><a class="expandible" href="/sdk/"><span>List of 
SDKs</span></a><ul><li class="level-3"><a class="final" 
href="/sdk/java/"><span>Java & Android SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/php/"><span>PHP 
SDK</span></a></li><li class="level-3"><a class="final" 
href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a 
class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered 
SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li 
class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web 
Service</span></a></li><li class="level-2"><a class="final" 
href="/batchpredict/"><span>Batch Predictions</span></a></li><li 
class="level-2"><a class="final" href="/deploy/monitoring/"><span>Monit
 oring Engine</span></a></li><li class="level-2"><a class="final" 
href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li 
class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying 
Multiple Engine Variants</span></a></li><li class="level-2"><a class="final" 
href="/deploy/plugin/"><span>Engine Server Plugin</span></a></li></ul></li><li 
class="level-1"><a class="expandible" href="#"><span>Customizing an 
Engine</span></a><ul><li class="level-2"><a class="final" 
href="/customize/"><span>Learning DASE</span></a></li><li class="level-2"><a 
class="final" href="/customize/dase/"><span>Implement DASE</span></a></li><li 
class="level-2"><a class="final" 
href="/customize/troubleshooting/"><span>Troubleshooting Engine 
Development</span></a></li><li class="level-2"><a class="final" 
href="/api/current/#package"><span>Engine Scala 
APIs</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Collecting and Analyzing Data</span></a
 ><ul><li class="level-2"><a class="final" href="/datacollection/"><span>Event 
 >Server Overview</span></a></li><li class="level-2"><a class="final" 
 >href="/datacollection/eventapi/"><span>Collecting Data with 
 >REST/SDKs</span></a></li><li class="level-2"><a class="final" 
 >href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li 
 >class="level-2"><a class="final" 
 >href="/datacollection/webhooks/"><span>Unifying Multichannel Data with 
 >Webhooks</span></a></li><li class="level-2"><a class="final" 
 >href="/datacollection/channel/"><span>Channel</span></a></li><li 
 >class="level-2"><a class="final" 
 >href="/datacollection/batchimport/"><span>Importing Data in 
 >Batch</span></a></li><li class="level-2"><a class="final" 
 >href="/datacollection/analytics/"><span>Using Analytics 
 >Tools</span></a></li><li class="level-2"><a class="final" 
 >href="/datacollection/plugin/"><span>Event Server 
 >Plugin</span></a></li></ul></li><li class="level-1"><a class="expandible" 
 >href="#"><span>Choosing an Algorit
 hm(s)</span></a><ul><li class="level-2"><a class="final" 
href="/algorithm/"><span>Built-in Algorithm Libraries</span></a></li><li 
class="level-2"><a class="final" href="/algorithm/switch/"><span>Switching to 
Another Algorithm</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/multiple/"><span>Combining Multiple 
Algorithms</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/custom/"><span>Adding Your Own 
Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>ML Tuning and Evaluation</span></a><ul><li class="level-2"><a 
class="final" href="/evaluation/"><span>Overview</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/evaluationdashboard/"><span>Evaluation 
Dashboard</span></a></li><li class="level-2"><a class="final" 
href="/evaluation/metricchoose/"><span>Choosing Evaluation Metrics</
 span></a></li><li class="level-2"><a class="final" 
href="/evaluation/metricbuild/"><span>Building Evaluation 
Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>System Architecture</span></a><ul><li class="level-2"><a 
class="final" href="/system/"><span>Architecture Overview</span></a></li><li 
class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using 
Another Data Store</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>PredictionIO® Official 
Templates</span></a><ul><li class="level-2"><a class="final" 
href="/templates/"><span>Intro</span></a></li><li class="level-2"><a 
class="expandible" href="#"><span>Recommendation</span></a><ul><li 
class="level-3"><a class="final" 
href="/templates/recommendation/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" href="/templat
 es/recommendation/evaluation/"><span>Evaluation Explained</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/recommendation/how-to/"><span>How-To</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/recommendation/reading-custom-events/"><span>Read Custom 
Events</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/customize-data-prep/"><span>Customize Data 
Preparator</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/customize-serving/"><span>Customize 
Serving</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/training-with-implicit-preference/"><span>Train 
with Implicit Preference</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/blacklist-items/"><span>Filter Recommended 
Items by Blacklist in Query</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/batch-evaluator/"><span>Batch Persista
 ble Evaluator</span></a></li></ul></li><li class="level-2"><a 
class="expandible" href="#"><span>E-Commerce Recommendation</span></a><ul><li 
class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/how-to/"><span>How-To</span></a></li><li
 class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/train-with-rate-event/"><span>Train 
with Rate Event</span></a></li><li class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/adjust-score/"><span>Adjust 
Score</span></a></li></ul></li><li class="level-2"><a class="expandible" 
href="#"><span>Similar Product</span></a><ul><li class="level-3"><a 
class="final" href="/templates/similarproduct/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a clas
 s="final" href="/templates/similarproduct/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/similarproduct/how-to/"><span>How-To</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/similarproduct/multi-events-multi-algos/"><span>Multiple 
Events and Multiple Algorithms</span></a></li><li class="level-3"><a 
class="final" 
href="/templates/similarproduct/return-item-properties/"><span>Returns Item 
Properties</span></a></li><li class="level-3"><a class="final" 
href="/templates/similarproduct/train-with-rate-event/"><span>Train with Rate 
Event</span></a></li><li class="level-3"><a class="final" 
href="/templates/similarproduct/rid-user-set-event/"><span>Get Rid of Events 
for Users</span></a></li><li class="level-3"><a class="final" 
href="/templates/similarproduct/recommended-user/"><span>Recommend 
Users</span></a></li></ul></li><li class="level-2"><a class="expandible" 
href="#"><span>Classification</span></a><ul><li class="level-3"><a c
 lass="final" href="/templates/classification/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a class="final" 
href="/templates/classification/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/classification/how-to/"><span>How-To</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/classification/add-algorithm/"><span>Use Alternative 
Algorithm</span></a></li><li class="level-3"><a class="final" 
href="/templates/classification/reading-custom-properties/"><span>Read Custom 
Properties</span></a></li></ul></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li 
class="level-2"><a class="final" 
href="/gallery/template-gallery/"><span>Browse</span></a></li><li 
class="level-2"><a class="final" 
href="/community/submit-template/"><span>Submit your Engine as a 
Template</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Demo Tutorials</sp
 an></a><ul><li class="level-2"><a class="final" 
href="/demo/tapster/"><span>Comics Recommendation Demo</span></a></li><li 
class="level-2"><a class="final" href="/demo/community/"><span>Community 
Contributed Demo</span></a></li><li class="level-2"><a class="final" 
href="/demo/textclassification/"><span>Text Classification Engine 
Tutorial</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="/community/"><span>Getting Involved</span></a><ul><li class="level-2"><a 
class="final active" href="/community/contribute-code/"><span>Contribute 
Code</span></a></li><li class="level-2"><a class="final" 
href="/community/contribute-documentation/"><span>Contribute 
Documentation</span></a></li><li class="level-2"><a class="final" 
href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li 
class="level-2"><a class="final" 
href="/community/contribute-webhook/"><span>Contribute a 
Webhook</span></a></li><li class="level-2"><a class="final" 
href="/community/projects/"><
 span>Community Projects</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Getting Help</span></a><ul><li 
class="level-2"><a class="final" 
href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a 
class="final" href="/support/"><span>Support</span></a></li></ul></li><li 
class="level-1"><a class="expandible" 
href="#"><span>Resources</span></a><ul><li class="level-2"><a class="final" 
href="/cli/"><span>Command-line Interface</span></a></li><li class="level-2"><a 
class="final" href="/resources/release/"><span>Release 
Cadence</span></a></li><li class="level-2"><a class="final" 
href="/resources/intellij/"><span>Developing Engines with IntelliJ 
IDEA</span></a></li><li class="level-2"><a class="final" 
href="/resources/upgrade/"><span>Upgrade Instructions</span></a></li><li 
class="level-2"><a class="final" 
href="/resources/glossary/"><span>Glossary</span></a></li></ul></li><li 
class="level-1"><a class="expandible" href="#"><span>Apache Software F
 oundation</span></a><ul><li class="level-2"><a class="final" 
href="https://www.apache.org/";><span>Apache Homepage</span></a></li><li 
class="level-2"><a class="final" 
href="https://www.apache.org/licenses/";><span>License</span></a></li><li 
class="level-2"><a class="final" 
href="https://www.apache.org/foundation/sponsorship.html";><span>Sponsorship</span></a></li><li
 class="level-2"><a class="final" 
href="https://www.apache.org/foundation/thanks.html";><span>Thanks</span></a></li><li
 class="level-2"><a class="final" 
href="https://www.apache.org/security/";><span>Security</span></a></li></ul></li></ul></nav></div><div
 class="col-md-9 col-sm-12"><div class="content-header hidden-md 
hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a 
href="/community/">Getting Involved</a><span 
class="spacer">&gt;</span></li><li><span class="last">Contribute 
Code</span></li></ul></div><div id="page-title"><h1>Contribute 
Code</h1></div></div><div id="table-of-content-wrapper"><h5>On this 
 page</h5><aside id="table-of-contents"><ul> <li> <a 
href="#areas-in-need-of-help">Areas in Need of Help</a> </li> <li> <a 
href="#how-to-report-an-issue">How to Report an Issue</a> </li> <li> <a 
href="#how-to-help-resolve-existing-issues">How to Help Resolve Existing 
Issues</a> </li> <li> <a href="#how-to-add-propose-a-new-feature">How to Add / 
Propose a New Feature</a> </li> <li> <a href="#how-to-issue-a-pull-request">How 
to Issue a Pull Request</a> </li> <li> <a href="#getting-started">Getting 
Started</a> </li> <li> <a 
href="#anatomy-of-apache-predictionio-code-tree">Anatomy of Apache PredictionIO 
Code Tree</a> </li> </ul> </aside><hr/><a id="edit-page-link" 
href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/community/contribute-code.html.md";><img
 src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div 
class="content-header hidden-sm hidden-xs"><div id="breadcrumbs" 
class="hidden-sm hidden xs"><ul><li><a href="/community/">Gett
 ing Involved</a><span class="spacer">&gt;</span></li><li><span 
class="last">Contribute Code</span></li></ul></div><div 
id="page-title"><h1>Contribute Code</h1></div></div><div class="content"> 
<p>Thank you for your interest in contributing to Apache PredictionIO. Our 
mission is to enable developers to build scalable machine learning applications 
easily. Here is how you can help with the project development. If you have any 
question regarding development at anytime, please free to <a 
href="mailto:[email protected]";>subscribe</a> and post to 
the <a href="mailto:[email protected]";>Development Mailing 
List</a>.</p><h2 id='areas-in-need-of-help' class='header-anchors'>Areas in 
Need of Help</h2><p>We accept contributions of all kinds at any time. We are 
compiling this list to show features that are highly sought after by the 
community.</p> <ul> <li>Tests and CI</li> <li>Engine template, tutorials, and 
samples</li> <li>Client SDKs</li> <li>Building e
 ngines in Java (updating the Java controller API)</li> <li>Code clean up and 
refactoring</li> <li>Code and data pipeline optimization</li> <li>Developer 
experience (UX) improvement</li> </ul> <h2 id='how-to-report-an-issue' 
class='header-anchors'>How to Report an Issue</h2><p>If you wish to report an 
issue you found, you can do so on <a 
href="https://issues.apache.org/jira/browse/PIO";>Apache PredictionIO 
(incubating) JIRA</a>.</p><h2 id='how-to-help-resolve-existing-issues' 
class='header-anchors'>How to Help Resolve Existing Issues</h2><p>In general, 
bug fixes should be done the same way as new features, but critical bug fixes 
will follow a different path.</p><h2 id='how-to-add-/-propose-a-new-feature' 
class='header-anchors'>How to Add / Propose a New Feature</h2><p>Before adding 
new features into JIRA, please check that the feature does not currently exist 
in JIRA.</p> <ol> <li>To propose a new feature, simply <a 
href="mailto:[email protected]";>subscribe</a> and
  post your proposal to <a href="mailto:[email protected]";>Apache 
PredictionIO Development Mailing List</a>.</li> <li>Discuss with the community 
and the core development team on what needs to be done, and lay down concrete 
plans on deliverables.</li> <li>Once solid plans are made, start creating 
tickets in the <a href="https://issues.apache.org/jira/browse/PIO";>issue 
tracker</a>.</li> <li>Work side by side with other developers using Apache 
PredictionIO Development Mailing List as primary mode of communication. You 
never know if someone else has a better idea. ;)</li> </ol> <h3 
id='adding-ticket-to-jira' class='header-anchors'>Adding ticket to JIRA</h3> 
<ol> <li>Add a descriptive Summary and a detailed description</li> <li>Set 
Issue Type to Bug, Improvement, New Feature, Test or Wish</li> <li>Set Priority 
to Blocker, Critical, Major, Minor or Trivial</li> <li>Fill out Affects Version 
with the version of PredictionIO you are currently using</li> <li>Fill out 
Environment if n
 eeded for description of your bug / feature</li> <li>Please leave other fields 
blank</li> </ol> <h3 id='triaging-jira' class='header-anchors'>Triaging 
JIRA</h3><p>Tickets will be triaged by PredictionIO committers.</p> <ul> 
<li><p><strong>Target Version</strong>: Either a particular version or 
<code>Future</code> if to be done later</p> <ul> <li>Once a fix has been 
committed, the Fix Version will filled in with the appropriate release</li> 
</ul></li> <li><p><strong>Component</strong>: Each ticket will be annotated 
with one or more of the following Components</p> <ul> 
<li><strong>Core</strong>: affects the main code branch / will be part of a 
release</li> <li><strong>Documentation</strong>: affects the documents / will 
be pushed to livedoc branch</li> <li><strong>Templates</strong>: affects one of 
the separate github repositories for a template</li> </ul></li> </ul> <h2 
id='how-to-issue-a-pull-request' class='header-anchors'>How to Issue a Pull 
Request</h2><p>When you have finished y
 our code, you can <a 
href="https://help.github.com/articles/creating-a-pull-request/";>create a pull 
request</a> against the <strong>develop</strong> branch.</p> <ul> <li>The title 
must contain a tag associating with an existing JIRA ticket. You must create a 
ticket so that the infrastructure can correctly track issues across Apache JIRA 
and GitHub. If your ticket is <code>PIO-789</code>, your title must look 
something like <code>[PIO-789] Some short description</code>.</li> <li>Please 
also, in your commit message summary, include the JIRA ticket number similar to 
above.</li> <li>Make sure the title and description are clear and concise. For 
more details on writing a good commit message, check out <a 
href="http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html";>this
 guide</a>.</li> <li>If the change is visual, make sure to include a screenshot 
or GIF.</li> <li>Make sure it is being opened into the right branch.</li> 
<li>Make sure it has been rebased on top of that branc
 h.</li> </ul> <div class="alert-message note"><p>When it is close to a 
release, and if there are major development ongoing, a release branch will be 
forked from the develop branch to stabilize the code for binary release. Please 
refer to the <em>git flow</em> methodology page for more 
information.</p></div><h2 id='getting-started' class='header-anchors'>Getting 
Started</h2><p>Apache PredictionIO relies heavily on the <a 
href="http://nvie.com/posts/a-successful-git-branching-model/";>git flow 
methodology</a>. Please make sure you read and understand it before you start 
your development. By default, cloning Apache PredictionIO will put you in the 
<em>develop</em> branch, which in most cases is where all the latest 
development go to.</p><div class="alert-message note"><p>For core development, 
please follow the <a href="http://docs.scala-lang.org/style/";>Scala Style 
Guide</a>.</p></div><h3 
id='create-a-fork-of-the-apache-predictionio-repository' 
class='header-anchors'>Create a Fork of th
 e Apache PredictionIO Repository</h3> <ol> <li>Start by creating a GitHub 
account if you do not already have one.</li> <li>Go to <a 
href="https://github.com/PredictionIO/PredictionIO";>Apache PredictionIO’s 
GitHub mirror</a> and fork it to your own account.</li> <li>Clone your fork to 
your local machine.</li> </ol> <p>If you need additional help, please refer to 
<a 
href="https://help.github.com/articles/fork-a-repo/";>https://help.github.com/articles/fork-a-repo/</a>.</p><h3
 id='building-apache-predictionio-from-source' class='header-anchors'>Building 
Apache PredictionIO from Source</h3><p>After the previous section, you should 
have a copy of Apache PredictionIO (incubating) in your local machine ready to 
be built.</p> <ol> <li>Make sure you are on the <em>develop</em> branch. You 
can double check by <code>git status</code> or simply <code>git checkout 
develop</code>.</li> <li>At the root of the repository, do 
<code>./make-distribution.sh</code> to build PredictionIO.</li> </ol> <h3
  id='setting-up-the-environment' class='header-anchors'>Setting Up the 
Environment</h3><p>Apache PredictionIO relies on 3rd party software to perform 
its tasks. To set them up, simply follow this <a 
href="http://predictionio.apache.org/install/install-sourcecode/#installing-dependencies";>documentation</a>.</p><h3
 id='start-hacking' class='header-anchors'>Start Hacking</h3><p>You should have 
a Apache PredictionIO development environment by now. Happy hacking!</p><h2 
id='anatomy-of-apache-predictionio-code-tree' class='header-anchors'>Anatomy of 
Apache PredictionIO Code Tree</h2><p>The following describes each directory’s 
purpose.</p><h3 id='bin' class='header-anchors'>bin</h3><p>Shell scripts and 
any relevant components to go into the binary distribution. Utility shell 
scripts can also be included here.</p><h3 id='conf' 
class='header-anchors'>conf</h3><p>Configuration files that are used by both a 
source tree and binary distribution.</p><h3 id='core' 
class='header-anchors'>core</h3
 ><p>Core Apache PredictionIO code that provides the DASE controller API, core 
 >data structures, and workflow creation and management code.</p><h3 id='data' 
 >class='header-anchors'>data</h3><p>Apache PredictionIO Event Server, and 
 >backend-agnostic storage layer for event store and metadata store.</p><h3 
 >id='docs' class='header-anchors'>docs</h3><p>Source code for <a 
 >href="http://predictionio.apache.org";>http://predictionio.apache.org</a> 
 >site, and any other documentation support files.</p><h3 id='examples' 
 >class='header-anchors'>examples</h3><p>Complete code examples showing Apache 
 >PredictionIO&#39;s application.</p><h3 id='sbt' 
 >class='header-anchors'>sbt</h3><p>Embedded SBT (Simple Build Tool) 
 >launcher.</p><h3 id='storage' class='header-anchors'>storage</h3><p>Storage 
 >implementations.</p><h3 id='tools' class='header-anchors'>tools</h3><p>Tools 
 >for running Apache PredictionIO. Contains primarily the CLI (command-line 
 >interface) and its supporting code, and the experimental evaluation d
 ashboard.</p></div></div></div></div><footer><div class="container"><div 
class="seperator"></div><div class="row"><div class="col-md-6 
footer-link-column"><div 
class="footer-link-column-row"><h4>Community</h4><ul><li><a 
href="//predictionio.apache.org/install/" 
target="blank">Download</a></li><li><a href="//predictionio.apache.org/" 
target="blank">Docs</a></li><li><a 
href="//github.com/apache/incubator-predictionio" 
target="blank">GitHub</a></li><li><a 
href="mailto:[email protected]"; target="blank">Subscribe 
to User Mailing List</a></li><li><a 
href="//stackoverflow.com/questions/tagged/predictionio" 
target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 
footer-link-column"><div 
class="footer-link-column-row"><h4>Contribute</h4><ul><li><a 
href="//predictionio.apache.org/community/contribute-code/" 
target="blank">Contribute</a></li><li><a 
href="//github.com/apache/incubator-predictionio" target="blank">Source 
Code</a></li><li><a href="//issues.
 apache.org/jira/browse/PIO" target="blank">Bug Tracker</a></li><li><a 
href="mailto:[email protected]"; target="blank">Subscribe to 
Development Mailing List</a></li></ul></div></div></div><div class="row"><div 
class="col-md-12 footer-link-column"><p>Apache PredictionIO, PredictionIO, 
Apache, the Apache feather logo, and the Apache PredictionIO project logo are 
either registered trademarks or trademarks of The Apache Software Foundation in 
the United States and other countries.</p><p>All other marks mentioned may be 
trademarks or registered trademarks of their respective 
owners.</p></div></div></div><div id="footer-bottom"><div 
class="container"><div class="row"><div class="col-md-12"><div 
id="footer-logo-wrapper"><img alt="PredictionIO" 
src="/images/logos/logo-white-d1e9c6e6.png"/><span>®</span></div><div 
id="social-icons-wrapper"><a class="github-button" 
href="https://github.com/apache/incubator-predictionio"; data-style="mega" 
data-count-href="/apache/incubator-p
 redictionio/stargazers" 
data-count-api="/repos/apache/incubator-predictionio#stargazers_count" 
data-count-aria-label="# stargazers on GitHub" aria-label="Star 
apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" 
href="https://github.com/apache/incubator-predictionio/fork"; 
data-icon="octicon-git-branch" data-style="mega" 
data-count-href="/apache/incubator-predictionio/network" 
data-count-api="/repos/apache/incubator-predictionio#forks_count" 
data-count-aria-label="# forks on GitHub" aria-label="Fork 
apache/incubator-predictionio on GitHub">Fork</a> <script id="github-bjs" 
async="" defer="" src="https://buttons.github.io/buttons.js";></script><a 
href="https://twitter.com/predictionio"; target="blank"><img alt="PredictionIO 
on Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a 
href="https://www.facebook.com/predictionio"; target="blank"><img 
alt="PredictionIO on Facebook" src="/images/icons/facebook-5c57939c.png"/></a> 
</div></div></div></div></div></footer><
 
/div><script>(function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
+<!DOCTYPE html><html><head><title>Contribute Code</title><meta 
charset="utf-8"/><meta content="IE=edge,chrome=1" 
http-equiv="X-UA-Compatible"/><meta name="viewport" 
content="width=device-width, initial-scale=1.0"/><meta class="swiftype" 
name="title" data-type="string" content="Contribute Code"/><link 
rel="canonical" 
href="https://predictionio.apache.org/community/contribute-code/"/><link 
href="/images/favicon/normal-b330020a.png" rel="shortcut icon"/><link 
href="/images/favicon/apple-c0febcf2.png" rel="apple-touch-icon"/><link 
href="//fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800"
 rel="stylesheet"/><link 
href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" 
rel="stylesheet"/><link href="/stylesheets/application-eccfc6cb.css" 
rel="stylesheet" type="text/css"/><script 
src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"></script><script
 src="//cdn.mathjax.org/mathjax/latest/Math
 Jax.js?config=TeX-AMS-MML_HTMLorMML"></script><script 
src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: 
true });}catch(e){}</script></head><body><div id="global"><header><div 
class="container" id="header-wrapper"><div class="row"><div 
class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a 
href="#"></a><a href="http://predictionio.apache.org/";><img alt="Apache 
PredictionIO" id="logo" 
src="/images/logos/logo-ee2b9bb3.png"/></a><span>®</span></div><div 
id="menu-wrapper"><div id="pill-wrapper"><a class="pill left" 
href="/gallery/template-gallery">TEMPLATES</a> <a class="pill right" 
href="//github.com/apache/predictionio/">OPEN SOURCE</a></div></div><img 
class="mobile-search-bar-toggler hidden-md hidden-lg" 
src="/images/icons/search-glass-704bd4ff.png"/></div></div></div></header><div 
id="search-bar-row-wrapper"><div class="container-fluid" 
id="search-bar-row"><div class="row"><div class="col-md-9 col-sm-11 
col-xs-11"><div class="hidden-m
 d hidden-lg" id="mobile-page-heading-wrapper"><p>PredictionIO 
Docs</p><h4>Contribute Code</h4></div><h4 class="hidden-sm 
hidden-xs">PredictionIO Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1 
hidden-md hidden-lg"><img id="left-menu-indicator" 
src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3 
col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form 
class="search-form"><img class="search-box-toggler hidden-xs hidden-sm" 
src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img 
src="/images/icons/search-glass-704bd4ff.png"/><input type="text" 
id="st-search-input" class="st-search-input" placeholder="Search 
Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg" 
src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div 
class="mobile-left-menu-toggler hidden-md 
hidden-lg"></div></div></div></div><div id="page" class="container-fluid"><div 
class="row"><div id="left-menu-wrapper" class="col-md-3"><nav i
 d="nav-main"><ul><li class="level-1"><a class="expandible" 
href="/"><span>Apache PredictionIO® Documentation</span></a><ul><li 
class="level-2"><a class="final" href="/"><span>Welcome to Apache 
PredictionIO®</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Getting Started</span></a><ul><li 
class="level-2"><a class="final" href="/start/"><span>A Quick 
Intro</span></a></li><li class="level-2"><a class="final" 
href="/install/"><span>Installing Apache PredictionIO</span></a></li><li 
class="level-2"><a class="final" href="/start/download/"><span>Downloading an 
Engine Template</span></a></li><li class="level-2"><a class="final" 
href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li 
class="level-2"><a class="final" href="/start/customize/"><span>Customizing the 
Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Integrating with Your App</span></a><ul><li class="level-2"><a 
class="final" href="/appin
 tegration/"><span>App Integration Overview</span></a></li><li 
class="level-2"><a class="expandible" href="/sdk/"><span>List of 
SDKs</span></a><ul><li class="level-3"><a class="final" 
href="/sdk/java/"><span>Java & Android SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/php/"><span>PHP 
SDK</span></a></li><li class="level-3"><a class="final" 
href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a 
class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li 
class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered 
SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li 
class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web 
Service</span></a></li><li class="level-2"><a class="final" 
href="/batchpredict/"><span>Batch Predictions</span></a></li><li 
class="level-2"><a class="final" href="/deploy/monitoring/"><span>Monitoring 
Engi
 ne</span></a></li><li class="level-2"><a class="final" 
href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li 
class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying 
Multiple Engine Variants</span></a></li><li class="level-2"><a class="final" 
href="/deploy/plugin/"><span>Engine Server Plugin</span></a></li></ul></li><li 
class="level-1"><a class="expandible" href="#"><span>Customizing an 
Engine</span></a><ul><li class="level-2"><a class="final" 
href="/customize/"><span>Learning DASE</span></a></li><li class="level-2"><a 
class="final" href="/customize/dase/"><span>Implement DASE</span></a></li><li 
class="level-2"><a class="final" 
href="/customize/troubleshooting/"><span>Troubleshooting Engine 
Development</span></a></li><li class="level-2"><a class="final" 
href="/api/current/#package"><span>Engine Scala 
APIs</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Collecting and Analyzing Data</span></a><ul><li c
 lass="level-2"><a class="final" href="/datacollection/"><span>Event Server 
Overview</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/eventapi/"><span>Collecting Data with 
REST/SDKs</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/eventmodel/"><span>Events Modeling</span></a></li><li 
class="level-2"><a class="final" 
href="/datacollection/webhooks/"><span>Unifying Multichannel Data with 
Webhooks</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/channel/"><span>Channel</span></a></li><li 
class="level-2"><a class="final" 
href="/datacollection/batchimport/"><span>Importing Data in 
Batch</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/analytics/"><span>Using Analytics 
Tools</span></a></li><li class="level-2"><a class="final" 
href="/datacollection/plugin/"><span>Event Server 
Plugin</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Choosing an Algorithm(s)</spa
 n></a><ul><li class="level-2"><a class="final" 
href="/algorithm/"><span>Built-in Algorithm Libraries</span></a></li><li 
class="level-2"><a class="final" href="/algorithm/switch/"><span>Switching to 
Another Algorithm</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/multiple/"><span>Combining Multiple 
Algorithms</span></a></li><li class="level-2"><a class="final" 
href="/algorithm/custom/"><span>Adding Your Own 
Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>ML Tuning and Evaluation</span></a><ul><li class="level-2"><a 
class="final" href="/evaluation/"><span>Overview</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li 
class="level-2"><a class="final" 
href="/evaluation/evaluationdashboard/"><span>Evaluation 
Dashboard</span></a></li><li class="level-2"><a class="final" 
href="/evaluation/metricchoose/"><span>Choosing Evaluation Metrics</span></a><
 /li><li class="level-2"><a class="final" 
href="/evaluation/metricbuild/"><span>Building Evaluation 
Metrics</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>System Architecture</span></a><ul><li class="level-2"><a 
class="final" href="/system/"><span>Architecture Overview</span></a></li><li 
class="level-2"><a class="final" href="/system/anotherdatastore/"><span>Using 
Another Data Store</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>PredictionIO® Official 
Templates</span></a><ul><li class="level-2"><a class="final" 
href="/templates/"><span>Intro</span></a></li><li class="level-2"><a 
class="expandible" href="#"><span>Recommendation</span></a><ul><li 
class="level-3"><a class="final" 
href="/templates/recommendation/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" href="/templates/recomme
 ndation/evaluation/"><span>Evaluation Explained</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/recommendation/how-to/"><span>How-To</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/recommendation/reading-custom-events/"><span>Read Custom 
Events</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/customize-data-prep/"><span>Customize Data 
Preparator</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/customize-serving/"><span>Customize 
Serving</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/training-with-implicit-preference/"><span>Train 
with Implicit Preference</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/blacklist-items/"><span>Filter Recommended 
Items by Blacklist in Query</span></a></li><li class="level-3"><a class="final" 
href="/templates/recommendation/batch-evaluator/"><span>Batch Persistable Evalua
 tor</span></a></li></ul></li><li class="level-2"><a class="expandible" 
href="#"><span>E-Commerce Recommendation</span></a><ul><li class="level-3"><a 
class="final" href="/templates/ecommercerecommendation/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/how-to/"><span>How-To</span></a></li><li
 class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/train-with-rate-event/"><span>Train 
with Rate Event</span></a></li><li class="level-3"><a class="final" 
href="/templates/ecommercerecommendation/adjust-score/"><span>Adjust 
Score</span></a></li></ul></li><li class="level-2"><a class="expandible" 
href="#"><span>Similar Product</span></a><ul><li class="level-3"><a 
class="final" href="/templates/similarproduct/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a class="final" 
 href="/templates/similarproduct/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/similarproduct/how-to/"><span>How-To</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/similarproduct/multi-events-multi-algos/"><span>Multiple 
Events and Multiple Algorithms</span></a></li><li class="level-3"><a 
class="final" 
href="/templates/similarproduct/return-item-properties/"><span>Returns Item 
Properties</span></a></li><li class="level-3"><a class="final" 
href="/templates/similarproduct/train-with-rate-event/"><span>Train with Rate 
Event</span></a></li><li class="level-3"><a class="final" 
href="/templates/similarproduct/rid-user-set-event/"><span>Get Rid of Events 
for Users</span></a></li><li class="level-3"><a class="final" 
href="/templates/similarproduct/recommended-user/"><span>Recommend 
Users</span></a></li></ul></li><li class="level-2"><a class="expandible" 
href="#"><span>Classification</span></a><ul><li class="level-3"><a class="fina
 l" href="/templates/classification/quickstart/"><span>Quick 
Start</span></a></li><li class="level-3"><a class="final" 
href="/templates/classification/dase/"><span>DASE</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/classification/how-to/"><span>How-To</span></a></li><li 
class="level-3"><a class="final" 
href="/templates/classification/add-algorithm/"><span>Use Alternative 
Algorithm</span></a></li><li class="level-3"><a class="final" 
href="/templates/classification/reading-custom-properties/"><span>Read Custom 
Properties</span></a></li></ul></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Engine Template Gallery</span></a><ul><li 
class="level-2"><a class="final" 
href="/gallery/template-gallery/"><span>Browse</span></a></li><li 
class="level-2"><a class="final" 
href="/community/submit-template/"><span>Submit your Engine as a 
Template</span></a></li></ul></li><li class="level-1"><a class="expandible" 
href="#"><span>Demo Tutorials</span></a><ul
 ><li class="level-2"><a class="final" href="/demo/tapster/"><span>Comics 
 >Recommendation Demo</span></a></li><li class="level-2"><a class="final" 
 >href="/demo/community/"><span>Community Contributed Demo</span></a></li><li 
 >class="level-2"><a class="final" href="/demo/textclassification/"><span>Text 
 >Classification Engine Tutorial</span></a></li></ul></li><li 
 >class="level-1"><a class="expandible" href="/community/"><span>Getting 
 >Involved</span></a><ul><li class="level-2"><a class="final active" 
 >href="/community/contribute-code/"><span>Contribute Code</span></a></li><li 
 >class="level-2"><a class="final" 
 >href="/community/contribute-documentation/"><span>Contribute 
 >Documentation</span></a></li><li class="level-2"><a class="final" 
 >href="/community/contribute-sdk/"><span>Contribute a SDK</span></a></li><li 
 >class="level-2"><a class="final" 
 >href="/community/contribute-webhook/"><span>Contribute a 
 >Webhook</span></a></li><li class="level-2"><a class="final" 
 >href="/community/projects/"><span>Commu
 nity Projects</span></a></li></ul></li><li class="level-1"><a 
class="expandible" href="#"><span>Getting Help</span></a><ul><li 
class="level-2"><a class="final" 
href="/resources/faq/"><span>FAQs</span></a></li><li class="level-2"><a 
class="final" href="/support/"><span>Support</span></a></li></ul></li><li 
class="level-1"><a class="expandible" 
href="#"><span>Resources</span></a><ul><li class="level-2"><a class="final" 
href="/cli/"><span>Command-line Interface</span></a></li><li class="level-2"><a 
class="final" href="/resources/release/"><span>Release 
Cadence</span></a></li><li class="level-2"><a class="final" 
href="/resources/intellij/"><span>Developing Engines with IntelliJ 
IDEA</span></a></li><li class="level-2"><a class="final" 
href="/resources/upgrade/"><span>Upgrade Instructions</span></a></li><li 
class="level-2"><a class="final" 
href="/resources/glossary/"><span>Glossary</span></a></li></ul></li><li 
class="level-1"><a class="expandible" href="#"><span>Apache Software Foundation<
 /span></a><ul><li class="level-2"><a class="final" 
href="https://www.apache.org/";><span>Apache Homepage</span></a></li><li 
class="level-2"><a class="final" 
href="https://www.apache.org/licenses/";><span>License</span></a></li><li 
class="level-2"><a class="final" 
href="https://www.apache.org/foundation/sponsorship.html";><span>Sponsorship</span></a></li><li
 class="level-2"><a class="final" 
href="https://www.apache.org/foundation/thanks.html";><span>Thanks</span></a></li><li
 class="level-2"><a class="final" 
href="https://www.apache.org/security/";><span>Security</span></a></li></ul></li></ul></nav></div><div
 class="col-md-9 col-sm-12"><div class="content-header hidden-md 
hidden-lg"><div id="breadcrumbs" class="hidden-sm hidden xs"><ul><li><a 
href="/community/">Getting Involved</a><span 
class="spacer">&gt;</span></li><li><span class="last">Contribute 
Code</span></li></ul></div><div id="page-title"><h1>Contribute 
Code</h1></div></div><div id="table-of-content-wrapper"><h5>On this page</h5><
 aside id="table-of-contents"><ul> <li> <a href="#areas-in-need-of-help">Areas 
in Need of Help</a> </li> <li> <a href="#how-to-report-an-issue">How to Report 
an Issue</a> </li> <li> <a href="#how-to-help-resolve-existing-issues">How to 
Help Resolve Existing Issues</a> </li> <li> <a 
href="#how-to-add-propose-a-new-feature">How to Add / Propose a New Feature</a> 
</li> <li> <a href="#how-to-issue-a-pull-request">How to Issue a Pull 
Request</a> </li> <li> <a href="#getting-started">Getting Started</a> </li> 
<li> <a href="#anatomy-of-apache-predictionio-code-tree">Anatomy of Apache 
PredictionIO Code Tree</a> </li> </ul> </aside><hr/><a id="edit-page-link" 
href="https://github.com/apache/predictionio/tree/livedoc/docs/manual/source/community/contribute-code.html.md";><img
 src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div 
class="content-header hidden-sm hidden-xs"><div id="breadcrumbs" 
class="hidden-sm hidden xs"><ul><li><a href="/community/">Getting 
Involved</a><spa
 n class="spacer">&gt;</span></li><li><span class="last">Contribute 
Code</span></li></ul></div><div id="page-title"><h1>Contribute 
Code</h1></div></div><div class="content"> <p>Thank you for your interest in 
contributing to Apache PredictionIO. Our mission is to enable developers to 
build scalable machine learning applications easily. Here is how you can help 
with the project development. If you have any question regarding development at 
anytime, please free to <a 
href="mailto:[email protected]";>subscribe</a> and post to 
the <a href="mailto:[email protected]";>Development Mailing 
List</a>.</p><h2 id='areas-in-need-of-help' class='header-anchors'>Areas in 
Need of Help</h2><p>We accept contributions of all kinds at any time. We are 
compiling this list to show features that are highly sought after by the 
community.</p> <ul> <li>Tests and CI</li> <li>Engine template, tutorials, and 
samples</li> <li>Client SDKs</li> <li>Building engines in Java (upda
 ting the Java controller API)</li> <li>Code clean up and refactoring</li> 
<li>Code and data pipeline optimization</li> <li>Developer experience (UX) 
improvement</li> </ul> <h2 id='how-to-report-an-issue' 
class='header-anchors'>How to Report an Issue</h2><p>If you wish to report an 
issue you found, you can do so on <a 
href="https://issues.apache.org/jira/browse/PIO";>Apache PredictionIO 
JIRA</a>.</p><h2 id='how-to-help-resolve-existing-issues' 
class='header-anchors'>How to Help Resolve Existing Issues</h2><p>In general, 
bug fixes should be done the same way as new features, but critical bug fixes 
will follow a different path.</p><h2 id='how-to-add-/-propose-a-new-feature' 
class='header-anchors'>How to Add / Propose a New Feature</h2><p>Before adding 
new features into JIRA, please check that the feature does not currently exist 
in JIRA.</p> <ol> <li>To propose a new feature, simply <a 
href="mailto:[email protected]";>subscribe</a> and post your 
proposal to <a href="m
 ailto:[email protected]">Apache PredictionIO Development Mailing 
List</a>.</li> <li>Discuss with the community and the core development team on 
what needs to be done, and lay down concrete plans on deliverables.</li> 
<li>Once solid plans are made, start creating tickets in the <a 
href="https://issues.apache.org/jira/browse/PIO";>issue tracker</a>.</li> 
<li>Work side by side with other developers using Apache PredictionIO 
Development Mailing List as primary mode of communication. You never know if 
someone else has a better idea. ;)</li> </ol> <h3 id='adding-ticket-to-jira' 
class='header-anchors'>Adding ticket to JIRA</h3> <ol> <li>Add a descriptive 
Summary and a detailed description</li> <li>Set Issue Type to Bug, Improvement, 
New Feature, Test or Wish</li> <li>Set Priority to Blocker, Critical, Major, 
Minor or Trivial</li> <li>Fill out Affects Version with the version of 
PredictionIO you are currently using</li> <li>Fill out Environment if needed 
for description of your bug
  / feature</li> <li>Please leave other fields blank</li> </ol> <h3 
id='triaging-jira' class='header-anchors'>Triaging JIRA</h3><p>Tickets will be 
triaged by PredictionIO committers.</p> <ul> <li><p><strong>Target 
Version</strong>: Either a particular version or <code>Future</code> if to be 
done later</p> <ul> <li>Once a fix has been committed, the Fix Version will 
filled in with the appropriate release</li> </ul></li> 
<li><p><strong>Component</strong>: Each ticket will be annotated with one or 
more of the following Components</p> <ul> <li><strong>Core</strong>: affects 
the main code branch / will be part of a release</li> 
<li><strong>Documentation</strong>: affects the documents / will be pushed to 
livedoc branch</li> <li><strong>Templates</strong>: affects one of the separate 
github repositories for a template</li> </ul></li> </ul> <h2 
id='how-to-issue-a-pull-request' class='header-anchors'>How to Issue a Pull 
Request</h2><p>When you have finished your code, you can <a href="https:
 //help.github.com/articles/creating-a-pull-request/">create a pull request</a> 
against the <strong>develop</strong> branch.</p> <ul> <li>The title must 
contain a tag associating with an existing JIRA ticket. You must create a 
ticket so that the infrastructure can correctly track issues across Apache JIRA 
and GitHub. If your ticket is <code>PIO-789</code>, your title must look 
something like <code>[PIO-789] Some short description</code>.</li> <li>Please 
also, in your commit message summary, include the JIRA ticket number similar to 
above.</li> <li>Make sure the title and description are clear and concise. For 
more details on writing a good commit message, check out <a 
href="http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html";>this
 guide</a>.</li> <li>If the change is visual, make sure to include a screenshot 
or GIF.</li> <li>Make sure it is being opened into the right branch.</li> 
<li>Make sure it has been rebased on top of that branch.</li> </ul> <div 
class="alert-m
 essage note"><p>When it is close to a release, and if there are major 
development ongoing, a release branch will be forked from the develop branch to 
stabilize the code for binary release. Please refer to the <em>git flow</em> 
methodology page for more information.</p></div><h2 id='getting-started' 
class='header-anchors'>Getting Started</h2><p>Apache PredictionIO relies 
heavily on the <a 
href="http://nvie.com/posts/a-successful-git-branching-model/";>git flow 
methodology</a>. Please make sure you read and understand it before you start 
your development. By default, cloning Apache PredictionIO will put you in the 
<em>develop</em> branch, which in most cases is where all the latest 
development go to.</p><div class="alert-message note"><p>For core development, 
please follow the <a href="http://docs.scala-lang.org/style/";>Scala Style 
Guide</a>.</p></div><h3 
id='create-a-fork-of-the-apache-predictionio-repository' 
class='header-anchors'>Create a Fork of the Apache PredictionIO Repository<
 /h3> <ol> <li>Start by creating a GitHub account if you do not already have 
one.</li> <li>Go to <a 
href="https://github.com/PredictionIO/PredictionIO";>Apache PredictionIO’s 
GitHub mirror</a> and fork it to your own account.</li> <li>Clone your fork to 
your local machine.</li> </ol> <p>If you need additional help, please refer to 
<a 
href="https://help.github.com/articles/fork-a-repo/";>https://help.github.com/articles/fork-a-repo/</a>.</p><h3
 id='building-apache-predictionio-from-source' class='header-anchors'>Building 
Apache PredictionIO from Source</h3><p>After the previous section, you should 
have a copy of Apache PredictionIO in your local machine ready to be built.</p> 
<ol> <li>Make sure you are on the <em>develop</em> branch. You can double check 
by <code>git status</code> or simply <code>git checkout develop</code>.</li> 
<li>At the root of the repository, do <code>./make-distribution.sh</code> to 
build PredictionIO.</li> </ol> <h3 id='setting-up-the-environment' class='header
 -anchors'>Setting Up the Environment</h3><p>Apache PredictionIO relies on 3rd 
party software to perform its tasks. To set them up, simply follow this <a 
href="http://predictionio.apache.org/install/install-sourcecode/#installing-dependencies";>documentation</a>.</p><h3
 id='start-hacking' class='header-anchors'>Start Hacking</h3><p>You should have 
a Apache PredictionIO development environment by now. Happy hacking!</p><h2 
id='anatomy-of-apache-predictionio-code-tree' class='header-anchors'>Anatomy of 
Apache PredictionIO Code Tree</h2><p>The following describes each directory’s 
purpose.</p><h3 id='bin' class='header-anchors'>bin</h3><p>Shell scripts and 
any relevant components to go into the binary distribution. Utility shell 
scripts can also be included here.</p><h3 id='conf' 
class='header-anchors'>conf</h3><p>Configuration files that are used by both a 
source tree and binary distribution.</p><h3 id='core' 
class='header-anchors'>core</h3><p>Core Apache PredictionIO code that provide
 s the DASE controller API, core data structures, and workflow creation and 
management code.</p><h3 id='data' class='header-anchors'>data</h3><p>Apache 
PredictionIO Event Server, and backend-agnostic storage layer for event store 
and metadata store.</p><h3 id='docs' class='header-anchors'>docs</h3><p>Source 
code for <a 
href="http://predictionio.apache.org";>http://predictionio.apache.org</a> site, 
and any other documentation support files.</p><h3 id='examples' 
class='header-anchors'>examples</h3><p>Complete code examples showing Apache 
PredictionIO&#39;s application.</p><h3 id='sbt' 
class='header-anchors'>sbt</h3><p>Embedded SBT (Simple Build Tool) 
launcher.</p><h3 id='storage' class='header-anchors'>storage</h3><p>Storage 
implementations.</p><h3 id='tools' class='header-anchors'>tools</h3><p>Tools 
for running Apache PredictionIO. Contains primarily the CLI (command-line 
interface) and its supporting code, and the experimental evaluation 
dashboard.</p></div></div></div></div><footer><
 div class="container"><div class="seperator"></div><div class="row"><div 
class="col-md-6 footer-link-column"><div 
class="footer-link-column-row"><h4>Community</h4><ul><li><a 
href="//predictionio.apache.org/install/" 
target="blank">Download</a></li><li><a href="//predictionio.apache.org/" 
target="blank">Docs</a></li><li><a href="//github.com/apache/predictionio" 
target="blank">GitHub</a></li><li><a 
href="mailto:[email protected]"; target="blank">Subscribe 
to User Mailing List</a></li><li><a 
href="//stackoverflow.com/questions/tagged/predictionio" 
target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 
footer-link-column"><div 
class="footer-link-column-row"><h4>Contribute</h4><ul><li><a 
href="//predictionio.apache.org/community/contribute-code/" 
target="blank">Contribute</a></li><li><a 
href="//github.com/apache/predictionio" target="blank">Source 
Code</a></li><li><a href="//issues.apache.org/jira/browse/PIO" 
target="blank">Bug Tracker</a></li><li
 ><a href="mailto:[email protected]"; 
 >target="blank">Subscribe to Development Mailing 
 >List</a></li></ul></div></div></div><div class="row"><div class="col-md-12 
 >footer-link-column"><p>Apache PredictionIO, PredictionIO, Apache, the Apache 
 >feather logo, and the Apache PredictionIO project logo are either registered 
 >trademarks or trademarks of The Apache Software Foundation in the United 
 >States and other countries.</p><p>All other marks mentioned may be trademarks 
 >or registered trademarks of their respective 
 >owners.</p></div></div></div><div id="footer-bottom"><div 
 >class="container"><div class="row"><div class="col-md-12"><div 
 >id="footer-logo-wrapper"><img alt="PredictionIO" 
 >src="/images/logos/logo-white-d1e9c6e6.png"/><span>®</span></div><div 
 >id="social-icons-wrapper"><a class="github-button" 
 >href="https://github.com/apache/predictionio"; data-style="mega" 
 >data-count-href="/apache/predictionio/stargazers" 
 >data-count-api="/repos/apache/predictionio#stargazers_count" d
 ata-count-aria-label="# stargazers on GitHub" aria-label="Star 
apache/predictionio on GitHub">Star</a> <a class="github-button" 
href="https://github.com/apache/predictionio/fork"; 
data-icon="octicon-git-branch" data-style="mega" 
data-count-href="/apache/predictionio/network" 
data-count-api="/repos/apache/predictionio#forks_count" 
data-count-aria-label="# forks on GitHub" aria-label="Fork apache/predictionio 
on GitHub">Fork</a> <script id="github-bjs" async="" defer="" 
src="https://buttons.github.io/buttons.js";></script><a 
href="https://twitter.com/predictionio"; target="blank"><img alt="PredictionIO 
on Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a 
href="https://www.facebook.com/predictionio"; target="blank"><img 
alt="PredictionIO on Facebook" src="/images/icons/facebook-5c57939c.png"/></a> 
</div></div></div></div></div></footer></div><script>(function(w,d,t,u,n,s,e){w['SwiftypeObject']=n;w[n]=w[n]||function(){
 (w[n].q=w[n].q||[]).push(arguments);};s=d.createElement(t);
 
e=d.getElementsByTagName(t)[0];s.async=1;s.src=u;e.parentNode.insertBefore(s,e);
 })(window,document,'script','//s.swiftypecdn.com/install/v1/st.js','_st');

Reply via email to