You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@predictionio.apache.org by gi...@apache.org on 2018/03/14 22:08:40 UTC

[41/51] [partial] predictionio-site git commit: Documentation based on apache/predictionio#439b87e07a59021839ea3fe2cd40f98fb8d4cc5f

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