[PIO-40] Remove docs/manual/obsolete/*

Closes #323


Project: http://git-wip-us.apache.org/repos/asf/incubator-predictionio/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-predictionio/commit/e1e71280
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-predictionio/tree/e1e71280
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-predictionio/diff/e1e71280

Branch: refs/heads/develop
Commit: e1e71280c3222244938f86916cdcbdce8d4711b3
Parents: 9bb85ab
Author: Chan Lee <[email protected]>
Authored: Fri Dec 16 09:50:25 2016 -0800
Committer: Donald Szeto <[email protected]>
Committed: Fri Dec 16 09:50:25 2016 -0800

----------------------------------------------------------------------
 .gitignore                                      |   2 +
 .../obsolete/cookbook/addalgorithm.html.md      |   7 -
 .../cookbook/choosingalgorithms.html.md         |   7 -
 .../obsolete/cookbook/customlogics.html.md      |   7 -
 .../manual/obsolete/cookbook/evaluation.html.md | 358 -----------
 .../cookbook/existingdatasource.html.md         |   7 -
 .../cookbook/filteringunavailable.html.md       | 264 --------
 .../obsolete/cookbook/tuningalgorithm.html.md   |   7 -
 docs/manual/obsolete/enginebuilders/api.html.md |  14 -
 .../obsolete/enginebuilders/examples.html.md    |  10 -
 .../obsolete/enginebuilders/index.html.md       |  72 ---
 .../obsolete/enginebuilders/mahout.html.md      |  10 -
 .../obsolete/enginebuilders/sharable.html.md    |   7 -
 docs/manual/obsolete/engines/index.html.md      | 103 ---
 .../obsolete/engines/itemrank/index.html.md     | 635 -------------------
 .../obsolete/engines/itemrec/index.html.md      | 204 ------
 .../obsolete/engines/itemsim/index.html.md      | 210 ------
 docs/manual/obsolete/sample.html.md             | 134 ----
 .../enginebuilders/local-helloworld.html.md     | 546 ----------------
 .../enginebuilders/parallel-helloworld.html.md  | 379 -----------
 .../stepbystep/combiningalgorithms.html.md      | 451 -------------
 .../stepbystep/dataalgorithm.html.md            | 417 ------------
 .../stepbystep/evaluation.html.md               | 252 --------
 .../enginebuilders/stepbystep/index.html.md     |  40 --
 .../stepbystep/testcomponents.html.md           | 137 ----
 .../obsolete/tutorials/engines/index.html.md    |  22 -
 .../tutorials/engines/quickstart.html.md        | 503 ---------------
 .../tutorials/recommendation/movielens.html.md  | 158 -----
 .../tutorials/recommendation/yelp.html.md       | 355 -----------
 docs/manual/obsolete/upgrade.html.md            |  60 --
 tests/.rat-excludes                             |   1 -
 31 files changed, 2 insertions(+), 5377 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 28e9464..4e3460f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,5 @@ quickstartapp/
 .templates-cache
 /vendors
 /docs/manual/source/gallery/template-gallery.html.md
+test-reports/
+apache-rat-0.11.jar

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/cookbook/addalgorithm.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/cookbook/addalgorithm.html.md 
b/docs/manual/obsolete/cookbook/addalgorithm.html.md
deleted file mode 100644
index 0c28f07..0000000
--- a/docs/manual/obsolete/cookbook/addalgorithm.html.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Data API
----
-
-# Adding Algorithms to a Built-in Engine
-
-(coming soon)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/cookbook/choosingalgorithms.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/cookbook/choosingalgorithms.html.md 
b/docs/manual/obsolete/cookbook/choosingalgorithms.html.md
deleted file mode 100644
index 842b237..0000000
--- a/docs/manual/obsolete/cookbook/choosingalgorithms.html.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Choosing or Combining Algorithms
----
-
-# Choosing or Combining Algorithms
-
-(coming soon)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/cookbook/customlogics.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/cookbook/customlogics.html.md 
b/docs/manual/obsolete/cookbook/customlogics.html.md
deleted file mode 100644
index bb42ab8..0000000
--- a/docs/manual/obsolete/cookbook/customlogics.html.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Adding Customized Business Logic
----
-
-# Adding Customized Business Logic
-
-(coming soon)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/cookbook/evaluation.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/cookbook/evaluation.html.md 
b/docs/manual/obsolete/cookbook/evaluation.html.md
deleted file mode 100644
index 66b4914..0000000
--- a/docs/manual/obsolete/cookbook/evaluation.html.md
+++ /dev/null
@@ -1,358 +0,0 @@
----
-title: Offline Evaluating the Prediction Results
----
-
-<!--
-# Evaluating the Prediction Results
--->
-
-To chose the best algorithm and parameters, it is important to systematically
-evaluate the quality of the engine instance.
-In this section, we will explain how to carry out an offline evaluation of an
-engine. We will use the MovieLens data set with the ItemRank Engine as
-example. We will discuss
-
-- In general, how to use Prediction.IO's evaluation framework;
-- How to construct the testing set from raw training data;
-- How to avoid look-ahead-bias by applying sliding window evaluation technique;
-- How to construct the Query that best approximate the business need;
-- How to choose the evaluation parameter set that refects the business
-  objective.
-
-# ItemRank Evaluation
-
-This section discusses how to evaluate the [ItemRank
-Engine](../../engines/itemrank). An ItemRank Engine makes a
-personalized ranking among the items in the input query.
-
-## What You Want To Evaluate
-
-The goal of evaluation is to find a set of parameters with which a engine
-instance is created that maximize certain objective function(s). An objective
-function is usually tie with a business objective. For example,
-
-- an e-commerce
-company has an inventory of 1000+ items, but can only show 5 on their landing
-page,
-and the goal is to increase the click-thru-rate (hopefully the conversion rate)
-of the top 5 items;
-
-- another e-commerce company wants to sell its expiring items,
-hence has add a time component to the weight function;
-
-- yet another company may
-only focus on long-term value of a customer, it only recommends what the user
-likes the most (but maybe not profitable), etc.
-
-Whilst the machine learning community has defined numerous quality measure 
(e.g.
-precision, recall, MAP, MSE, etc.) for measuring prediction, there are many
-other considerations when we conduct the evaluation. Generating the test set
-can be tricky and bias-prone if we don't do it careful enough.
-It is important to
-make sure that the evaluation method we choose approximates the actual business
-use case.
-
-## Example Evaluation: Movie Lens
-
-We create a fictitious company MLC using the [MovieLens data
-set](../tutorials/engines/itemrec/movielens.html).
-It provides movie recommendations to users. For a given time, the user comes to
-the MLC's website, it displays all movies in its inventory to the user, rank by
-some mechanism (i.e. MLC uses the ItemRank engine for predicting user
-preferences).
-MLC's goal is to maximize its long term value, i.e. users like coming back to
-the company's website for movie recommendation.
-
-The MovieLens data set contains the following information:
-
-1. User data: userid, age, and occupation.
-
-2. Item (movie) data: itemid, movie name, release date, and genre.
-
-3. Rating data: userid, itemid, rating, timestamp.
-
-To evaluate the quality of a prediction engine, we need to create two sets of
-data.
-
-1. Training set, the data used to train machine learning models. It generally
-   includes [labelled data](http://en.wikipedia.org/wiki/Supervised_learning),
-   in this case the rating assigned to movies by users. The ItemRank engine
-   takes these labelled data for training.
-
-2. Testing set, the data used to evaluate the quality of prediction engines.
-   The testing set also contains labelled data, but it is *not* sent to
-   prediction engines. Instead, they are used by the evaluator
-   to evaluate the quality of the prediction engine.
-
-### Sliding Window Evaluation
-
-A common way to evaluate prediction is by using the sliding window method
-(sometimes it is called rolling window method). Assuming the data set is
-annotated by a timestamp, which is always the case if you are using 
Prediction.IO
-Event Server, we can always divide the whole data set into training and testing
-set using a cutoff timestamp. It is particularly appealing since 1. it can 
avoid
-look-ahead bias; and 2. it mimics actual use case.
-
-Suppose MLC retrains the prediction model every night, it uses all data in the
-database and creates a new model, the new model is then used to serve queries 
in
-the next day. The next night, MLC retrains again with the additional data, and
-the new model is used to serve the traffic the day after next. Hopefully you
-will get why people call it *sliding window*.
-
-In the evaluation, we attempt to recreate the same scenario. We use three
-parameters to define the sliding window:
-
-Field | Description
----- | :------
-`firstTrainingUntilTime` | The cutoff time for the first training data. Only 
events happened before this time will be used.
-`evalDuration` | The duration of the test data. Events happened from 
`firstTrainingUntilTime` until `firstTrainingUntilTime + evalDuration` will be 
used to construct the *unseen* testing set.
-`evalCount` | The number of training / testing sets used in the evaluation.
-
-For example, the following parameters
-
-```scala
-EventsSlidingEvalParams(
-  firstTrainingUntilTime = new DateTime(1998, 2, 1, 0, 0),
-  evalDuration = Duration.standardDays(7),
-  evalCount = 3)
-```
-
-create three training / testing sets of data (time is midnight):
-
-Set | Training Event Time | Testing Event Time
---- | --- | ---
-0 | [..., 1998-02-01) | [1998-02-01, 1998-02-08)
-1 | [..., 1998-02-08) | [1998-02-08, 1998-02-15)
-2 | [..., 1998-02-15) | [1998-02-15, 1998-02-22)
-
-#### Training Data
-
-The process of creating the training data is equivalent to the training process
-we use for deploy, except that we only use events up to certain cutoff time. 
For
-Set 0, the cutoff time is the 1998-02-01T00:00:00.
-
-There is one caveat: in the MovieLens dataset, only rating data is annotated
-with a timestamp. User data and item data is a static info. We have to
-workaround this problem by imposing some assumption to the date. In this case,
-we assume in the import code that all users existed since [the very beginning]
-(https://github.com/PredictionIO/PredictionIO-Python-SDK/blob/5e14a6f3ea0e9fca52f16375e98219659b4de09b/examples/demo-movielens/batch_import.py#L24),
-and items are created on [the release
-date](https://github.com/PredictionIO/PredictionIO-Python-SDK/blob/5e14a6f3ea0e9fca52f16375e98219659b4de09b/examples/demo-movielens/batch_import.py#L58).
-
-#### Testing Data
-
-Now it comes to the core component about evaluation.
-Conceptually, we compare the engine prediction with actual results.
-To evaluate an engine instance, we need three pieces of data.
-
-1. Query. It is same as the one we used for deployment, except that it
-   doesn't not come from an external HTTP call, but is created by the data
-   source. Note that, from an engine point of view, there is no difference
-   between Query used in deployment or evaluation, they should be treated
-   equally.
-
-2. Predicted Result. It is also the same as the one we used for deployment, as
-   it is the return value of the engine instance.
-
-3. Actual Result. It is the ground truth. For MLC, it is the actual rating 
users
-   gave to items. Actual Result is hidden from the prediction and serving
-   components, it is exclusively used by the evaluation component to compute 
the
-   quality of actual instance.
-
-The question is how to construct Queries using MovieLens data set. The data set
-only contain a sequence of ratings, but recall that our goal here is to 
evaluate
-an ItemRank engine's quality. The input (i.e. Query) of the ItemRank engine
-is a user id and a list of items, the output (i.e. Prediction) is a ranked list
-of items. There is a mismatch between the data set and the I/O of the
-prediction engine, it is meaningless to construct a Query for each rating as
-ranking an single-item-query is an identical function.
-Our task is to define a reasonable method to bridge this gap.
-
-> Readers may find it weird that there is a huge logical gap between the data
-> set and the actual usage. Indeed, from our experience, it happens very often.
-> A common cause of the discrepencies is that, the user-item behaviorial data
-> may not exist. For example, an e-commerence company may only have recorded 
the
-> customer purchase for accounting reason, but other information like what 
items
-> have been shown to the user, or the website outlook are not recorded.
-> If the company wants to start using
-> smart prediction service, it may need to bootstrap the prediction model with
-> the purchase data, in which case we have to define a reasonable mechanism to
-> mimic behavioral data from the purchase history.
-
-There are multiple ways of creating Query set from the rating, for example:
-
-- Create a Query per active user with the global active items (active user /
-  items means that they have some rating within the testing period);
-
-- Create a Query per user with all items;
-
-- Create a Query per active user with all items rated by that user within the
-  testing period;
-
-- Create a Query per rating, amend the item list by another randomly assigned
-  un-rated item;
-
-- ...
-
-There is no perfect way to create the Query, as it is an approximation 
afterall.
-You should use your discretion in choosing the most appropriate method. In this
-tutorial, we go with the first one, i.e. we create a Query per active user with
-all active items.
-
-For the Actual Result, we store all raw ratings for that user. It is up to the
-evaluator to decide which is good and which is bad.
-
-### Evaluator
-
-We have defined the three main pieces: Query, Predicted Result, and Actual
-Result. It remains to compute the quality of an engine instance based on these
-data.
-
-We want to tell if a Prediction is good, we achieve this by comparing it with
-the Actual Result. But still, Actual Result is just a rating, in this case it 
is
-an integer inclusively between 1 and 5. Suppose the item list in the input 
Query
-is `[a,b,c,d,e]`, the output Predicted Result is `[d,e,c,a,b]` (items at the
-front should have better ratings than those at the end), and the user has given
-item `a` a rating of 3, item `d` a rating of 5, item `e` a rating of 2, and no
-rating for items c and b. Is this Prediction a good one? And what about another
-Predicted Result `[d,c,e,a,b]`?
-
-#### Define Good Items
-
-A simple way to define good items is by binary classification. We can simply
-assign a *good threshold* to the rating, i.e. items rated at least the 
threshold
-are good. In our evaluator, you can specify this threshold in the
-parameter:
-
-```scala
-DetailedEvaluatorParams(
-  goodThreshold = 3,
-  ...)
-```
-
-Therefore, in our example, items `a` and `d` are good items, and items `e` is
-bad. A perfect ItemRank engine should rank `a` and `d` to the top, and `e` to
-the bottom.
-
-> There is a problem with binary classification. Items with rating of 3 is
-> treated equally as items with rating of 5. It is possible to use a more
-> granular rating, but let's keep it simple in this tutorial.
-
-#### Define Good Ordering
-
-It is worth a considerable amount of effort to define a *good* ordering.
-Simply put, is there a difference between `[d,c,a,b,e]` and `[c,d,a,b,e]`?
-We know that `d` is a good item, but we have no idea about `c` (i.e. user 
didn't
-rate `c`). One may argue that `[d,c,a,b,e]` is better since it puts a *good*
-item before an uncertain one; one may argue otherwise that, suppose MLC's
-landing page display 3 items at once, each occupying same amount of space, the
-ordering *among* the top 3 items doesn't matter.
-
-It goes back to the very beginning of our discussion, the evaluator
-should be closely related to the actual business objective. In the MLC case, it
-shows 10 movies at the top of the page, and we don't care about the ordering
-among these 10 items.
-We can use the
-[*Precision@k*](http://en.wikipedia.org/wiki/Precision_and_recall#Precision)
-measure (with k = 10), in layman term, the engine is good if it is able to rank
-more `good` items to the top 10 result:
-
-```scala
-DetailedEvaluatorParams(
-  ...,
-  measureType = MeasureType.PrecisionAtK,
-  measureK = 10)
-```
-
-> In the other case where the ordering among the top items matters, one may
-> consider using
-> 
[Mean-Average-Precision@k](http://en.wikipedia.org/wiki/Information_retrieval#Mean_average_precision).
-
-### First Evaluation
-
-We are ready to run the actual evaluation. You can find the code at
-`examples/scala-local-movielens-evaluation/src/main/scala/Evaluation.scala`.
-
-This tutorial uses app_id = 9, make sure you have imported MovieLens data with
-app_id = 9. See
-[instructions](../../tutorials/engines/itemrec/movielens.html). Let's ignore
-the engine parameters and focus on the evaluator parameters, we will discuss
-parameter tuning in the next tutorial.
-
-We use `ItemRankDetailedEvaluator` for evaluation, it takes
-`DetailedEvaluatorParams` as parameter. The following code (can be found in
-`Evaluation1`) illustrate a complete
-parameter set: we use only "rate" action for rating, and consider only good
-rating (3 or above); we use Precision@k as our main measure, and set k = 10.
-
-```scala
-val evaluatorParams = new DetailedEvaluatorParams(
-  actionsMap = Map("rate" -> None),
-  goodThreshold = 3,
-  measureType = MeasureType.PrecisionAtK,
-  measureK = 10
-)
-```
-
-You can run the evaluation with the following command. This requires a
-[standalone spark 
cluster](http://spark.apache.org/docs/latest/spark-standalone.html)
-up and running.
-
-```
-$ cd $PIO_HOME/examples/scala-local-movielens-evaluation
-$ $PIO_HOME/bin/pio run org.apache.predictionio.examples.mlc.Evaluation1 -- \
-  --master spark://`hostname`:7077
-...
-2014-10-07 19:09:47,136 INFO  workflow.CoreWorkflow$ - Saved engine instance 
with ID: nfUVwwgMQOqgpb5QEUdAGg
-```
-
-If it runs successfully, you should see the workflow ends with something like 
"Saved engine
-instance with ID: nfUVwwgMQOqgpb5QEUdAGg"
-
-To see the result, you can Prediction.IO dashboard:
-
-```
-$ $PIO_HOME/bin/pio dashboard
-```
-
-By default, you will see it on [http://localhost:9000]. The dashboard displays
-all the completed evaluation, for each evaluation, you can also click on the
-blue button on the right to see a detailed view of the evaluation.
-
-The value of Precision@10 is 0.0805, (loosely) meaning that for items among the
-top 10 results, each has a ~8% chance that the user likes it (i.e. rated >=
-3). From the dashboard, we can further drill down the evaluation results.
-
-### Second Evaluation
-
-We have done a small scale evaluation over 3 periods.
-The MovieLens dataset provides rating data until mid April 1998, we can extend
-the evaluation to 12 periods, each period last 1 week. `Evaluation2` perform
-this task. We can run it with the following command:
-
-```
-$ $PIO_HOME/bin/pio run org.apache.predictionio.examples.mlc.Evaluation2 -- \
-  --master spark://`hostname`:7077
-```
-
-The Precision@k is around 0.0673.
-
-### Exercise
-
-Try to play around with different evaluator parameter setting. Consider the
-following situation, try to change the parameters set and see what we will get.
-
-- MLC displays 100 items on its first page, what parameter should we change?
-
-- MLC attracts a lot of spontaneous users, they are very active but also get
-  bored easily, they usually leave the service in around 10 days, how should we
-  change the parameter set to reflect this change?
-
-- MLC is a perfectionist, it wants to focus on the best user experience, it 
only
-  want to suggest the best movies for users, is it possible to change the
-  parameter set to address this?
-
-- MLC launches a new mobile set, due to the screen size limitation, it can only
-  list the movie recommendation from top to bottom (in contrast to the desktop
-  mode where multiple movies are listed horiztonally). How can the evaluation
-  parameter address this issue?

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/cookbook/existingdatasource.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/cookbook/existingdatasource.html.md 
b/docs/manual/obsolete/cookbook/existingdatasource.html.md
deleted file mode 100644
index 22456e4..0000000
--- a/docs/manual/obsolete/cookbook/existingdatasource.html.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Using your Existing Data Source
----
-
-# Using your Existing Data Source
-
-(coming soon)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/cookbook/filteringunavailable.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/cookbook/filteringunavailable.html.md 
b/docs/manual/obsolete/cookbook/filteringunavailable.html.md
deleted file mode 100644
index 765d7c3..0000000
--- a/docs/manual/obsolete/cookbook/filteringunavailable.html.md
+++ /dev/null
@@ -1,264 +0,0 @@
----
-title: Customize Serving Layer 
----
-
-This tutorial teaches how to implement custom filtering logic.
-It is based [Movie Recommendation App with ItemRec 
Engine](/tutorials/engines/itemrec/movielens.html), we demonstrate how to add a 
custom filtering logic to the ItemRecommendation Engine.
-
-Complete code example can be found in
-`examples/scala-local-movielens-filtering`.
-If you are too lazy to go through this tutorial but want to use this 
customized code, you can skip to the last section.
-
-### Task
-
-The ItemRec Engine recommends items to user.
-Some items may run out of stock temporarily, we would like to remove them from 
the recommendation.
-
-# Customizing the ItemRec Engine
-
-Recall [the DASE Architecture](/enginebuilders), a PredictionIO engine has 4 
main components: Data Source, Data Preparator, Algorithm, and Serving Layer.
-When a Query comes in, it is passed to the Algorithm components for making 
Predictions (notice that we use plural as the infrastructure allows multiple 
algorithms to run concurrently), then the Serving component consolidates these
-Predictions into one, and returns it.
-
-The ItemRec Engine's component can be found it its static factory class
-`org.apache.predictionio.engines.itemrec.ItemRecEngine`. It looks like the 
following:
-
-```scala
-object ItemRecEngine extends IEngineFactory {
-  def apply() = {
-    new Engine(
-      classOf[EventsDataSource],
-      classOf[ItemRecPreparator],
-      Map("ncMahoutItemBased" -> classOf[NCItemBasedAlgorithm]),
-      classOf[ItemRecServing]
-    )
-  }
-}
-```
-
-To add filtering logic to this engine,
-we will implement a new Serving component, which removes temporarily disabled
-items from the Prediction made by Algorithms.
-For simplicity, we assume the engine only has one algorithm, the serving logic 
doesn't need to handle consolidation.
-
-## The Serving Interface
-PredictionIO allows you to substitute any component in a prediction engine as 
long as interface is matched. In this case, the Serving component has to use
-the Query and Prediction class defined by the original engine. The `serve` 
method performs the filting logic.
-
-```scala
-class TempFilter(val params: TempFilterParams)
-    extends LServing[TempFilterParams, Query, Prediction] {
-  override def serve(query: Query, predictions: Seq[Prediction])
-  : Prediction = {
-    // Our filtering logic
-  }
-}
-```
-
-We will store the disabled items in a file, one item_id per line. Every time 
the `serve` method is invoked, it removes items whose id can be found in the 
file.
-
-> Notice that this is only for demonstration, reading from disk for every 
query leads to terrible system performance. User can implement more efficient 
I/O.
-
-Then, we will implement a new engine factory using this new Serving component.
-
-# Step-by-Step
-
-Below are the step-by-step instruction of implementing a customize logic.
-
-
-## Create a new engine project and copy builtin engine settings.
-
-You can create new engine project in any directory.
-
-```bash
-# Create a new engine project
-$ $PIO_HOME/bin/pio new scala-local-movielens-filtering
-# Copy ItemRec Engine default settings to the same directory
-$ $PIO_HOME/bin/pio instance --directory-name scala-local-movielens-filtering \
-    org.apache.predictionio.engines.itemrec
-$ cd scala-local-movielens-filtering
-```
-
-Delete unnecessary template files.
-
-```bash
-$ rm src/main/scala/Engine.scala
-```
-
-## Implement the new filtering component
-
-We need to define one parameter: The filepath of the blacklist file.
-
-```scala
-case class TempFilterParams(val filepath: String) extends Params
-```
-
-The Serving component implementation is trivial. Every time the method `serve` 
is invoked, it reads the blacklisted file from disk. Then it removes these 
items from the Prediction.
-
-```scala
-class TempFilter(val params: TempFilterParams)
-    extends LServing[TempFilterParams, Query, Prediction] {
-  override def serve(query: Query, predictions: Seq[Prediction])
-  : Prediction = {
-    // Read blacklisted items from disk
-    val disabledIids: Set[String] = Source.fromFile(params.filepath)
-      .getLines()
-      .toSet
-
-    val prediction = predictions.head
-    // prediction.items is a list of (item_id, score)-tuple
-    prediction.copy(items = prediction.items.filter(e => !disabledIids(e._1)))
-  }
-}
-```
-
-## Define a new engine factory
-
-We need to implement a new engine factory to include this filter. All we need 
to do is to copy and paste the ItemRec's factory, and replace the serving 
component with `TempFilter`.
-
-```scala
-object TempFilterEngine extends IEngineFactory {
-  def apply() = {
-    new Engine(
-      classOf[EventsDataSource],
-      classOf[ItemRecPreparator],
-      Map("ncMahoutItemBased" -> classOf[NCItemBasedAlgorithm]),
-      classOf[TempFilter]   // The only difference.
-    )
-  }
-}
-```
-
-Lastly, to register the engine with Prediction.IO, we need to edit the 
`engine.json` file in the project root directory. Below is an example. Two 
important fields: `id` is a unique id in Prediction.IO to identify the engine, 
`engineFactory` is the classpath to the engine factory.
-
-```json
-{
-  "id": "scala-local-movielens-filtering",
-  "version": "0.0.1-SNAPSHOT",
-  "name": "scala-local-movielens-filtering",
-  "engineFactory": "myorg.TempFilterEngine"
-}
-```
-
-This project depends on the builtin engines, hence in `build.sbt` under 
project root, add the following line to libraryDependencies.
-
-```scala
-libraryDependencies ++= Seq(
-  ...
-  "org.apache.predictionio"    %% "engines"       % "0.8.2" % "provided",
-  ...
-```
-
-## Deploy the new engine
-
-This process is equivalent to the register-train-deploy procedure of 
implementing a new engine.
-
-### Update parameters files
-
-When we create this project, we have copied the default parameters of the 
ItemRec Engine. They can be found under the directory `params`.
-
-Specify the `<app_id>` you used for importing in file `params/datasource.json`.
-
-```json
-{
-  "appId": <app_id>,
-  ...
-}
-```
-
-Specify the *full path* of the blacklisting file in `params/serving.json`.
-Notice that this files don't yet have the field `filepath`, since it was the 
default parameter (which is empty) for the serving component in the ItemRec 
Engine.
-We have prepared a sample file in 
`examples/scala-local-movielens-filtering/blacklisted.txt`
-The file should looks like the following:
-
-```json
-{
-  "filepath": 
"/home/pio/PredictionIO/examples/scala-local-movielens-filtering/blacklisted.txt"
-}
-```
-
-### Register-train-deploy
-
-#### Register the new engine
-
-You need to run the following command every time you update the code.
-
-```bash
-$ $PIO_HOME/bin/pio register
-...
-2014-10-16 22:41:32,608 INFO  tools.RegisterEngine$ - Registering engine 
scala-local-movielens-filtering 0.0.1-SNAPSHOT
-```
-
-If the command ran successfully, you will see the log message saying 
"Registering engine...".
-
-#### Train the engine instance
-
-```bash
-$ $PIO_HOME/bin/pio train -- --master spark://`hostname`:7077
-...
-2014-10-16 22:44:11,006 INFO  spark.SparkContext - Job finished: collect at 
Workflow.scala:698, took 1.381009 s
-2014-10-16 22:44:11,343 INFO  workflow.CoreWorkflow$ - Saved engine instance 
with ID: FqsPp84mS6itmn0YoNFBUg
-
-```
-
-#### Deploy the engine instance
-
-```bash
-$PIO_HOME/bin/pio deploy -- --master spark://`hostname`:7077
-...
-[INFO] [10/16/2014 22:45:08.486] ... Bind successful. Ready to serve.
-```
-
-# Play with the customized engine
-
-The engine can now serve live queries. With the sample file `blacklisted.txt`, 
items 272 and 123 are blacklisted. The new serving component `TempFilter` 
removes them from Prediction results. If we use the same query as in the
-[Movie Recommendation App (see bottom of the 
page)](/tutorials/engines/itemrec/movielens.html),
-
-```bash
-$ curl -X POST -d '{"uid": "100", "n": 3}' http://localhost:8000/queries.json
-{"items":[
-  {"313":9.92607593536377},
-  {"347":9.92170524597168}]}
-```
-
-Item 272 is removed from the Prediction result.
-
-We can further test the new serving code by adding more items to the 
blacklist, suppose we add item 347 to the file, and re-submit the same query:
-
-```bash
-$ cat blacklisted.txt
-272
-123
-347
-$ curl -X POST -d '{"uid": "100", "n": 3}' http://localhost:8000/queries.json
-{"items":[
-  {"313":9.92607593536377}]}
-```
-
-Item 347 is filtered. Only one item left in the Prediction result.
-
-> User may notice that this filtering is a *post-prediction filtering*. 
Meaning that it may return significantly less items than what is requested in 
`Query.n`.
-> User should consider using a larger n in order to prevent all items being 
filtered.
-
-# Side note: Use the code directly.
-
-The above code can be found in
-`examples/scala-local-movielens-filtering`. You can use it directly with
-
-```bash
-# Assuming you are at PredictionIO source root
-$ cd examples/scala-local-movielens-filtering
-# Edit datasource params to use the correct app_id
-$ vim params/datasource.json
-# Edit serving params to the full path of backlisted.txt
-$ vim params/serving.json
-# Register-train-deploy
-$ $PIO_HOME/bin/pio register
-...
-$ $PIO_HOME/bin/pio train -- --master spark://`hostname`:7077
-...
-$ $PIO_HOME/bin/pio deploy -- --master spark://`hostname`:7077
-...
-```
-
-At this point, you should be able to query the prediction server at 
`http://localhost:8000`.

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/cookbook/tuningalgorithm.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/cookbook/tuningalgorithm.html.md 
b/docs/manual/obsolete/cookbook/tuningalgorithm.html.md
deleted file mode 100644
index c85253d..0000000
--- a/docs/manual/obsolete/cookbook/tuningalgorithm.html.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Tuning Algorithm Parameters for Better Accuracy
----
-
-# Tuning Algorithm Parameters for Better Accuracy
-
-(coming soon)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/enginebuilders/api.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/enginebuilders/api.html.md 
b/docs/manual/obsolete/enginebuilders/api.html.md
deleted file mode 100644
index 43c740c..0000000
--- a/docs/manual/obsolete/enginebuilders/api.html.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: API for Engine Builders
----
-
-# API for Engine Builders
-
-1.  Run this command.
-
-    ```bash
-    $ sbt/sbt unidoc
-    ```
-
-2.  Point your web browser at `target/scala-2.10/unidoc/index.html` for
-    ScalaDoc, or `target/javaunidoc/index.html` for Javadoc.

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/enginebuilders/examples.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/enginebuilders/examples.html.md 
b/docs/manual/obsolete/enginebuilders/examples.html.md
deleted file mode 100644
index 6adf4a2..0000000
--- a/docs/manual/obsolete/enginebuilders/examples.html.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Learning by Examples
----
-
-# Learning by Examples
-
-* [Stock Prediction Engine with Customizable 
Algorithms](https://github.com/PredictionIO/PredictionIO/tree/master/examples/src/main/scala/stock/)
-* [Linear Regression 
Engine](https://github.com/PredictionIO/PredictionIO/tree/master/examples/scala-local-regression/)
-* [Distributed Recommendation Engine with RDD-based Model using MLlib's 
ALS](https://github.com/PredictionIO/PredictionIO/tree/master/examples/scala-recommendations/)
-* [Integrate Mahout's Recommendation Algorithm](mahout.html)

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/enginebuilders/index.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/enginebuilders/index.html.md 
b/docs/manual/obsolete/enginebuilders/index.html.md
deleted file mode 100644
index 6a817e9..0000000
--- a/docs/manual/obsolete/enginebuilders/index.html.md
+++ /dev/null
@@ -1,72 +0,0 @@
----
-title: Engine Builders' Guide
----
-
-# Engine Builders' Guide
-
-## DASE Architecture Overview
-
-A PredictionIO engine workflow looks like the following figure:
-
-```
-            DataSource.read
-             (TrainingData)
-                   v
-           Preparator.prepare
-             (PreparedData)
-                   v
-     +-------------+-------------+
-     v             v             v
-Algo1.train   Algo2.train   Algo3.train
-  (Model1)      (Model2)      (Model3)
-     v             v             v
-Algo1.predict Algo2.predict Algo3.predict <- (Query)
-(Prediction1) (Prediction2) (Prediction3)
-     v             v             v
-     +-------------+-------------+
-                   v
-              Serving.serve
-              (Prediction)
-```
-
-
-A prediction **Engine** consists of the following controller components:
-**DataSource**, **Data Preparator**(Preparator), **Algorithm**, and 
**Serving**.
-Another component **Evaluation Metrics** is used to evaluate the *Engine*.
-
-- *DataSource* is responsible for reading data from the source (Eg. database or
-  text file, etc) and prepare the **Training Data (TD)**.
-- *Data Preparator* takes the *Training Data* and generates **Prepared Data
-  (PD)** for the *Algorithm*
-- *Algorithm* takes the *Prepared Data* to train a **Model (M)** which is used
-  make **Prediction (P)** outputs based on input **Query (Q)**.
-- *Serving* serves the input *Query* with *Algorithm*'s *Prediction* outputs.
-
-An **Engine Factory** is a factory which returns an *Engine* with the above
-components defined.
-
-To evaluate a prediction *Engine*:
-- *DataSource* can also generate *Test Data* which is a list of input *Query*
-  and **Actual (A)** result.
-- *Metrics* computes the **Metric Result (MR)** by comparing the *Prediction*
-  output with the *Actual* result. PredictionIO feeds the input *Query* to the
-  *Engine* to get the *Prediction* outputs which are compared with *Actual*
-  results.
-
-As you can see, the controller components (*DataSource, Preparator, Algorithm,
-Serving and Metrics*) are the building blocks of the data pipeline and the data
-types (*Training Data*, *Prepared Data*, *Model*, *Query*, *Prediction* and
-*Actual*) defines the types of data being passed between each component.
-
-> Note that if the *Algorithm* can directly use *Training Data* without any
-pre-processing, the *Prepared Data* can be the same as *Training Data* and a
-default **Identity Preparator** can be used, which simply passes the *Training
-Data* as *Prepared Data*.
->
->Also, if there is only one *Algorithm* in the *Engine*, and there is no 
special
-post-processing on the *Prediction* outputs, a default **First Serving** can be
-use, which simply uses the *Algorithm*'s *Prediction* output to serve the 
query.
-
-
-It's time to build your first [HelloWorld
-Engine](/tutorials/enginebuilders/local-helloworld.html)!

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/enginebuilders/mahout.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/enginebuilders/mahout.html.md 
b/docs/manual/obsolete/enginebuilders/mahout.html.md
deleted file mode 100644
index a0d2bf0..0000000
--- a/docs/manual/obsolete/enginebuilders/mahout.html.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-title: Integrate Mahout's Recommendation Algorithm
----
-
-# Integrate Mahout's Recommendation Algorithm
-
-This example re-uses the *DataSource*, *Metrics* components shown in 
[Step-by-step Engine 
Building](../tutorials/enginebuilders/stepbystep/index.html) tutorials and 
integrates [Mahout](https://mahout.apache.org/)'s `GenericItemBasedRecommender` 
to build a recommendation engine.
-
-This example also demonstrates that if the *Model* contains an unserializable 
object (Mahout `Recommender` in this case), the *Model* class needs to 
implement the `KryoSerializable` with `write()` and `read()` methods which 
recovers the unserializable object. The implementation can be found in
-[MahoutAlgoModel.java](https://github.com/PredictionIO/PredictionIO/blob/master/examples/java-local-tutorial/src/main/java/recommendations/tutorial5/MahoutAlgoModel.java).

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/enginebuilders/sharable.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/enginebuilders/sharable.html.md 
b/docs/manual/obsolete/enginebuilders/sharable.html.md
deleted file mode 100644
index ff7e551..0000000
--- a/docs/manual/obsolete/enginebuilders/sharable.html.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: Packaging a sharable Engine
----
-
-# Packaging a sharable Engine
-
-(coming soon)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/engines/index.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/engines/index.html.md 
b/docs/manual/obsolete/engines/index.html.md
deleted file mode 100644
index 0cebfb78..0000000
--- a/docs/manual/obsolete/engines/index.html.md
+++ /dev/null
@@ -1,103 +0,0 @@
----
-title: Engines
----
-
-
-# Engines
-
-<code>This doc is applicable to 0.8.0 only. Updated version for 0.8.2 will be 
availble soon.</code>
-
-An engine represents a type of prediction. Some examples of engines are Item
-Recommendation, Item Ranking, Churn Analysis.
-
-## Getting Started with Engine Instance
-
-Let say you want to deploy an instance of Item Recommendation Engine for 
product
-recommendation. First of all, you will need to create an engine instance 
project
-based on the default Item Recommendation Engine. The new project will contain
-configuration for your engine instance.
-
-```
-$ $PIO_HOME/bin/pio instance org.apache.predictionio.engines.itemrec
-$ cd org.apache.predictionio.engines.itemrec
-$ $PIO_HOME/bin/pio register
-```
-where `$PIO_HOME` is your installation path of PredictionIO.
-
-
-### Specific the Target App
-
-Inside the engine instance project, edit `params/datasource.json` and change 
the
-value of `appId` to fit your app.
-
-```
-{
-  "appId": 1,
-  "actions": [
-    "view",
-    "like",
-    "conversion",
-    ...
-```
-
-### Deploying an Engine Instance
-
-```
-$ $PIO_HOME/bin/pio train
-...
-2014-09-11 16:25:44,591 INFO  spark.SparkContext - Job finished: collect at 
Workflow.scala:674, took 0.078664 s
-2014-09-11 16:25:44,737 INFO  workflow.CoreWorkflow$ - Saved engine instance 
with ID: KxOsC2FRSdGGe1lv0oaHiw
-```
-where `$PIO_HOME` is your installation path of PredictionIO.
-
-If your training was successful, you should see the lines shown above. Now you 
are ready to deploy the instance:
-
-```
-$ $PIO_HOME/bin/pio deploy
-...
-[INFO] [09/11/2014 16:26:16.525] [pio-server-akka.actor.default-dispatcher-2] 
[akka://pio-server/user/IO-HTTP/listener-0] Bound to localhost/127.0.0.1:8000
-[INFO] [09/11/2014 16:26:16.526] [pio-server-akka.actor.default-dispatcher-5] 
[akka://pio-server/user/master] Bind successful. Ready to serve.
-```
-
-> The `deploy` command runs the engine instance in the foreground. To run more
-than one engine instance, either launch a new console, or put the process into
-the background, then repeat the same command on a different port (by adding a
-`--port` argument).
-
-By default, the engine instance is bound to localhost, which serves only local 
traffic.
-To serve global traffic, you can use 0.0.0.0, i.e.
-`$ bin/pio deploy --ip 0.0.0.0`
-
-If it is your first time using PredictionIO, these [tutorials and
-samples](/tutorials/engines) should be helpful.
-
-
-## Schedule Model Re-training
-
-You may set up a crontab in Linux to update the predictive model with new data
-regularly. For example, to run the re-training every 6 hours:
-
-```
-$ crontab -e
-
-0 */6 * * *     cd <engine instance project directory>; $PIO_HOME/bin/pio 
train; $PIO_HOME/bin/pio deploy
-```
-where `$PIO_HOME` is your installation path of PredictionIO.
-
-> The `deploy` command will automatically undeploy any running engine instance
-on the same IP address and port. It is not necessary to use the `undeploy`
-command.
-
-## Built-in Engines
-
-PredictionIO comes with the following engines.
-
-* [Item Ranking](/engines/itemrank)
-* [Item Recommendation](/engines/itemrec)
-* [Item Similarity](/engines/itemsim)
-
-You may start with these [tutorials and samples](/tutorials/engines).
-
-## Building your own Engine
-
-Please read the [Engine Builders' Guide](/enginebuilders/) for details.

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/engines/itemrank/index.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/engines/itemrank/index.html.md 
b/docs/manual/obsolete/engines/itemrank/index.html.md
deleted file mode 100644
index 118751a..0000000
--- a/docs/manual/obsolete/engines/itemrank/index.html.md
+++ /dev/null
@@ -1,635 +0,0 @@
----
-title:  Item Ranking Engine | Built-in Engines
----
-
-# Item Ranking Engine: Overview
-
-**Rank a list of items to a user personally**
-
-With this engine, you can personalize a ranked list of items in your
-application. The engine rank items in two steps:
-
-## Step 1: Predict User Preferences
-
-![Item Ranking Score Prediction](/images/engine-itemrec-prediction.png)
-
-In this batch-mode process, the engine predicts preference scores for the
-queried items. The scores are computed by the deployed algorithm in the engine.
-
-## Step 2: Rank the Query Items
-
-With the predicted scores, this engine can rank a list of items for the user
-according to queries. Ranked items with scores will then be returned. Original
-order of the items is preserved if the algorithm couldn't predict the score.
-
-# Collect Events Data
-
-You may collect events data with HTTP request or by using one of many
-**PredictionIO SDKs**.
-
-## 1. Setting user entity
-
-The `eventTime` is the time of the user being created in your application (eg.
-when she registered or signed up the account).
-
-If you need to update the properties of the existing user entity later, simply
-create another `$set` event for this user entity with new property values and
-the `eventTime` is the time of this change happened.
-
-To create an user with `id_1`:
-
-<div class="tabs">
-  <div data-tab="Raw HTTP" data-lang="bash">
-```bash
-$ curl -i -X POST http://localhost:7070/events.json \
--H "Content-Type: application/json" \
--d '{
-  "appId" : 1,
-  "event" : "$set",
-  "entityType" : "user",
-  "entityId" : "id_1",
-  "eventTime" : "2004-12-13T21:39:45.618-07:00"
-}'
-```
-  </div>
-  <div data-tab="PHP SDK" data-lang="php">
-```php
-<?php
-use predictionio\EventClient;
-
-$appId = 1;
-$client = new EventClient($appId);
-$client->setUser('id_1', array(), '2004-12-13T21:39:45.618-07:00');
-?>
-```
-  </div>
-  <div data-tab="Python SDK" data-lang="python">
-```python
-from predictionio import EventClient
-from datetime import datetime
-import pytz
-
-event_client = EventClient(app_id=1, url="http://localhost:7070";)
-
-tzinfo = pytz.timezone('US/Mountain')
-event_time = datetime(2014, 12, 13, 21, 39, 45, 618, tzinfo=tzinfo)
-event_client.set_user(uid="id_1", event_time=event_time)
-```
-  </div>
-  <div data-tab="Ruby SDK" data-lang="ruby">
-```ruby
-require 'predictionio'
-
-event_client = PredictionIO::EventClient.new(1)
-event_client.set_user('id_1',
-                      'eventTime' => '2004-12-13T21:39:45.618-07:00')
-```
-  </div>
-  <div data-tab="Java SDK" data-lang="java">
-```java
-import com.google.common.collect.ImmutableMap;
-import org.apache.predictionio.EventClient;
-import org.joda.time.DateTime;
-
-EventClient eventClient = new EventClient(1);
-eventClient.setUser("id_1", ImmutableMap.<String, Object>of(), new 
DateTime("2004-12-13T21:39:45.618-07:00"));
-```
-  </div>
-</div>
-
-
-## 2. Setting item entity
-
-The `eventTime` is the time of the item being first created in your 
application.
-The property `pio_itypes` is required when you set the item for the first time.
-
-If you need to update the properties of the existing item entity, simply create
-another `$set` event for this item entity with new properties values and the
-`eventTime` is the time of this change happened.
-
-To create an item with `id_3` and set its `pio_itypes` to `"type1"`:
-
-<div class="tabs">
-  <div data-tab="Raw HTTP" data-lang="bash">
-```bash
-$ curl -i -X POST http://localhost:7070/events.json \
--H "Content-Type: application/json" \
--d '{
-  "appId" : 1,
-  "event" : "$set",
-  "entityType" : "pio_item",
-  "entityId" : "id_3",
-  "properties" : {
-    "pio_itypes" : ["type1"]
-  },
-  "eventTime" : "2004-12-13T21:39:45.618-07:00"
-}'
-```
-  </div>
-  <div data-tab="PHP SDK" data-lang="php">
-```php
-<?php
-$client->setItem('id_3',
-           array('pio_itypes'=>array('type1')),
-           '2004-12-13T21:39:45.618-07:00'
-         );
-?>
-```
-  </div>
-  <div data-tab="Python SDK" data-lang="python">
-```python
-event_client.set_item(
-    iid="id_3",
-    properties={"pio_itypes": ["type1"]},
-    event_time=event_time)
-```
-  </div>
-  <div data-tab="Ruby SDK" data-lang="ruby">
-```ruby
-event_client.set_item('id_3',
-                      'eventTime' => '2004-12-13T21:39:45.618-07:00',
-                      'properties' => { 'pio_itypes' => %w(type1) })
-```
-  </div>
-  <div data-tab="Java SDK" data-lang="java">
-```java
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import org.apache.predictionio.EventClient;
-import java.util.Map;
-import org.joda.time.DateTime;
-
-Map properties = ImmutableMap.<String, Object>of(
-        "pio_types", ImmutableList.of("type1"));
-eventClient.setItem("id_3", properties, new 
DateTime("2004-12-13T21:39:45.618-07:00"));
-```
-  </div>
-</div>
-
-## 3. Record events of user-to-item actions.
-
-The `eventTime` is the time of the action being performed by the user. the
-`event` is the action name. By default, the built-in engines support the
-following actions: `"view"`, `"like"`, `"rate"`, `"conversion"` and 
`"dislike"`.
-You may also use other custom actions by modifying the params file
-`datasource.json` and `preparator.json` (Please refer to the later section
-below.)
-
-To record that user `id_1` views the item `id_3`:
-
-<div class="tabs">
-  <div data-tab="Raw HTTP" data-lang="bash">
-```bash
-$ curl -i -X POST http://localhost:7070/events.json \
--H "Content-Type: application/json" \
--d '{
-  "appId" : 1,
-  "event" : "view",
-  "entityType" : "pio_user"
-  "entityId" : "id_1",
-  "targetEntityType" : "pio_item",
-  "targetEntityId": "id_3",
-  "eventTime" : "2012-01-20T20:33:41.452-07:00"
-}'
-```
-  </div>
-  <div data-tab="PHP SDK" data-lang="php">
-```php
-<?php
-$client->recordUserActionOnItem('view',
-                       'id_1', 'id_3',
-                       array(),
-                       '2012-01-20T20:33:41.452-07:00'
-         );
-?>
-```
-  </div>
-  <div data-tab="Python SDK" data-lang="python">
-```phython
-event_client.record_user_action_on_item(
-    action="view",
-    uid="id_1",
-    iid="id_3",
-    event_time=datetime(2012, 1, 20, 20, 33, 41, 452, tzinfo=tzinfo))
-```
-  </div>
-  <div data-tab="Ruby SDK" data-lang="ruby">
-```ruby
-event_client.record_user_action_on_item('view', 'id_1', 'id_3',
-                                        'eventTime' =>
-                                          '2012-01-20T20:33:41.452-07:00')
-```
-  </div>
-  <div data-tab="Java SDK" data-lang="java">
-```java
-import com.google.common.collect.ImmutableMap;
-import org.apache.predictionio.EventClient;
-import org.joda.time.DateTime;
-
-eventClient.userActionItem("view", "id_1", "id_3", ImmutableMap.<String, 
Object>of(),
-    new DateTime("2004-12-13T21:39:45.618-07:00"));
-```
-  </div>
-</div>
-
-Optionally, you can specify the `pio_rating` property associate with this event
-of user-to-item action.
-
-To record that user `id_1` rates the item `id_3` with rating of 4:
-
-<div class="tabs">
-  <div data-tab="Raw HTTP" data-lang="bash">
-```bash
-$ curl -i -X POST http://localhost:7070/events.json \
--H "Content-Type: application/json" \
--d '{
-  "appId" : 1,
-  "event" : "view",
-  "entityType" : "pio_user"
-  "entityId" : "id_1",
-  "targetEntityType" : "pio_item",
-  "targetEntityId": "id_3",
-  "properties" : {
-    "pio_rating" : 4
-  }
-  "eventTime" : "2012-01-20T20:33:41.452-07:00"
-}'
-```
-  </div>
-  <div data-tab="PHP SDK" data-lang="php">
-```php
-<?php
-$client->recordUserActionOnItem('view',
-                       'id_1', 'id_3',
-                       array('pio_rating'=>4),
-                       '2012-01-20T20:33:41.452-07:00'
-         );
-?>
-```
-  </div>
-  <div data-tab="Python SDK" data-lang="python">
-```python
-event_client.record_user_action_on_item(
-    action="view",
-    uid="id_1",
-    iid="id_3",
-    properties={"pio_rating": 4},
-    event_time=datetime(2012, 1, 20, 20, 33, 41, 452, tzinfo=tzinfo))  
-```
-  </div>
-  <div data-tab="Ruby SDK" data-lang="ruby">
-```ruby
-event_client.record_user_action_on_item('view', 'id_1', 'id_3',
-                                        'eventTime' =>
-                                          '2012-01-20T20:33:41.452-07:00',
-                                        'properties' => { 'pio_rating' => 4 })
-```
-  </div>
-  <div data-tab="Java SDK" data-lang="java">
-```java
-import com.google.common.collect.ImmutableMap;
-import org.apache.predictionio.EventClient;
-import java.util.Map;
-import org.joda.time.DateTime;
-
-Map properties = ImmutableMap.<String, Object>("pio_rating", 4);
-eventClient.userActionItem("view", "id_1", "id_3", properties,
-        new DateTime("2012-01-20T20:33:41.452-07:00"));
-```
-  </div>
-</div>
-
-
-# Events Data Requirement
-
-This built-in engine requires the following Events data:
-
-Your Events data should involve two EntityTypes:
-
-1. `pio_user` Entity: the user of your application
-2. `pio_item` Entity: the item of your application with the following
-   properties:
-  - `pio_itypes`: array of String. Array of itypes. Each item should have at
-    least one itype. The item may have multiple itypes.
-  - `pio_starttime`: (Optional) ISO 8601 timestamp. Start time that the item
-    becomes available.
-
-Events between these two Entity Types should be recorded:
-
-- user-to-item action Events: such as like, rate and view, with following
-  properties:
-  - `pio_rating`: (Optional) integer rating
-
-
-> **Note: Name of EntityType and Properties**
->
-> Although you are allowed to use different names for the Entity Type and
-> Properties as long as they represent same meaning (For example, use the name
-> `user` instead of `pio_user` or use `t` instead of `pio_starttime`). We 
highly
-> recommend to follow our name convention when using built-in engines. If you
-> use diffrent names for these attributes, you need to modify the
-> `attributeNames` field defined in the file `datasource.json`.
-
-> **Note: Extra User and Item Entity Properties**
->
-> Your user data may contain additional properties, such as age and gender. 
Your
-> item data may also contain other properties, such as price and title. What
-> kind of properties you need to provide depends on the algorithm you choose to
-> build the model.
->
-> Currently, all built-in algorithms in PredictionIO are Collaborative 
Filtering
-> (CF) algorithms. CF algorithms derive the feature vectors of users and items
-> from previous behaviors, i.e. score, only. Therefore, you simply need to
-> identify each user and item with a unique ID. No extra data properties are
-> needed.
->
-> It does not mean that CF algorithms are less accurate though. In fact,
-> researches (such as this) show the exact opposite. An algorithm that requires
-> no data attribute can be the winning algorithm.
-
-# Data Source
-
-The engine comes with a Data Source which read the events data from the
-datastore for processing.
-
-You need to modify `appId` in the params file `datasource.json` to your appId.
-
-# Data Preparator
-
-The engine comes with a Data Preparator to parpare data for the built-in
-algorithims. It has the following parameters:
-
-Field | Type | Description
-:---- | :----| :------
-`actions` | Map | Configure how to map the user-to-item action to a rating 
score. Specify `null` if use value of `pio_rating` of the corresponding action.
-`conflict`| String | Specify how to resolve the conflict if the user has 
multiple actions on the same item. Supported values: "latest", "highest", 
"lowest", "sum".
-  |  | "latest" - Use the latest action (default)
-  |  | "highest" - Use the highest score one
-  |  | "lowest" - Use the lowest score one
-  |  | "sum" - Sum all action scores.
-
-You can change the default setting by modifying the params file 
`preparator.json`.
-
-# Item Ranking Engine API
-
-Item Ranking Engine supports the following query API endpoints:
-
-## Sending Queries to Item Ranking Engine
-
-To rank a list of items for a user, make an HTTP POST request to the Item 
Ranking Engine instance:
-
-**POST** *Engine_Instance_IP*:*Engine_Instance_port*
-
-
-with following JSON payload:
-
-Field | Description
------- | :---------
-`uid` | user Entity ID
-`iids`| array of item Entity ID
-
-#### Sample Query
-
-To personalize the order of items of "1", "3", "5", "10" and "11" for user 
"123":
-
-<div class="tabs">
-  <div data-tab="Raw HTTP" data-lang="bash">
-```bash
-$ curl -i -X POST http://localhost:8000/queries.json \
--d '{
-  "uid" : "123",
-  "iids" : ["1", "3", "5", "10", "11"]
-}'
-```
-  </div>
-  <div data-tab="PHP SDK" data-lang="php">
-```php
-<?php
-use predictionio\EngineClient;
-
-$engineClient = new EngineClient('http://localhost:8000');
-$predictions = $engineClient->sendQuery(
-                      array(
-                        'uid'=>'123',
-                        'iids'=>array('1', '3', '5', '10', '11')
-                      )
-               );
-print_r($predictions);
-?>
-```
-  </div>
-  <div data-tab="Python SDK" data-lang="python">
-```python
-from predictionio import EngineClient
-engine_client = EngineClient(url="http://localhost:8000";)
-
-prediction = engine_client.send_query(
-    data={"uid": "123", "iids": ["1", "3", "5", "10", "11"]})
-print(prediction)
-```
-  </div>
-  <div data-tab="Ruby SDK" data-lang="ruby">
-```ruby
-require 'predictionio'
-
-client = PredictionIO::EngineClient.new
-
-predictions = client.send_query('uid' => '123', 'iids' => %w(1 3 5 10 11))
-puts predictions
-```
-  </div>
-  <div data-tab="Java SDK" data-lang="java">
-```java
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import org.apache.predictionio.EngineClient;
-import org.joda.time.DateTime;
-
-EngineClient engineClient = new EngineClient(apiURL);
-engineClient.sendQuery(ImmutableMap.<String, Object>of(
-        "uids", "123",
-        "iids", ImmutableList.of("1", "3", "5", "10", "11")
-    ));
-```
-  </div>
-</div>
-
-
-The API returns the following JSON response:
-
-Field | Description
-:---- | :----------
-`items` | array of { item Entity ID : predicted preference score }
-        | in ranked order
-`isOriginal`| if set to true, the items are not ranked
-            | (because the algorithm cannot predict)
-
-#### Sample Response
-
-```json
-{"items":[{"10":35.15679457387672},{"11":14.929159003452385},{"1":6.950646135607128},{"3":6.894567600916194},{"5":3.9688094914951138}],"isOriginal":false}
-```
-
-# Algorithms
-
-## Changing Algorithm and Its Parameters
-
-By default, **Mahout Item Based Algorithm** (`"mahoutItemBased"`) is used. You
-can switch to another algorithm or modify parameters by modifying the file
-`algorithms.json` with any of above algorithm's JSON parameters setting.
-
-Please read [Selecting an
-Algorithm](/cookbook/choosingalgorithms.html) for tips on
-selecting the right algorithm and setting the parameters properly.
-
-> You may also [implement and add your own
-algorithm](/cookbook/addalgorithm.html) to the engine easily.
-
-Item Ranking Engine comes with the following algorithms:
-
-## 1. Mahout Item Based Algorithm
-
-Use Mahout Item Based algorithm to build similarity matrix. Then rank items
-based on user recent history and the item similarity matrix.
-
-**Algorithm code name:** `"mahoutItemBased"`
-
-**Parameters:**
-
-Field | Type | Description
-:---- | :----| :------
-`booleanData` | boolean | Treat input data as having no preference values.
-`itemSimilarity`| String | Item Similarity Measure. See **Note**
-`weighted` | boolean | The Similarity score is weighted (only applied to 
Euclidean Distance, Pearson Correlation, Uncentered Cosine item similarity).
-`nearestN` | integer | K-nearest rated item neighbors,
-`threshold` | double | Similarity threshold. Discard item pairs with a 
similarity value below this.
-`numSimilarItems` | integer | Number of similar items in the Item Similarity 
Matrix model.
-`numUserActions`| integer | Number of user-to-item actions in the user history 
model.
-`freshness` | integer | Freshness scale 0 - 10. Must be >= 0. 0 means no 
freshness.
-`freshnessTimeUnit` | integer | The time unit in seconds for freshness 
prioritization. As an example, if you set this to one day (86400), and 
freshness is set to 10, items that are one day old would have their score 
degraded by a bit more than 60%, or e^-1 remains to be exact.
-
-**Note:**
-
-Supported value for `itemSimilarity`
-
-Name | Value
-:---- | :----
-City Block | `CityBlockSimilarity`
-Euclidean Distance | `EuclideanDistanceSimilarity`
-Log-Likelihood | `LogLikelihoodSimilarity`
-Pearson Correlation | `PearsonCorrelationSimilarity`
-Tanimoto Coefficient | `TanimotoCoefficientSimilarity`
-Uncentered Cosine | `UncenteredCosineSimilarity`
-
-**Default algorithm parameters:**
-
-```json
-[
-  {
-    "name": "mahoutItemBased",
-    "params": {
-      "booleanData": true,
-      "itemSimilarity": "LogLikelihoodSimilarity",
-      "weighted": false,
-      "nearestN": 10,
-      "threshold": 4.9E-324,
-      "numSimilarItems": 50,
-      "numUserActions": 50,
-      "freshness" : 0,
-      "freshnessTimeUnit" : 86400
-    }
-  }
-]
-```
-
-## 2. Feature Based Algorithm
-
-Rank items based on item's feature vector (`pio_itypes`).
-
-**Algorithm code name:** `"featurebased"`
-
-**Parameters:**
-
-This algorithm doesn't have parameters.
-
-**Default algorithm parameters:**
-
-```json
-[
-  {
-    "name": "featurebased",
-    "params": {}
-  }
-]
-
-```
-
-## 3. Random Algorithm
-
-Rank items randomly (mainly for baseline evaluation purpose).
-
-**Algorithm code name:** `"rand"`
-
-**Parameters:**
-
-This algorithm doesn't have parameters.
-
-**Default algorithm parameters:**
-
-```json
-[
-  {
-    "name": "rand",
-    "params": {}
-  }
-]
-
-```
-
-## 4. Non-cached Mahout Item Based Algorithm
-
-Use Mahout Item Based algorithm to re-calculate predicted score every time when
-serve the query request. The item similarity matrix is not cached. (Serving
-performance is slower)
-
-**Algorithm code name:** `"ncMahoutItemBased"`
-
-**Parameters:**
-
-Same as **Mahout Item Based Algorithm** *without* the following parameters:
-
-- `numSimilarItems`
-- `numUserActions`
-
-
-**Default algorithm parameters:**
-
-```json
-[
-  {
-    "name": "ncMahoutItemBased",
-    "params": {
-      "booleanData": true,
-      "itemSimilarity": "LogLikelihoodSimilarity",
-      "weighted": false,
-      "threshold": 4.9E-324,
-      "nearestN": 10,
-      "freshness" : 0,
-      "freshnessTimeUnit" : 86400
-    }
-  }
-]
-```
-
-# Using Custom Actions
-
-By default, the built-in engines support the following actions: `"view"`,
-`"like"`, `"dislike"`, `"rate"` and `"conversion"`. To add your own custom
-actions, you need to modify the following params file:
-
-*   `datasource.json`: Add your custom action names into the parameters
-    `actions` and `u2iActions`.
-
-*   `preparator.json`: Define how to map your custom action names to a score in
-    the parameters `actions`. Use value of `null` if your action has a
-    `pio_rating` property.

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/engines/itemrec/index.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/engines/itemrec/index.html.md 
b/docs/manual/obsolete/engines/itemrec/index.html.md
deleted file mode 100644
index 3de6500..0000000
--- a/docs/manual/obsolete/engines/itemrec/index.html.md
+++ /dev/null
@@ -1,204 +0,0 @@
----
-title:  Item Recommendation Engine
----
-
-**Recommend N items to a user personally**
-
-With this engine, you can add discovery or recommendation features to your
-application. The engine makes recommendation in two steps:
-
-## Step 1: Predict User Preferences
-
-![Item Recommendation Score
-Prediction](/images/engine-itemrec-prediction.png)
-
-In this batch-mode process, the engine predicts a preference score for every
-user-item pair. The scores are computed by the deployed algorithm in the 
engine.
-
-## Step 2: Return Personalized High Score Items
-
-With the predicted scores, this engine can rank all available items for any 
user
-according to your REST API/SDK queries.
-Top N items will then be returned as prediction results.
-
-## Tutorials
-
-Create your first Item Recommendation app quickly by following [tutorials and
-samples](/tutorials/engines).
-
-
-## Collect Events Data / Events Data Requirement
-The process of collecting events data for the Item Recommendation Engine is
-equivalent to that of Item Ranking Engine. Please refer to [Item Ranking Engine
-/ Collect Events Data](/engines/itemrank) for detailed explanation.
-
-## Data Source
-Same as [Item Ranking Engine / Data Source](/engines/itemrank).
-
-## Data Preparator
-Same as [Item Ranking Engine / Data Preparator](/engines/itemrank).
-
-
-## Item Recommendation Engine API
-
-Item Recommendation Engine supports the following query API endpoints:
-
-## Sending Queries to Item Recommendation Engine
-
-To get a list of recommended items for a user, make an HTTP POST request to the
-Item Recommendation Engine instance:
-
-**POST** `<engine_instance_url>`
-
-with following JSON payload:
-
-Field | Description
------- | :---------
-`uid` | user Entity ID
-`n` | maximum number of items recommended
-
-#### Sample Query
-
-To get a 3 personalized item recommendations for user "1".
-
-<div class="tabs">
-  <div data-tab="Raw HTTP" data-lang="bash">
-```bash
-$ curl -X POST http://localhost:9993/queries.json \
--d '{"uid": "1", "n": 3}'
-```
-  </div>
-  <div data-tab="PHP SDK" data-lang="php">
-```php
-<?php
-use predictionio\EngineClient;
-
-$engineClient = new EngineClient('http://localhost:9993');
-$predictions = $engineClient->sendQuery(
-                      array(
-                        'uid'=>'1',
-                        'n'=>3
-                      )
-               );
-print_r($predictions);
-?>
-```
-  </div>
-  <div data-tab="Python SDK" data-lang="python">
-```python
-from predictionio import EngineClient
-engine_client = EngineClient(url="http://localhost:9993";)
-
-prediction = engine_client.send_query(data={"uid": "1", "n" : 3})
-print(prediction)
-```
-  </div>
-  <div data-tab="Ruby SDK" data-lang="ruby">
-```ruby
-require 'predictionio'
-
-client = PredictionIO::EngineClient.new('http://localhost:9993')
-
-predictions = client.send_query('uid' => '1', 'n' => 3)
-puts predictions
-```
-  </div>
-  <div data-tab="Java SDK" data-lang="java">
-```java
-import com.google.common.collect.ImmutableMap;
-import org.apache.predictionio.EngineClient;
-
-EngineClient engineClient = new EngineClient("http://localhost:9993";);
-engineClient.sendQuery(ImmutableMap.<String, Object>of(
-        "uid", "1",
-        "n", 3
-    ));
-```
-  </div>
-</div>
-
-#### Sample Response
-
-The API returns the following JSON response:
-
-Field | Description
----- | ----------
-`items` | array of { item Entity ID : predicted preference score } in 
descending order.
-
-```json
-{"items":[{"1":5.9279937744140625},{"19":5.583907127380371},{"2":5.424792289733887}]}
-```
-
-## Algorithms
-
-## Changing Algorithm and Its Parameters
-
-By default, **Non-cached Mahout Item Based Algorithm** (`"ncMahoutItemBased"`)
-is used. You can switch to another algorithm or modify parameters by modifying
-the file `algorithms.json` with any of above algorithm's JSON parameters
-setting.
-
-Please read [Selecting an
-Algorithm](/cookbook/choosingalgorithms.html) for tips on
-selecting the right algorithm and setting the parameters properly.
-
-INFO: You may also [implement and add your own
-algorithm](/cookbook/addalgorithm.html) to the engine easily.
-
-Item Recommendation Engine comes with the following algorithms:
-
-## 1. Non-cached Mahout Item Based Algorithm
-
-Use Mahout Item Based algorithm to build similarity matrix. Then rank items
-based on user recent history and the item similarity matrix.
-
-**Algorithm code name:** `"ncMahoutItemBased"`
-
-**Parameters:**
-
-Field | Type | Description
----- | ----| ------
-`booleanData` | boolean | Treat input data as having no preference values.
-`itemSimilarity`| String | Item Similarity Measure. See **Note**
-`weighted` | boolean | The Similarity score is weighted (only applied to 
Euclidean Distance, Pearson Correlation, Uncentered Cosine item similarity).
-`nearestN` | integer | K-nearest rated item neighbors,
-`unseenOnly` | boolean | Only previously unseen (i.e. unrated) items will be 
returned.
-`threshold` | double | Similarity threshold. Discard item pairs with a 
similarity value below this.
-`freshness` | integer | Freshness scale 0 - 10. Must be >= 0. 0 means no 
freshness.
-`freshnessTimeUnit` | integer | The time unit in seconds for freshness 
prioritization. As an example, if you set this to one day (86400), and 
freshness is set to 10, items that are one day old would have their score 
degraded by a bit more than 60%, or e^-1 remains to be exact.
-
-**Note:**
-
-Supported value for `itemSimilarity`
-
-|Name | Value |
-|---- | ----  |
-City Block | `CityBlockSimilarity`
-Euclidean Distance | `EuclideanDistanceSimilarity`
-Log-Likelihood | `LogLikelihoodSimilarity`
-Pearson Correlation | `PearsonCorrelationSimilarity`
-Tanimoto Coefficient | `TanimotoCoefficientSimilarity`
-Uncentered Cosine | `UncenteredCosineSimilarity`
-
-**Default algorithm parameters:**
-
-```json
-[
-  {
-    "name": "ncMahoutItemBased",
-    "params": {
-      "booleanData": true,
-      "itemSimilarity": "LogLikelihoodSimilarity",
-      "weighted": false,
-      "threshold": 4.9E-324,
-      "nearestN": 10,
-      "unseenOnly": false,
-      "freshness" : 0,
-      "freshnessTimeUnit" : 86400
-    }
-  }
-]
-```
-
-## 2. Feature Based Algorithm
-Coming soon.

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/engines/itemsim/index.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/engines/itemsim/index.html.md 
b/docs/manual/obsolete/engines/itemsim/index.html.md
deleted file mode 100644
index ba41c48..0000000
--- a/docs/manual/obsolete/engines/itemsim/index.html.md
+++ /dev/null
@@ -1,210 +0,0 @@
----
-title:  Item Similarity Engine | Built-in Engines
----
-
-# ITEM SIMILARITY ENGINE: OVERVIEW
-
-**People who like this may also like....**
-
-This engine tries to suggest top **N** items that are similar to one of more 
targeted items. By being 'similar', it does not necessarily mean that the two 
items look alike, nor they share similar attributes. The definition of 
similarity is independently defined by each algorithm and is usually calculated 
by a distance function. The built-in algorithms assume that similarity between 
two items means the likelihood any user would like (or buy, view etc) both of 
them.
-
-The engine suggests similar items through a two-step process:
-
-
-## Step 1: Estimate Item Similarity
-
-![Item Sim Score Prediction](/images/engine-itemsim-score.png)
-
-In this batch-mode process, the engine estimates a similarity score for every 
item-item pair. The scores are computed by the deployed algorithm in the engine.
-
-## Step 2: Rank Top N Items
-
-With the similarity scores, this engine can rank all available items according 
to their similarity to the targeted items. Top N most similar items will then 
be returned.
-
-
-# Collect Events Data / Events Data Requirement
-The process of collecting events data for the Item Similarity Engine is
-equivalent to that of Item Ranking Engine. Please refer to [Item Ranking Engine
-/ Collect Events Data](/engines/itemrank) for detailed explanation.
-
-# Data Source
-Same as [Item Ranking Engine / Data Source](/engines/itemrank).
-
-# Data Preparator
-Same as [Item Ranking Engine / Data Preparator](/engines/itemrank).
-
-# Item Similarity Engine API
-
-Item Similarity Engine supports the following API endpoints:
-
-## Sending Queries to Item Similarity Engine
-
-To suggest top N items that are most similar to one or more targeted items, 
make an HTTP POST request to the Item Similarity Engine instance:
-
-**POST** `<engine_instance_url>/queries.json`
-
-with following JSON payload:
-
-Field | Description
------- | :---------
-`iids` | Array of item entity IDs.
-`n` | maximum number of items recommended
-
-> *Note*
->
->If multiple item IDs are specified (For example: `"iids": ["item0", "item1", 
"item2"]`, all the specified items will be taken into account when return the 
top N similar items. One typical usage is that you could keep track a list of 
recent viewed items of the user and then use this list of recently viewed items 
to recommend items to the user. This could also be used to provide 
recommendation to anonymous users as soon as they have viewed a few items.
-
-#### Sample Query
-
-To get top 5 items which are similar to items "12", "1", "19":
-
-<div class="tabs">
-  <div data-tab="Raw HTTP" data-lang="bash">
-```bash
-$ curl -X POST http://localhost:9997/queries.json \
--d '{"iids": ["12", "1", "19"], "n": 5}'
-```
-  </div>
-  <div data-tab="PHP SDK" data-lang="php">
-```php
-<?php
-use predictionio\EngineClient;
-
-$engineClient = new EngineClient('http://localhost:9997');
-$predictions = $engineClient->sendQuery(
-                      array(
-                        'iids'=>array('12', '1', '19'),
-                        'n'=>5
-                      )
-               );
-print_r($predictions);
-?>
-```
-  </div>
-  <div data-tab="Python SDK" data-lang="python">
-```python
-from predictionio import EngineClient
-engine_client = EngineClient(url="http://localhost:9997";)
-
-prediction = engine_client.send_query(data={"iids": ["12", "1", "19"], "n" : 
5})
-print(prediction)
-```
-  </div>
-  <div data-tab="Ruby SDK" data-lang="ruby">
-```ruby
-require 'predictionio'
-
-client = PredictionIO::EngineClient.new('http://localhost:9997')
-
-predictions = client.send_query('iids' => %w(12 1 19), 'n' => 5)
-puts predictions
-```
-  </div>
-  <div data-tab="Java SDK" data-lang="java">
-```java
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import org.apache.predictionio.EngineClient;
-
-EngineClient engineClient = new EngineClient("http://localhost:9997";);
-engineClient.sendQuery(ImmutableMap.<String, Object>of(
-        "iids", ImmutableList.of("12", "1", "19"),
-        "n", 5));
-```
-  </div>
-</div>
-
-The API returns the following JSON response:
-
-Field | Description
-:---- | :----------
-`items` | array of { item Entity ID : predicted preference score }
-        | in descending order.
-
-#### Sample Response
-
-```json
-{"items":[{"17":0.8666961789131165},{"41":0.793708860874176},{"42":0.7885419726371765},{"36":0.7584964036941528},{"2":0.7584964036941528}]}
-```
-
-
-# Algorithms
-
-## Changing Algorithm and Its Parameters
-
-By default, **Non-cached Mahout Item Based Algorithm** (`"ncMahoutItemBased"`)
-is used. You can switch to another algorithm or modify parameters by modifying
-the file `algorithms.json` with any of above algorithm's JSON parameters
-setting.
-
-Please read [Selecting an
-Algorithm](/cookbook/choosingalgorithms.html) for tips on
-selecting the right algorithm and setting the parameters properly.
-
-INFO: You may also [implement and add your own
-algorithm](/cookbook/addalgorithm.html) to the engine easily.
-
-Item Similarity Engine comes with the following algorithms:
-
-## 1. Non-cached Mahout Item Based Algorithm
-
-Use Mahout Item Based algorithm to calculate similarity scoree when serve
-the query request. The item similarity matrix is not cached.
-
-**Algorithm code name:** `"ncMahoutItemBased"`
-
-**Parameters:**
-
-Field | Type | Description
-:---- | :----| :------
-`booleanData` | boolean | Treat input data as having no preference values.
-`itemSimilarity`| String | Item Similarity Measure. See **Note**
-`weighted` | boolean | The Similarity score is weighted (only applied to 
Euclidean Distance, Pearson Correlation, Uncentered Cosine item similarity).
-`threshold` | double | Similarity threshold. Discard item pairs with a 
similarity value below this.
-`freshness` | integer | Freshness scale 0 - 10. Must be >= 0. 0 means no 
freshness.
-`freshnessTimeUnit` | integer | The time unit in seconds for freshness 
prioritization. As an example, if you set this to one day (86400), and 
freshness is set to 10, items that are one day old would have their score 
degraded by a bit more than 60%, or e^-1 remains to be exact.
-
-**Note:**
-
-Supported value for `itemSimilarity`
-
-Name | Value
-:---- | :----
-City Block | `CityBlockSimilarity`
-Euclidean Distance | `EuclideanDistanceSimilarity`
-Log-Likelihood | `LogLikelihoodSimilarity`
-Pearson Correlation | `PearsonCorrelationSimilarity`
-Tanimoto Coefficient | `TanimotoCoefficientSimilarity`
-Uncentered Cosine | `UncenteredCosineSimilarity`
-
-**Default algorithm parameters:**
-
-```json
-[
-  {
-    "name": "ncMahoutItemBased",
-    "params": {
-      "booleanData": true,
-      "itemSimilarity": "LogLikelihoodSimilarity",
-      "weighted": false,
-      "threshold": 4.9E-324,
-      "freshness" : 0,
-      "freshnessTimeUnit" : 86400
-    }
-  }
-]
-```
-
-
-# Using Custom Actions
-
-By default, the built-in engine parameters support the following actions:
-`"view"`, `"like"`, `"dislike"`, `"rate"` and `"conversion"`.
-To add your own custom actions, you could simply modify the following params 
file:
-
-*   `datasource.json`: Add your custom action names into the parameters
-    `actions` and `u2iActions`.
-
-*   `preparator.json`: Define how to map your custom action names to a score in
-    the parameters `actions`. Use value of `null` if your action has a
-    `pio_rating` property.

http://git-wip-us.apache.org/repos/asf/incubator-predictionio/blob/e1e71280/docs/manual/obsolete/sample.html.md
----------------------------------------------------------------------
diff --git a/docs/manual/obsolete/sample.html.md 
b/docs/manual/obsolete/sample.html.md
deleted file mode 100644
index 18f96da..0000000
--- a/docs/manual/obsolete/sample.html.md
+++ /dev/null
@@ -1,134 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one or more
-contributor license agreements.  See the NOTICE file distributed with
-this work for additional information regarding copyright ownership.
-The ASF licenses this file to You under the Apache License, Version 2.0
-(the "License"); you may not use this file except in compliance with
-the License.  You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--->
-
----
-title: Sample Data Set
----
-
-
-Here are open sample data sets from various services. You can share your import
-scripts with the community, you can post it on the [user
-group](https://groups.google.com/forum/#!forum/predictionio-user) or
-[here](../community/projects.html).
-
-## Datasets
-
-- MovieLens
-http://grouplens.org/datasets/movielens/
-
-- Orange
-http://www.sigkdd.org/kdd-cup-2009-customer-relationship-prediction
-
-- Lending Club
-https://www.lendingclub.com/info/download-data.action
-
-- Amazon Reviews
-http://archive.ics.uci.edu/ml/datasets/Amazon+Commerce+reviews+set and
-https://snap.stanford.edu/data/web-Amazon.html
-
-- Intrusion Detector Learning
-http://archive.ics.uci.edu/ml/machine-learning-databases/kddcup99-mld/task.html
-
-- Twitter
-http://an.kaist.ac.kr/traces/WWW2010.html
-
-- YouTube
-http://netsg.cs.sfu.ca/youtubedata/
-
-- Million Song Dataset
-http://labrosa.ee.columbia.edu/millionsong/
-
-- Yahoo! Music
-http://webscope.sandbox.yahoo.com/catalog.php?datatype=r
-
-- Weibo
-http://electricricecooker.tumblr.com/post/42103142042/one-year-of-deleted-weibos-archive
-
-- Reddit
-http://www.redditblog.com/2011/09/who-in-world-is-reddit-results-are-in.html
-
-- Ancestry.com
-http://www.cs.cmu.edu/~jelsas/data/ancestry.com/
-
-- Airline On-time data
-http://stat-computing.org/dataexpo/2009/the-data.html
-
-- Stack Overflow
-https://archive.org/details/stackexchange
-
-- Marvel Universe
-http://aws.amazon.com/datasets/5621954952932508
-
-- Poker Hand
-http://archive.ics.uci.edu/ml/datasets/Poker+Hand
-
-- Breast Cancer
-http://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29
-
-- Wine Quality
-http://archive.ics.uci.edu/ml/datasets/Wine+Quality
-
-- IJCNN Social Network Challenge
-https://www.kaggle.com/c/socialNetwork/data
-
-- Careerbuilder
-https://www.kaggle.com/c/job-recommendation/data
-
-- Tencent Weibo
-https://www.kddcup2012.org/c/kddcup2012-track1
-
-- StumbleUpon
-https://www.kaggle.com/c/stumbleupon/data
-
-- Adzuna
-https://www.kaggle.com/c/job-salary-prediction
-
-- Event Recommendation
-https://www.kaggle.com/c/event-recommendation-engine-challenge
-
-- Rotten Tomatoes
-https://www.kaggle.com/c/sentiment-analysis-on-movie-reviews
-
-- Gigaom Wordpress
-https://www.kaggle.com/c/predict-wordpress-likes/data
-
-- Yelp
-https://www.kaggle.com/c/yelp-recsys-2013/data
-http://www.ics.uci.edu/~vpsaini/
-
-- Wikipedia / Wikistream
-http://wikistream.wmflabs.org/
-
-- March Madness
-https://www.kaggle.com/c/march-machine-learning-mania/data
-
-- Open Public Football Data (e.g., World Cup)
-https://github.com/openfootball
-
-## Other Lists, Libraries and Sources of Data
-
-- CrowdFlower Open Data Library
-http://www.crowdflower.com/open-data-library
-
-- bit.ly's Research Quality Data Sets
-https://bitly.com/bundles/hmason/1
-
-- Stanford Large Network Dataset Collection
-http://snap.stanford.edu/data/index.html
-
-- UC Irvine Machine Learning Repository
-http://archive.ics.uci.edu/ml/

Reply via email to