http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/Gemfile.lock
----------------------------------------------------------------------
diff --git a/Gemfile.lock b/Gemfile.lock
new file mode 100644
index 0000000..761ddd5
--- /dev/null
+++ b/Gemfile.lock
@@ -0,0 +1,50 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.5.0)
+      public_suffix (~> 2.0, >= 2.0.2)
+    colorator (1.1.0)
+    ffi (1.9.14)
+    forwardable-extended (2.6.0)
+    jekyll (3.3.1)
+      addressable (~> 2.4)
+      colorator (~> 1.0)
+      jekyll-sass-converter (~> 1.0)
+      jekyll-watch (~> 1.1)
+      kramdown (~> 1.3)
+      liquid (~> 3.0)
+      mercenary (~> 0.3.3)
+      pathutil (~> 0.9)
+      rouge (~> 1.7)
+      safe_yaml (~> 1.0)
+    jekyll-feed (0.8.0)
+      jekyll (~> 3.3)
+    jekyll-sass-converter (1.5.0)
+      sass (~> 3.4)
+    jekyll-watch (1.5.0)
+      listen (~> 3.0, < 3.1)
+    kramdown (1.13.1)
+    liquid (3.0.6)
+    listen (3.0.8)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    mercenary (0.3.6)
+    pathutil (0.14.0)
+      forwardable-extended (~> 2.6)
+    public_suffix (2.0.4)
+    rb-fsevent (0.9.8)
+    rb-inotify (0.9.7)
+      ffi (>= 0.5.0)
+    rouge (1.11.1)
+    safe_yaml (1.0.4)
+    sass (3.4.22)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jekyll (= 3.3.1)
+  jekyll-feed (~> 0.6)
+
+BUNDLED WITH
+   1.11.2

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_config.yml
----------------------------------------------------------------------
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..3176e73
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1,53 @@
+# Welcome to Jekyll!
+#
+# This config file is meant for settings that affect your whole blog, values
+# which you are expected to set up once and rarely edit after that. If you find
+# yourself editing this file very often, consider using Jekyll's data files
+# feature for the data you need to update frequently.
+#
+# For technical reasons, this file is *NOT* reloaded automatically when you use
+# 'bundle exec jekyll serve'. If you change this file, please restart the 
server process.
+
+# Site settings
+# These are used to personalize your new site. If you look in the HTML files,
+# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
+# You can create any custom variable you would like, and they will be 
accessible
+# in the templates via {{ site.myvariable }}.
+title: Apache SensSoft
+description: The homepage for Apache SensSoft
+baseurl: "" # the subpath of your site, e.g. /blog
+url: "http://senssoft.incubator.apache.org"; # the base hostname & protocol for 
your site, e.g. http://example.com
+twitter_username: apachesenssoft
+github_username:  apache
+
+collections:
+  docs:
+    output: true
+
+defaults:
+  -
+    scope:
+      path: ""
+      type: "docs"
+    values:
+      layout: "docs"
+      priority: 10
+
+# Build settings
+markdown: kramdown
+gems:
+  - jekyll-feed
+include:
+  - _pages
+exclude:
+  - Gemfile
+  - Gemfile.lock
+  - node_modules
+  - semantic/src
+  - semantic/tasks
+  - semantic/gulpfile.js
+  - semantic/dist/components
+  - semantic/dist/semantic.js
+  - semantic/dist/semantic.css
+  - package.json
+  - semantic.json

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/contributing.md
----------------------------------------------------------------------
diff --git a/_docs/contributing.md b/_docs/contributing.md
new file mode 100644
index 0000000..be16672
--- /dev/null
+++ b/_docs/contributing.md
@@ -0,0 +1,28 @@
+---
+title: Contributing
+component: senssoft
+---
+
+First, thank you for contributing to Apache SensSoft!
+
+There are certain procedures that must be followed for all contributions. 
These procedures are necessary to allow us to allocate resources for reviewing 
and testing your contribution, as well as to communicate effectively with you 
during the review process.
+
+See individual product guides for product-specific information on getting 
started as a contributor, setup and testing, code style, etc.
+
+To report a bug or other issue, simply create an issue in JIRA, as described 
in Step 1 below.
+
+#### 1. Create an issue in JIRA
+
+   All changes to Apache Distill must have a corresponding issue in 
[JIRA](https://issues.apache.org/jira/browse/SENSSOFT) so the change can be 
properly tracked.  If you do not already have an account on Apache JIRA, you 
will need to create one before creating your new issue.
+
+#### 2. Make and test your changes locally
+
+   The Apache SensSoft source code is maintained in [several git 
repositories](https://git-wip-us.apache.org/repos/asf?s=senssoft) hosted by 
Apache.  These repositories are mirrored and more easily available [on 
GitHub](https://github.com/apache?q=senssoft).  To make your changes, fork the 
appropriate GitHub repository and make commits to a topic branch in your fork.  
Commits should be made in logical units and must reference the JIRA issue 
number:
+   ```shell
+   git commit -m "#SENSSOFT-123: #High-level message describing the changes."
+   ```
+   Avoid commits which cover multiple, distinct goals that could (and should) 
be handled separately.  If you do not already have an account on JIRA, you will 
need to create one to claim an issue, discuss development, or report results.
+
+#### 3. Submit your changes via a pull request on GitHub
+
+   Once your changes are ready, submit them by creating a pull request for the 
corresponding topic branch you created when you began working on your changes.  
The core team will then review your changes and, if they pass review, your 
changes will be merged into the primary Apache-hosted repos.

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/analytics.md
----------------------------------------------------------------------
diff --git a/_docs/distill/analytics.md b/_docs/distill/analytics.md
new file mode 100644
index 0000000..3cc5a28
--- /dev/null
+++ b/_docs/distill/analytics.md
@@ -0,0 +1,66 @@
+---
+title: Apache Distill Analytics
+component: distill
+---
+
+### Graph Analytics
+
+>
+```python
+class distill.algorithms.graphs.graph.GraphAnalytics
+```
+
+> **Bases:** object
+
+> Distill’s graph analytics package. Apply graph algorithms to User Ale log 
data segmented with Stout.
+
+>
+```python
+static foo()
+```
+
+### Statistics Package
+
+>
+```python
+class distill.algorithms.stats.hist.Hist
+```
+
+> **Bases:** object
+
+> Distill’s statistics package. Apply statistical algorithms to User Ale log 
data segmented with Stout. Need to query/filter by session or user id.
+
+>
+```python
+get_value()
+```
+
+>
+```python
+static histogram(app, app_type=None, q='')
+```
+Only works on numerical data.
+
+>
+```python
+static terms(app, app_type=None, q='')
+```
+Group by field (find all elements )
+
+>
+```python
+static unique_terms(app, app_type=None, q='')
+```
+Aggregate the number of unique terms in a field. Missing values are counted 
and marked as “N/A”.
+
+> **Todo:** Need to incorporate QueryBuilder library instead of manually 
generating queries.
+
+> **Parameters:**
+- app – [string] application name
+- app_type – [string] application type
+- field – [string] field to search against for unique values
+- size – [int] the top size terms returned in the result. Default value is 
10.
+- min_hits – [int] return tags which have been found in min_hits or more. 
Default value is 1.
+
+> **Returns:**
+- [dict] dictionary of results

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/api.md
----------------------------------------------------------------------
diff --git a/_docs/distill/api.md b/_docs/distill/api.md
new file mode 100644
index 0000000..b6267bc
--- /dev/null
+++ b/_docs/distill/api.md
@@ -0,0 +1,22 @@
+---
+title: API Documentation
+component: distill
+priority: 9
+---
+
+### [Apache Distill HTTP Client]({{ '/docs/distill/http/' | prepend: 
site.baseurl }})
+- RESTful Endpoints
+
+### [Apache Distill Analytics]({{ '/docs/distill/analytics/' | prepend: 
site.baseurl }})
+- Graph Analytics
+- Statistics Package
+
+### [Apache Distill Models]({{ '/docs/distill/models/' | prepend: site.baseurl 
}})
+- Brew Interface
+- Stout Interface
+- UserAle Interface
+
+### [Apache Distill Utilities]({{ '/docs/distill/utilities/' | prepend: 
site.baseurl }})
+- Query Builder
+- Exception Handling
+- Validation Library

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/changelog.md
----------------------------------------------------------------------
diff --git a/_docs/distill/changelog.md b/_docs/distill/changelog.md
new file mode 100644
index 0000000..0fc6b00
--- /dev/null
+++ b/_docs/distill/changelog.md
@@ -0,0 +1,26 @@
+---
+title: Changelog
+component: distill
+priority: 99
+---
+
+### 0.1.3 (2016-09-19)
+- Moved to Apache.
+- Updated all documentation.
+- Added License headers
+- Docker compose file added to assist deployment of ELK stack with Distill
+
+### 0.1.2 (2016-07-22)
+- Moved CRUD operations from UserAle model to Brew model.
+- Added API specs to segment UserAle data from Elasticsearch
+- Added deployment instructions
+
+### 0.1.1 (2016-06-14)
+- Completed index route for status endpoint which lists all applications 
registered and their document count segmented by type.
+- Updated setup.py to reference deploy scripts
+- Example configuration to deploy Distll with Gunicorn and Nginx for Linux/Mac 
users
+- Added UserAle and Stout classes.
+- Updated requirements.txt for deployment.
+
+### 0.1.0 (2016-04-01)
+- Initial release.

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/http.md
----------------------------------------------------------------------
diff --git a/_docs/distill/http.md b/_docs/distill/http.md
new file mode 100644
index 0000000..81983d2
--- /dev/null
+++ b/_docs/distill/http.md
@@ -0,0 +1,208 @@
+---
+title: Apache Distill HTTP Client
+component: distill
+---
+
+### RESTful Endpoints
+>
+```python
+distill.app.create(app_id)
+```
+
+> Registers an application in Distill.
+
+>
+```shell
+$ curl -XPOST https://localhost:8090/xdata_v3
+```
+
+> **Parameters:**
+- app_id – Application name
+
+> **Returns:**
+- Newly created application’s status as JSON blob
+
+>
+```python
+distill.app.delete(app_id)
+```
+
+> Deletes an application permentantly from Distill
+
+>
+```shell
+$ curl -XDELETE https://localhost:8090/xdata_v3
+```
+
+> **Parameters:**
+- app_id – Application name
+
+> **Returns:**
+- Boolean response message as JSON blob
+
+>
+```python
+distill.app.denoise(app_id)
+```
+
+> Bootstrap script to cleanup the raw logs. A document type called 
“parsed” will be stored with new log created unless specified in the 
request. Have option to save parsed results back to data store. These parsed 
logs can be intergrated with STOUT results by running the stout bootstrap 
script.
+
+>
+```shell
+$ curl -XGET https://localhost:8090/denoise/xdata_v3?save=true&type=parsed
+```
+
+> **Parameters:**
+- app_id – Application name
+
+> **Returns:**
+- [dict]
+
+>
+```python
+distill.app.index()
+```
+
+> Show Distill version information, connection status, and all registered 
applications.
+
+>
+```shell
+$ curl -XGET https://localhost:8090
+```
+
+>
+```javascript
+{
+        "author" : "Michelle Beard",
+        "email" : "mbe...@draper.com",
+        "name": "Distill",
+        "status" : true,
+        "version" : "1.0",
+        "applications" : {
+                "xdata_v3" : {
+                        testing: 205,
+                        parsed: 500,
+                },
+                "test_app" : {
+                        logs: 500,
+                        parsed: 100,
+                }
+        }
+}
+```
+
+> **Returns:**
+- Distill’s status information as JSON blob
+
+>
+```python
+distill.app.merge_stout()
+```
+
+> Bootstrap script to aggregate user ale logs to stout master answer table 
This will save the merged results back to ES instance at new index stout OR 
denoise data first, then merge with the stout index... If STOUT is enabled, the 
select method expects a stout index to exist or otherwise it will return an 
error message.
+
+>
+```shell
+$ curl -XGET https://locahost:8090/stout/xdata_v3
+```
+
+> **Returns:**
+- Status message
+
+>
+```python
+distill.app.page_not_found(error)
+```
+
+> Generic Error Message
+
+>
+```python
+distill.app.segment(app_id, app_type)
+```
+
+> Search against an application on various fields.
+
+>
+```shell
+$ curl -XGET https://[hostname]:[port]/search/
+xdata_v3?q=session_id:A1234&size=100
+&scroll=false&fl=param1,param2
+```
+
+> **Parameters:**
+- app_id – Application name
+- app_type – Optional document type to filter against
+- q – Main search query. To return all documents, pass in q=*:*
+- size – Maximum number of documents to return in request
+- scroll – Scroll id if the number of documents exceeds 10,000
+- fl – List of fields to restrict the result set
+
+> **Returns:**
+- JSON blob of result set
+
+>
+```python
+distill.app.stat(app_id, app_type)
+```
+
+> Generic histogram counts for a single registered application filtered 
optionally by document type. View the Statistics document page for method 
definitions and arguments
+
+>
+```shell
+$ curl -XGET https://localhost:8090/stat/xdata_v3/
+testing/?stat=terms&elem=signup&event=click
+```
+
+> **Parameters:**
+- app_id – Application name
+- app_type – Application type
+
+> **Returns:**
+- JSON blob of result set
+
+>
+```python
+distill.app.status(app_id, app_type)
+```
+
+> Presents meta information about an registered application, including field 
names and document types.
+
+>
+```shell
+$ curl -XGET https://localhost:8090/status/xdata_v3
+```
+
+>
+```javascript
+{
+  "application": "xdata_v3",
+  "health": "green",
+  "num_docs": "433",
+  "status": "open"
+}
+```
+
+> **Parameters:**
+- app_id – Application name
+
+> **Returns:**
+- Registered applications meta data as JSON blob
+
+>
+```python
+distill.app.update(app_id)
+```
+
+> Renames a specific application
+
+>
+```shell
+$ curl -XPOST https://localhost:8090/update/xdata_v3?name="xdata_v4";
+```
+
+> **Parameters:**
+- app_id – Application name
+
+> **Returns:**
+- Boolean response message as JSON blob

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/index.md
----------------------------------------------------------------------
diff --git a/_docs/distill/index.md b/_docs/distill/index.md
new file mode 100644
index 0000000..8c712b0
--- /dev/null
+++ b/_docs/distill/index.md
@@ -0,0 +1,171 @@
+---
+title: Installation
+component: distill
+permalink: /docs/distill/
+priority: 0
+---
+
+### Installing Apache Distill
+
+The first step is to install Apache Distill. First, checkout the latest 
version of Apache Distill.
+
+  ```shell
+  $ git clone 
https://git-wip-us.apache.org/repos/asf/incubator-senssoft-distill.git
+  ```
+
+Apache Distill is a python project, so it can be installed like any other 
python library. Several operating systems (Mac OS X, Major Versions of 
Linux/BSD) have Python pre-installed, so you should just have to run
+
+  ```shell
+  $ easy_install distill
+  ```
+
+      or
+
+  ```shell
+  $ pip install distill
+  ```
+
+Users are strongly recommended to install Apache Distill in a virtualenv. 
Instructions to setup an virtual environment will be explained below.
+
+> **Note**&
+When the package is installed via easy_install or pip this function will be 
bound to the distill executable in the Python installation’s bin directory 
(on Windows - the Scripts directory).
+
+### Installing Apache Distill in an Virtual Environment
+
+virtualenv is a tool to create isolated Python environments. virtualenv 
creates a folder which contains all the necessary executables to use the 
packages that the Apache Distill project would need.
+
+Install virtualenv via pip:
+
+  ```shell
+  $ sudo env/bin/pip install virtualenv
+  ```
+
+Start by changing directory into the root of Apache Distill’s project 
directory, and then use the virtualenv command-line tool to create a new 
environment:
+
+  ```shell
+  $ mkdir env
+  $ virtualenv env
+  ```
+
+Activate environment:
+
+  ```shell
+  $ source env/bin/activate
+  ```
+
+Install Apache Distill requirements:
+
+  ```shell
+  $ env/bin/pip -r requirements.txt
+  ```
+
+To build the source code and run all unit tests.
+
+  ```shell
+  $ env/bin/python setup.py develop test
+  ```
+
+Launch local Apache Distill server, running on localhost:8090:
+
+  ```shell
+  $ env/bin/dev
+  ```
+
+Deactivate environment
+
+  ```shell
+  $ deactivate
+  ```
+
+### Running Apache Distill on Docker Compose
+From the project directory, start up Apache Distill in the background.
+
+  ```shell
+  $ docker-compose up -d
+  $ docker-compose ps
+  ```
+
+To stop services once you’ve finished with them:
+
+  ```shell
+  $ docker-compose stop
+  ```
+
+### Deployment with Nginx and Gunicorn
+
+I will describe a setup with nginx as a web server on Ubuntu. A web server 
cannot communicate directly with a Flask application such as Apache Distill. 
Thus gunicorn will be used to act as a medium between the web server and Apache 
Distill. Gunicorn is like an application web server that will be running behind 
nginx, and it is WSGI compatible. It can communicate with applications that 
support WSGI – Flask, Django, etc.
+
+Install requirements.
+
+  ```shell
+  $ sudo apt-get update
+  $ sudo apt-get install -y python python-pip nginx gunicorn
+  ```
+
+Create a directory to store the project.
+
+  ```shell
+  $ sudo mkdir /home/pubic_html && cd /home/public_html
+  ```
+
+Download the project from the GitHub repository and copy the application to 
the /home/public_html directory.
+
+  ```shell
+  $ git clone https://git-wip-us.apache.org/repos/asf
+  /incubator-senssoft-distill.git /home/public_html
+  ```
+
+Install Apache Distill’s requirements either globally or in a virutal 
environment:
+
+  ```shell
+  $ env/bin/pip install -r requirements.txt
+  ```
+
+Apache Distill has provided an nginx configuration file located in 
distill/deploy/nginx.conf.
+
+Gunicorn will use port 8000 and handle the incoming HTTP requests.
+
+Restart nginx to load the configuration changes.
+
+  ```shell
+  $ sudo /etc/init.d/nginx restart
+  ```
+
+Run gunicorn on port 8000.
+
+  ```shell
+  $ gunicorn --workers 4 --bind unix:distill.sock -m 007 deploy/run_server:app
+  ```
+
+Start a new browser instance and navigate to http://localhost.
+
+### Installing Documentation
+
+To save yourself the trouble, all up to date documentation is available at 
https://draperlaboratory.github.io/distill/.
+
+However, if you want to manully build the documentation, the instructions are 
below.
+
+First, install the documentation dependencies:
+
+  ```shell
+  $ env/bin/pip install -r doc_requirements.txt
+  ```
+
+To build Apache Distill’s documentation, create a directory at the root 
level of /distill called distill-docs.
+
+  ```shell
+  $ mkdir distill-docs & cd distill-docs
+  ```
+
+Execute build command:
+
+  ```shell
+  # Inside top-level docs/ directory.
+  $ make html
+  ```
+
+This should build the documentation in your shell, and output HTML. At then 
end, it should say something about documents being ready in distill-docs/html. 
You can now open them in your browser by typing
+
+  ```shell
+  $ open distill-docs/html/index.html
+  ```

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/models.md
----------------------------------------------------------------------
diff --git a/_docs/distill/models.md b/_docs/distill/models.md
new file mode 100644
index 0000000..b7395e1
--- /dev/null
+++ b/_docs/distill/models.md
@@ -0,0 +1,201 @@
+---
+title: Apache Distill Models
+component: distill
+---
+
+### Brew Interface
+>
+```python
+class distill.models.brew.Brew
+```
+
+> **Bases:** object
+
+> Distill supports basic CRUD operations and publishes the status of an 
persistenct database. Eventually it will support ingesting logs sent from an 
registered application.
+
+>
+```python
+static create(app)
+```
+
+>Register a new application in Distill
+
+>
+```javascript
+{
+        "application" : "xdata_v3",
+        "health" : "green",
+        "num_docs" : 0,
+        "status" : "open"
+}
+```
+
+> **Parameters:**
+- app – [string] application name (e.g. xdata_v3)
+
+> **Returns:**
+- [dict] dictionary of application and its meta information
+
+>
+```python
+static delete(app)
+```
+
+>Technically closes the index so its content is not searchable.
+
+> **Parameters:**
+- app – [string] application name (e.g. xdata_v3)
+
+> **Returns:**
+- [dict] status message of the event
+
+>
+```python
+static get_applications()
+```
+
+>Fetch all the registered applications in Distill.
+
+> *Note:* Private indexes starting with a period are not included in the 
result set
+
+> **Returns:**
+- [dict] dictionary of all registered applications and meta information
+
+>
+```python
+static get_status()
+```
+
+> Fetch the status of the underlying database instance.
+
+> **Returns:**
+- [bool] if connection to database instance has been established
+
+>
+```python
+static read(app, app_type=None)
+```
+
+> Fetch meta data associated with an application
+
+> Example:
+```javascript
+{
+        "application" : "xdata_v3",
+        "health" : "green",
+        "num_docs" : "100",
+        "status" : "open"
+        "types" : {
+                "raw_logs" : {
+                        "@timestamp" : "date",
+                        "action" : "string",
+                        "elementId" : "string"
+                },
+                "parsed" : {
+                        "@timestamp" : "date",
+                        "elementId_interval" : "string"
+                },
+                "graph" : {
+                        "uniqueID" : "string",
+                        "transition_count" : "long",
+                        "p_value" : "float"
+                }
+        }
+}
+```
+
+> **Parameters:**
+- app – [string] application name (e.g. xdata_v3)
+
+> **Returns:**
+- [dict] dictionary of application and its meta information
+
+>
+```python
+static update(app)
+```
+
+> **Todo:** Currently not implemented
+
+### Stout Interface
+>
+```python
+class distill.models.stout.Stout
+```
+
+> **Bases:** object
+
+ > Main Stout class to support ingest and search operations.
+
+>
+```python
+static ingest()
+```
+
+> Ingest data coming from Stout to Distill
+
+>
+```python
+class distill.models.stout.StoutDoc(meta=None, **kwargs)
+```
+
+> **Bases:** elasticsearch_dsl.document.DocType
+
+> Representation of a Stout document.
+
+>
+```python
+save(*args, **kwargs)
+```
+
+> Save data from parsing as a Stout document in Distill
+
+### UserAle Interface
+>
+```python
+class distill.models.userale.UserAle
+```
+
+> **Bases:** object
+
+> Main method of entry to perform segmentation and integration of STOUT’s 
master answer table (if STOUT is enabled). Advanced and basic analytics is 
performed in the distill.algorithms.stats and distill.algorithms.graphs module.
+
+>
+```python
+static denoise(app, app_type='parsed', save=False)
+```
+
+>
+```python
+static search(app, app_type=None, filters=[],
+size=100, include='*', scroll=None, sort_field=None)
+```
+
+> Perform a search query.
+
+> **Parameters:**
+- app – [string] application id (e.g. “xdata_v3”)
+- app_type – [string] name of the application type. If None all application 
types are searched.
+- filters – [list of strings] list of filters for a query.
+- size – [int] maximum number of hits that should be returned
+- sort_field – [string] sorting field. Currently supported fields: 
“timestamp”, “date”
+
+> **Returns**
+- [dict] dictionary with processed results. If STOUT is enabled, STOUT data 
will be merged with final result.
+
+>
+```python
+static segment(app, app_type=None, params='')
+```
+
+>Just support match all for now.
+
+>
+```python
+distill.models.userale.merge_dicts(lst)
+```
+
+>
+```python
+distill.models.userale.parse_query_parameters(indx, app_type=None, 
request_args={})
+```

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/start.md
----------------------------------------------------------------------
diff --git a/_docs/distill/start.md b/_docs/distill/start.md
new file mode 100644
index 0000000..332a09b
--- /dev/null
+++ b/_docs/distill/start.md
@@ -0,0 +1,17 @@
+---
+title: Getting Started
+component: distill
+priority: 1
+---
+
+### Usage
+
+Using curl:
+
+  ```shell
+  $ curl -XGET 'http://localhost:8090/app/register' -d '{
+          "application_name" : "my_app",
+          "version" : "0.1",
+          "application_description" : "my test app"
+  }'
+  ```

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/distill/utilities.md
----------------------------------------------------------------------
diff --git a/_docs/distill/utilities.md b/_docs/distill/utilities.md
new file mode 100644
index 0000000..3907032
--- /dev/null
+++ b/_docs/distill/utilities.md
@@ -0,0 +1,63 @@
+---
+title: Apache Distill Utilities
+component: distill
+---
+
+### Query Builder
+>
+```python
+class distill.utils.query_builder.QueryBuilder(query=None)
+```
+
+> **Bases:** object
+
+#### add_filters(filters)
+
+#### add_sorting(sort_field='', sort_order='')
+
+### Exception Handling
+>
+```python
+exception distill.utils.exceptions.Error
+```
+
+> **Bases:** exceptions.Exception
+
+> Base class for exceptions.
+
+>
+```python
+exception distill.utils.exceptions.ValidationError(url, msg)
+```
+
+> **Bases:** distill.utils.exceptions.Error
+
+> Exceptions raised for errors in validated a url.
+
+### Validation Library
+>
+```python
+distill.utils.validation.str2bool(v)
+```
+
+> Convert string expression to boolean
+
+> **Parameters:**
+- v – Input value
+
+> **Returns:**
+- Converted message as boolean type
+- Return type: bool
+
+>
+```python
+distill.utils.validation.validate_request(q)
+```
+
+> Parse out request message and validate inputs
+
+> **Parameters:**
+- q – Url query string
+
+> **Raises:**
+- ValidationError – if the query is missing required parameters

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/index.md
----------------------------------------------------------------------
diff --git a/_docs/index.md b/_docs/index.md
new file mode 100644
index 0000000..a1ccbcc
--- /dev/null
+++ b/_docs/index.md
@@ -0,0 +1,8 @@
+---
+title: About the Docs
+component: senssoft
+permalink: /docs/
+priority: 0
+---
+
+The Apache SensSoft docs are organized by product.  Each product's 
documentation includes information like quick start guides, tutorials, full API 
descriptions, and contributing guides.  

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/stout/index.md
----------------------------------------------------------------------
diff --git a/_docs/stout/index.md b/_docs/stout/index.md
new file mode 100644
index 0000000..9d89b0b
--- /dev/null
+++ b/_docs/stout/index.md
@@ -0,0 +1,27 @@
+---
+title: About Stout
+component: stout
+permalink: /docs/stout/
+priority: 0
+---
+
+The Subject Tracker for Online User Testing (STOUT) is a content management 
system for formal human performance experimentation. STOUT presents tools and 
operational tasks to each participant. In doing so, it collects:
+
+- an intake questionnaire to assess the user’s background and experience as 
an analyst
+- operational task performance and confidence in responses i.e. did they get 
the right answer? How sure are they?
+- subjective feedback (did they like how the tool worked?)
+- screen captures
+- physiological response, which help infer operator workload (how hard did 
they work?).
+
+The STOUT system provides human-subjects testing experiment administrators 
with a flexible tool for managing and tracking user progress through a series 
of online tasks. The STOUT system was designed to help collect information 
about the utility of online applications.
+
+### Who is STOUT for?
+
+This package is for developers. A framework has been built but many features 
and additions can still be added.
+
+This package is also for experiment administrators. This system can be used 
immediately to conduct new evaluations of online applications.
+
+
+### For more information
+
+STOUT was built using Django 1.6. For more advanced developer information or 
instructions on how to setup your own system, consult the documentation for 
Django [here](https://www.djangoproject.com/).

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/stout/start.md
----------------------------------------------------------------------
diff --git a/_docs/stout/start.md b/_docs/stout/start.md
new file mode 100644
index 0000000..96d82c9
--- /dev/null
+++ b/_docs/stout/start.md
@@ -0,0 +1,103 @@
+---
+title: Getting Started
+component: stout
+priority: 1
+---
+
+### Getting Going...
+If you already have your own system and just want to work with the source 
code, then skip to the next section.  Otherwise read on...
+
+The simplest way to get started, rather than build your own system from the 
ground up, is to download both [VirtualBox](https://www.virtualbox.org) and 
[Vagrant](https://www.vagrantup.com).  Once you have both of those working, you 
can clone this repository to begin.
+
+#### Getting this working on Vagrant (VirtualBox)
+
+Get a base centos box (this may take awhile)
+
+  ```bash
+  vagrant box add centos_6.5 https://github.com/2creatives/vagrant-centos/
+  releases/download/v6.5.3/centos65-x86_64-20140116.box
+  ```
+
+Start it
+
+  ```bash
+  vagrant up virtualbox
+  ```
+
+#### Getting this working on Vagrant (OpenStack)
+
+Get a base centos box (this may take awhile)
+
+You need 2 files:
+
+1. The first is the `.pem` (or `.cer`) file which is the KeyPair file you can 
download from the OpenStack dashboard.
+
+2. The second is a shell script which contains all the environment variables 
referenced in the Vagrantfile.  This is located under API Access under the 
Security Settings.  Once you download this file run `source $file.sh`, and this 
will ask you for you OpenStack password and load all the required varaibles 
under your current environment.  
+
+Adjust the Vagrantfile to use the appropriate `.pem` file and the appropriate 
KeyPair name associated with that pem file.  Once that is complete you can run:
+
+  ```bash
+  vagrant up openstack --provider=openstack
+  ```
+
+---------------
+### If you already have your own system...
+
+Once this package is cloned, create the database
+
+  ```bash
+  python manage.py syncdb
+  ```
+
+This will also create a superuser.
+
+
+#### During development, if you want to drop to the database and start over 
run the following:
+
+  ```bash
+  python manage.py sqlclear op_tasks | python manage.py dbshell
+  python manage.py syncdb
+  python manage.py populate_db
+  ```
+
+This will keep your super user and drop just the app database which is a lot 
nicer than deleting the whole database and starting over
+
+This process is also under the `reset_optask` command
+
+  ```bash
+  python manage.py reset_optask
+  ```
+
+--------------------------------
+### Now that STOUT is running...
+The following instructions assume you're using Vagrant.  If you're using 
another system, you might need to alter them slightly (e.g. different IP 
addresses, etc.) to get the same results.
+
+#### Test operation
+Open a browser and point it to [localhost:8080](http://localhost:8080).  You 
should see the welcome page for the XDATA Online Experiment. The system comes 
with a one prepopulated example task.  Register a new user and test it out.
+
+#### Access admin page
+The Admin page allows direct access to the STOUT database.  From this page you 
can manage users, tasks, and products directly. Before you can access the admin 
page, you need to create a superuser.  If you're using Vagrant you can ssh into 
that system using
+
+  ```bash
+  vagrant ssh virtualbox
+  ```
+
+Navigate to the source directory and add a superuser
+
+  ```bash
+  cd /var/www/op_tasks/db/
+  sudo python manage.py createsuperuser
+  ```
+
+Now point your browser to the admin page at 
[localhost:8080/admin](http://localhost:8080/admin) to begin browsing the STOUT 
database.
+
+#### Add subjects
+From the admin page, you can pre-register users through the Participants link.
+#### Add tasks
+You can also add new tasks for users to complete through the Op tasks link.  
First however you must add a dataset for the task to reference.  That can be 
done through the Datasets link.
+#### Add products
+New products can be added through the product link.  Products are tools 
available online.  Copy and past the address for the tool into the URL field 
and then fill in the remaining information.
+#### Assign task sequences
+Normally, a user is assigned a random order of tasks from all those that are 
available.  If you'd prefer to assign a sequence of tasks though that can be 
managed through the TaskListItem link.  
+
+**Note:** If you assign multiple tasks to a single user, only mark the first 
task as ***Ot active*** and leave all checkboxes for the remaining tasks empty

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/system/index.md
----------------------------------------------------------------------
diff --git a/_docs/system/index.md b/_docs/system/index.md
new file mode 100644
index 0000000..92ab55a
--- /dev/null
+++ b/_docs/system/index.md
@@ -0,0 +1,45 @@
+---
+title: Getting Started
+component: system
+permalink: /docs/system/
+priority: 0
+---
+
+The Apache SensSoft system provides a simple, ready-to-go deployment.  The 
deployment is containerized with Docker.  It includes the UserALE backend, 
Distill, and Tap.  It requires [Docker 
Compose](https://docs.docker.com/compose/install/) to be installed and working.
+
+### Configure Tap
+
+Tap, as a Django project, requires a secret.py file to run.  Before you begin, 
create and add the file to /docker/tap/
+
+  ```python
+  """
+  Secret Django settings for tap project.
+  """
+
+  # SECURITY WARNING: keep the secret key used in production secret!
+  MY_SECRET_KEY = '<yoursecretkey>'
+  MY_DB_NAME = 'tapdb'
+  MY_DB_USER = 'tapuser'
+  MY_DB_PASSWORD = '<dbpassword>'
+  MY_DB_HOST = 'db'
+
+  MY_EMAIL_PASSWORD =''
+  ADMIN_EMAILS = ()
+  ```
+
+### Install and Run with Docker Compose
+
+To build and start the system:
+
+  ```shell
+  docker-compose build
+  docker-compose up
+  ```
+
+Tap will be running at localhost:8000.
+
+To shut down the system:
+
+  ```shell
+  docker-compose down
+  ```

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/tap/index.md
----------------------------------------------------------------------
diff --git a/_docs/tap/index.md b/_docs/tap/index.md
new file mode 100644
index 0000000..8fee11b
--- /dev/null
+++ b/_docs/tap/index.md
@@ -0,0 +1,10 @@
+---
+title: Getting Started
+component: tap
+permalink: /docs/tap/
+priority: 0
+---
+
+Tap is the front end of the SensSoft system.  It consists of a React-Django 
web app that allows you to access your applications' usage data via data 
visualizations built in D3.
+
+Work on Tap's documentation is ongoing.  To get involved, see our 
[Contributing]({{ '/docs/contributing' | prepend: site.baseurl }}) guide.  To 
get started with Tap, [try out the full SensSoft system]({{ '/docs/system' | 
prepend: site.baseurl }}).  

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/userale/index.md
----------------------------------------------------------------------
diff --git a/_docs/userale/index.md b/_docs/userale/index.md
new file mode 100644
index 0000000..de968d9
--- /dev/null
+++ b/_docs/userale/index.md
@@ -0,0 +1,21 @@
+---
+title: About UserALE
+component: userale
+permalink: /docs/userale/
+priority: 0
+---
+
+*Note*: Work on UserALE's documentation is ongoing.  To get involved, see our 
[Contributing]({{ '/docs/contributing' | prepend: site.baseurl }}) guide.  To 
get started with UserALE, [try out the full SensSoft system]({{ '/docs/system' 
| prepend: site.baseurl }}).  
+
+### About UserALE
+
+The User Analytic Logging Engine (User ALE) is part of Apache SensSoft. User 
ALE is for Software Developers, HCI/UX researchers, and project managers who 
develop user facing software tools—applications that are used for 
manipulating, analyzing, or visualizing data or other systems.
+
+User ALE provides an API for instrumenting software tools, turning them into a 
human usability sensors. With every user interaction User ALE will transmit 
specially structured messages (JSON) from software tools to an activity logging 
server (Elastic). These messages not only report user activities and their 
timing, but provide sufficient context to understand how those activities are 
related to the functional organization of the software tool. This allows for 
greater utility in understanding how users are interacting with software tool 
features, and seeds more rigorous modeling and analytic approaches to 
understand not just what users do in software tools, but how they perform tasks 
with them.
+
+User ALE provides data provides insight into software tool usage frequency, 
users' cognitive/behavioral strategy in using tools to complete tasks, their 
workflows, as well as their integrative use of software tool features.
+
+
+### Who is UserALE for?
+
+The User Analytic Logging Engine (User ALE) is for Software Developers, HCI/UX 
researchers, and project managers who develop user facing software tools.

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/useralejs/contributing.md
----------------------------------------------------------------------
diff --git a/_docs/useralejs/contributing.md b/_docs/useralejs/contributing.md
new file mode 100644
index 0000000..bf9c0ee
--- /dev/null
+++ b/_docs/useralejs/contributing.md
@@ -0,0 +1,26 @@
+---
+title: Contributing
+component: useralejs
+priority: 11
+---
+
+### Building UserALE.js
+
+To modify and build your own version of UserAle.js, first clone the repo, 
install dependencies, and make any desired changes. Then build and minify into 
the build/ folder:
+
+  ```shell
+  git clone https://github.com/apache/incubator-senssoft-useralejs.git
+  npm install
+  npm run build
+  ```
+
+### Testing and Linting
+
+We maintain code quality through linting and our test suite.  To run, or run 
and watch for changes:
+
+  ```shell
+  npm test
+  npm run test:watch
+  ```
+
+See package.json for full script options.

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/useralejs/index.md
----------------------------------------------------------------------
diff --git a/_docs/useralejs/index.md b/_docs/useralejs/index.md
new file mode 100644
index 0000000..cd75200
--- /dev/null
+++ b/_docs/useralejs/index.md
@@ -0,0 +1,41 @@
+---
+title: Getting Started
+component: useralejs
+permalink: /docs/useralejs/
+priority: 0
+---
+
+Apache UserALE.js is the UserALE client for DOM and JavaScript-based 
applications.  It automatically attaches event handlers, is configurable 
through HTML5 data parameters or a JS API, and logs every user interaction on a 
web page, including rich JS single-page apps.  
+
+*Note:* Work on UserALE.js' documentation is ongoing.  The most notable 
undocumented feature is the JS API.  To get involved, see our [Contributing]({{ 
'/docs/contributing' | prepend: site.baseurl }}) guide.  
+
+### Include UserALE.js in your project
+
+To include UserAle.js in your project with default configuration, simply 
include the script tag below:
+
+  ```html
+  <script src="<yourUseraleSource>"></script>
+  ```
+
+### Configure UserALE.js
+
+HTML5 Data Parameters are used to configure UserALE.js.  For example, to set 
the logging URL:
+
+  ```html
+  <script src="userale.js" data-url="http://yourLoggingUrl";></script>
+  ```
+
+The complete list of configurable options is:
+
+  | Param | Description | Default |
+  |:---|:---|:---|
+  | data-url | Logging URL | http://localhost:8000 |
+  | data-autostart | Should Userale.js start on page load | true |
+  | data-interval | Delay between transmit checks | 5000 (ms) |
+  | data-threshold | Minimum number of logs to send | 5 |
+  | data-user | User identifier | null |
+  | data-version | Application version identifier | null |
+  | data-log-details | Toggle detailed logs (keys pressed and input/change 
values) | false |
+  | data-resolution | Delay between instances of high frequency logs 
(mouseover, scroll, etc.) | 500 (ms) |
+  | data-user-from-params | Query param in the page URL to fetch userId from | 
null |
+  | data-tool | Name of tool being logged | null |

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/useralejs/troubleshooting.md
----------------------------------------------------------------------
diff --git a/_docs/useralejs/troubleshooting.md 
b/_docs/useralejs/troubleshooting.md
new file mode 100644
index 0000000..a91a78d
--- /dev/null
+++ b/_docs/useralejs/troubleshooting.md
@@ -0,0 +1,10 @@
+---
+title: Troubleshooting
+component: useralejs
+---
+
+### Enable Cross-Origin Resource Sharing (CORS)
+
+The logs generated by UserAle is sent to a logging url which is configured in 
the script tag. Your client may send out failure logs because of a CORS 
(cross-origin resource sharing) issue. You will need to configure your backend 
server to enable CORS.
+
+For more information and examples on how to enable CORS on your server, please 
visit [enable-cors.org](http://enable-cors.org/index.html).

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/useralepyqt/api.md
----------------------------------------------------------------------
diff --git a/_docs/useralepyqt/api.md b/_docs/useralepyqt/api.md
new file mode 100644
index 0000000..22b2e7a
--- /dev/null
+++ b/_docs/useralepyqt/api.md
@@ -0,0 +1,183 @@
+---
+title: API Documentation
+component: useralepyqt
+priority: 11
+---
+
+Apache UserALE.PyQt5 intercepts all application events by letting the 
developer install an event filter in their PyQt5 application to generate 
detailed user logs. Apache UserALE.PyQt5 does not capture system level logs or 
events generated by a non-user (a.k.a. system and signals sent between 
QObjects).
+
+### Apache UserALE.PyQt5
+
+>
+```python
+class userale.ale.Ale(output='userale.log', user=None,
+session=None, toolname=None, toolversion=None,
+keylog=False, interval=5000, resolution=100, shutoff=[])
+```
+
+> **Bases:** PyQt5.QtCore.QObject
+
+> **Parameters:**
+- output – [str] The file or url path to which logs will be sent
+- user – [str] Identifier for the user of the application
+- session – [str] Session tag to track same user with multiple sessions. If 
a session is not provided, one will be created
+- toolname – [str] The application name
+- toolversion – [str] The application version
+- keylog – [bool] Should detailed key logs be recorded. Default is False
+- interval – [int] The minimum time interval in ms between batch 
transmission of logs. Default is 5000ms.
+- resolution – [int] Delay in ms between instances of high frequency logs 
like mousemoves, scrolls, etc. Default is 100ms (10Hz).
+- shutoff – [list] Turn off logging for specific events
+
+An example log will appear like this:
+
+  ```javascript
+  {
+      'target': 'testLineEdit',
+      'path': ['Example', 'testLineEdit'],
+      'clientTime': '2016-08-03 16:12:03.460573',
+      'location': {'x': 82, 'y': 0},
+      'type': 'mousemove',
+      'userAction': 'true',
+      'details' : {},
+      'userId': 'userABC1234',
+      'session': '5ee42ccc-852c-44d9-a937-28d7901e4ead',
+      'toolName': 'myApplication',
+      'toolVersion': '3.5.0',
+      'useraleVersion': '0.1.0'
+  }
+  ```
+
+#### aggregate()
+Sample high frequency logs at self.resolution. High frequency logs are 
consolidated down to a single log event to be emitted later
+
+#### cleanup()
+Clean up any dangling logs in self.logs or self.hlogs
+
+#### dump()
+Write log data to file
+
+#### eventFilter(object, event)
+Filters events for the watched widget.
+
+> **Parameters:**
+- object – [QObject] The object being watched.
+- event – [QEvent] The event triggered by a user action.
+
+> **Returns:**
+- [bool] Propagate filter up if other objects needs to be handled
+
+#### getClientTime()
+Capture the time the event was captured in milliseconds since the UNIX epoch 
(January 1, 1970 00:00:00 UTC)
+
+> **Returns:**
+- [str] String representation of the time the event was captured.
+
+#### getLocation(event)
+Grab the x and y position of the mouse cursor, relative to the widget that 
received the event.
+
+> **Parameters:**
+- event – [QEvent] The base class for all event classes.
+
+> **Returns:**
+- [dict] A dictionary representation of the x and y positions of the mouse 
cursor.
+
+#### getPath(object)
+Generate the entire object hierachy from root to leaf node.
+
+> **Parameters:**
+- object – [QObject] The base class for all Qt objects.
+
+> **Returns:**
+- [list] List of QObjects.
+
+#### getSelector(object)
+Get target object’s name (object defined by user or object’s meta class 
name).
+
+> **Parameters:**
+- object – [QObject] The base class for all Qt objects.
+
+> **Returns:**
+- [str] The Qt object’s name
+
+#### getSender(object)
+Fetch the QObject who triggered the event
+
+> **Parameters:**
+- object – [QObject] The object being watched.
+
+> **Returns:**
+- [QObject] The QObject
+
+#### handleDragEvents(event_type, event, object)
+Returns the userale log representing all drag events.
+
+> **Parameters:**
+- event_type – [str] The string representation of the type of event being 
triggered by the user.
+- event – [QEvent] The base class for all event classes.
+- object – [QObject] The base class for all Qt objects.
+
+> **Returns:**
+- [dict] A userale log describing a drag event.
+
+#### handleKeyEvents(event_type, event, object)
+Returns the userale log representing all key events, including key name and 
key code.
+
+> **Parameters:**
+- event_type – [str] The string representation of the type of event being 
triggered by the user.
+- event – [QEvent] The base class for all event classes.
+- object – [QObject] The base class for all Qt objects.
+
+> **Returns:**
+- [dict] A userale log describing a key event.
+
+#### handleMouseEvents(event_type, event, object)
+Returns the userale log representing all mouse event data.
+
+> **Parameters:**
+- event_type – [str] The string representation of the type of event being 
triggered by the user.
+- event – [QEvent] The base class for all event classes.
+- object – [QObject] The base class for all Qt objects.
+
+> **Returns:**
+- [dict] A userale log describing a mouse event.
+
+#### handleMoveEvents(event_type, event, object)
+Returns the userale log representing all move events.
+
+> **Parameters:**
+- event_type – [str] The string representation of the type of event being 
triggered by the user.
+- event – [QEvent] The base class for all event classes.
+- object – [QObject] The base class for all Qt objects.
+
+> **Returns:**
+- [dict] A userale log describing a drag event.
+
+#### handleResizeEvents(event_type, event, object)
+Returns the userale log representing all resize events.
+
+> **Parameters:**
+- event_type – [str] The string representation of the type of event being 
triggered by the user.
+- event – [QEvent] The base class for all event classes.
+- object – [QObject] The base class for all Qt objects.
+**Returns:**
+- [dict] A userale log describing a resize event.
+
+#### handleScrollEvents(event_type, event, object)
+Returns the userale log representing all scroll events.
+
+> **Parameters:**
+- event_type – [str] The string representation of the type of event being 
triggered by the user.
+- event – [QEvent] The base class for all event classes.
+- object – [QObject] The base class for all Qt objects.
+
+> **Returns:**
+- [dict] A userale log describing a scroll event.
+
+#### timerEvent(event)
+Routinely dump data to file or send over the network
+
+> **Parameters:**
+- object – [list] List of events
+
+> **Returns:**
+- [void] Emit events to file

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/useralepyqt/changelog.md
----------------------------------------------------------------------
diff --git a/_docs/useralepyqt/changelog.md b/_docs/useralepyqt/changelog.md
new file mode 100644
index 0000000..6ca3556
--- /dev/null
+++ b/_docs/useralepyqt/changelog.md
@@ -0,0 +1,53 @@
+---
+title: Changelog
+component: useralepyqt
+priority: 99
+---
+
+### 0.1.5 (2016-09-19)
+
+- clientTime field is represented in ISO 8601 format.
+- Sampling mouseenter, mouseleave, and dragmove events by resolution parameter.
+- Batch dumping all logs to file by interval parameter.
+- Added Apache license headers.
+- Updated all documentation.
+- Updated versioning numbers.
+- Added docker support.
+
+### 0.1.4 (2016-08-04)
+
+- New events Apache UserAle is tracking:
+  - move
+  - resize
+  - scroll
+- Remove timer from dragdrop log due to incorrect time being recorded.
+- Session id is autogenerated if not passed into configuration.
+
+### 0.1.3 (2016-08-02)
+
+- New events Apache UserAle is tracking:
+  - mouseenter
+  - mouseleave
+
+### 0.1.2 (2016-08-01)
+
+- The elapsed time for a drag event is being recorded in the dragdrop log.
+
+### 0.1.1 (2016-07-29)
+
+- All logs will be stored to file called userale.log (configurable).
+- Users can specify which events to capture by passing in a list of event keys 
when instantiating Apache UserAle.
+- These are the events Apache UserAle is tracking:
+  - mouseup
+  - mousedown
+  - mousemove
+  - keypress (optional)
+  - keydown (optional)
+  - dragenter
+  - dragleave
+  - dragmove
+  - dragdrop
+
+### 0.1.0 (2016-06-24)
+
+- Initial release.

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/useralepyqt/index.md
----------------------------------------------------------------------
diff --git a/_docs/useralepyqt/index.md b/_docs/useralepyqt/index.md
new file mode 100644
index 0000000..7443ecf
--- /dev/null
+++ b/_docs/useralepyqt/index.md
@@ -0,0 +1,111 @@
+---
+title: Installation
+component: useralepyqt
+permalink: /docs/useralepyqt/
+priority: 0
+---
+
+Apache UserALE.PyQt5 is the UserALE client for PyQt5 applications.  It 
provides an easy way to generate highly detailed log streams from any PyQt5 
application.
+
+### Requirements
+
+- Python 3.5 or above
+- PyQt5, version 5.3 or above
+- pip3, see requirements.txt
+
+### Installing UserALE.PyQt5
+
+The first step is to install Apache UserALE.PyQt5. First, checkout the latest 
version of Apache UserALE.PyQt5 from our Git repository.
+
+  ```shell
+  $ git clone 
https://git-wip-us.apache.org/repos/asf/incubator-senssoft-userale-pyqt5.git
+  ```
+
+Apache UserALE.PyQt5 is a python3 project, so it can be installed like any 
other python library. Several operating systems (Mac OS X, Major Versions of 
Linux/BSD) have Python3 pre-installed, so you should just have to run
+
+  ```shell
+  $ easy_install3 userale
+  ```
+
+      or
+
+  ```shell
+  $ pip3 install userale
+  ```
+
+Users are strongly recommended to install Apache UserALE.PyQt5 in a 
virtualenv. Instructions to setup an virtual environment will be explained 
below.
+
+> **Note**
+> Apache UserALE.PyQt5 requires that PyQt5 and the Qt5 bindings has been 
installed. Instructions to install PyQt5 and Qt5 in a virtual environment will 
be left to the user.
+
+> **Note**
+> When the package is installed via easy_install3 or pip3 this function will 
be bound to the userale executable in the Python installation’s bin directory 
(on Windows - the Scripts directory).
+
+### Installing Apache UserALE.PyQt5 in an Virtual Environment
+
+There are multiple ways to create virtual environments for a Python3 
application. virtualenv is a one of those tools to create isolated Python 
environments. virtualenv creates a folder which contains all the necessary 
executables to use the packages that the UserAle project would need.
+
+Start by changing directory into the root of Apache UserALE.PyQt5’s project 
directory, and then use the virtualenv command-line tool to create a new 
environment:
+
+  ```shell
+  $ virtualenv --python=/usr/bin/python3 env
+  ```
+
+Optionally, Python3 has built in support for virtual environments.
+
+  ```shell
+  $ mkdir env
+  $ python3 -m venv env
+  ```
+
+Activate environment:
+
+  ```shell
+  $ source env/bin/activate
+  ```
+
+Install UserAle requirements:
+
+  ```shell
+  $ env/bin/pip3 install -r requirements.txt
+  ```
+
+To build the source code and run all unit tests.
+
+  ```shell
+  $ env/bin/python3 setup.py develop test
+  ```
+
+Deactivate environment
+
+  ```shell
+  $ deactivate
+  ```
+
+### Installing Documentation
+
+First, install the documentation dependencies:
+
+  ```shell
+  $ env/bin/pip3 install -r doc_requirements.txt
+  ```
+
+To build Apache UserALE.PyQt5’s documentation, create a directory at the 
root level of /userale.pyqt5 called userale.pyqt5-docs.
+
+  ```shell
+  $ mkdir userale.pyqt5-docs & cd userale.pyqt5-docs
+  ```
+
+Execute build command from inside the top-level doc/ directory:
+
+  ```shell
+  $ make html
+  ```
+
+This should build the documentation in your shell, and output HTML. At then 
end, it should say something about documents being ready in 
userale.pyqt5-docs/html.
+
+You can now open them in your browser by typing
+
+  ```shell
+  $ open userale.pyqt5-docs/html/index.html
+  ```

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_docs/useralepyqt/start.md
----------------------------------------------------------------------
diff --git a/_docs/useralepyqt/start.md b/_docs/useralepyqt/start.md
new file mode 100644
index 0000000..e268f2f
--- /dev/null
+++ b/_docs/useralepyqt/start.md
@@ -0,0 +1,59 @@
+---
+title: Getting Started
+component: useralepyqt
+priority: 1
+---
+
+### Instrumenting Your Application Globally with Apache UserALE.PyQt5
+
+It’s very simple to instrument a PyQt5 application with Apache 
UserALE.PyQt5. Simply import the Apache UserALE.PyQt5 library and register it 
with your application.
+
+Below is an example PyQt5 application taken from ZetCode PyQt5 tutorial 
instrumented with Apache UserALE.PyQt5.
+
+  ```python
+  import sys
+  from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QApplication, 
QMessageBox
+  from PyQt5.QtCore import QCoreApplication, QObject, QEvent
+
+  from userale.ale import Ale
+
+  class TestApplication (QWidget):
+
+      def __init__(self):
+          super().__init__()
+          self.initUI()
+
+      def initUI(self):
+          qbtn = QPushButton('Quit', self)
+          qbtn.setObjectName ("testApplicationButton")
+          qbtn.clicked.connect(QCoreApplication.instance().quit)
+          qbtn.resize(qbtn.sizeHint())
+          qbtn.move(50, 50)
+
+          self.setGeometry(300, 300, 250, 150)
+          self.setWindowTitle('Quit button')
+          self.show()
+
+  if __name__ == '__main__':
+      app = QApplication(sys.argv)
+      ex = TestApplication()
+      # Initiate Apache UserALE.PyQt5
+      ale = Ale (output="mouse.log", user="testUser", toolversion="0.0.1")
+      # install globally
+      app.installEventFilter (ale)
+
+      sys.exit (app.exec_())
+  ```
+
+Before we enter the mainloop of the application, UserAle needs to register the 
application to be instrumented. Simply instantiate Apache UserALE.PyQt5 and 
install it as an event filter in your application.
+
+  ```python
+  # Initiate UserAle
+  ale = Ale (output="mouse.log", user="testUser", toolversion="0.0.1")
+  # install globally
+  app.installEventFilter (ale)
+  ```
+
+### Instrumenting Your Application Manually with Apache UserALE.PyQt5
+
+*Todo:* Write guidelines for instrumenting specific PyQt5 Widgets with Apache 
UserALE.PyQt5.

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_includes/doc_sidebar.html
----------------------------------------------------------------------
diff --git a/_includes/doc_sidebar.html b/_includes/doc_sidebar.html
new file mode 100644
index 0000000..96ad98c
--- /dev/null
+++ b/_includes/doc_sidebar.html
@@ -0,0 +1,174 @@
+{% assign senssoft = site.docs | where:"component", "senssoft" | sort: 
"priority" %}
+{% assign system = site.docs | where:"component", "system" | sort: "priority" 
%}
+{% assign userale = site.docs | where:"component", "userale" | sort: 
"priority" %}
+{% assign useralejs = site.docs | where:"component", "useralejs" | sort: 
"priority" %}
+{% assign useralepyqt = site.docs | where:"component", "useralepyqt" | sort: 
"priority" %}
+{% assign distill = site.docs | where:"component", "distill" | sort: 
"priority" %}
+{% assign tap = site.docs | where:"component", "tap" | sort: "priority" %}
+{% assign stout = site.docs | where:"component", "stout" | sort: "priority" %}
+
+<!-- <div class="ui inverted list">
+  <a class="item" href="{{ '/docs' | prepend: site.baseurl }}">About the 
Docs</a>
+</div> -->
+<div id="docs-nav" class="ui inverted accordion">
+  {% if page.component == "senssoft" %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    Apache SensSoft
+  </div>
+  {% if page.component == "senssoft" %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in senssoft %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+
+
+  {% if page.component == 'system' %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    System
+  </div>
+  {% if page.component == 'system' %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in system %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+
+  {% if page.component == 'userale' %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    UserALE
+  </div>
+  {% if page.component == 'userale' %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in userale %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+
+  {% if page.component == 'useralejs' %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    UserALE.js
+  </div>
+  {% if page.component == 'useralejs' %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in useralejs %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+
+  {% if page.component == 'useralepyqt' %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    UserALE.pyqt
+  </div>
+  {% if page.component == 'useralepyqt' %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in useralepyqt %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+
+  {% if page.component == 'distill' %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    Distill
+  </div>
+  {% if page.component == 'distill' %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in distill %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+
+  {% if page.component == 'tap' %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    Tap
+  </div>
+  {% if page.component == 'tap' %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in tap %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+
+  {% if page.component == 'stout' %}
+    <div class="active title">
+  {% else %}
+    <div class="title">
+  {% endif %}
+    <i class="dropdown icon"></i>
+    Stout
+  </div>
+  {% if page.component == 'stout' %}
+    <div class="active content">
+  {% else %}
+    <div class="content">
+  {% endif %}
+    <div class="ui inverted bulleted list docs-list">
+      {% for doc in stout %}
+        <a class="item" href="{{ doc.url }}">{{ doc.title }}</a>
+      {% endfor %}
+    </div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_includes/footer.html
----------------------------------------------------------------------
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644
index 0000000..43ad6df
--- /dev/null
+++ b/_includes/footer.html
@@ -0,0 +1,60 @@
+<div class="footer ui inverted very padded vertical segment">
+  <div class="ui vertical segment">
+    <div class="ui four column grid">
+      <div class="column">
+        <h4 class="ui inverted header">About</h4>
+        <div class="ui inverted link list">
+          <a class="item" href="{{ '/system' | prepend: site.baseurl 
}}">System</a>
+          <a class="item" href="{{ '/userale' | prepend: site.baseurl 
}}">UserALE</a>
+          <a class="item" href="{{ '/distill' | prepend: site.baseurl 
}}">Distill</a>
+          <a class="item" href="{{ '/tap' | prepend: site.baseurl }}">Tap</a>
+          <a class="item" href="{{ '/stout' | prepend: site.baseurl 
}}">Stout</a>
+        </div>
+      </div>
+      <div class="column">
+        <h4 class="ui inverted header">Docs</h4>
+        <div class="ui inverted link list">
+          <a class="item" href="{{ '/docs/system' | prepend: site.baseurl 
}}">System</a>
+          <a class="item" href="{{ '/docs/userale' | prepend: site.baseurl 
}}">UserALE</a>
+          <a class="item" href="{{ '/docs/useralejs' | prepend: site.baseurl 
}}">UserAle.js</a>
+          <a class="item" href="{{ '/docs/useralepyqt' | prepend: site.baseurl 
}}">UserAle.pyqt</a>
+          <a class="item" href="{{ '/docs/distill' | prepend: site.baseurl 
}}">Distill</a>
+          <a class="item" href="{{ '/docs/tap' | prepend: site.baseurl 
}}">Tap</a>
+          <a class="item" href="{{ '/docs/stout' | prepend: site.baseurl 
}}">Stout</a>
+        </div>
+      </div>
+      <div class="column">
+        <h4 class="ui inverted header">Community</h4>
+        <div class="ui inverted link list">
+          <a class="item" 
href="https://github.com/apache?q=senssoft";>GitHub</a>
+          <a class="item" 
href="http://stackoverflow.com/questions/tagged/apache-senssoft";>StackOverflow</a>
+          <a class="item" 
href="https://issues.apache.org/jira/browse/SENSSOFT";>Jira Issue Tracker</a>
+          <a class="item" 
href="https://cwiki.apache.org/confluence/display/SENSSOFT";>Project Wiki</a>
+          <a class="item" href="https://twitter.com/apachesenssoft";>Twitter</a>
+        </div>
+      </div>
+      <div class="column">
+        <h4 class="ui inverted header">Apache</h4>
+        <div class="ui inverted link list">
+          <a class="item" 
href="http://www.apache.org/licenses/LICENSE-2.0.html";>License</a>
+          <a class="item" href="http://www.apache.org/";>Apache Software 
Foundation</a>
+          <a class="item" href="http://incubator.apache.org/";>Apache 
Incubator</a>
+          <a class="item" 
href="http://www.apache.org/foundation/sponsorship.html";>Sponsor Apache</a>
+          <a class="item" 
href="http://www.apache.org/foundation/thanks.html";>Thank you</a>
+        </div>
+      </div>
+    </div>
+  </div>
+  <div class="ui inverted vertical segment">
+    <div class="ui two column middle aligned grid">
+      <div class="column">
+        Apache SensSoft is an effort undergoing incubation at The Apache 
Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is 
required of all newly accepted projects until a further review indicates that 
the infrastructure, communications, and decision making process have stabilized 
in a manner consistent with other successful ASF projects. While incubation 
status is not necessarily a reflection of the completeness or stability of the 
code, it does indicate that the project has yet to be fully endorsed by the ASF.
+      </div>
+      <div class="center aligned column">
+        <img class="component-image" src="/images/incubator-logo-white.png">
+        <br>
+        Copyright © 2017 The Apache Software Foundation, Licensed under the 
Apache License, Version 2.0.  Apache, the Apache feather logo, and the Apache 
Incubator logo are trademarks of The Apache Software Foundation.  Software as a 
Sensor is a trademark of the Charles Stark Draper Laboratory, Inc.
+      </div>
+    </div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_includes/head.html
----------------------------------------------------------------------
diff --git a/_includes/head.html b/_includes/head.html
new file mode 100644
index 0000000..dd9cef5
--- /dev/null
+++ b/_includes/head.html
@@ -0,0 +1,22 @@
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+
+  <title>{% if page.title %}{{ page.title | escape }}{% else %}{{ site.title | 
escape }}{% endif %}</title>
+  <meta name="description" content="{{ page.excerpt | default: 
site.description | strip_html | normalize_whitespace | truncate: 160 | escape 
}}">
+
+  <link rel="stylesheet" type="text/css" 
href="/semantic/dist/semantic.min.css">
+  <script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js";></script>
+  <script src="/semantic/dist/semantic.min.js"></script>
+  <script src="https://d3js.org/d3.v4.min.js";></script>
+  <script src="/js/main.js"></script>
+
+  <link rel="stylesheet" href="{{ "/assets/main.css" | relative_url }}">
+  <link rel="canonical" href="{{ page.url | replace:'index.html','' | 
absolute_url }}">
+  <link rel="alternate" type="application/rss+xml" title="{{ site.title | 
escape }}" href="{{ "/feed.xml" | relative_url }}">
+
+  {% if jekyll.environment == 'production' and site.google_analytics %}
+  {% include google-analytics.html %}
+  {% endif %}
+</head>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_includes/header.html
----------------------------------------------------------------------
diff --git a/_includes/header.html b/_includes/header.html
new file mode 100644
index 0000000..4dd1104
--- /dev/null
+++ b/_includes/header.html
@@ -0,0 +1,34 @@
+<div class="site-header">
+  <div id="main-menu" class="ui inverted padded fixed top borderless menu">
+    <a class="site-title" href="{{ site.baseurl }}/">
+      <h3 class="ui inverted header item">Apache SensSoft</h3>
+    </a>
+
+    <div class="right menu">
+      <div class="ui dropdown item">
+        Components
+        <div class="menu">
+          <a class="item" href="{{ '/system' | prepend: site.baseurl 
}}">System</a>
+          <a class="item" href="{{ '/userale' | prepend: site.baseurl 
}}">UserALE</a>
+          <a class="item" href="{{ '/distill' | prepend: site.baseurl 
}}">Distill</a>
+          <a class="item" href="{{ '/tap' | prepend: site.baseurl }}">Tap</a>
+          <a class="item" href="{{ '/stout' | prepend: site.baseurl 
}}">Stout</a>
+        </div>
+      </div>
+      <div class="ui dropdown item">
+        <a href="{{ '/docs' | prepend: site.baseurl }}">Docs</a>
+        <div class="menu">
+          <a class="item" href="{{ '/docs/system' | prepend: site.baseurl 
}}">System</a>
+          <a class="item" href="{{ '/docs/userale'| prepend: site.baseurl 
}}">UserALE</a>
+          <a class="item" href="{{ '/docs/useralejs'| prepend: site.baseurl 
}}">UserALE.js</a>
+          <a class="item" href="{{ '/docs/useralepyqt'| prepend: site.baseurl 
}}">UserALE.pyqt</a>
+          <a class="item" href="{{ '/docs/distill'| prepend: site.baseurl 
}}">Distill</a>
+          <a class="item" href="{{ '/docs/tap'| prepend: site.baseurl 
}}">Tap</a>
+          <a class="item" href="{{ '/docs/stout'| prepend: site.baseurl 
}}">Stout</a>
+        </div>
+      </div>
+      <a class="item" href="{{ '/releases' | prepend: site.baseurl 
}}">Releases</a>
+      <a class="item" href="{{ '/community' | prepend: site.baseurl 
}}">Community</a>
+    </div>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_includes/tapDemo.html
----------------------------------------------------------------------
diff --git a/_includes/tapDemo.html b/_includes/tapDemo.html
new file mode 100644
index 0000000..e387e56
--- /dev/null
+++ b/_includes/tapDemo.html
@@ -0,0 +1,93 @@
+<div class="ui {% if include.inverted %}inverted grey{% endif %} very padded 
vertical segment">
+  <div class="ui center aligned text container">
+    <h2 class="ui {% if include.inverted %}inverted{% endif %} header">The 
Bowie Plot</h2>
+    <p>
+      Tap uses the Bowie plot to present your users' micro-workflows and help 
you uncover insights into how your users interact with you apps.  Start on the 
left, with the activity that starts the workflow, sized by the frequency of the 
activity.  Next, the circles in the middle show the second activity in the 
workflow.  The circles are downselected and sized by a graph metric to help 
uncover a particular type of insight.  End on the right with the final activity 
of the workflow.
+    </p>
+  </div>
+
+  <div class="ui container">
+    <div class="ui padded grid">
+      <div class="four wide middle aligned column">
+        <div class="ui {% if include.inverted %}inverted{% endif %} form">
+          <h3 class="ui {% if include.inverted %}inverted{% endif %} 
header">Graph Metrics</h3>
+
+          <div class="grouped fields">
+            <div class="field">
+              <div class="ui radio checkbox">
+                <input type="radio" name="metric" value="out_degree" 
checked></input>
+                <label>Out Degree</label>
+              </div>
+            </div>
+
+            <div class="field">
+              <div class="ui radio checkbox">
+                <input type="radio" name="metric" value="in_degree"></input>
+                <label>In Degree</label>
+              </div>
+            </div>
+
+            <div class="field">
+              <div class="ui radio checkbox">
+                <input type="radio" name="metric" 
value="betweenness_cent_dir_weighted"></input>
+                <label>Weighted Betweenness</label>
+              </div>
+            </div>
+
+            <div class="field">
+              <div class="ui radio checkbox">
+                <input type="radio" name="metric" 
value="closeness_cent_dir_weighted"></input>
+                <label>Weighted Closeness</label>
+              </div>
+            </div>
+
+            <div class="field">
+              <div class="ui radio checkbox">
+                <input type="radio" name="metric" 
value="closeness_cent_dir_unweighted"></input>
+                <label>Unweighted Closeness</label>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+
+      <div class="twelve wide center aligned column">
+        <div class="ui basic row segment">
+          <div id="bowie"></div>
+        </div>
+      </div>
+    </div>
+
+    <div id="metric-explanation" class="ui center aligned text 
container"></div>
+  </div>
+</div>
+
+<script src="/js/bowiePlot.js"></script>
+<script>
+  $(document).ready(function () {
+    // Metric explanations
+    var metricExplanations = {
+      'out_degree': 'Out degree describes how often an activity was a source.  
How often did a micro-workflow start with this activity?  This could indicate 
an entry point to your app or the start of a particularly common workflow.',
+      'in_degree': 'In degree describes how often an activity was a sink.  How 
often did a micro-workflow end with this activity?  This could indicate a final 
confirmation, exit navigation, or a place the user got stuck.',
+      'betweenness_cent_dir_weighted': 'Betweenness centrality describes how 
often an activity was passed through.  This indicates a common intermediate 
activity, like a busy intersection of your app.',
+      'closeness_cent_dir_weighted': 'Closeness centrality indicates how 
"close" an activity is to all others.  A higher closeness indicates an activity 
that was involved in more workflows.  Weighted closeness focuses on closeness 
to the most common activities, rather than to all equally.',
+      'closeness_cent_dir_unweighted': 'Closeness centrality indicates how 
"close" an activity is to all others.  A higher closeness indicates an activity 
that was involved in more workflows. Unweighted closeness focuses on closeness 
to all activities equally, regardless of how often each activity occurred.'
+    };
+
+    // Change metric
+    function changeMetric() {
+      var metric = $('input[name=metric]:checked').val();
+      $('#metric-explanation').html(metricExplanations[metric]);
+      Bowie.update(metric);
+    }
+
+    // Initialize radio buttons
+    $('.ui.radio.checkbox').checkbox({
+      onChange: changeMetric
+    });
+
+    // Initialize
+    Bowie.create();
+    changeMetric();
+  });
+</script>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_includes/useralejsDemo.html
----------------------------------------------------------------------
diff --git a/_includes/useralejsDemo.html b/_includes/useralejsDemo.html
new file mode 100644
index 0000000..5416b2e
--- /dev/null
+++ b/_includes/useralejsDemo.html
@@ -0,0 +1,134 @@
+<div class="ui {% if include.inverted %}inverted grey{% endif %} very padded 
vertical segment">
+  <div class="ui center aligned text container">
+    <h2 class="ui {% if include.inverted %}inverted{% endif %} 
header">UserALE.js</h2>
+    <p>
+      UserALE.js is the DOM/JavaScript client for UserALE.  Every user 
activity is logged and sent to the UserALE backend for storage and analysis by 
Distill.
+    </p>
+    <div class="ui basic vertical segment">
+      <div id="start-button" class="ui green button">Start Logging</div>
+      <div id="stop-button" class="ui red button">Pause Logging</div>
+    </div>
+  </div>
+
+  <div class="ui container">
+    <div class="ui equal height two column grid">
+      <div class="center aligned column">
+        <div class="ui basic row segment">
+          <h4 class="ui dividing header">Buttons</h4>
+          <div class="ui blue button">Blue</div>
+          <div class="ui yellow button">Yellow</div>
+          <div class="ui green button">Green</div>
+          <div class="ui red button">Red</div>
+        </div>
+
+        <div class="ui form">
+          <h4 class="ui dividing header">Checkboxes</h4>
+          <div class="field">
+            <div class="two fields">
+              <div class="field">
+                <input type="checkbox">
+                <label>Checked!</label>
+              </div>
+              <div class="field">
+                <div class="two fields">
+                  <div class="field">
+                    <div class="ui radio checkbox">
+                      <input type="radio" name="demo-checkbox">
+                      <label>Yes</label>
+                    </div>
+                  </div>
+                  <div class="field">
+                    <div class="ui radio checkbox">
+                      <input type="radio" name="demo-checkbox">
+                      <label>No</label>
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+
+          <h4 class="ui dividing header">Inputs</h4>
+          <div class="field">
+            <div class="two fields">
+              <div class="field">
+                <div class="ui labeled input">
+                  <div class="ui grey label">Text</div>
+                  <input type="text">
+                </div>
+              </div>
+
+              <div class="field">
+                <div id="demo-dropdown" class="ui fluid selection dropdown">
+                  <input type="hidden" name="senssoft-component">
+                  <i class="dropdown icon"></i>
+                  <div class="default text">Select Component</div>
+                  <div class="menu">
+                    <div class="item">UserALE</div>
+                    <div class="item">Distill</div>
+                    <div class="item">Tap</div>
+                    <div class="item">Stout</div>
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+
+          <h4 class="ui dividing header">Maps</h4>
+          <div class="ui basic row segment">
+            <div id="map-example"></div>
+          </div>
+
+
+        </div>
+      </div>
+
+      <div id="log-feed" class="center aligned column">
+        <div class="ui fluid row segment">
+
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+
+<link rel="stylesheet" 
href="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css"; />
+<script src="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js";></script>
+<script src="/js/userale-demo.min.js" data-url=""></script>
+
+<script>
+  $(document).ready(function () {
+    $('#demo-dropdown').dropdown();
+    $('.ui.checkbox').checkbox();
+
+    $('#start-button').on('click', userale.start);
+    $('#stop-button').on('click', userale.stop);
+    userale.options({
+      logCb: addLog,
+      noSend: true
+    });
+
+    var map = L.map('map-example').setView([42.3601, -71.0589], 13);
+    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
+      attribution: '&copy; <a 
href="http://osm.org/copyright";>OpenStreetMap</a> contributors'
+    }).addTo(map);
+
+    function addLog(log) {
+      var html = '<div class="log ui fluid row segment">' + 
JSON.stringify(log) + '</div>';
+      $('#log-feed').prepend(html);
+    }
+
+    function clearLogs() {
+      setTimeout(function () {
+        var $feed = $('#log-feed .log');
+        if ($feed.length > 10) {
+          $feed.slice(9).remove();
+        }
+        clearLogs();
+      }, 1000);
+    }
+
+    clearLogs();
+  });
+</script>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_layouts/basic.html
----------------------------------------------------------------------
diff --git a/_layouts/basic.html b/_layouts/basic.html
new file mode 100644
index 0000000..cc0dc09
--- /dev/null
+++ b/_layouts/basic.html
@@ -0,0 +1,12 @@
+---
+layout: default
+---
+
+<div class="page-wrapper ui text container">
+  <h1 class="ui header">
+    {{ page.title }}
+  </h1>
+  <div class="page-content">
+    {{ content }}
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_layouts/component.html
----------------------------------------------------------------------
diff --git a/_layouts/component.html b/_layouts/component.html
new file mode 100644
index 0000000..06a8435
--- /dev/null
+++ b/_layouts/component.html
@@ -0,0 +1,60 @@
+---
+layout: default
+---
+
+{% if page.image %}
+  <div class="ui image-masthead masthead padded center aligned inverted 
vertical segment">
+    <img class="component-image" src="{{ page.image }}">
+  </div>
+{% else %}
+  <div class="ui blank-masthead masthead padded center aligned inverted 
vertical segment">
+    <h1 class="ui header">{{ page.title }}</h1>
+    <h2 class="ui header">{{ page.subtitle }}</h2>
+  </div>
+{% endif %}
+
+<div class="ui very padded vertical segment">
+  <div class="ui center aligned text container">
+    <p>
+      {{ page.description }}
+    </p>
+  </div>
+</div>
+
+<div class="ui inverted grey very padded vertical segment">
+  <div class="ui center aligned text container">
+    <h2 class="ui inverted header">Features</h2>
+    {% for feature in page.features %}
+      <div class="ui basic padded vertical segment">
+        <div class="ui middle aligned two column grid">
+          <div class="column">
+            <i class="huge circular inverted {{ feature.color }} {{ 
feature.icon }} icon"></i>
+          </div>
+          <div class="column">
+            <h3 class="ui inverted header">{{ feature.title }}</h3>
+            <div class="feature-description">
+              {{ feature.description }}
+            </div>
+          </div>
+        </div>
+      </div>
+    {% endfor %}
+  </div>
+</div>
+
+{{ content }}
+
+{% assign mod = page.contentCount | modulo: 2 %}
+<div class="ui {% if mod == 1 %}inverted grey{% endif %} very padded vertical 
segment">
+  <div class="ui center aligned text container">
+    <h2 class="ui {% if mod == 1 %}inverted{% endif %} header">
+      Ready to try {{ page.component }}?
+    </h2>
+    <a class="ui big blue button" href="{{ '/releases' | prepend: site.baseurl 
}}">
+      Get the Release
+    </a>
+    <a class="ui big yellow button" href="{{ '/docs' | prepend: site.baseurl | 
append: page.permalink }}">
+      Read the Docs
+    </a>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_layouts/default.html
----------------------------------------------------------------------
diff --git a/_layouts/default.html b/_layouts/default.html
new file mode 100644
index 0000000..68e7a2b
--- /dev/null
+++ b/_layouts/default.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="{{ page.lang | default: site.lang | default: "en" }}">
+
+  {% include head.html %}
+
+  <body>
+
+    {% include header.html %}
+
+    <div class="main-wrapper">
+      {{ content }}
+    </div>
+
+    {% include footer.html %}
+
+  </body>
+
+</html>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_layouts/docs.html
----------------------------------------------------------------------
diff --git a/_layouts/docs.html b/_layouts/docs.html
new file mode 100644
index 0000000..dfd02d3
--- /dev/null
+++ b/_layouts/docs.html
@@ -0,0 +1,13 @@
+---
+layout: default
+---
+
+<div class="docs-wrapper">
+  <div class="docs-sidebar">
+    {% include doc_sidebar.html %}
+  </div>
+  <div class="docs-content">
+    <h2 class="ui header">{{ page.title }}</h2>
+    {{ content }}
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_pages/community.html
----------------------------------------------------------------------
diff --git a/_pages/community.html b/_pages/community.html
new file mode 100644
index 0000000..c079016
--- /dev/null
+++ b/_pages/community.html
@@ -0,0 +1,98 @@
+---
+layout: basic
+permalink: /community/
+title: Community
+---
+
+<div class="ui vertical segment">
+  <p>
+    The Apache SensSoft team happily welcomes contributors and supporters of 
our work.  Contributions, bug reports, and suggestions are welcome for the core 
products, website, documentation, and everything else!  See our <a href="{{ 
'/docs/system/contributing' | prepend: site.baseurl }}">docs</a> for more 
information on submitting effective contributions and bug reports.
+  </p>
+</div>
+
+<div class="ui vertical segment">
+  <h2 class="ui header">Mailing Lists</h2>
+  <h3 class="ui header">
+    <i class="user icon"></i>
+    <div class="content">Users</div>
+  </h3>
+  <p>
+    For users of Apache SensSoft who want to keep up to date with new releases 
and community highlights.  To subscribe, email <a 
href="mailto:user-subscr...@senssoft.incubator.apache.org";>user-subscr...@senssoft.incubator.apache.org</a>.
+  </p>
+  <h3 class="ui header">
+    <i class="code icon"></i>
+    <div class="content">Dev</div>
+  </h3>
+  <p>
+    For contributors to Apache SensSoft or those interested in ongoing design 
and development efforts.  To subscribe, email <a 
href="mailto:dev-subscr...@senssoft.incubator.apache.org";>dev-subscr...@senssoft.incubator.apache.org</a>.
+  </p>
+  <h3 class="ui header">
+    <i class="upload icon"></i>
+    <div class="content">Commits</div>
+  </h3>
+  <p>
+    For emails-on-commit across all Apache SensSoft products.  To subscribe, 
email <a 
href="mailto:commits-subscr...@senssoft.incubator.apache.org";>commits-subscr...@senssoft.incubator.apache.org</a>.
+  </p>
+</div>
+
+<div class="ui vertical segment">
+  <h2 class="ui header">Community Hubs</h2>
+  <h3 class="ui header">
+    <i class="github icon"></i>
+    <div class="content">GitHub</div>
+  </h3>
+  <p>
+    <a href="https://github.com/apache?q=senssoft";>Find our code on Github</a> 
to browse and contribute.
+  </p>
+  <h3 class="ui header">
+    <i class="twitter icon"></i>
+    <div class="content">Twitter</div>
+  </h3>
+  <p>
+    <a href="https://twitter.com/apachesenssoft";>Follow us on Twitter</a> to 
keep up to date on Apache SensSoft and related developments.
+  </p>
+  <h3 class="ui header">
+    <i class="stack overflow icon"></i>
+    <div class="content">StackOverflow</div>
+  </h3>
+  <p>
+    Get your questions answered on <a 
href="http://stackoverflow.com/questions/tagged/apache-senssoft";>StackOverflow</a>.
+  </p>
+  <h3 class="ui header">
+    <i class="bug icon"></i>
+    <div class="content">Issues and Bugs</div>
+  </h3>
+  <p>
+    Visit our <a href="https://issues.apache.org/jira/browse/SENSSOFT";>Jira 
Issue Tracker</a> for full information on current developments, bugs, etc.
+  </p>
+  <h3 class="ui header">
+    <i class="sticky note icon"></i>
+    <div class="content">Wiki</div>
+  </h3>
+  <p>
+    See our <a 
href="https://cwiki.apache.org/confluence/display/SENSSOFT";>wiki</a> for 
detailed information on project organization, roadmaps, etc.
+  </p>
+</div>
+
+<div class="ui vertical segment">
+  <h2 class="ui header">Contributors</h2>
+  <p>
+    Thank you to all our contributors!  Want to be added?  Contribute and <a 
href="mailto:d...@senssoft.incubator.apache.org";>contact us!</a>
+  </p>
+  <ul class="ui list">
+    <li>Michelle Beard</li>
+    <li>Hugh Enxing</li>
+    <li>Kyle Finley</li>
+    <li>Robert Foley</li>
+    <li>Alex Ford</li>
+    <li>Clay Gimenez</li>
+    <li>Laura Mariano</li>
+    <li>Lewis John McGibbney</li>
+    <li>Joshua Poore</li>
+    <li>David Reed</li>
+    <li>Fei Sun</li>
+    <li>Dan Traviglia</li>
+    <li>Arthi Vezhavendan</li>
+    <li>Steve York</li>
+  </ul>
+</div>

http://git-wip-us.apache.org/repos/asf/incubator-senssoft/blob/855d3ab1/_pages/distill.html
----------------------------------------------------------------------
diff --git a/_pages/distill.html b/_pages/distill.html
new file mode 100644
index 0000000..3536e5c
--- /dev/null
+++ b/_pages/distill.html
@@ -0,0 +1,33 @@
+---
+layout: component
+permalink: /distill/
+title: Distill
+image: /images/distill_inverted.png
+component: Distill
+
+description: Apache Distill is an analytics framework for handling and 
analyzing UserALE data. Distill allows you to focus on the data you want and 
model it. Distill empowers you to learn more from your data than any commercial 
service; use Distill's analytic libraries to generate statistics on how users 
interact with different elements of your application and also understand how 
users interact with your applications. Distill specializes in models of 
sequence and workflow so that you can understand how users experiment with your 
application and whether they interact with your application the way you 
expected. Distill is written in Python and built for scalable growth and 
customization.
+
+features:
+  -
+    icon: search
+    color: blue
+    title: Easy, efficient queries
+    description: Distill utilizes RESTful APIs to streamline making calls to 
your UserALE log database.
+  -
+    icon: object ungroup
+    color: yellow
+    title: Segment your data
+    description: Retrieve on the cases or fields that you want.
+  -
+    icon: line chart
+    color: red
+    title: Compute gross usage trends
+    description: Distill comes with built-in statistics libraries so that you 
can see how much your application is being used and which elements users rely 
on most.
+  -
+    icon: ordered list
+    color: green
+    title: Model workflow
+    description: Distill comes with built in graph libraries for studying how 
user behaviors are sequenced in time allowing you to explore models of how user 
behavior unfolds over time.
+
+contentCount: 0
+---


Reply via email to