You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@edgent.apache.org by wc...@apache.org on 2016/04/05 21:37:42 UTC

[4/4] incubator-quarks-website git commit: from 9b2ddf1349a695c23fb347f8238de102717ba748

from 9b2ddf1349a695c23fb347f8238de102717ba748


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

Branch: refs/heads/asf-site
Commit: b12a0d13fa3cca517a786a62ff6605d8acf91ed0
Parents: 617df2d
Author: wcmarsha <wc...@us.ibm.com>
Authored: Tue Apr 5 12:37:22 2016 -0700
Committer: wcmarsha <wc...@us.ibm.com>
Committed: Tue Apr 5 12:37:22 2016 -0700

----------------------------------------------------------------------
 content/404.html                                |  39 +-
 content/algolia_search.json                     |  46 +-
 content/docs/committers.html                    |  39 +-
 content/docs/common-quarks-operations.html      |  39 +-
 content/docs/community.html                     |  43 +-
 content/docs/console.html                       |  39 +-
 content/docs/faq.html                           |  39 +-
 content/docs/home.html                          |  45 +-
 content/docs/overview.html                      |  39 +-
 content/docs/quarks-getting-started.html        |  39 +-
 content/docs/quarks_index.html                  |  43 +-
 content/docs/quickstart.html                    |  39 +-
 content/docs/samples.html                       |  39 +-
 content/docs/search.html                        |  39 +-
 content/docs/tag_collaboration.html             |  43 +-
 content/docs/tag_content_types.html             |  43 +-
 content/docs/tag_formatting.html                |  43 +-
 content/docs/tag_getting_started.html           |  45 +-
 content/docs/tag_mobile.html                    |  43 +-
 content/docs/tag_navigation.html                |  43 +-
 content/docs/tag_publishing.html                |  43 +-
 content/docs/tag_single_sourcing.html           |  43 +-
 content/docs/tag_special_layouts.html           |  43 +-
 content/prince-file-list.txt                    |  10 +
 .../recipes/recipe_adaptable_filter_range.html  | 711 +++++++++++++++++++
 ...pe_combining_streams_processing_results.html |  45 +-
 ...ipe_different_processing_against_stream.html |  45 +-
 .../recipes/recipe_external_filter_range.html   | 707 ++++++++++++++++++
 content/recipes/recipe_hello_quarks.html        |  72 +-
 content/recipes/recipe_source_function.html     |  45 +-
 content/recipes/recipe_value_out_of_range.html  |  79 ++-
 content/search.json                             |  32 +-
 content/title-checker.html                      | 234 ++++++
 content/titlepage.html                          |  41 +-
 content/tocpage.html                            |  61 +-
 content/urls_mydoc.txt                          |  34 +-
 36 files changed, 2716 insertions(+), 356 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quarks-website/blob/b12a0d13/content/404.html
----------------------------------------------------------------------
diff --git a/content/404.html b/content/404.html
index 5710029..4840a78 100644
--- a/content/404.html
+++ b/content/404.html
@@ -6,7 +6,7 @@
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta name="description" content="">
 <meta name="keywords" content=" ">
-<title>Page Not Found  | Quarks Documentation</title>
+<title>Page Not Found  | Apache Quarks Documentation</title>
 <link rel="stylesheet" type="text/css" href="../css/syntax.css">
 <link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css">
 <!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">-->
@@ -60,7 +60,7 @@
                 <span class="icon-bar"></span>
             </button>
 
-            <a class="fa fa-home fa-lg navbar-brand" href="home.html">&nbsp;<span class="projectTitle"> Quarks Documentation</span></a>
+            <a class="fa fa-home fa-lg navbar-brand" href="../docs/home.html">&nbsp;<span class="projectTitle"> Apache Quarks Documentation</span></a>
 
         </div>
         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
@@ -80,7 +80,7 @@
                     
                     
                     
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Github Repos<b class="caret"></b></a>
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">GitHub Repos<b class="caret"></b></a>
                     <ul class="dropdown-menu">
                         
                         
@@ -156,7 +156,7 @@
                 <!-- Send feedback function -->
 <script>
 function SendLinkByMail(href) {
-var subject= "Quarks Documentation feedback";
+var subject= "Apache Quarks Documentation feedback";
 var body = "I have some feedback about the Page Not Found page: ";
 body += window.location.href;
 body += "";
@@ -199,6 +199,7 @@ window.location.href = uri;
 </nav>
 
 
+
     <!-- Page Content -->
     <div class="container">
         <div class="col-lg-12">&nbsp;</div>
@@ -319,7 +320,25 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_hello_quarks.html">Recipe 1. Hello Quarks!</a></li>
+                    <li><a href="../recipes/recipe_hello_quarks.html">Hello Quarks!</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_source_function.html">Writing a Source Function</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_value_out_of_range.html">Detecting a Sensor Value Out of Expected Range</a></li>
                     
 
                     
@@ -328,7 +347,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_source_function.html">Recipe 2. Writing a Source Function</a></li>
+                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Applying Different Processing Against a Single Stream</a></li>
                     
 
                     
@@ -337,7 +356,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_value_out_of_range.html">Recipe 3. Detecting a Sensor Value Out of Expected Range</a></li>
+                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
                     
 
                     
@@ -346,7 +365,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Recipe 4. Applying Different Processing Against a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_external_filter_range.html">Using an External Configuration File for Filter Ranges</a></li>
                     
 
                     
@@ -355,7 +374,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Recipe 5. Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_adaptable_filter_range.html">Adaptable Filter Behavior</a></li>
                     
 
                     
@@ -547,7 +566,7 @@ $('#toc').on('click', 'a', function() {
         <div class="col-lg-12 footer">
 
              Site last
-            generated: Mar 29, 2016 <br/>
+            generated: Apr 5, 2016 <br/>
 
         </div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-quarks-website/blob/b12a0d13/content/algolia_search.json
----------------------------------------------------------------------
diff --git a/content/algolia_search.json b/content/algolia_search.json
index 5533604..0521b04 100644
--- a/content/algolia_search.json
+++ b/content/algolia_search.json
@@ -39,7 +39,7 @@
 "keywords": "",
 "url": "../docs/community",
 "summary": "",
-"body": "Every volunteer project obtains its strength from the people involved in it. We invite you to participate as much or as little as you choose.You can:* Use our project and provide a feedback.* Provide us with the use-cases.* Report bugs and submit patches.* Contribute code, javadocs, documentation.Visit the [Contributing](http://www.apache.org/foundation/getinvolved.html) page for general Apache contribution information. If you plan to make any significant contribution, you will need to have an Individual Contributor License Agreement [\\(ICLA\\)] (https://www.apache.org/licenses/icla.txt)  on file with Apache.### Mailing listGet help using {{ site.data.project.short_name }} or contribute to the project on our mailing lists:{% if site.data.project.user_list %}* [site.data.project.user_list](mailto:{{ site.data.project.user_list }}) is for usage questions, help, and announcements. [subscribe](mailto:{{ site.data.project.user_list_subscribe }}?subject=send this email to subscr
 ibe),     [unsubscribe](mailto:{{ site.data.project.dev_list_unsubscribe }}?subject=send this email to unsubscribe), [archives]({{ site.data.project.user_list_archive_mailarchive }}){% endif %}* [{{ site.data.project.dev_list }}](mailto:{{ site.data.project.dev_list }}) is for people who want to contribute code to {{ site.data.project.short_name }}. [subscribe](mailto:{{ site.data.project.dev_list_subscribe }}?subject=send this email to subscribe), [unsubscribe](mailto:{{ site.data.project.dev_list_unsubscribe }}?subject=send this email to unsubscribe), [archives]({{ site.data.project.dev_list_archive_mailarchive }})* [{{ site.data.project.commits_list }}](mailto:{{ site.data.project.commits_list }}) is for commit messages and patches to {{ site.data.project.short_name }}. [subscribe](mailto:{{ site.data.project.commits_list_subscribe }}?subject=send this email to subscribe), [unsubscribe](mailto:{{ site.data.project.commits_list_unsubscribe }}?subject=send this email to unsubscribe
 ), [archives]({{ site.data.project.commits_list_archive_mailarchive }})### Issue trackerWe use Jira here: [https://issues.apache.org/jira/browse/{{ site.data.project.jira }}](https://issues.apache.org/jira/browse/{{ site.data.project.jira }})#### Bug ReportsFound bug? Enter an issue in  [Jira](https://issues.apache.org/jira/browse/{{ site.data.project.jira }}).Before submitting an issue, please:* Verify that the bug does in fact exist.* Search the issue tracker to verify there is no existing issue reporting the bug you've found.* Consider tracking down the bug yourself in the {{ site.data.project.short_name }} source and submitting a pull request  along with your bug report. This is a great time saver for the  {{ site.data.project.short_name }} developers and helps ensure the bug will be fixed quickly.#### Feature RequestsEnhancement requests for new features are also welcome. The more concrete the request is and the better rationale you provide, the greater the chance it will incor
 porated into future releases.  [https://issues.apache.org/jira/browse/{{ site.data.project.jira }}](https://issues.apache.org/jira/browse/{{ site.data.project.jira }})### Source CodeThe project sources are accessible via the [source code repository]({{ site.data.project.source_repository }}) which is also mirrored in [GitHub]({{ site.data.project.source_repository_mirror }}). When you are considering a code contribution, make sure there is an [Issue](https://issues.apache.org/jira/browse/{{ site.data.project.jira }}) that describes your work or the bug you are fixing.  For significant contributions, please discuss your proposed changes in the Issue so that others can comment on your plans.  Someone else may be working on the same functionality, so it's good to communicate early and often.  A committer is more likely to accept your change if there is clear information in the Issue. To contribute, [fork](https://help.github.com/articles/fork-a-repo/) the [mirror]({{ site.data.project.
 source_repository_mirror }}) and issue a pull request. Put the Jira issue number, e.g. {{ site.data.project.jira }}-100 in the pull request title. The tag [WIP] can also be used in the title of pull requests to indicate that you are not ready to merge but want feedback. Remove [WIP] when you are ready for merge. Make sure you document your code and contribute tests along with the code.Read [DEVELOPMENT.md] (https://github.com/apache/incubator-quarks/blob/master/DEVELOPMENT.md) at the top of the code tree for details on setting up your development environment. ### Web Site and Documentation  Source CodeThe project website and documentation sources are accessible via the [website source code repository]({{ site.data.project.website_repository }}) which is also mirrored in [GitHub]({{ site.data.project.website_repository_mirror }}). Contributing changes to the web site and documentation is similar to contributing code.  Follow the instructions in the Source Code section above, but fork
  and issue a pull request against the [web site mirror]({{ site.data.project.website_repository_mirror }}). Follow the instructions in the top level [README.md] ({{ site.data.project.website_repository_mirror }}/blob/master/README.md) for details on contributing to the web site and documentation.  You will need to use Markdown and Jekyll to develop pages. See:* [Markdown Cheat Sheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)*  [Jekyll on linux and Mac] (https://jekyllrb.com/) *  [Jekyll on Windows] (https://jekyllrb.com/docs/windows/) is not officially supported but people have gotten it to work."
+"body": "Every volunteer project obtains its strength from the people involved in it. We invite you to participate as much or as little as you choose.You can:* Use our project and provide a feedback.* Provide us with the use-cases.* Report bugs and submit patches.* Contribute code, javadocs, documentation.Visit the [Contributing](http://www.apache.org/foundation/getinvolved.html) page for general Apache contribution information. If you plan to make any significant contribution, you will need to have an Individual Contributor License Agreement [\\(ICLA\\)] (https://www.apache.org/licenses/icla.txt)  on file with Apache.### Mailing listGet help using {{ site.data.project.short_name }} or contribute to the project on our mailing lists:{% if site.data.project.user_list %}* [site.data.project.user_list](mailto:{{ site.data.project.user_list }}) is for usage questions, help, and announcements. [subscribe](mailto:{{ site.data.project.user_list_subscribe }}?subject=send this email to subscr
 ibe),     [unsubscribe](mailto:{{ site.data.project.dev_list_unsubscribe }}?subject=send this email to unsubscribe), [archives]({{ site.data.project.user_list_archive_mailarchive }}){% endif %}* [{{ site.data.project.dev_list }}](mailto:{{ site.data.project.dev_list }}) is for people who want to contribute code to {{ site.data.project.short_name }}. [subscribe](mailto:{{ site.data.project.dev_list_subscribe }}?subject=send this email to subscribe), [unsubscribe](mailto:{{ site.data.project.dev_list_unsubscribe }}?subject=send this email to unsubscribe), [Apache archives]({{ site.data.project.dev_list_archive }}), [mail-archive.com archives]({{ site.data.project.dev_list_archive_mailarchive }})* [{{ site.data.project.commits_list }}](mailto:{{ site.data.project.commits_list }}) is for commit messages and patches to {{ site.data.project.short_name }}. [subscribe](mailto:{{ site.data.project.commits_list_subscribe }}?subject=send this email to subscribe), [unsubscribe](mailto:{{ site.d
 ata.project.commits_list_unsubscribe }}?subject=send this email to unsubscribe), [Apache archives]({{ site.data.project.commits_list_archive }}), [mail-archive.com archives]({{ site.data.project.commits_list_archive_mailarchive }})### Issue trackerWe use Jira here: [https://issues.apache.org/jira/browse/{{ site.data.project.jira }}](https://issues.apache.org/jira/browse/{{ site.data.project.jira }})#### Bug ReportsFound bug? Enter an issue in  [Jira](https://issues.apache.org/jira/browse/{{ site.data.project.jira }}).Before submitting an issue, please:* Verify that the bug does in fact exist.* Search the issue tracker to verify there is no existing issue reporting the bug you've found.* Consider tracking down the bug yourself in the {{ site.data.project.short_name }} source and submitting a pull request  along with your bug report. This is a great time saver for the  {{ site.data.project.short_name }} developers and helps ensure the bug will be fixed quickly.#### Feature RequestsEnh
 ancement requests for new features are also welcome. The more concrete the request is and the better rationale you provide, the greater the chance it will incorporated into future releases.  [https://issues.apache.org/jira/browse/{{ site.data.project.jira }}](https://issues.apache.org/jira/browse/{{ site.data.project.jira }})### Source CodeThe project sources are accessible via the [source code repository]({{ site.data.project.source_repository }}) which is also mirrored in [GitHub]({{ site.data.project.source_repository_mirror }}). When you are considering a code contribution, make sure there is an [Issue](https://issues.apache.org/jira/browse/{{ site.data.project.jira }}) that describes your work or the bug you are fixing.  For significant contributions, please discuss your proposed changes in the Issue so that others can comment on your plans.  Someone else may be working on the same functionality, so it's good to communicate early and often.  A committer is more likely to accept
  your change if there is clear information in the Issue. To contribute, [fork](https://help.github.com/articles/fork-a-repo/) the [mirror]({{ site.data.project.source_repository_mirror }}) and issue a pull request. Put the Jira issue number, e.g. {{ site.data.project.jira }}-100 in the pull request title. The tag [WIP] can also be used in the title of pull requests to indicate that you are not ready to merge but want feedback. Remove [WIP] when you are ready for merge. Make sure you document your code and contribute tests along with the code.Read [DEVELOPMENT.md] (https://github.com/apache/incubator-quarks/blob/master/DEVELOPMENT.md) at the top of the code tree for details on setting up your development environment. ### Web Site and Documentation  Source CodeThe project website and documentation sources are accessible via the [website source code repository]({{ site.data.project.website_repository }}) which is also mirrored in [GitHub]({{ site.data.project.website_repository_mirror 
 }}). Contributing changes to the web site and documentation is similar to contributing code.  Follow the instructions in the Source Code section above, but fork and issue a pull request against the [web site mirror]({{ site.data.project.website_repository_mirror }}). Follow the instructions in the top level [README.md] ({{ site.data.project.website_repository_mirror }}/blob/master/README.md) for details on contributing to the web site and documentation.  You will need to use Markdown and Jekyll to develop pages. See:* [Markdown Cheat Sheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet)*  [Jekyll on linux and Mac] (https://jekyllrb.com/) *  [Jekyll on Windows] (https://jekyllrb.com/docs/windows/) is not officially supported but people have gotten it to work."
 
 },
 
@@ -78,7 +78,7 @@
 "keywords": "",
 "url": "../docs/home",
 "summary": "",
-"body": "## Quarks OverviewDevices and sensors are everywhere, and more are coming online every day. You need a way to analyze all of the data coming from your devices, but it can be expensive to transmit all of the data from a sensor to your central analytics engine.Quarks is an open source programming model and runtime for edge devices that enables you to analyze data and events at the device. When you analyze on the edge, you can:* Reduce the amount of data that you transmit to your analytics server* Reduce the amount of data that you storeA Quarks application uses analytics to determine when data needs to be sent to a back-end system for further analysis, action, or storage. For example, you can use Quarks to determine whether a system is running outside of normal parameters, such as an engine that is running too hot.If the system is running normally, you don’t need to send this data to your back-end system; it’s an added cost and an additional load on your system to process
  and store. However, if Quarks detects an issue, you can transmit that data to your back-end system to determine why the issue is occurring and how to resolve the issue.   Quarks enables you to shift from sending a continuous flow of trivial data to the server to sending only essential and meaningful data as it occurs. This is especially important when the cost of communication is high, such as when using a cellular network to transmit data, or when bandwidth is limited.The following use cases describe the primary situations in which you would use Quarks:* *Internet of Things (IoT):* Analyze data on distributed edge devices and mobile devices to:  * Reduce the cost of transmitting data  * Provide local feedback at the devices* *Embedded in an application server instance:* Analyze application server error logs in real time without impacting network traffic* *Server rooms and machine rooms:* Analyze machine health in real time without impacting network traffic or when bandwidth is lim
 ited### Deployment environmentsThe following environments have been tested for deployment on edge devices:* Java 8, including Raspberry Pi B and Pi2 B* Java 7* Android### Edge devices and back-end systemsYou can send data from a Quarks application to your back-end system when you need to perform analysis that cannot be performed on the edge device, such as:* Running a complex analytic algorithm that requires more resources, such as CPU or memory, than are available on the edge device.* Maintaining large amounts of state information about a device, such as several hours worth of state information for a patient’smedical device.* Correlating data from the device with data from other sources, such as:  * Weather data  * Social media data  * Data of record, such as a patient’s medical history or trucking manifests  * Data from other devicesQuarks communicates with your back-end systems through the following message hubs:* MQTT – The messaging standard for IoT* IBM Watson IoT Platfo
 rm – A cloud-based service that provides a device model on top of MQTT* Apache Kafka – An enterprise-level message bus* Custom message hubsYour back-end systems can also use analytics to interact with and control edge devices. For example:* A traffic alert system can send an alert to vehicles that are heading towards an area where an accident occurred* A vehicle monitoring system can reduce the maximum engine revs to reduce the chance of failure before the next scheduled service if it detects patterns that indicate a potential problem"
+"body": "## Apache Quarks OverviewDevices and sensors are everywhere, and more are coming online every day. You need a way to analyze all of the data coming from your devices, but it can be expensive to transmit all of the data from a sensor to your central analytics engine.Quarks is an open source programming model and runtime for edge devices that enables you to analyze data and events at the device. When you analyze on the edge, you can:* Reduce the amount of data that you transmit to your analytics server* Reduce the amount of data that you storeA Quarks application uses analytics to determine when data needs to be sent to a back-end system for further analysis, action, or storage. For example, you can use Quarks to determine whether a system is running outside of normal parameters, such as an engine that is running too hot.If the system is running normally, you don’t need to send this data to your back-end system; it’s an added cost and an additional load on your system to 
 process and store. However, if Quarks detects an issue, you can transmit that data to your back-end system to determine why the issue is occurring and how to resolve the issue.   Quarks enables you to shift from sending a continuous flow of trivial data to the server to sending only essential and meaningful data as it occurs. This is especially important when the cost of communication is high, such as when using a cellular network to transmit data, or when bandwidth is limited.The following use cases describe the primary situations in which you would use Quarks:* *Internet of Things (IoT):* Analyze data on distributed edge devices and mobile devices to:  * Reduce the cost of transmitting data  * Provide local feedback at the devices* *Embedded in an application server instance:* Analyze application server error logs in real time without impacting network traffic* *Server rooms and machine rooms:* Analyze machine health in real time without impacting network traffic or when bandwidth
  is limited### Deployment environmentsThe following environments have been tested for deployment on edge devices:* Java 8, including Raspberry Pi B and Pi2 B* Java 7* Android### Edge devices and back-end systemsYou can send data from an Apache Quarks application to your back-end system when you need to perform analysis that cannot be performed on the edge device, such as:* Running a complex analytic algorithm that requires more resources, such as CPU or memory, than are available on the edge device.* Maintaining large amounts of state information about a device, such as several hours worth of state information for a patient’smedical device.* Correlating data from the device with data from other sources, such as:  * Weather data  * Social media data  * Data of record, such as a patient’s medical history or trucking manifests  * Data from other devicesQuarks communicates with your back-end systems through the following message hubs:* MQTT – The messaging standard for IoT* IBM Wa
 tson IoT Platform – A cloud-based service that provides a device model on top of MQTT* Apache Kafka – An enterprise-level message bus* Custom message hubsYour back-end systems can also use analytics to interact with and control edge devices. For example:* A traffic alert system can send an alert to vehicles that are heading towards an area where an accident occurred* A vehicle monitoring system can reduce the maximum engine revs to reduce the chance of failure before the next scheduled service if it detects patterns that indicate a potential problem"
 
 },
 
@@ -133,7 +133,7 @@
 "keywords": "",
 "url": "../docs/quarks_index",
 "summary": "",
-"body": "## New DocumentationApache Quarks is evolving, and so is the documentation. If the existing documentation hasn't answered your questions, you can request new or updated documentation by opening an issue.Click on \"New Documentation\" to open an issue:   New Documentation## Providing FeedbackTo provide feedback on our documentation:1.  Navigate to the documentation page for which you are providing feedback.1.  Click on the **Feedback** button in the top right corner.This will open an issue for the page that you are currently visiting.  ## Contributing Documentation If you have ideas on how we can better document or explain some of the concepts, we would love to have your contribution!  The quarks.documentation site uses Github's flavor of Markdown and Jekyll markdown for our documentation.Refer to this documentation on Github's flavor of Markdown:  [Writing on Github](https://help.github.com/categories/writing-on-github)Refer to this documentation to get started:  [Using Jek
 yll with Pages](https://help.github.com/articles/using-jekyll-with-pages/)  To contribute, clone this project locally, make your changes, and create a [pull request](https://github.com/quarks-edge/quarks/pulls).To learn more, visit [Get Involved](getinvolved)"
+"body": "## New DocumentationApache Quarks is evolving, and so is the documentation. If the existing documentation hasn't answered your questions, you can request new or updated documentation by opening an issue.Click on \"New Documentation\" to open an issue:   New Documentation## Providing FeedbackTo provide feedback on our documentation:1.  Navigate to the documentation page for which you are providing feedback.1.  Click on the **Feedback** button in the top right corner.This will open an issue for the page that you are currently visiting.  ## Contributing Documentation If you have ideas on how we can better document or explain some of the concepts, we would love to have your contribution!  The quarks.documentation site uses GitHub's flavor of Markdown and Jekyll markdown for our documentation.Refer to this documentation on GitHub's flavor of Markdown:  [Writing on GitHub](https://help.github.com/categories/writing-on-github)Refer to this documentation to get started:  [Using Jek
 yll with Pages](https://help.github.com/articles/using-jekyll-with-pages/)  To contribute, clone this project locally, make your changes, and create a [pull request](https://github.com/quarks-edge/quarks/pulls).To learn more, visit [Get Involved](getinvolved)"
 
 },
 
@@ -154,7 +154,20 @@
 
 
 {
-"title": "Recipe 5. Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream",
+"title": "Recipe - Adaptable filter behavior.",
+"tags": "",
+"keywords": "",
+"url": "../recipes/recipe_adaptable_filter_range",
+"summary": "",
+"body": "The [Detecting a Sensor Value Out of Range](recipe_value_out_of_range.html) recipe introduced the basics of filtering as well as the use of a [Range](http://quarks-edge.github.io/quarks/docs/javadoc/quarks/analytics/sensors/Range.html).Oftentimes, a user wants a filter's behavior to be adaptable rather than static.  A filter's range can be made changeable via commands from some external source or just changed as a result of some other local analytics.A Quarks IotProvider and IoTDevice with its command streams would be a natural way to control the application.  In this recipe we will just simulate a \"set optimal temp range\" command stream.The string form of a ``Range`` is natural, consise, and easy to use.  As such it's a convenient form to use as external range format. The range string can easily be converted back into a ``Range``.We're going to assume familiarity with that earlier recipe and those concepts and focus on just the \"adaptable range specification\" aspect of
  this recipe.## Define the rangeA ``java.util.concurrent.atomic.AtomicReference`` is used to provide the necessary thread synchronization.```java    static Range DEFAULT_TEMP_RANGE = Ranges.valueOfDouble(\"[77.0..91.0]\");    static AtomicReference> optimalTempRangeRef =            new AtomicReference(DEFAULT_TEMP_RANGE);```## Define a method to change the range```java    static void setOptimalTempRange(Range range) {        System.out.println(\"Using optimal temperature range: \" + range);        optimalTempRangeRef.set(range);    }```The filter just uses ``optimalTempRangeRef.get()`` to use the current range setting.## Simulate a setOptimalTempRange command streamCreate a ``TStream> setRangeCmds`` stream where a new range specification tuple is created every 10 seconds.  A ``sink`` on the stream calls ``setOptimalTempRange()`` to change the range and hence the filter's bahavior.```java    // Simulate a command stream to change the optimal range.    // Such a stream might be from a
 n IotDevice command.    String[] ranges = new String[] {        \"[70.0..120.0]\", \"[80.0..130.0]\", \"[90.0..140.0]\",    };    AtomicInteger count = new AtomicInteger(0);    TStream> setRangeCmds = top.poll(()             -> Ranges.valueOfDouble(ranges[count.incrementAndGet() % ranges.length]),            10, TimeUnit.SECONDS);    setRangeCmds.sink(tuple -> setOptimalTempRange(tuple));```## The final application```javaimport java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import quarks.analytics.sensors.Range;import quarks.analytics.sensors.Ranges;import quarks.providers.direct.DirectProvider;import quarks.samples.utils.sensor.SimulatedTemperatureSensor;import quarks.topology.TStream;import quarks.topology.Topology;/** * Detect a sensor value out of expected range. * Simulate an adaptable range changed by external commands. */public class AdaptableFilterRange {    /**     * Optimal temperatures (in 
 Fahrenheit)     */    static Range DEFAULT_TEMP_RANGE = Ranges.valueOfDouble(\"[77.0..91.0]\");    static AtomicReference> optimalTempRangeRef =            new AtomicReference(DEFAULT_TEMP_RANGE);        static void setOptimalTempRange(Range range) {        System.out.println(\"Using optimal temperature range: \" + range);        optimalTempRangeRef.set(range);    }                                                                                                                                               /**     * Polls a simulated temperature sensor to periodically obtain     * temperature readings (in Fahrenheit). Use a simple filter     * to determine when the temperature is out of the optimal range.     */    public static void main(String[] args) throws Exception {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology(\"TemperatureSensor\");        // Generate a stream of temperature sensor readings        SimulatedTemperatureSensor tempSensor =
  new SimulatedTemperatureSensor();        TStream temp = top.poll(tempSensor, 1, TimeUnit.SECONDS);        // Simple filter: Perform analytics on sensor readings to detect when        // the temperature is out of the optimal range and generate warnings        TStream simpleFiltered = temp.filter(tuple ->                !optimalTempRangeRef.get().contains(tuple));        simpleFiltered.sink(tuple -> System.out.println(\"Temperature is out of range! \"                + \"It is \" + tuple + \"\\u00b0F!\"));        // See what the temperatures look like        temp.print();        // Simulate a command stream to change the optimal range.        // Such a stream might be from an IotDevice command.        String[] ranges = new String[] {            \"[70.0..120.0]\", \"[80.0..130.0]\", \"[90.0..140.0]\",        };        AtomicInteger count = new AtomicInteger(0);        TStream> setRangeCmds = top.poll(                () -> Ranges.valueOfDouble(ranges[count.incrementAndGet() % ranges.len
 gth]),                10, TimeUnit.SECONDS);        setRangeCmds.sink(tuple -> setOptimalTempRange(tuple));        dp.submit(top);    }}```"
+
+},
+
+
+
+
+{
+"title": "Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream",
 "tags": "",
 "keywords": "",
 "url": "../recipes/recipe_combining_streams_processing_results",
@@ -167,7 +180,7 @@
 
 
 {
-"title": "Recipe 4. Applying Different Processing Against a Single Stream",
+"title": "Applying Different Processing Against a Single Stream",
 "tags": "",
 "keywords": "",
 "url": "../recipes/recipe_different_processing_against_stream",
@@ -180,12 +193,25 @@
 
 
 {
-"title": "Recipe 1. Hello Quarks!",
+"title": "Recipe - Use an external configuration file for a filter range specification.",
+"tags": "",
+"keywords": "",
+"url": "../recipes/recipe_external_filter_range",
+"summary": "",
+"body": "The [Detecting a Sensor Value Out of Range](recipe_value_out_of_range.html) recipe introduced the basics of filtering as well as the use of a [Range](http://quarks-edge.github.io/quarks/docs/javadoc/quarks/analytics/sensors/Range.html).Oftentimes, a user wants to initialize a range specification from an external configuration file so the application code is more easily configured and reusable.The string form of a ``Range`` is natural, consise, and easy to use.  As such it's a convenient form to use in configuration files or for users to enter.  The range string can easily be converted back into a ``Range``.We're going to assume familiarity with that earlier recipe and those concepts and focus on just the \"external range specification\" aspect of this recipe.## Create a configuration fileThe file's syntax is that for a java.util.Properties object.See the Range documentation for the Range string syntax.Put this into a file:```java# the Range string for the temperature sensor
  optimal rangeoptimalTempRange=[77.0..91.0]```Supply the pathname to this file as an argument to the application when you run it.## Loading the Configuration fileA ``java.util.Properties`` object is often used for configuration parametersand it is easy to load the properties from a file.```java    // Load the configuration file with the path string in configFilePath    Properties props = new Properties();    props.load(Files.newBufferedReader(new File(configFilePath).toPath()));```## Initializing the Range```java    // initialize the range from a Range string in the properties.    // Use a default value if a range isn't present.    static String DEFAULT_TEMP_RANGE_STR = \"[60.0..100.0]\";                                                                                    static Range optimalTempRange = Ranges.valueOfDouble(        props.getProperty(\"optimalTempRange\", defaultRange));```## The final application```javaimport java.io.File;import java.nio.file.Files;import java.util.Pr
 operties;import java.util.concurrent.TimeUnit;import quarks.analytics.sensors.Range;import quarks.analytics.sensors.Ranges;import quarks.providers.direct.DirectProvider;import quarks.samples.utils.sensor.SimulatedTemperatureSensor;import quarks.topology.TStream;import quarks.topology.Topology;                                                                                                                                                                                                                                                   /** * Detect a sensor value out of expected range. * Get the range specification from a configuration file. */                                                                                                                                        public class ExternalFilterRange {    /**     * Optimal temperatures (in Fahrenheit)     */    static String DEFAULT_TEMP_RANGE_STR = \"[60.0..100.0]\";    static Range optimalTempRange;    /** Initialize the appli
 cation's configuration */    static void initializeConfiguration(String configFilePath) throws Exception {        // Load the configuration file        Properties props = new Properties();        props.load(Files.newBufferedReader(new File(configFilePath).toPath()));        // initialize the range from a Range string in the properties.        // Use a default value if a range isn't present in the properties.        optimalTempRange = Ranges.valueOfDouble(                props.getProperty(\"optimalTempRange\", DEFAULT_TEMP_RANGE_STR));        System.out.println(\"Using optimal temperature range: \" + optimalTempRange);    }    /**     * Polls a simulated temperature sensor to periodically obtain     * temperature readings (in Fahrenheit). Use a simple filter     * to determine when the temperature is out of the optimal range.     */    public static void main(String[] args) throws Exception {        if (args.length != 1)            throw new Exception(\"missing pathname to configurat
 ion file\");        String configFilePath = args[0];        DirectProvider dp = new DirectProvider();                                                                                                  Topology top = dp.newTopology(\"TemperatureSensor\");        // Initialize the configuration        initializeConfiguration(configFilePath);                                                                                                   // Generate a stream of temperature sensor readings        SimulatedTemperatureSensor tempSensor = new SimulatedTemperatureSensor();        TStream temp = top.poll(tempSensor, 1, TimeUnit.SECONDS);        // Simple filter: Perform analytics on sensor readings to detect when        // the temperature is out of the optimal range and generate warnings        TStream simpleFiltered = temp.filter(tuple ->                !optimalTempRange.contains(tuple));        simpleFiltered.sink(tuple -> System.out.println(\"Temperature is out of range! \"                
 + \"It is \" + tuple + \"\\u00b0F!\"));        // See what the temperatures look like        temp.print();        dp.submit(top);    }}```"
+
+},
+
+
+
+
+{
+"title": "Hello Quarks!",
 "tags": "",
 "keywords": "",
 "url": "../recipes/recipe_hello_quarks",
 "summary": "",
-"body": "Quarks' pure Java implementation is a powerful feature which allows it to be run on the majority of JVM-compatible systems. It also has the added benefit of enabling the developer to develop applications entirely within the Eclipse and Intellij ecosystems. For the purposes of this recipe, it will be assumed that the developer is using Eclipse. To begin the Hello World recipe, create a new project and import the necessary libraries as outlined in the [Getting Started Guide](../docs/quarks-getting-started). Next, write the following template application:``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();    }```The *DirectProvider* is an object which allows the user to submit and run the final application. It also creates the *Topology* object, which gives the developer the ability to define a stream of strings.## Using Topology.stringsThe primary abstraction in Quarks is the `TStream`. 
 A *TStream* represents the flow of data in a Quarks application; for example, the periodic floating point readings from a temperature sensor. The data items which are sent through a `TStream` are Java objects -- in the \"Hello Quarks!\" example, we are sending a single java.lang.String. There are a number of ways to create a `TStream`, and `Topology.strings` is the simplest. The user specifies a number of strings which will be used as the stream's data items.``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();        TStream helloStream = top.strings(\"Hello Quarks!\");    }```The `helloStream` stream is created, and the \"Hello Quarks!\" string will be sent as its single data item.## Printing to Output`TStream.print` can be used to print the data items of a stream to standard output by invoking the `toString` method of each data item. In this case the data items are already strings, but in prin
 ciple `TStream.print` can be called on any stream, regardless of the datatype carried by the stream.``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();        TStream helloStream = top.strings(\"Hello Quarks!\");        helloStream.print();    }```## Submitting the ApplicationThe only remaining step is to submit the application, which is performed by the `DirectProvider`. Submitting a Quarks application initializes the threads which execute the `Topology`, and begins processing its data sources.``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();        TStream helloStream = top.strings(\"Hello Quarks!\");        helloStream.print();        dp.submit(top);    }```After running the application, the output is \"Hello Quarks!\":```Hello Quarks!```"
+"body": "Quarks' pure Java implementation is a powerful feature which allows it to be run on the majority of JVM-compatible systems. It also has the added benefit of enabling the developer to develop applications entirely within the Eclipse and Intellij ecosystems. For the purposes of this recipe, it will be assumed that the developer is using Eclipse. To begin the Hello World recipe, create a new project and import the necessary libraries as outlined in the [Getting Started Guide](../docs/quarks-getting-started). Next, write the following template application:``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();    }```The *DirectProvider* is an object which allows the user to submit and run the final application. It also creates the *Topology* object, which gives the developer the ability to define a stream of strings.## Using Topology.stringsThe primary abstraction in Quarks is the `TStream`. 
 A *TStream* represents the flow of data in a Quarks application; for example, the periodic floating point readings from a temperature sensor. The data items which are sent through a `TStream` are Java objects -- in the \"Hello Quarks!\" example, we are sending two strings. There are a number of ways to create a `TStream`, and `Topology.strings` is the simplest. The user specifies a number of strings which will be used as the stream's data items.``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();        TStream helloStream = top.strings(\"Hello\", \"Quarks!\");    }```The `helloStream` stream is created, and the \"Hello\" and \"Quarks!\" strings will be sent as its two data items.## Printing to Output`TStream.print` can be used to print the data items of a stream to standard output by invoking the `toString` method of each data item. In this case the data items are already strings, but in princi
 ple `TStream.print` can be called on any stream, regardless of the datatype carried by the stream.``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();        TStream helloStream = top.strings(\"Hello\", \"Quarks!\");        helloStream.print();    }```## Submitting the ApplicationThe only remaining step is to submit the application, which is performed by the `DirectProvider`. Submitting a Quarks application initializes the threads which execute the `Topology`, and begins processing its data sources.``` java    public static void main(String[] args) {        DirectProvider dp = new DirectProvider();        Topology top = dp.newTopology();        TStream helloStream = top.strings(\"Hello\", \"Quarks!\");        helloStream.print();        dp.submit(top);    }```After running the application, the output is \"Hello Quarks!\":```HelloQuarks!```"
 
 },
 
@@ -193,7 +219,7 @@
 
 
 {
-"title": "Recipe 2. Writing a Source Function",
+"title": "Writing a Source Function",
 "tags": "",
 "keywords": "",
 "url": "../recipes/recipe_source_function",
@@ -206,12 +232,12 @@
 
 
 {
-"title": "Recipe 3. Detecting a Sensor Value Out of Expected Range",
+"title": "Detecting a Sensor Value Out of Expected Range",
 "tags": "",
 "keywords": "",
 "url": "../recipes/recipe_value_out_of_range",
 "summary": "",
-"body": "Oftentimes, a user expects a sensor value to fall within a particular range. If a reading is outside the accepted limits, the user may want to determine what caused the anomaly and/or take action to reduce the impact. For instance, consider the following scenario.Suppose a corn grower in the Midwestern United States would like to monitor the average temperature in his corn field using a sensor to improve his crop yield. The optimal temperatures for corn growth during daylight hours range between 77°F and 91°F. When the grower is alerted of a temperature value that is not in the optimal range, he may want to assess what can be done to mitigate the effect.In this instance, we can use a filter to detect out-of-range temperature values.## Setting up the applicationWe assume that the environment has been set up following the steps outlined in the [Getting Started Guide](../docs/quarks-getting-started). Let's begin by creating a `DirectProvider` and `Topology`. We also define t
 he optimal temperature range and the initial temperature.```java    import static quarks.function.Functions.identity;    import java.text.DecimalFormat;    import java.util.Random;    import java.util.concurrent.TimeUnit;    import quarks.analytics.sensors.Filters;    import quarks.providers.direct.DirectProvider;    import quarks.topology.TStream;    import quarks.topology.Topology;    public class DetectValueOutOfRange {        /**         * Optimal temperatures (in Fahrenheit)         */        static double TEMP_LOW = 77.0;        static double TEMP_HIGH = 91.0;        static double currentTemp = 80.0;        public static void main(String[] args) throws Exception {            DirectProvider dp = new DirectProvider();            Topology top = dp.newTopology(\"TemperatureSensor\");            // The rest of the code pieces belong here        }    }```## Generating temperature sensor readingsThe next step is to simulate a stream of temperature readings. In our `main()`, we use th
 e `poll()` method to generate a flow of tuples, where a new tuple (temperature reading) arrives every second. We ensure that the generated reading is between 28°F and 112°F.```java    // Generate a stream of temperature sensor readings    DecimalFormat df = new DecimalFormat(\"#.#\");    Random r = new Random();    TStream temp = top.poll(() -> {        // Change current temp by some random amount between -1 and 1        while (true) {            double newTemp = -1 + (1 + 1) * r.nextDouble() + currentTemp;            // Ensure that new temperature is within [28, 112]            if (newTemp >= 28 && newTemp  simpleFiltered = temp.filter(tuple ->            tuple  TEMP_HIGH);    simpleFiltered.sink(tuple -> System.out.println(\"Temperature is out of range! \"            + \"It is \" + tuple + \"\\u00b0F!\"));```## Deadband filterAlternatively, a deadband filter can be used to glean more information about temperature changes, such as extracting the in-range temperature immediately a
 fter a reported out-of-range temperature. For example, large temperature fluctuations could be investigated more thoroughly. The `deadband` filter is a part of the `quarks.analytics` package focused on handling sensor data. Let's look more closely at the method declaration below.```java    deadband(TStream stream, Function value, Predicate inBand)```The first parameter is the stream to the filtered, which is `temp` in our scenario. The second parameter is the value to examine. Here, we use the `identity()` method to return a tuple on the stream. The last parameter is the predicate that defines the optimal range, that is, between 77°F and 91°F. it is important to note that this differs from the `TStream` version of `filter` in which one must explicitly specify the values that are out of range. The code snippet below demonstrates how the method call is pieced together. The `deadbandFiltered` stream contains temperature readings that follow the rules as described in the [Javadoc](htt
 p://quarks-edge.github.io/quarks/docs/javadoc/quarks/analytics/sensors/Filters.html#deadband-quarks.topology.TStream-quarks.function.Function-quarks.function.Predicate-):- the value is outside of the optimal range (deadband)- the first value inside the optimal range after a period being outside it- the first tupleAs with the simple filter, the stream is terminated by printing out the warnings.```java    TStream deadbandFiltered = Filters.deadband(temp,            identity(), tuple -> tuple >= TEMP_LOW && tuple  System.out.println(\"Temperature may not be \"            + \"optimal! It is \" + tuple + \"\\u00b0F!\"));```We end our application by submitting the `Topology`.## Observing the outputTo see what the temperatures look like, we can print the stream to standard out.```java    temp.print();```When the final application is run, the output looks something like the following:```    Temperature may not be optimal! It is 79.1°F!    79.1    79.4    79.0    78.8    78.0    78.3    77.
 4    Temperature is out of range! It is 76.5°F!    Temperature may not be optimal! It is 76.5°F!    76.5    Temperature may not be optimal! It is 77.5°F!    77.5    77.1    ...```Note that the deadband filter outputs a warning message for the very first temperature reading of 79.1°F. When the temperature falls to 76.5°F (which is outside the optimal range), both the simple filter and deadband filter print out a warning message. However, when the temperature returns to normal at 77.5°F, only the deadband filter prints out a message as it is the first value inside the optimal range after a period of being outside it.## The final application```java    import static quarks.function.Functions.identity;    import java.text.DecimalFormat;    import java.util.Random;    import java.util.concurrent.TimeUnit;    import quarks.analytics.sensors.Filters;    import quarks.providers.direct.DirectProvider;    import quarks.topology.TStream;    import quarks.topology.Topology;    /**     * De
 tect a sensor value out of expected range.     */    public class DetectValueOutOfRange {        /**         * Optimal temperatures (in Fahrenheit)         */        static double TEMP_LOW = 77.0;        static double TEMP_HIGH = 91.0;        static double currentTemp = 80.0;        /**         * Polls a simulated temperature sensor to periodically obtain         * temperature readings (in Fahrenheit). Use a simple filter         * and a deadband filter to determine when the temperature         * is out of the optimal range.         */        public static void main(String[] args) throws Exception {            DirectProvider dp = new DirectProvider();            Topology top = dp.newTopology(\"TemperatureSensor\");            // Generate a stream of temperature sensor readings            DecimalFormat df = new DecimalFormat(\"#.#\");            Random r = new Random();            TStream temp = top.poll(() -> {                // Change current temp by some random amount between -1 a
 nd 1                while (true) {                    double newTemp = -1 + (1 + 1) * r.nextDouble() + currentTemp;                    // Ensure that new temperature is within [28, 112]                    if (newTemp >= 28 && newTemp  simpleFiltered = temp.filter(tuple ->                    tuple  TEMP_HIGH);            simpleFiltered.sink(tuple -> System.out.println(\"Temperature is out of range! \"                    + \"It is \" + tuple + \"\\u00b0F!\"));            // Deadband filter: Perform analytics on sensor readings to            // output the first temperature, and to generate warnings            // when the temperature is out of the optimal range and            // when it returns to normal            TStream deadbandFiltered = Filters.deadband(temp,                    identity(), tuple -> tuple >= TEMP_LOW && tuple  System.out.println(\"Temperature may not be \"                    + \"optimal! It is \" + tuple + \"\\u00b0F!\"));            // See what the temperatures loo
 k like            temp.print();            dp.submit(top);        }    }```"
+"body": "Oftentimes, a user expects a sensor value to fall within a particular range. If a reading is outside the accepted limits, the user may want to determine what caused the anomaly and/or take action to reduce the impact. For instance, consider the following scenario.Suppose a corn grower in the Midwestern United States would like to monitor the average temperature in his corn field using a sensor to improve his crop yield. The optimal temperatures for corn growth during daylight hours range between 77°F and 91°F. When the grower is alerted of a temperature value that is not in the optimal range, he may want to assess what can be done to mitigate the effect.In this instance, we can use a filter to detect out-of-range temperature values.## Setting up the applicationWe assume that the environment has been set up following the steps outlined in the [Getting Started Guide](../docs/quarks-getting-started). Let's begin by creating a `DirectProvider` and `Topology`. We also define t
 he optimal temperature range and the initial temperature.```java    import static quarks.function.Functions.identity;    import java.text.DecimalFormat;    import java.util.Random;    import java.util.concurrent.TimeUnit;    import quarks.analytics.sensors.Filters;    import quarks.providers.direct.DirectProvider;    import quarks.topology.TStream;    import quarks.topology.Topology;    public class DetectValueOutOfRange {        /**         * Optimal temperatures (in Fahrenheit)         */        static double TEMP_LOW = 77.0;        static double TEMP_HIGH = 91.0;        static double currentTemp = 80.0;        public static void main(String[] args) throws Exception {            DirectProvider dp = new DirectProvider();            Topology top = dp.newTopology(\"TemperatureSensor\");            // The rest of the code pieces belong here        }    }```## Generating temperature sensor readingsThe next step is to simulate a stream of temperature readings. In our `main()`, we use th
 e `poll()` method to generate a flow of tuples, where a new tuple (temperature reading) arrives every second. We ensure that the generated reading is between 28°F and 112°F.```java    // Generate a stream of temperature sensor readings    DecimalFormat df = new DecimalFormat(\"#.#\");    Random r = new Random();    TStream temp = top.poll(() -> {        // Change current temp by some random amount between -1 and 1        while (true) {            double newTemp = -1 + (1 + 1) * r.nextDouble() + currentTemp;            // Ensure that new temperature is within [28, 112]            if (newTemp >= 28 && newTemp  simpleFiltered = temp.filter(tuple ->            tuple  TEMP_HIGH);    simpleFiltered.sink(tuple -> System.out.println(\"Temperature is out of range! \"            + \"It is \" + tuple + \"\\u00b0F!\"));```## Deadband filterAlternatively, a deadband filter can be used to glean more information about temperature changes, such as extracting the in-range temperature immediately a
 fter a reported out-of-range temperature. For example, large temperature fluctuations could be investigated more thoroughly. The `deadband` filter is a part of the `quarks.analytics` package focused on handling sensor data. Let's look more closely at the method declaration below.```java    deadband(TStream stream, Function value, Predicate inBand)```The first parameter is the stream to the filtered, which is `temp` in our scenario. The second parameter is the value to examine. Here, we use the `identity()` method to return a tuple on the stream. The last parameter is the predicate that defines the optimal range, that is, between 77°F and 91°F. it is important to note that this differs from the `TStream` version of `filter` in which one must explicitly specify the values that are out of range. The code snippet below demonstrates how the method call is pieced together. The `deadbandFiltered` stream contains temperature readings that follow the rules as described in the [Javadoc](htt
 p://quarks-edge.github.io/quarks/docs/javadoc/quarks/analytics/sensors/Filters.html#deadband-quarks.topology.TStream-quarks.function.Function-quarks.function.Predicate-):- the value is outside of the optimal range (deadband)- the first value inside the optimal range after a period being outside it- the first tupleAs with the simple filter, the stream is terminated by printing out the warnings.```java    TStream deadbandFiltered = Filters.deadband(temp,            identity(), tuple -> tuple >= TEMP_LOW && tuple  System.out.println(\"Temperature may not be \"            + \"optimal! It is \" + tuple + \"\\u00b0F!\"));```We end our application by submitting the `Topology`.## Observing the outputTo see what the temperatures look like, we can print the stream to standard out.```java    temp.print();```When the final application is run, the output looks something like the following:```    Temperature may not be optimal! It is 79.1°F!    79.1    79.4    79.0    78.8    78.0    78.3    77.
 4    Temperature is out of range! It is 76.5°F!    Temperature may not be optimal! It is 76.5°F!    76.5    Temperature may not be optimal! It is 77.5°F!    77.5    77.1    ...```Note that the deadband filter outputs a warning message for the very first temperature reading of 79.1°F. When the temperature falls to 76.5°F (which is outside the optimal range), both the simple filter and deadband filter print out a warning message. However, when the temperature returns to normal at 77.5°F, only the deadband filter prints out a message as it is the first value inside the optimal range after a period of being outside it.## Range valuesFiltering against a range of values is such a common analytic activity that the ``quarks.analytics.sensors.Range`` class is provided to assist with that.Using a Range can simplify and clarify your application code and lessen mistakes that may occur when writing expressions to deal with ranges.Though not covered in this recipe, Ranges offer additional c
 onveniences for creating applications with external range specifications and adaptable filters.In the above examples, a single Range can be used in place of the two different expressions for the same logical range:```java    static double TEMP_LOW = 77.0;    static double TEMP_HIGH = 91.0;    static Range optimalTempRange = Ranges.closed(TEMP_LOW, TEMP_HIGH);```Using ``optimalTempRange`` in the Simple filter example code:```java    TStream simpleFiltered = temp.filter(tuple ->             !optimalTempRange.contains(tuple));```Using ``optimalTempRange`` in the Deadband filter example code:```java    TStream deadbandFiltered = Filters.deadband(temp,            identity(), optimalTempRange);```## The final application```java    import static quarks.function.Functions.identity;    import java.text.DecimalFormat;    import java.util.Random;    import java.util.concurrent.TimeUnit;    import quarks.analytics.sensors.Filters;    import quarks.analytics.sensors.Range;    import quarks.analy
 tics.sensors.Ranges;    import quarks.providers.direct.DirectProvider;    import quarks.topology.TStream;    import quarks.topology.Topology;    /**     * Detect a sensor value out of expected range.     */    public class DetectValueOutOfRange {        /**         * Optimal temperatures inclusive (in Fahrenheit)         */        static double TEMP_LOW = 77.0;        static double TEMP_HIGH = 91.0;        static Range optimalTempRange = Ranges.closed(TEMP_LOW, TEMP_HIGH);        static double currentTemp = 80.0;        /**         * Polls a simulated temperature sensor to periodically obtain         * temperature readings (in Fahrenheit). Use a simple filter         * and a deadband filter to determine when the temperature         * is out of the optimal range.         */        public static void main(String[] args) throws Exception {            DirectProvider dp = new DirectProvider();            Topology top = dp.newTopology(\"TemperatureSensor\");            // Generate a strea
 m of temperature sensor readings            DecimalFormat df = new DecimalFormat(\"#.#\");            Random r = new Random();            TStream temp = top.poll(() -> {                // Change current temp by some random amount between -1 and 1                while (true) {                    double newTemp = -1 + (1 + 1) * r.nextDouble() + currentTemp;                    // Ensure that new temperature is within [28, 112]                    if (newTemp >= 28 && newTemp  simpleFiltered = temp.filter(tuple ->                    !optimalTempRange.contains(tuple));            simpleFiltered.sink(tuple -> System.out.println(\"Temperature is out of range! \"                    + \"It is \" + tuple + \"\\u00b0F!\"));            // Deadband filter: Perform analytics on sensor readings to            // output the first temperature, and to generate warnings            // when the temperature is out of the optimal range and            // when it returns to normal            TStream deadbandF
 iltered = Filters.deadband(temp,                    identity(), optimalTempRange);            deadbandFiltered.sink(tuple -> System.out.println(\"Temperature may not be \"                    + \"optimal! It is \" + tuple + \"\\u00b0F!\"));            // See what the temperatures look like            temp.print();            dp.submit(top);        }    }```"
 
 },
 

http://git-wip-us.apache.org/repos/asf/incubator-quarks-website/blob/b12a0d13/content/docs/committers.html
----------------------------------------------------------------------
diff --git a/content/docs/committers.html b/content/docs/committers.html
index f3cfa5b..d97a0dd 100644
--- a/content/docs/committers.html
+++ b/content/docs/committers.html
@@ -6,7 +6,7 @@
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta name="description" content="">
 <meta name="keywords" content=" ">
-<title>Committers  | Quarks Documentation</title>
+<title>Committers  | Apache Quarks Documentation</title>
 <link rel="stylesheet" type="text/css" href="../css/syntax.css">
 <link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css">
 <!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">-->
@@ -60,7 +60,7 @@
                 <span class="icon-bar"></span>
             </button>
 
-            <a class="fa fa-home fa-lg navbar-brand" href="home.html">&nbsp;<span class="projectTitle"> Quarks Documentation</span></a>
+            <a class="fa fa-home fa-lg navbar-brand" href="../docs/home.html">&nbsp;<span class="projectTitle"> Apache Quarks Documentation</span></a>
 
         </div>
         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
@@ -80,7 +80,7 @@
                     
                     
                     
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Github Repos<b class="caret"></b></a>
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">GitHub Repos<b class="caret"></b></a>
                     <ul class="dropdown-menu">
                         
                         
@@ -156,7 +156,7 @@
                 <!-- Send feedback function -->
 <script>
 function SendLinkByMail(href) {
-var subject= "Quarks Documentation feedback";
+var subject= "Apache Quarks Documentation feedback";
 var body = "I have some feedback about the Committers page: ";
 body += window.location.href;
 body += "";
@@ -199,6 +199,7 @@ window.location.href = uri;
 </nav>
 
 
+
     <!-- Page Content -->
     <div class="container">
         <div class="col-lg-12">&nbsp;</div>
@@ -319,7 +320,25 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_hello_quarks.html">Recipe 1. Hello Quarks!</a></li>
+                    <li><a href="../recipes/recipe_hello_quarks.html">Hello Quarks!</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_source_function.html">Writing a Source Function</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_value_out_of_range.html">Detecting a Sensor Value Out of Expected Range</a></li>
                     
 
                     
@@ -328,7 +347,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_source_function.html">Recipe 2. Writing a Source Function</a></li>
+                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Applying Different Processing Against a Single Stream</a></li>
                     
 
                     
@@ -337,7 +356,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_value_out_of_range.html">Recipe 3. Detecting a Sensor Value Out of Expected Range</a></li>
+                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
                     
 
                     
@@ -346,7 +365,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Recipe 4. Applying Different Processing Against a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_external_filter_range.html">Using an External Configuration File for Filter Ranges</a></li>
                     
 
                     
@@ -355,7 +374,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Recipe 5. Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_adaptable_filter_range.html">Adaptable Filter Behavior</a></li>
                     
 
                     
@@ -559,7 +578,7 @@ $('#toc').on('click', 'a', function() {
         <div class="col-lg-12 footer">
 
              Site last
-            generated: Mar 29, 2016 <br/>
+            generated: Apr 5, 2016 <br/>
 
         </div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-quarks-website/blob/b12a0d13/content/docs/common-quarks-operations.html
----------------------------------------------------------------------
diff --git a/content/docs/common-quarks-operations.html b/content/docs/common-quarks-operations.html
index 63eea4d..f64a0ab 100644
--- a/content/docs/common-quarks-operations.html
+++ b/content/docs/common-quarks-operations.html
@@ -6,7 +6,7 @@
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta name="description" content="">
 <meta name="keywords" content=" ">
-<title>Common Quarks Operations  | Quarks Documentation</title>
+<title>Common Quarks Operations  | Apache Quarks Documentation</title>
 <link rel="stylesheet" type="text/css" href="../css/syntax.css">
 <link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css">
 <!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">-->
@@ -60,7 +60,7 @@
                 <span class="icon-bar"></span>
             </button>
 
-            <a class="fa fa-home fa-lg navbar-brand" href="home.html">&nbsp;<span class="projectTitle"> Quarks Documentation</span></a>
+            <a class="fa fa-home fa-lg navbar-brand" href="../docs/home.html">&nbsp;<span class="projectTitle"> Apache Quarks Documentation</span></a>
 
         </div>
         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
@@ -80,7 +80,7 @@
                     
                     
                     
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Github Repos<b class="caret"></b></a>
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">GitHub Repos<b class="caret"></b></a>
                     <ul class="dropdown-menu">
                         
                         
@@ -156,7 +156,7 @@
                 <!-- Send feedback function -->
 <script>
 function SendLinkByMail(href) {
-var subject= "Quarks Documentation feedback";
+var subject= "Apache Quarks Documentation feedback";
 var body = "I have some feedback about the Common Quarks Operations page: ";
 body += window.location.href;
 body += "";
@@ -199,6 +199,7 @@ window.location.href = uri;
 </nav>
 
 
+
     <!-- Page Content -->
     <div class="container">
         <div class="col-lg-12">&nbsp;</div>
@@ -319,7 +320,25 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_hello_quarks.html">Recipe 1. Hello Quarks!</a></li>
+                    <li><a href="../recipes/recipe_hello_quarks.html">Hello Quarks!</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_source_function.html">Writing a Source Function</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_value_out_of_range.html">Detecting a Sensor Value Out of Expected Range</a></li>
                     
 
                     
@@ -328,7 +347,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_source_function.html">Recipe 2. Writing a Source Function</a></li>
+                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Applying Different Processing Against a Single Stream</a></li>
                     
 
                     
@@ -337,7 +356,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_value_out_of_range.html">Recipe 3. Detecting a Sensor Value Out of Expected Range</a></li>
+                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
                     
 
                     
@@ -346,7 +365,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Recipe 4. Applying Different Processing Against a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_external_filter_range.html">Using an External Configuration File for Filter Ranges</a></li>
                     
 
                     
@@ -355,7 +374,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Recipe 5. Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_adaptable_filter_range.html">Adaptable Filter Behavior</a></li>
                     
 
                     
@@ -600,7 +619,7 @@ $('#toc').on('click', 'a', function() {
         <div class="col-lg-12 footer">
 
              Site last
-            generated: Mar 29, 2016 <br/>
+            generated: Apr 5, 2016 <br/>
 
         </div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-quarks-website/blob/b12a0d13/content/docs/community.html
----------------------------------------------------------------------
diff --git a/content/docs/community.html b/content/docs/community.html
index 6cd8ec7..a70934b 100644
--- a/content/docs/community.html
+++ b/content/docs/community.html
@@ -6,7 +6,7 @@
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta name="description" content="">
 <meta name="keywords" content=" ">
-<title>Apache Quarks Community  | Quarks Documentation</title>
+<title>Apache Quarks Community  | Apache Quarks Documentation</title>
 <link rel="stylesheet" type="text/css" href="../css/syntax.css">
 <link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css">
 <!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">-->
@@ -60,7 +60,7 @@
                 <span class="icon-bar"></span>
             </button>
 
-            <a class="fa fa-home fa-lg navbar-brand" href="home.html">&nbsp;<span class="projectTitle"> Quarks Documentation</span></a>
+            <a class="fa fa-home fa-lg navbar-brand" href="../docs/home.html">&nbsp;<span class="projectTitle"> Apache Quarks Documentation</span></a>
 
         </div>
         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
@@ -80,7 +80,7 @@
                     
                     
                     
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Github Repos<b class="caret"></b></a>
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">GitHub Repos<b class="caret"></b></a>
                     <ul class="dropdown-menu">
                         
                         
@@ -156,7 +156,7 @@
                 <!-- Send feedback function -->
 <script>
 function SendLinkByMail(href) {
-var subject= "Quarks Documentation feedback";
+var subject= "Apache Quarks Documentation feedback";
 var body = "I have some feedback about the Apache Quarks Community page: ";
 body += window.location.href;
 body += "";
@@ -199,6 +199,7 @@ window.location.href = uri;
 </nav>
 
 
+
     <!-- Page Content -->
     <div class="container">
         <div class="col-lg-12">&nbsp;</div>
@@ -319,7 +320,25 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_hello_quarks.html">Recipe 1. Hello Quarks!</a></li>
+                    <li><a href="../recipes/recipe_hello_quarks.html">Hello Quarks!</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_source_function.html">Writing a Source Function</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_value_out_of_range.html">Detecting a Sensor Value Out of Expected Range</a></li>
                     
 
                     
@@ -328,7 +347,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_source_function.html">Recipe 2. Writing a Source Function</a></li>
+                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Applying Different Processing Against a Single Stream</a></li>
                     
 
                     
@@ -337,7 +356,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_value_out_of_range.html">Recipe 3. Detecting a Sensor Value Out of Expected Range</a></li>
+                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
                     
 
                     
@@ -346,7 +365,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Recipe 4. Applying Different Processing Against a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_external_filter_range.html">Using an External Configuration File for Filter Ranges</a></li>
                     
 
                     
@@ -355,7 +374,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Recipe 5. Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_adaptable_filter_range.html">Adaptable Filter Behavior</a></li>
                     
 
                     
@@ -538,8 +557,8 @@ $('#toc').on('click', 'a', function() {
 <p>Get help using Quarks or contribute to the project on our mailing lists:</p>
 
 <ul>
-<li><a href="mailto:dev@quarks.incubator.apache.org">dev@quarks.incubator.apache.org</a> is for people who want to contribute code to Quarks. <a href="mailto:dev-subscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20subscribe">subscribe</a>, <a href="mailto:dev-unsubscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20unsubscribe">unsubscribe</a>, <a href="http://mail-archives.apache.org/mod_mbox/incubator-quarks-dev/">archives</a></li>
-<li><a href="mailto:commits@quarks.incubator.apache.org">commits@quarks.incubator.apache.org</a> is for commit messages and patches to Quarks. <a href="mailto:commits-subscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20subscribe">subscribe</a>, <a href="mailto:commits-unsubscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20unsubscribe">unsubscribe</a>, <a href="http://mail-archives.apache.org/mod_mbox/incubator-quarks-commits/">archives</a></li>
+<li><a href="mailto:dev@quarks.incubator.apache.org">dev@quarks.incubator.apache.org</a> is for people who want to contribute code to Quarks. <a href="mailto:dev-subscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20subscribe">subscribe</a>, <a href="mailto:dev-unsubscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20unsubscribe">unsubscribe</a>, <a href="http://mail-archives.apache.org/mod_mbox/incubator-quarks-dev/">Apache archives</a>, <a href="https://www.mail-archive.com/dev@quarks.incubator.apache.org/">mail-archive.com archives</a></li>
+<li><a href="mailto:commits@quarks.incubator.apache.org">commits@quarks.incubator.apache.org</a> is for commit messages and patches to Quarks. <a href="mailto:commits-subscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20subscribe">subscribe</a>, <a href="mailto:commits-unsubscribe@quarks.incubator.apache.org?subject=send%20this%20email%20to%20unsubscribe">unsubscribe</a>, <a href="http://mail-archives.apache.org/mod_mbox/incubator-quarks-commits/">Apache archives</a>, <a href="https://www.mail-archive.com/commits@quarks.incubator.apache.org/">mail-archive.com archives</a></li>
 </ul>
 
 <h3 id="issue-tracker">Issue tracker</h3>
@@ -617,7 +636,7 @@ $('#toc').on('click', 'a', function() {
         <div class="col-lg-12 footer">
 
              Site last
-            generated: Mar 29, 2016 <br/>
+            generated: Apr 5, 2016 <br/>
 
         </div>
     </div>

http://git-wip-us.apache.org/repos/asf/incubator-quarks-website/blob/b12a0d13/content/docs/console.html
----------------------------------------------------------------------
diff --git a/content/docs/console.html b/content/docs/console.html
index ac9db9a..b11d1ef 100644
--- a/content/docs/console.html
+++ b/content/docs/console.html
@@ -6,7 +6,7 @@
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <meta name="description" content="">
 <meta name="keywords" content=" ">
-<title>Application Console  | Quarks Documentation</title>
+<title>Application Console  | Apache Quarks Documentation</title>
 <link rel="stylesheet" type="text/css" href="../css/syntax.css">
 <link rel="stylesheet" type="text/css" href="../css/font-awesome.min.css">
 <!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.min.css">-->
@@ -60,7 +60,7 @@
                 <span class="icon-bar"></span>
             </button>
 
-            <a class="fa fa-home fa-lg navbar-brand" href="home.html">&nbsp;<span class="projectTitle"> Quarks Documentation</span></a>
+            <a class="fa fa-home fa-lg navbar-brand" href="../docs/home.html">&nbsp;<span class="projectTitle"> Apache Quarks Documentation</span></a>
 
         </div>
         <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
@@ -80,7 +80,7 @@
                     
                     
                     
-                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Github Repos<b class="caret"></b></a>
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">GitHub Repos<b class="caret"></b></a>
                     <ul class="dropdown-menu">
                         
                         
@@ -156,7 +156,7 @@
                 <!-- Send feedback function -->
 <script>
 function SendLinkByMail(href) {
-var subject= "Quarks Documentation feedback";
+var subject= "Apache Quarks Documentation feedback";
 var body = "I have some feedback about the Application Console page: ";
 body += window.location.href;
 body += "";
@@ -199,6 +199,7 @@ window.location.href = uri;
 </nav>
 
 
+
     <!-- Page Content -->
     <div class="container">
         <div class="col-lg-12">&nbsp;</div>
@@ -319,7 +320,25 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_hello_quarks.html">Recipe 1. Hello Quarks!</a></li>
+                    <li><a href="../recipes/recipe_hello_quarks.html">Hello Quarks!</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_source_function.html">Writing a Source Function</a></li>
+                    
+
+                    
+
+                    
+                    
+                    
+                    
+                    <li><a href="../recipes/recipe_value_out_of_range.html">Detecting a Sensor Value Out of Expected Range</a></li>
                     
 
                     
@@ -328,7 +347,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_source_function.html">Recipe 2. Writing a Source Function</a></li>
+                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Applying Different Processing Against a Single Stream</a></li>
                     
 
                     
@@ -337,7 +356,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_value_out_of_range.html">Recipe 3. Detecting a Sensor Value Out of Expected Range</a></li>
+                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
                     
 
                     
@@ -346,7 +365,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_different_processing_against_stream.html">Recipe 4. Applying Different Processing Against a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_external_filter_range.html">Using an External Configuration File for Filter Ranges</a></li>
                     
 
                     
@@ -355,7 +374,7 @@ window.location.href = uri;
                     
                     
                     
-                    <li><a href="../recipes/recipe_combining_streams_processing_results.html">Recipe 5. Splitting a Stream to Apply Different Processing and Combining the Results into a Single Stream</a></li>
+                    <li><a href="../recipes/recipe_adaptable_filter_range.html">Adaptable Filter Behavior</a></li>
                     
 
                     
@@ -1022,7 +1041,7 @@ The bars that are the tallest and therefore have the highest tuple count are OP_
         <div class="col-lg-12 footer">
 
              Site last
-            generated: Mar 29, 2016 <br/>
+            generated: Apr 5, 2016 <br/>
 
         </div>
     </div>