Music Enabled Running
ICT & Software Engineering
Client company:FHICT Lectoraat
Saman Ali
Pim Beekmans
Bob Blokland
Zheng-rong Cai
Louis Gian
Kapisiz Onur
Sanjay Soerdien
Project description
The existing codebase has been iterated through several teams over multiple years. Our task is to consolidate & bring maturity to this project—additionally, we set up an Android app. We took the approach of dividing the workload into multiple distinct categories & recognizing the problems. These categories are:
- CI/CD
- Scalability
- Android
Context
Healthcare is important to the context of our project. The Music-Enabled-Running app provides users insight into how music influences the symmetry of their running pattern. For example, a user can start a running session and investigate the analysis of their session when they finish. The analysis shows the user how they ran based on foot sensor data and gait & cadence analysis.
Results
**CI/CD**
We have built, designed & evaluated a fully automated CI/CD pipeline using Jenkins, Rancher, Sonar, and various other tools. When a commit to our repository is made, the following happens:
1. Commit is pushed to Git(lab)
2. Via a webhook, our Jenkins server receives the latest build
3. Jenkins starts installing the dependencies
4. Jenkins builds the application
5. The code is sent to SonarQube for static analysis
6. After the build is done (successfully) the image is sent to a private Docker registry
7. At the end of the Jenkins build, a command is sent to Rancher
8. Rancher redeploys the containers
The result of this laborious work is that roughly 60 seconds after a repository push, the recent changes are visible through our Continuous Deployment.
**Android**
We set out to enable deployment to Android devices to accompany the existing iPhone application. The application contains various components: a WebView, Spotify integration & Bluetooth LE (BLE) management. After experimenting with four different Android frameworks, we ended up using Jetpack Compose with Kotlin. We successfully integrated the WebView into our own Android application. The Spotify & BLE integration unfortunately did not end up succeeding. Since these are essential components, the Android deliverable is focused on a hand-over document, something a new team can iterate further upon.
**Scalability**
To allow for scalability, we packaged the various components into separate Micro Services. We achieved this by deploying a Kubernetes Engine (Rancher) & deploying our Micro Services into various Rancher pods.
The next step was ensuring that the new Services operate in a stateless way. We ran into issues when inspecting the existing codebase which contained a lot of stateful code, e.g. persisting to local files. We refactored this code and made it compatible with a database (MongoDB).
Using Rancher, we can deploy multiple shards that work in a stateless way, enabling wide usage of the app.
About the project group
We are a team of 7 Software Engineers; teaming up to work on the group project. We are 6th semester Fontys students. We are very diverse.
Saman: The Techie
Zheng: The Quirky
Louis: The Teamplayer
Sanjay: The Captain
Bob: The Pioneer
Pim: The Ductaper
Onur: The Communicator