Muvr is a demonstration of an application that uses a wearable device (in this case a Pebble watch) in combination with a mobile app to submit physical (i.e. accelerometer, compass) and biological (i.e. heart rate) information to a CQRS/ES cluster for analysis. The system consists of several components that reside in their own repositories.
Muvr-iOS is a fitness app showcasing the possibilities of mobile analytics. The app collects data from sensors (e.g. a pebble watch) and uses the information to classify your movements to keep track of your workout. This part of the project is mostly written using Swift 2. Some classes use Objective-C / Objective-C++ for easier interfacing with external libraries.
Muvr-Pebble is a small pebble watch fitness tracking application. It captures movement data, displays classification results and keeps track of your exercise plan. This part of the project is written in plain old C.
Muvr-Server is a CQRS/ES cluster implementation for handling large incoming data streams from mobile devices. t is event-driven: throughout the application, it uses message-passing to provide loose-coupling and asynchrony between components. It is elastic: the users and their exercises—the domain—is sharded across the cluster. It is resilient: its components can recover at the appropriate level, be it single actor, trees of actors or entire JVMs. It also uses event sourcing to ensure that even catastrophic failures and the inevitable bugs can be recovered from. It is responsive: it does not block, and it is capable of distributing the load across the cluster.
This part of the project is written using scala and its build tool sbt.
...Here is an example of what the captured data looks like...
This part of the project can be viewed as a data science playground. The models used in the application are trained using spark jobs written in either scala or python. Tasks that require more explorational analysis can be done using R.