http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/452034c1/community/contribute-code/index.html
----------------------------------------------------------------------
diff --git a/community/contribute-code/index.html 
b/community/contribute-code/index.html
index 739d03c..78476d4 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.incubator.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/l
 atest/MathJax.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.incubator.apache.org/";><img 
alt="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™ (incubating) 
Documentation</span></a><ul><li class="level-2"><a class="final" 
href="/"><span>Welcome to Apache PredictionIO 
(incubating)</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 (incubating)</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="/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>Monitoring 
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" hr
 ef="#"><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 c
 lass="expandible" href="#"><span>Choosing an Algorithm(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="/evaluatio
 n/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/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/rec
 ommendation/batch-evaluator/"><span>Batch Persistable 
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>Quic
 k 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>Cla
 ssification</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 cl
 ass="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>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 c
 lass="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></d
 iv><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-incubating-code-tree">Anatomy of 
Apache PredictionIO (incubating) 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="b
 readcrumbs" 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 
(incubating). 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 (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> <l
 i>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 
(incubating) 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 (incubating) 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, Critic
 al, 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-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 (incubating) 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 (incubating) 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-(incubating)-repository' 
class='header-anchors'>Create a Fork of the Apache PredictionIO (incubating) 
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 
(incubating)’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-(incubating)-from-source' 
class='header-anchors'>Building Apache PredictionIO (incubating) 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 a
 re 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 
(incubating) relies on 3rd party software to perform its tasks. To set them up, 
simply follow this <a 
href="http://predictionio.incubator.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 (incubating) development environment by now. Happy 
hacking!</p><h2 id='anatomy-of-apache-predictionio-(incubating)-code-tree' 
class='header-anchors'>Anatomy of Apache PredictionIO (incubating) Code 
Tree</h2><p>The following describes each directory’s purpose.</p><h3 id='bin' 
class='header-anchors'>bin</h3><p>Sh
 ell 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 (incubating) 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 (incubating) 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.incubator.apache.org";>http://predictionio.incubator.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 (incubating)&#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 (incubating). 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.incubator.apache.org/install/" 
target="blank">Download</a></li><li><a 
href="//predictionio.incubator.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="//stackoverf
 low.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.incubator.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 trade
 marks of their respective owners.</p></div></div><div class="row"><div 
class="col-md-12 footer-link-column"><a class="pull-right" 
href="http://incubator.apache.org/projects/predictionio.html";><img alt="Apache 
Incubator" src="/images/logos/apache_incubator-6954bd16.png"/></a><span>Apache 
PredictionIO is an effort undergoing incubation at The Apache Software 
Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of 
all newly accepted projects until a further review indicates that the 
infrastructure, communications, and decision making process have stabilized in 
a manner consistent with other successful ASF projects. While incubation status 
is not necessarily a reflection of the completeness or stability of the code, 
it does indicate that the project has yet to be fully endorsed by the 
ASF.</span></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-predictionio/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/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 clas
 s="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-m
 d-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="/templates
 /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 Persistabl
 e 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 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 cla
 ss="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="/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/"><sp
 an>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 Fou
 ndation</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 pa
 ge</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/">Gettin
 g 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 eng
 ines 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 p
 ost 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 nee
 ded 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 you
 r 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 (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 i
 d='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 das
 hboard.</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.ap
 ache.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-pr
 edictionio/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(){
 (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');

http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/452034c1/community/contribute-code/index.html.gz
----------------------------------------------------------------------
diff --git a/community/contribute-code/index.html.gz 
b/community/contribute-code/index.html.gz
index 863ff6d..847ea1b 100644
Binary files a/community/contribute-code/index.html.gz and 
b/community/contribute-code/index.html.gz differ

Reply via email to