http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/921d6861/community/contribute-code/index.html ---------------------------------------------------------------------- diff --git a/community/contribute-code/index.html b/community/contribute-code/index.html new file mode 100644 index 0000000..97adb7e --- /dev/null +++ b/community/contribute-code/index.html @@ -0,0 +1,6 @@ +<!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://docs.prediction.io/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-3a3867f7.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/MathJax.j s?config=TeX-AMS-MML_HTMLorMML"></script><script src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: true });}catch(e){}</script></head><body><div id="global"><header><div class="container" id="header-wrapper"><div class="row"><div class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a href="#"></a><a href="http://predictionio.incubator.apache.org/"><img alt="PredictionIO" id="logo" src="/images/logos/logo-ee2b9bb3.png"/></a></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 hidde n-lg" id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Contribute Code</h4></div><h4 class="hidden-sm hidden-xs">PredictionIO Docs</h4></div><div class="col-md-3 col-sm-1 col-xs-1 hidden-md hidden-lg"><img id="left-menu-indicator" src="/images/icons/down-arrow-dfe9f7fe.png"/></div><div class="col-md-3 col-sm-12 col-xs-12 swiftype-wrapper"><div class="swiftype"><form class="search-form"><img class="search-box-toggler hidden-xs hidden-sm" src="/images/icons/search-glass-704bd4ff.png"/><div class="search-box"><img src="/images/icons/search-glass-704bd4ff.png"/><input type="text" id="st-search-input" class="st-search-input" placeholder="Search Doc..."/></div><img class="swiftype-row-hider hidden-md hidden-lg" src="/images/icons/drawer-toggle-active-fcbef12a.png"/></form></div></div><div class="mobile-left-menu-toggler hidden-md hidden-lg"></div></div></div></div><div id="page" class="container-fluid"><div class="row"><div id="left-menu-wrapper" class="col-md-3"><nav id="nav- main"><ul><li class="level-1"><a class="expandible" href="/"><span>Apache PredictionIO (incubating) Documentation</span></a><ul><li class="level-2"><a class="final" href="/"><span>Welcome to Apache PredictionIO (incubating)</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Getting Started</span></a><ul><li class="level-2"><a class="final" href="/start/"><span>A Quick Intro</span></a></li><li class="level-2"><a class="final" href="/install/"><span>Installing Apache PredictionIO (incubating)</span></a></li><li class="level-2"><a class="final" href="/start/download/"><span>Downloading an Engine Template</span></a></li><li class="level-2"><a class="final" href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li class="level-2"><a class="final" href="/start/customize/"><span>Customizing the Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Integrating with Your App</span></a><ul><li class="level-2">< a class="final" href="/appintegration/"><span>App Integration Overview</span></a></li><li class="level-2"><a class="expandible" href="/sdk/"><span>List of SDKs</span></a><ul><li class="level-3"><a class="final" href="/sdk/java/"><span>Java & Android SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/php/"><span>PHP SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web Service</span></a></li><li class="level-2"><a class="final" href="/cli/#engine-commands"><span>Engine Command-line Interface</span></a></li><li class="level-2"><a class="final" h ref="/deploy/monitoring/"><span>Monitoring Engine</span></a></li><li class="level-2"><a class="final" href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying Multiple Engine Variants</span></a></li></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="/cli/#event-server-commands"><span>Event Server >Command-line Interface</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></ul></li><li class="level-1"><a class="expandible" >href="#"><span>Choosing an Algorithm(s)</span></a><ul><li class="level-2"><a >cl ass="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="f inal" 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>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/"><sp an>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="/resou rces/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="/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></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-incubating-code-tree">Anatomy of Apache PredictionIO (incubating) Code Tree</a> </li> </ul> </aside><hr/><a id="edit-page-link" href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/community/contribute-code.html.md"><img src="/images/icons/edit-pencil-d6c1bb3d.png"/>Edit this page</a></div><div class="content-header hidden-sm hidden-xs"><div id="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 (incubating). Our mission is to enable developers to build scalable machine learning applications easily. Here is how you can help with the project development. If you have any question regarding development at anytime, please free to <a href="mailto:[email protected]">subscribe</a> and post to the <a href="mailto:[email protected]">Development Mailing List</a>.</p><h2 id='areas-in-need-of-help' class='header-anchors'>Areas in Need of Help</h2><p>We accept contributions of all kinds at any time. We are compiling this list to show features that are highly sought after by the community.</p> <ul> <li>Tests and CI</li> <li>Engine template, tutorials, and samples</li> <li>Client SDKs</li> <li>Buildi ng engines in Java (updating the Java controller API)</li> <li>Code clean up and refactoring</li> <li>Code and data pipeline optimization</li> <li>Developer experience (UX) improvement</li> </ul> <h2 id='how-to-report-an-issue' class='header-anchors'>How to Report an Issue</h2><p>If you wish to report an issue you found, you can do so on <a href="https://issues.apache.org/jira/browse/PIO">Apache PredictionIO (incubating) JIRA</a>.</p><h2 id='how-to-help-resolve-existing-issues' class='header-anchors'>How to Help Resolve Existing Issues</h2><p>In general, bug fixes should be done the same way as new features, but critical bug fixes will follow a different path.</p><h2 id='how-to-add-/-propose-a-new-feature' class='header-anchors'>How to Add / Propose a New Feature</h2> <ol> <li>To propose a new feature, simply <a href="mailto:[email protected]">subscribe</a> and post your proposal to <a href="mailto:[email protected]">Apache Predictio nIO (incubating) Development Mailing List</a>.</li> <li>Discuss with the community and the core development team on what needs to be done, and lay down concrete plans on deliverables.</li> <li>Once solid plans are made, start creating tickets in the <a href="https://issues.apache.org/jira/browse/PIO">issue tracker</a>.</li> <li>Work side by side with other developers using Apache PredictionIO (incubating) Development Mailing List as primary mode of communication. You never know if someone else has a better idea. ;)</li> </ol> <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 Git Hub. If your ticket is <code>PIO-789</code>, your title must look something like <code>[PIO-789] Some short description</code>.</li> <li>Please also, in your commit message summary, include the JIRA ticket number similar to above.</li> <li>Make sure the title and description are clear and concise. For more details on writing a good commit message, check out <a href="http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html">this guide</a>.</li> <li>If the change is visual, make sure to include a screenshot or GIF.</li> <li>Make sure it is being opened into the right branch.</li> <li>Make sure it has been rebased on top of that branch.</li> </ul> <div class="alert-message note"><p>When it is close to a release, and if there are major development ongoing, a release branch will be forked from the develop branch to stabilize the code for binary release. Please refer to the <em>git flow</em> methodology page for more information.</p></div><h2 id='getting-started' class='header -anchors'>Getting Started</h2><p>Apache PredictionIO (incubating) relies heavily on the <a href="http://nvie.com/posts/a-successful-git-branching-model/">git flow methodology</a>. Please make sure you read and understand it before you start your development. By default, cloning Apache PredictionIO (incubating) will put you in the <em>develop</em> branch, which in most cases is where all the latest development go to.</p><div class="alert-message note"><p>For core development, please follow the <a href="http://docs.scala-lang.org/style/">Scala Style Guide</a>.</p></div><h3 id='create-a-fork-of-the-apache-predictionio-(incubating)-repository' class='header-anchors'>Create a Fork of the Apache PredictionIO (incubating) Repository</h3> <ol> <li>Start by creating a GitHub account if you do not already have one.</li> <li>Go to <a href="https://github.com/PredictionIO/PredictionIO">Apache PredictionIO (incubating)âs GitHub mirror</a> and fork it to your own account.</li> <li>Clone your fo rk to your local machine.</li> </ol> <p>If you need additional help, please refer to <a href="https://help.github.com/articles/fork-a-repo/">https://help.github.com/articles/fork-a-repo/</a>.</p><h3 id='building-apache-predictionio-(incubating)-from-source' class='header-anchors'>Building Apache PredictionIO (incubating) from Source</h3><p>After the previous section, you should have a copy of Apache PredictionIO (incubating) in your local machine ready to be built.</p> <ol> <li>Make sure you 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 (incubating) relies on 3rd party software to perform its tasks. To set them up, simply follow this <a href="http://docs.prediction.io/install/ins tall-sourcecode/#installing-dependencies">documentation</a>.</p><h3 id='start-hacking' class='header-anchors'>Start Hacking</h3><p>You should have a Apache PredictionIO (incubating) development environment by now. Happy hacking!</p><h2 id='anatomy-of-apache-predictionio-(incubating)-code-tree' class='header-anchors'>Anatomy of Apache PredictionIO (incubating) Code Tree</h2><p>The following describes each directoryâs purpose.</p><h3 id='bin' class='header-anchors'>bin</h3><p>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 (incubating) code that provides the DASE controller API, core data structures, and workflow creation and management code.</p><h3 id='data' class='header-anchors'>data</h3><p>Apach e PredictionIO (incubating) Event Server, and backend-agnostic storage layer for event store and metadata store.</p><h3 id='docs' class='header-anchors'>docs</h3><p>Source code for <a href="http://predictionio.incubator.apache.org">http://predictionio.incubator.apache.org</a> site, and any other documentation support files.</p><h3 id='engines' class='header-anchors'>engines</h3><p>Obsolete built-in engines. To be removed.</p><h3 id='examples' class='header-anchors'>examples</h3><p>Complete code examples showing Apache PredictionIO (incubating)'s application.</p><h3 id='sbt' class='header-anchors'>sbt</h3><p>Embedded SBT (Simple Build Tool) launcher.</p><h3 id='templates' class='header-anchors'>templates</h3><p>Starting point of building your custom engine.</p><h3 id='tools' class='header-anchors'>tools</h3><p>Tools for running Apache PredictionIO (incubating). Contains primarily the CLI (command-line interface) and its supporting code, and the experimental evaluation dashboard.< /p></div></div></div></div><footer><div class="container"><div class="seperator"></div><div class="row"><div class="col-md-6 col-xs-6 footer-link-column"><div class="footer-link-column-row"><h4>Community</h4><ul><li><a href="//docs.prediction.io/install/" target="blank">Download</a></li><li><a href="//docs.prediction.io/" target="blank">Docs</a></li><li><a href="//github.com/apache/incubator-predictionio" target="blank">GitHub</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to User Mailing List</a></li><li><a href="//stackoverflow.com/questions/tagged/predictionio" target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 col-xs-6 footer-link-column"><div class="footer-link-column-row"><h4>Contribute</h4><ul><li><a href="//predictionio.incubator.apache.org/community/contribute-code/" target="blank">Contribute</a></li><li><a href="//github.com/apache/incubator-predictionio" target="blank">Source Code</a></li><li> <a href="//issues.apache.org/jira/browse/PIO" target="blank">Bug Tracker</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to Development Mailing List</a></li></ul></div></div></div></div><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"/></div><div id="social-icons-wrapper"><a class="github-button" href="https://github.com/apache/incubator-predictionio" data-style="mega" data-count-href="/apache/incubator-predictionio/stargazers" data-count-api="/repos/apache/incubator-predictionio#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" href="https://github.com/apache/incubator-predictionio/fork" data-icon="octicon-git-branch" data-style="mega" data-count-href="/apache/incubator-predictionio/network " data-count-api="/repos/apache/incubator-predictionio#forks_count" data-count-aria-label="# forks on GitHub" aria-label="Fork apache/incubator-predictionio on GitHub">Fork</a> <script id="github-bjs" async="" defer="" src="https://buttons.github.io/buttons.js"></script><a href="//www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a href="//twitter.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'); + +_st('install','HaUfpXXV87xoB_zzCQ45');</script><script src="/javascripts/application-f819cf19.js"></script></body></html> \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/921d6861/community/contribute-code/index.html.gz ---------------------------------------------------------------------- diff --git a/community/contribute-code/index.html.gz b/community/contribute-code/index.html.gz new file mode 100644 index 0000000..0748a7d Binary files /dev/null and b/community/contribute-code/index.html.gz differ http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/921d6861/community/contribute-documentation/index.html ---------------------------------------------------------------------- diff --git a/community/contribute-documentation/index.html b/community/contribute-documentation/index.html new file mode 100644 index 0000000..05973ca --- /dev/null +++ b/community/contribute-documentation/index.html @@ -0,0 +1,60 @@ +<!DOCTYPE html><html><head><title>Contribute Documentation</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 Documentation"/><link rel="canonical" href="https://docs.prediction.io/community/contribute-documentation/"/><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-3a3867f7.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.o rg/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script><script src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: true });}catch(e){}</script></head><body><div id="global"><header><div class="container" id="header-wrapper"><div class="row"><div class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a href="#"></a><a href="http://predictionio.incubator.apache.org/"><img alt="PredictionIO" id="logo" src="/images/logos/logo-ee2b9bb3.png"/></a></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 Documentation</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-wra pper" class="col-md-3"><nav id="nav-main"><ul><li class="level-1"><a class="expandible" href="/"><span>Apache PredictionIO (incubating) Documentation</span></a><ul><li class="level-2"><a class="final" href="/"><span>Welcome to Apache PredictionIO (incubating)</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Getting Started</span></a><ul><li class="level-2"><a class="final" href="/start/"><span>A Quick Intro</span></a></li><li class="level-2"><a class="final" href="/install/"><span>Installing Apache PredictionIO (incubating)</span></a></li><li class="level-2"><a class="final" href="/start/download/"><span>Downloading an Engine Template</span></a></li><li class="level-2"><a class="final" href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li class="level-2"><a class="final" href="/start/customize/"><span>Customizing the Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Integrating with Your App </span></a><ul><li class="level-2"><a class="final" href="/appintegration/"><span>App Integration Overview</span></a></li><li class="level-2"><a class="expandible" href="/sdk/"><span>List of SDKs</span></a><ul><li class="level-3"><a class="final" href="/sdk/java/"><span>Java & Android SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/php/"><span>PHP SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li class="level-3"><a class="final" href="/sdk/community/"><span>Community Powered SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web Service</span></a></li><li class="level-2"><a class="final" href="/cli/#engine-commands"><span>Engine Command-line Interface</span></a></li><l i class="level-2"><a class="final" href="/deploy/monitoring/"><span>Monitoring Engine</span></a></li><li class="level-2"><a class="final" href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying Multiple Engine Variants</span></a></li></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 c lass="final" href="/datacollection/"><span>Event Server Overview</span></a></li><li class="level-2"><a class="final" href="/cli/#event-server-commands"><span>Event Server Command-line Interface</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></ul></li><li class="level-1"><a class="expandible" href="#"><span>Choosing an Algorithm(s)</sp an></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>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" href="/community/contribute-code/"><span>Contribute Code</span></a></li><li class="level-2"><a class="final active" 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="le vel-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="/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></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 Documentation</span></li></ul></div><div id="page-title"><h1>Contribute Documentation</h1></div></div><div id="table-of-content-wrapper"><h5>On thi s page</h5><aside id="table-of-contents"><ul> <li> <a href="#how-to-write-documentation">How to Write Documentation</a> </li> <li> <a href="#branching">Branching</a> </li> <li> <a href="#installing-locally">Installing Locally</a> </li> <li> <a href="#starting-the-server">Starting the Server</a> </li> <li> <a href="#building-the-site">Building the Site</a> </li> <li> <a href="#styleguide">Styleguide</a> </li> <li> <a href="#important-files">Important Files</a> </li> <li> <a href="#going-live">Going Live</a> </li> <li> <a href="#checking-the-site">Checking the Site</a> </li> <li> <a href="#license">License</a> </li> </ul> </aside><hr/><a id="edit-page-link" href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/community/contribute-documentation.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 Documentation</span></li></ul></div><div >id="page-title"><h1>Contribute Documentation</h1></div></div><div >class="content"><h2 id='how-to-write-documentation' >class='header-anchors'>How to Write Documentation</h2><p>You can help improve >the Apache PredictionIO (incubating) documentation by submitting tutorials, >writing how-tos, fixing errors, and adding missing information. You can edit >any page live on <a >href="https://github.com/apache/incubator-predictionio">GitHub</a> by >clicking the pencil icon on any page or open a <a >href="https://help.github.com/articles/creating-a-pull-request/">Pull >Request</a>.</p><h2 id='branching' >class='header-anchors'>Branching</h2><p>Use the <code>livedoc</code> branch >if you want to update the current documentation.</p><p>Use the ><code>develop</code> branch if you want to write documentation for the next >release.</p><h2 id='installing-locally' class='header-a nchors'>Installing Locally</h2><p>Apache PredictionIO (incubating) documentation uses <a href="http://middlemanapp.com/">Middleman</a> and is hosted on Apache.</p><p><a href="http://rubygems.org/">Gems</a> are managed with <a href="http://bundler.io/">Bundler</a>. Front end code with <a href="http://bower.io/">Bower</a>.</p><p>Requires <a href="https://www.ruby-lang.org/en/">Ruby</a> 2.1 or greater. We recommend <a href="http://rvm.io/">RVM</a> or <a href="https://github.com/sstephenson/rbenv">rbenv</a>.</p><div class="alert-message warning"><p><strong>OS X</strong> users you will need to install <a href="https://developer.apple.com/xcode/downloads/">Xcode Command Line Tools</a> with: <code>$ xcode-select --install</code> first.</p></div><p>You can install everything with the following commands:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5</pre></td><td class="code"><pre><span class="gp">$ </span><span class="nb">cd </span>docs/manual +<span class="gp">$ </span>gem install bundler +<span class="gp">$ </span>bundle install +<span class="gp">$ </span>npm install -g bower +<span class="gp">$ </span>bower install +</pre></td></tr></tbody></table> </div> <h2 id='starting-the-server' class='header-anchors'>Starting the Server</h2><p>Start the server with:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>bundle <span class="nb">exec </span>middleman server +</pre></td></tr></tbody></table> </div> <p>This will start the local web server at <a href="http://localhost:4567/">localhost:4567</a>.</p><h2 id='building-the-site' class='header-anchors'>Building the Site</h2><p>Build the site with:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ </span>bundle <span class="nb">exec </span>middleman build +</pre></td></tr></tbody></table> </div> <h2 id='styleguide' class='header-anchors'>Styleguide</h2><p>Please follow this styleguide for any documentation contributions.</p><h3 id='text' class='header-anchors'>Text</h3><p>View our <a href="/samples/">Sample Typography</a> page for all posible styles.</p><h3 id='headings' class='header-anchors'>Headings</h3><p>The main heading <code>h1</code> is derived from the title data attribute:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3</pre></td><td class="code"><pre>--- +title: Page Title +--- +</pre></td></tr></tbody></table> </div> <p>Start other headings with <code>h2</code>. Prefer the <code>## Heading</code> format in Markdown.</p><h3 id='links' class='header-anchors'>Links</h3><p>Internal links:</p> <ul> <li>Should start with / (relative to root).</li> <li>Should end with / (S3 requirement).</li> <li>Should <strong>not</strong> end with .html.</li> </ul> <p>Following these rules helps keep everything consistent and allows our version parser to correctly version links. Middleman is configured for directory indexes. Linking to a file in <code>sources/samples/index.html</code> should be done with <code>[Title](/sample/)</code>.</p><div class="highlight markdown"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6</pre></td><td class="code"><pre><span class="p">[</span><span class="nv">Good</span><span class="p">](</span><span class="sx">/path/to/page/</span><span class="p">)</span> + +<span class="p">[</span><span class="nv">Bad</span><span class="p">](</span><span class="sx">../page</span><span class="p">)</span> Not relative to root! +<span class="p">[</span><span class="nv">Bad</span><span class="p">](</span><span class="sx">page.html</span><span class="p">)</span> Do not use the .html extension! +<span class="p">[</span><span class="nv">Bad</span><span class="p">](</span><span class="sx">/path/to/page</span><span class="p">)</span> Does not end with a /. + +</pre></td></tr></tbody></table> </div> <h3 id='images' class='header-anchors'>Images</h3><p>Images should be exactly 900px wide. <a href="https://chrome.google.com/webstore/detail/window-resizer/kkelicaakdanhinjdeammmilcgefonfh">Chrome Window Resizer</a> is an excellent extension for browser resizing.</p><div class="alert-message warning"><p><strong>OS X</strong> users please <a href="http://www.idownloadblog.com/2014/08/03/how-to-remove-the-shadow-window-screenshots-on-mac-os-x/">Disable Shadows</a> before taking a screenshot.</p></div><p>Images should only show the relevant tab/terminal. Hide any additional toolbars.</p><p>Images will <strong>automatically scale</strong> by default. If you want an image to remain a set size you can use a raw HTML tag like this:</p><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1</pre></td><td class="code"><pre><img <span class="nv">src</span><span cla ss="o">=</span><span class="s2">"/images/path/to/image.png"</span> <span class="nv">alt</span><span class="o">=</span><span class="s2">"Image"</span> <span class="nv">class</span><span class="o">=</span><span class="s2">"static"</span> /> +</pre></td></tr></tbody></table> </div> <h3 id='code-blocks' class='header-anchors'>Code Blocks</h3><p>Fenced code blocks are created using the <code>```language</code> format.</p><p>A example of each language is available on our <a href="/samples/languages">Language Samples</a> page.</p><h3 id='code-tabs' class='header-anchors'>Code Tabs</h3><p>Code tabs use the following HTML format:</p><div class="highlight html"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8</pre></td><td class="code"><pre><span class="nt"><div</span> <span class="na">class=</span><span class="s">"tabs"</span><span class="nt">></span> + <span class="nt"><div</span> <span class="na">data-tab=</span><span class="s">"Tab Title"</span> <span class="na">data-lang=</span><span class="s">"language"</span><span class="nt">></span> + Markdown, code blocks, or HTML is OK inside a tab. + <span class="nt"></div></span> + <span class="nt"><div</span> <span class="na">data-tab=</span><span class="s">"Second Tab"</span> <span class="na">data-lang=</span><span class="s">"optional"</span><span class="nt">></span> + ... + <span class="nt"></div></span> +<span class="nt"></div></span> +</pre></td></tr></tbody></table> </div> <p>You can see an example of this on our <a href="/samples/tabs/">Tab Samples</a> page.</p><h3 id='seo' class='header-anchors'>SEO</h3><p>You can hide a page from the <code>sitemap.xml</code> file by setting the pages <a href="http://middlemanapp.com/basics/frontmatter/">Frontmater</a> like this:</p><div class="highlight markdown"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4</pre></td><td class="code"><pre><span class="nn">---</span> +<span class="s">title</span><span class="pi">:</span> <span class="s">Secret Page</span> +<span class="s">hidden</span><span class="pi">:</span> <span class="s">true</span> +<span class="nn">---</span> +</pre></td></tr></tbody></table> </div> <h2 id='important-files' class='header-anchors'>Important Files</h2> <table><thead> <tr> <th>Description</th> <th>File</th> </tr> </thead><tbody> <tr> <td>Left side navigation.</td> <td><code>data/nav/main.yml</code></td> </tr> <tr> <td>Main site layout.</td> <td><code>source/layouts/layout.html.slim</code></td> </tr> <tr> <td>Custom Markdown renderer based on <a href="https://github.com/vmg/redcarpet">Redcarpet</a>.</td> <td><code>lib/custom_renderer.rb</code></td> </tr> <tr> <td>Custom TOC helper.</td> <td><code>helpers/table_of_contents_helpers.rb</code></td> </tr> </tbody></table> <h3 id='versions' class='header-anchors'>Versions</h3><p>Various site wide versions are defined in <code>data/versions.yml</code> and embedded with ERB like <code><%= data.versions.pio %></code>.</p><div class="alert-message note"><p>Files must end with a <code>.erb</code> extension to be processed as ERB.</p></div><h2 id='going-live' class='header-anchors' >Going Live</h2><p>Pushing to the <code>livedoc</code> branch will update <a >href="http://predictionio.incubator.apache.org">http://predictionio.incubator.apache.org</a> > in about 5 minutes.</p><p>You can check the progress of each build on <a >href="https://builds.apache.org/">Apache's Jenkins</a>.</p><div >class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td >class="gutter gl" style="text-align: right"><pre >class="lineno">1</pre></td><td class="code"><pre><span class="gp">$ ></span>git push origin livedoc +</pre></td></tr></tbody></table> </div> <h2 id='checking-the-site' class='header-anchors'>Checking the Site</h2><div class="alert-message warning"><p>The check rake task is still in <strong>beta</strong> however it is extremely useful for catching accidental errors.</p></div><div class="highlight shell"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2</pre></td><td class="code"><pre><span class="gp">$ </span>bundle <span class="nb">exec </span>middleman build +<span class="gp">$ </span>bundle <span class="nb">exec </span>rake check +</pre></td></tr></tbody></table> </div> <p>The <code>rake check</code> task parses each HTML page in the <code>build</code> folder and checks it for common errors including 404s.</p><h2 id='license' class='header-anchors'>License</h2><p>Documentation is under a <a href="https://www.apache.org/licenses/LICENSE-2.0">Apache License Version 2.0</a>.</p></div></div></div></div><footer><div class="container"><div class="seperator"></div><div class="row"><div class="col-md-6 col-xs-6 footer-link-column"><div class="footer-link-column-row"><h4>Community</h4><ul><li><a href="//docs.prediction.io/install/" target="blank">Download</a></li><li><a href="//docs.prediction.io/" target="blank">Docs</a></li><li><a href="//github.com/apache/incubator-predictionio" target="blank">GitHub</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to User Mailing List</a></li><li><a href="//stackoverflow.com/questions/tagged/predictionio" target="blank">Stackov erflow</a></li></ul></div></div><div class="col-md-6 col-xs-6 footer-link-column"><div class="footer-link-column-row"><h4>Contribute</h4><ul><li><a href="//predictionio.incubator.apache.org/community/contribute-code/" target="blank">Contribute</a></li><li><a href="//github.com/apache/incubator-predictionio" target="blank">Source Code</a></li><li><a href="//issues.apache.org/jira/browse/PIO" target="blank">Bug Tracker</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to Development Mailing List</a></li></ul></div></div></div></div><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"/></div><div id="social-icons-wrapper"><a class="github-button" href="https://github.com/apache/incubator-predictionio" data-style="mega" data-count-href="/apache/incubator-predictionio/stargazers" data-count-api="/repos/apac he/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="//www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on Twitter" src="/images/icons/twitter-ea9dc152.png"/></a> <a href="//twitter.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'); + +_st('install','HaUfpXXV87xoB_zzCQ45');</script><script src="/javascripts/application-f819cf19.js"></script></body></html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/921d6861/community/contribute-documentation/index.html.gz ---------------------------------------------------------------------- diff --git a/community/contribute-documentation/index.html.gz b/community/contribute-documentation/index.html.gz new file mode 100644 index 0000000..1c1b5c1 Binary files /dev/null and b/community/contribute-documentation/index.html.gz differ http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/921d6861/community/contribute-sdk/index.html ---------------------------------------------------------------------- diff --git a/community/contribute-sdk/index.html b/community/contribute-sdk/index.html new file mode 100644 index 0000000..086f35d --- /dev/null +++ b/community/contribute-sdk/index.html @@ -0,0 +1,130 @@ +<!DOCTYPE html><html><head><title>Contribute a SDK</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 a SDK"/><link rel="canonical" href="https://docs.prediction.io/community/contribute-sdk/"/><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-3a3867f7.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/MathJax. js?config=TeX-AMS-MML_HTMLorMML"></script><script src="//use.typekit.net/pqo0itb.js"></script><script>try{Typekit.load({ async: true });}catch(e){}</script></head><body><div id="global"><header><div class="container" id="header-wrapper"><div class="row"><div class="col-sm-12"><div id="logo-wrapper"><span id="drawer-toggle"></span><a href="#"></a><a href="http://predictionio.incubator.apache.org/"><img alt="PredictionIO" id="logo" src="/images/logos/logo-ee2b9bb3.png"/></a></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 hidd en-lg" id="mobile-page-heading-wrapper"><p>PredictionIO Docs</p><h4>Contribute a SDK</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="na v-main"><ul><li class="level-1"><a class="expandible" href="/"><span>Apache PredictionIO (incubating) Documentation</span></a><ul><li class="level-2"><a class="final" href="/"><span>Welcome to Apache PredictionIO (incubating)</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Getting Started</span></a><ul><li class="level-2"><a class="final" href="/start/"><span>A Quick Intro</span></a></li><li class="level-2"><a class="final" href="/install/"><span>Installing Apache PredictionIO (incubating)</span></a></li><li class="level-2"><a class="final" href="/start/download/"><span>Downloading an Engine Template</span></a></li><li class="level-2"><a class="final" href="/start/deploy/"><span>Deploying Your First Engine</span></a></li><li class="level-2"><a class="final" href="/start/customize/"><span>Customizing the Engine</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>Integrating with Your App</span></a><ul><li class="level-2" ><a class="final" href="/appintegration/"><span>App Integration >Overview</span></a></li><li class="level-2"><a class="expandible" >href="/sdk/"><span>List of SDKs</span></a><ul><li class="level-3"><a >class="final" href="/sdk/java/"><span>Java & Android SDK</span></a></li><li >class="level-3"><a class="final" href="/sdk/php/"><span>PHP >SDK</span></a></li><li class="level-3"><a class="final" >href="/sdk/python/"><span>Python SDK</span></a></li><li class="level-3"><a >class="final" href="/sdk/ruby/"><span>Ruby SDK</span></a></li><li >class="level-3"><a class="final" href="/sdk/community/"><span>Community >Powered SDKs</span></a></li></ul></li></ul></li><li class="level-1"><a >class="expandible" href="#"><span>Deploying an Engine</span></a><ul><li >class="level-2"><a class="final" href="/deploy/"><span>Deploying as a Web >Service</span></a></li><li class="level-2"><a class="final" >href="/cli/#engine-commands"><span>Engine Command-line >Interface</span></a></li><li class="level-2"><a class="final" href="/deploy/monitoring/"><span>Monitoring Engine</span></a></li><li class="level-2"><a class="final" href="/deploy/engineparams/"><span>Setting Engine Parameters</span></a></li><li class="level-2"><a class="final" href="/deploy/enginevariants/"><span>Deploying Multiple Engine Variants</span></a></li></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="/cli/#event-server-commands"><span>Event Server Command-line Interface</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></ul></li><li class="level-1"><a class="expandible" href="#"><span>Choosing an Algorithm(s)</span></a><ul><li class="level-2"><a class="final" href="/algorithm/"><span>Built-in Algorithm Libraries</span></a></li><li class="level-2"><a class="final" href="/algorithm/switch/"><span>Switching to Another Algorithm</span></a></li><li class="level-2"><a class="final" href="/algorithm/multiple/"><span>Combining Multiple Algorithms</span></a></li><li class="level-2"><a class="final" href="/algorithm/custom/"><span>Adding Your Own Algorithms</span></a></li></ul></li><li class="level-1"><a class="expandible" href="#"><span>ML Tuning and Evaluation</span></a><ul><li class="level-2"><a class="final" href="/evaluation/"><span>Overview</span></a></li><li class="level-2"><a class="final" href="/evaluation/paramtuning/"><span>Hyperparameter Tuning</span></a></li><li class="level-2"><a class="final" href="/evaluation/evaluationdashboard/"><span>Evaluation Dashboard</span></a></li><li class="level-2"><a class="final" href="/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>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" 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 active" 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="/res ources/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="/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></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 a SDK</span></li></ul></div><div id="page-title"><h1>Contribute a SDK</h1></div></div><div id="table-of-content-wrapper"><h5>On this page</h5><aside id="table-of-contents"><ul> <li> <a href="#event-client">Event Client</a> </li> <li> <a href="#engine-client">Engine Client</a> </li> <li> <a href="#testing-your-sdk">Testing Your SDK</a> </li> </ul> </aside><hr/><a id="edit-page-link" href="https://github.com/apache/incubator-predictionio/tree/livedoc/docs/manual/source/community/contribute-sdk.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 a SDK</span></li></ul></div><div id="page-title"><h1>Contribute a SDK</h1></div></div><div class="content"><p>A SDK should provide convenient methods for client applications to easily record users' behaviors in Apache PredictionIO (incubating)'s Event Server and also query recommendations from the ML Engines. Therefore, a SDK typically has 2 corresponding clients: <co de>Event Client</code> and <code>Engine Client</code>.</p><p>The following guideline bases on the REST API provided by Apache PredictionIO (incubating)'s Event Client which details can be found <a href="http://docs.prediction.io/datacollection/eventapi/">here</a>.</p><h2 id='event-client' class='header-anchors'>Event Client</h2><p>Because the Event Server has only 1 connection point, the <code>Event Client</code> needs to implement this core request first. The core request has the following rules.</p> <ul> <li><p><strong>URL</strong>: <code><base URL>/events.json?accessKey=<your access key></code> (e.g. <a href="http://localhost:7070/events.json?accessKey=1234567890">http://localhost:7070/events.json?accessKey=1234567890</a>)</p></li> <li><p><strong>Request</strong>: <code>POST</code> + JSON data. Please refer to the <a href="http://docs.prediction.io/datacollection/eventapi/">Event Creation API</a> for the details on the fields of the JSON data object.</p></li> <li> <p><strong>Response</strong>:</p> <ul> <li><strong>Success</strong>: status code <code>201</code> with a JSON result containing the <code>eventId</code>.</li> <li><strong>Failure</strong>: a JSON result containing a <code>message</code> field describing the error. <ul> <li>Status code <code>401</code>: invalid access key.</li> <li>Status code <code>400</code>: fail to parse the JSON request e.g. missing required fields like <code>event</code>, or invalid <code>eventTime</code> format.</li> </ul></li> </ul></li> </ul> <p>Other convenient methods are just shortcut. They could simply build the event's parameters and call the core request. <code>Event Client</code> should support the following 7 shorthand operations:</p> <ul> <li><p><strong>User entities</strong></p> <ul> <li><p><strong>Sets properties of a user</strong>: with the JSON object</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno" >1 +2 +3 +4 +5 +6</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"event"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$set"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><user_ID></span><span class="p">,</span><span class="w"> + </span><span class="s2">"properties"</span><span class="p">:</span><span class="w"> </span><span class="err"><properties></span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> <li><p><strong>Unsets some properties of a user</strong>: with the JSON object</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"event"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$unset"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><user_ID></span><span class="p">,</span><span class="w"> + </span><span class="s2">"properties"</span><span class="p">:</span><span class="w"> </span><span class="err"><properties></span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> <li><p><strong>Delete a user</strong>: with the JSON object</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"event"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$delete"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><user_ID></span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> </ul></li> <li><p><strong>Item entities</strong></p> <ul> <li><p><strong>Sets properties of an item</strong>: with the JSON object</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"event"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$set"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"item"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><item_ID></span><span class="p">,</span><span class="w"> + </span><span class="s2">"properties"</span><span class="p">:</span><span class="w"> </span><span class="err"><properties></span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> <li><p><strong>Unsets some properties of an item</strong>: with the JSON object</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"event"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$unset"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"item"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><item_ID></span><span class="p">,</span><span class="w"> + </span><span class="s2">"properties"</span><span class="p">:</span><span class="w"> </span><span class="err"><properties></span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> <li><p><strong>Delete an item</strong>: with the JSON object</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"event"</span><span class="p">:</span><span class="w"> </span><span class="s2">"$delete"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"item"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><item_ID></span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> </ul></li> <li><p><strong>Others</strong></p> <ul> <li><p><strong>Record a user's action on some item</strong>: with the JSON object</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"event"</span><span class="p">:</span><span class="w"> </span><span class="err"><event_name></span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"entityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><user_ID></span><span class="p">,</span><span class="w"> + </span><span class="s2">"targetEntityType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"item"</span><span class="p">,</span><span class="w"> + </span><span class="s2">"targetEntityId"</span><span class="p">:</span><span class="w"> </span><span class="err"><item_ID></span><span class="p">,</span><span class="w"> + </span><span class="s2">"properties"</span><span class="p">:</span><span class="w"> </span><span class="err"><properties></span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> </ul></li> </ul> <p>Again, please refer to the <a href="http://docs.prediction.io/datacollection/eventapi/">API documentation</a> for explanations on the reversed events like <code>$set</code>, <code>$unset</code> or <code>$delete</code>.</p><div class="alert-message info"><p>The <code>eventTime</code> is optional but it is recommended that the client application should include time in the request. Therefore, it is best that the <code>Event Client</code> includes the time field if missing, before sending the event to the server.</p></div><h2 id='engine-client' class='header-anchors'>Engine Client</h2><p><code>Engine Client</code>'s main job is to retrieve recommendation or prediction results from Apache PredictionIO (incubating)'s Engines. It has only a few rules on the request and response type.</p> <ul> <li><p><strong>URL</strong>: <code><base URL>/queries.json</code> (e.g. <a href="http://localhost:8000/queries.jso n">http://localhost:8000/queries.json</a>)</p></li> <li><p><strong>Request</strong>: <code>POST</code> + JSON data. For example,</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"user"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> + </span><span class="s2">"num"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> <li><p><strong>Response</strong>:</p> <ul> <li><p><strong>Success</strong>: status code <code>200</code> with a JSON result object. For example,</p><div class="highlight json"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13</pre></td><td class="code"><pre><span class="p">{</span><span class="w"> + </span><span class="s2">"itemScores"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> + </span><span class="p">{</span><span class="w"> + </span><span class="s2">"item"</span><span class="p">:</span><span class="w"> </span><span class="mi">39</span><span class="p">,</span><span class="w"> + </span><span class="s2">"score"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6.177719297832409"</span><span class="w"> + </span><span class="p">},</span><span class="w"> + </span><span class="p">{</span><span class="w"> + </span><span class="s2">"item"</span><span class="p">:</span><span class="w"> </span><span class="mi">79</span><span class="p">,</span><span class="w"> + </span><span class="s2">"score"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5.931687319083594"</span><span class="w"> + </span><span class="p">},</span><span class="w"> + </span><span class="err">...</span><span class="w"> + </span><span class="p">]</span><span class="w"> +</span><span class="p">}</span><span class="w"> +</span></pre></td></tr></tbody></table> </div></li> <li><p><strong>Failure</strong>: status code <code>400</code> e.g. fail to parse the query.</p></li> </ul></li> </ul> <p>The formats of JSON objects in both the request and response must be defined by the Apache PredictionIO (incubating)'s Engine and are different across applications. The above examples are taken from the Recommendation Engine template in which the query and prediction results are defined as following.</p><div class="highlight scala"><table style="border-spacing: 0"><tbody><tr><td class="gutter gl" style="text-align: right"><pre class="lineno">1 +2 +3 +4 +5 +6 +7 +8</pre></td><td class="code"><pre><span class="k">case</span> <span class="k">class</span> <span class="nc">Query</span><span class="o">(</span> + <span class="n">user</span><span class="k">:</span> <span class="kt">String</span><span class="o">,</span> + <span class="n">num</span><span class="k">:</span> <span class="kt">Int</span> +<span class="o">)</span> <span class="k">extends</span> <span class="nc">Serializable</span> + +<span class="k">case</span> <span class="k">class</span> <span class="nc">PredictedResult</span><span class="o">(</span> + <span class="n">itemScores</span><span class="k">:</span> <span class="kt">Array</span><span class="o">[</span><span class="kt">ItemScore</span><span class="o">]</span> +<span class="o">)</span> <span class="k">extends</span> <span class="nc">Serializable</span> +</pre></td></tr></tbody></table> </div> <h2 id='testing-your-sdk' class='header-anchors'>Testing Your SDK</h2><p>You can set up a local host Apache PredictionIO (incubating) environment to test your SDK. However, it is hard to set it up online to test your SDK automatically using services like Travis CI. In that case, you should consider using these lightweight <a href="https://github.com/minhtule/PredictionIO-Mock-Server">mock servers</a>. Please see the instructions in the repo how to use it. It takes less than 5 minutes!</p><p>That's it! We are looking forward to see your SDK!</p></div></div></div></div><footer><div class="container"><div class="seperator"></div><div class="row"><div class="col-md-6 col-xs-6 footer-link-column"><div class="footer-link-column-row"><h4>Community</h4><ul><li><a href="//docs.prediction.io/install/" target="blank">Download</a></li><li><a href="//docs.prediction.io/" target="blank">Docs</a></li><li><a href="//github.com/apache/incubator-predictioni o" target="blank">GitHub</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to User Mailing List</a></li><li><a href="//stackoverflow.com/questions/tagged/predictionio" target="blank">Stackoverflow</a></li></ul></div></div><div class="col-md-6 col-xs-6 footer-link-column"><div class="footer-link-column-row"><h4>Contribute</h4><ul><li><a href="//predictionio.incubator.apache.org/community/contribute-code/" target="blank">Contribute</a></li><li><a href="//github.com/apache/incubator-predictionio" target="blank">Source Code</a></li><li><a href="//issues.apache.org/jira/browse/PIO" target="blank">Bug Tracker</a></li><li><a href="mailto:[email protected]" target="blank">Subscribe to Development Mailing List</a></li></ul></div></div></div></div><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-w hite-d1e9c6e6.png"/></div><div id="social-icons-wrapper"><a class="github-button" href="https://github.com/apache/incubator-predictionio" data-style="mega" data-count-href="/apache/incubator-predictionio/stargazers" data-count-api="/repos/apache/incubator-predictionio#stargazers_count" data-count-aria-label="# stargazers on GitHub" aria-label="Star apache/incubator-predictionio on GitHub">Star</a> <a class="github-button" href="https://github.com/apache/incubator-predictionio/fork" data-icon="octicon-git-branch" data-style="mega" data-count-href="/apache/incubator-predictionio/network" data-count-api="/repos/apache/incubator-predictionio#forks_count" data-count-aria-label="# forks on GitHub" aria-label="Fork apache/incubator-predictionio on GitHub">Fork</a> <script id="github-bjs" async="" defer="" src="https://buttons.github.io/buttons.js"></script><a href="//www.facebook.com/predictionio" target="blank"><img alt="PredictionIO on Twitter" src="/images/icons/twitter-ea9dc152.png"/>< /a> <a href="//twitter.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'); + +_st('install','HaUfpXXV87xoB_zzCQ45');</script><script src="/javascripts/application-f819cf19.js"></script></body></html> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-predictionio-site/blob/921d6861/community/contribute-sdk/index.html.gz ---------------------------------------------------------------------- diff --git a/community/contribute-sdk/index.html.gz b/community/contribute-sdk/index.html.gz new file mode 100644 index 0000000..d7547df Binary files /dev/null and b/community/contribute-sdk/index.html.gz differ
