http://git-wip-us.apache.org/repos/asf/predictionio-site/blob/765e178c/community/contribute-code/index.html
----------------------------------------------------------------------
diff --git a/community/contribute-code/index.html 
b/community/contribute-code/index.html
index 867c3c6..f56d00f 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/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</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>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><l
 i 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/recommendatio
 n/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 
Evaluator</s
 pan></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="final" hre
 f="/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 c
 lass="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 P
 rojects</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><span clas
 s="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:dev-subscr...@predictionio.apache.org";>subscribe</a> and post to 
the <a href="mailto:dev-subscr...@predictionio.apache.org";>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 (updating t
 he 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:dev-subscr...@predictionio.apache.org";>subscribe</a> and post your 
proposal to <a href="mailto:
 d...@predictionio.apache.org">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 / fea
 ture</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-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 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-ancho
 rs'>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 
dashboard.</p></div></div></div></div><footer><div cl
 ass="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:user-subscr...@predictionio.apache.org"; 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 hr
 ef="mailto:dev-subscr...@predictionio.apache.org"; 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-icon="octicon-star" 
data-show-count="true" aria-label="Star apache/predictionio on GitHub">Star</a> 
<a class="github-button" href="
 https://github.com/apache/predictionio/fork"; data-icon="octicon-repo-forked" 
data-show-count="true" 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(){
+<!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="/community/projects/#sdks"><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</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>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/rec
 ommendation/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 Ev
 aluator</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="fin
 al" 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="
 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</span></a
 ><ul><li class="level-2"><a class="final" 
 >href="/community/projects/#demos"><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="#"><sp
 an>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>Apach
 e 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><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:dev-subscr...@predictionio.apache.org";>subscribe</a> and post to 
 >the <a href="mailto:dev-subscr...@predictionio.apache.org";>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 (updating the Java controller API)</li> <li>Code 
 >clean up and refactoring</li> <li>Code and data p
 ipeline 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:dev-subscr...@predictionio.apache.org";>subscribe</a> and post your 
proposal to <a href="mailto:d...@predictionio.apache.org";>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 <s
 trong>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-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 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 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 
dashboard.</p></div></div></div></div><footer><div class="container"><div 
class="seperator"></div><div class="row"><div class="col-md-6 foot
 er-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:user-subscr...@predictionio.apache.org"; 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:dev-subscr...@predictionio.apache.org"; target="blank">Subscribe to 
Developme
 nt 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-icon="octicon-star" 
data-show-count="true" aria-label="Star apache/predictionio on GitHub">Star</a> 
<a class="github-button" href="https://github.com/apache/predictionio/fork"; 
data-icon="octicon-repo-forked" data-show-
 count="true" 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