Skip to content

GSoC 2020 Ideas Page

Emmanuel Mulo edited this page Feb 6, 2020 · 11 revisions

Frontend

Idea: State management and routing on the frontend

Overview: The frontend of our data collection web application, Akvo Flow, is build as a single page application (SPA) primarily using the emberjs framework, and following the MVC pattern. Over time, however, we have experienced a number of problems regarding how we manage the state and routing.

We are using controllers to manage the state of the application but this often leads us to having to constantly have checks and safeguards for possible scenarios where there is data that we do not expect or expect but is missing.

In addition we do not have the possibility to share a link to an internal page in the application because we do not have routing setup to change the browser URL depending on the application page being viewed.

Aims:

  • Eliminate and/or isolate frontend state as much as possible
  • Implement routing in the application to enable sharing URL links that deep link straight to a specific section of the application.

Difficulty: Hard

Mentors: Ivan, Emmanuel


Backend


Database

Idea: Convert database access layer from NoSQL to SQL.

Overview: We currently use a NoSQL datastore to persist data. However, our data model and the data integrity requirements are better served with a relational database. We would like to progressively migrate the database access layer from the current one to a SQL database.

Aims:

  • Rewrite the database access layer from NoSQL to SQL.
  • Migrate existing data to a relational database

Difficulty: Hard

Mentors: Ivan, Emmanuel


Android

Idea: GPS Tracks

Overview: Our data collection app features the possibility to define the types of questions that are asked. The app UI then presents the user with a different interface for the user to enter a response accordingly. One of the types of questions is a geoshape question, that enables a user to define points, lines or polygons based on the gps location of the devices. These elements can represent for example, a specific water point, or a path or a plot of a farmer.

When defining a polygon or line, the current functionality of the question requires the user to tap the screen whenever they want to mark a point on the map. For a relatively small shape or line, this works ok, however for cases where the polygon requires users to record a distance that is say a few kilometers, this approach is no longer very user friendly.

Aims:

  • Enable recording a GPS track
  • Enable modifying the GPS track in the map view

Difficulty: Hard

Mentors: Valeria


Idea: Add Screenshot Testing

Overview: Our data collection app has a stable UI which does not change frequently. It would strongly benefit from Screenshot Tests. Screenshot tests simplify UI testing by tracking UI changes between different app changes. Here is a plugin library which simplifies running the screenshot tests https://github.com/Karumi/Shot and can be used for out case. Any other suggested plugin/library proposals can also be considered.

Aims:

  • Prevent UI regressions
  • More confidence in the code
  • Make sure translations fit well in the UI
  • Validate manual testing which can lead to human mistakes

Difficulty: Medium

Mentors: Valeria


Idea: Refactor from using sqlbrite library

Overview: Our data collection app uses the sqlbrite library for sqlite access. The library has been archived by its creator and we would need to move to another library. A good option is to migrate to Room. Moreover we also use SQLITE directly so this also should be migrated to Room. In the application we have 2 databases: one which is used for the cascade question type see. That read only database is created by an external tool. It could be a good starting point for for using Room as it contains only one table. The second database contains all the user data, collected data... etc and is used almost everywhere in the app so it should be migrated in parts.

Aims:

  • Stop using no longer maintained sqlbrite library
  • Unify database access throughout the whole app instead of using sqlbrite and direct SQLITE access.

Difficulty: Hard

Mentors: Valeria


Clone this wiki locally