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">></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">></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'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">></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">></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'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');