<commit_before># Shimmer [![Build Status](https://travis-ci.org/openmhealth/shimmer.svg?branch=develop)](https://travis-ci.org/openmhealth/shimmer)

Shimmer is an application that makes it easy to pull health data from popular third-party APIs, like Runkeeper and Fitbit.
It converts that data into an [Open mHealth compliant format](http://www.openmhealth.org/documentation/#/schema-docs/overview),
letting your application work with clean and clinically meaningful data, irrespective of its origin.   

We currently support the following APIs

* [Fitbit](https://www.fitbit.com/)
* [Google Fit](https://developers.google.com/fit/?hl=en)
* [Jawbone UP](https://jawbone.com/up)
* [Misfit](http://misfit.com/)
* [RunKeeper](https://runkeeper.com/index)
* [Withings](http://www.withings.com/)

And the following APIs are in the works

* [FatSecret](https://www.fatsecret.com/)
* [iHealth](http://www.ihealthlabs.com/)
* [Strava](https://www.strava.com/)

## Concepts
    
TODO add architecture                                  

## Installation

There are two ways to run Shimmer. 

1. You can run Docker containers from pre-built binaries. 
  * This is the fastest way to get up and running and isolates the install from your system.
1. You can build all the code from source and run it natively or in Docker.

### Option 1. Running Docker images

If you don't have Docker and Docker Compose installed, 
<commit_msg>Add concept section to README<commit_after># Shimmer [![Build Status](https://travis-ci.org/openmhealth/shimmer.svg?branch=develop)](https://travis-ci.org/openmhealth/shimmer)

Shimmer is an application that makes it easy to pull health data from popular third-party APIs, like Runkeeper and Fitbit.
It converts that data into an [Open mHealth compliant format](http://www.openmhealth.org/documentation/#/schema-docs/overview),
letting your application work with clean and clinically meaningful data, irrespective of its origin.   

We currently support the following APIs

* [Fitbit](https://www.fitbit.com/)
* [Google Fit](https://developers.google.com/fit/?hl=en)
* [Jawbone UP](https://jawbone.com/up)
* [Misfit](http://misfit.com/)
* [RunKeeper](https://runkeeper.com/index)
* [Withings](http://www.withings.com/)

And the following APIs are in the works

* [FatSecret](https://www.fatsecret.com/)
* [iHealth](http://www.ihealthlabs.com/)
* [Strava](https://www.strava.com/)

## Concepts

Shimmer is made up of a shim-server, individual shims, and a console that provides a GUI that guides user interactions with shimmer.

A *shim* is an adapter that reads raw data from a third-party API (e.g., Jawbone, Fitbit) and converts that data into an Open mHealth compliant data format. It's called a shim because it lets you treat third-party data like Open mHealth compliant data when writing your application. Each shim is specific to a single third-party API and handles the process of authorizing, requesting data, and mapping data for that API. 

Shims generate *data points*, which are self-contained pieces of data that not only contain the relevant health data of interest, but also include header information such as date of creation, acquisition provenance, and data source. This meta information helps describe the data and where it came from.

A shim is a library, not an application. To use a shim, it needs to be hosted in the *shim server*. The shim server API lets your application use a shim to read data from a third-party API. This data is available in two formats; the raw format produced by the third-party API and a format normalized to Open mHealth schemas. To make it easier to use the shim server, we've provided a shim server UI that can trigger authentication flows and make requests.    

## Installation

There are two ways to run Shimmer. 

1. You can run Docker containers from pre-built binaries. 
  * This is the fastest way to get up and running and isolates the install from your system.
1. You can build all the code from source and run it natively or in Docker.

### Option 1. Running Docker images

If you don't have Docker and Docker Compose installed, 

{'fraction_non_alphanumeric': 0.09252495738982225, 'fraction_numerical': 0.0014609203798392988, 'mean_word_length': 4.193426042983565, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 16, 'lorem ipsum': 0, 'www.': 12, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5114902', 'n_tokens_mistral': 1197, 'n_tokens_neox': 1133, 'n_words': 506}