Avatar of John Giorgi

Our stack roughly divides into three major components, the front-end, back-end and the data storage.

For the front-end, we have decided to go with React Native via Expo. This allows us to target both Android and iOS with a single codebase. Expo provides "managed workflows" and an SDK that will simplify development and deployment.

For the back-end, we have decided to use Python. Python is the language of choice for machine learning (ML). It has extensive support for traditional ML algorithms (e.g. random forests) via Scikit-Learn and the SciPy ecosystem. On top of this, our industry partner has provided us their current solution written in Python. We decided to expose the back-end as a REST API using FastAPI. This allows us to nicely separate concerns from the rest of the codebase. FastAPIs use of static type hints, validation with Pydantic, and automated documentation allows us to build better APIs faster.

For data storage we decided to use a MongoDB Atlas, a NoSQL database. We decided to use a NoSQL database because we need to store large amounts of data (e.g data from the wearable IMUs). Moreover, due to the ever changing nature of a startup we require flexibility. NoSQL databases are schema-free which enables us to modify our schema as we see fit.

We plan on using GitHub Actions (GA) to orchestrate our CI/CD. Given GAs broad support of languages and workflows, it's hard to go wrong with this decision. We will also be using GitHub for version control and project management, so having everything in one place is convenient.

The major components of our CI/CD for the backend will consist of black for autoformatting, flake8 for linting, pytest for unit-testing, and mypy for static type checking and codecov for coverage reporting. We plan to use separate Docker containers to package the back-end and front-end components and use Docker Compose to launch the app. This allows us to better separate concerns, manage dependencies, and ensure our app is deployable anywhere.

READ MORE
8 upvotes·108.9K views

We decided to expose our small machine learning (ML) pipeline as a REST API. This allows us to nicely separate concerns from the rest of the codebase. There are two very popular choices in Python for building APIs: Flask and FastAPI. We have experience with both, but find that FastAPIs use of static type hints and validation with Pydantic allow us to build better APIs faster.

READ MORE
3 upvotes·52.9K views

We plan to use Docker to package all the back-end components, including a REST API written with FastAPI. The Docker environment will help us manage our Python dependencies (including our ML stack comprised of Scikit-learn and the SciPy ecosystem), expose our REST API for interfacing with our front-end, and deploying the REST API to production. Members of the dev team have successfully used Docker to serve simple ML REST APIs in the past.

READ MORE
3 upvotes·5K views

Python is the language of choice for machine learning (ML) and artificial intelligence (AI). It has extensive support for traditional ML (e.g. random forests) via the SciPy ecosystem, and deep learning via frameworks like TensorFlow and PyTorch. On top of this, one member of the dev team is intimately familiar with Python, and our industry partner has provided us their current solution written in Python.

READ MORE
3 upvotes·4.7K views

We have decided to use pytest as our unit test framework for all Python code, including the REST API we plan to build in FastAPI. pytest is very easy to pick up, allowing you to write unit tests using pythons built-in assert keyword. It also supports more complexity by allowing you to group unit tests within classes. Finally, there is great support of code coverage tools like codecov, which we will also leverage in our CI/CD.

READ MORE
3 upvotes·1.3K views

When choosing a tool to help automate our CI/CD, the decision came down to GitHub Actions (GA) or TravisCI. Both are great, but the team has more experience with GA. Given GAs broad support of languages and workflows, it's hard to go wrong with this decision. We will also be using GitHub for version control and project management, so having everything in one place is convenient.

READ MORE
2 upvotes·35.5K views

We chose React Native for two reasons. First, the dev time has experience with web development in JavaScript and React. Secondly, we would like to target iOS and Android with the same codebase. For both of these reasons, React Native was the obvious choice. The dev team can write code in a language and framework they are already familiar with without spending time on the idiosyncrasies of developing for each mobile operating system independently.

READ MORE
2 upvotes·1 comment·561 views
Tariq Alsharif
Tariq Alsharif
·
March 21st 2021 at 11:22AM

Agree, but the problem here that React Native doesn't compatible with all IOS components!

And the second thing, It's not comfortable for any Frontend Developer to develop a project by React Native to be based on libraries!

·
Reply

SciPy is an ecosystem of open-source software that includes NumPy and Pandas. NumPy is a powerful library for array manipulation, and Pandas is extremely useful for manipulating and visualizing tabular data. These tasks are often at the forefront of many machine learning (ML) applications, and our situation is no different. On top of this, our industry partner is already using the SciPy ecosystem in their data analysis and ML pipeline.

READ MORE
2 upvotes·233 views

Because we plan to use React Native to develop our mobile app, using Expo was a no-brainer. Expo provides "managed workflows" and an SDK that will simplify development and deployment considerably. It will further help us achieve our goal of one codebase for both Andriod and iOS.

READ MORE
1 upvote·40 views