Giter Club home page Giter Club logo

rural-crowdsourcing-toolkit's Introduction

Crowdsourcing Toolkit for Low-resource Communities

This repository provides code for a crowdsourcing platform that is specifically designed to be inclusive of users from low-resource communities. There are two barriers to inclusion: language and connectivity. Most users in rural communities in India do not speak/understand English, and many of them do not have constant and high-speed data connectivity. This platform address these challenges by 1) providing a fast mechanism to add support for different languages and 2) using a two-tier server architecture to enable people without any data connectivity to still participate on the platform.

Overview of the Platform Architecture

A typical crowdsourcing platform contains two components: a server running in the cloud and a web/mobile client running in the edge. Work requesters register with the server and submit new tasks. Workers register directly with the server to receive new tasks. The server assigns tasks to workers based on the type of task and the skills of the worker. Unfortunately, this setup requires workers to have (constant) access to internet.

To break this assumption, this platform uses a two-tier server architecture. The main server runs in the cloud and interfaces with work requesters to receive new tasks. The second component, the "box" server can be deployed on a device in the field and acts a local crowdsourcing server for the specific region. Workers with a smartphone can directly interact with the box server to receive tasks and submit their responses. The platform assumes intermittent connectivity between the box server and the main server during which time they exchange information. This platform architecture enables two benefits.

  1. The box server can still be run as a cloud instance. As a result, if users in a region have good connectivity, one can setup a virtual instance of the box server for the users and they can participate in the platform seamlessly.

  2. If users in a region do not have any connectivity, then the box server can be run on a physical device. We have currently experimented running the box server on a Raspberry Pi with a 4G dongle. (The codebase needs to be tweaked a little to support this setting. We will work on seamless support for this mode in subsequent releases.)

Code Organization

The code is split between two folders: server, and client.

The server folder implements the following three components: backend is the main server built on top of nodejs, frontend is a react webapp that allows admins and work requestors to interact with the main server, and box is the box server built on top of nodejs. The remaining folders core, common, and utils contain various modules that are shared between these three components of the server.

The client folder contains the Android app that allows workers to interact with the platform.

Setup Instructions

Please see INSTALL.md for installation and setup instructions.

License

We have released this code under the MIT license. Please see LICENSE.txt for details.

Contributors

Bulk of the initial code base was developed at Microsoft with contributions from the following people.

  • Vivek Seshadri
  • Danish Goel
  • Pallav Karya
  • Mrinal Das
  • Anurag Shukla

Currently, the code is also being developed by Navana Tech with contributions from the following people.

Microsoft Open Source Code of Conduct

This project has adopted the Microsoft Open Source Code of Conduct. Please visit Code of Conduct for more information or email [email protected] with your queries.

rural-crowdsourcing-toolkit's People

Contributors

aditya-navana avatar amogh-navana avatar ananyasaxena01 avatar anuragshukla06 avatar jahanvinshah avatar microsoft-github-policy-service[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

rural-crowdsourcing-toolkit's Issues

Add jetpack compose to the app

We are planning to build all new UIs in Jetpack Compose. This task is for including build support for jetpack compose.

Santali language name should be in Ol Chiki (ᱥᱟᱱᱛᱟᱲᱤ instead of संताली)

Just looking around the repo and just i have found that the native name of Santali (code: SAT) which should be written in Ol Chiki script rather than Devanagari script as it has got it's own script :-). https://github.com/microsoft/rural-crowdsourcing-toolkit/blob/26da5a8b0044c18e4867dcff956ee7569b996037/server/core/src/languages/Index.ts

Wikipedia: https://en.wikipedia.org/wiki/Santali_language
Santali Wikipedia: https://sat.wikipedia.org/wiki/%E1%B1%A2%E1%B1%A9%E1%B1%AC%E1%B1%A9%E1%B1%9B_%E1%B1%A5%E1%B1%9F%E1%B1%A6%E1%B1%B4%E1%B1%9F

Remove partial users after verifying otp

We are saving the access code of the users in the DB as soon as it is verified. This is useful for the user flow but causes an issue where an user which is partially registered (verified the access code but didn't complete the OTP submission) can be saved which causes the app to go to the multi-user screen when there is only one fully registered user.

This is quite unrealistic in a real world use case since all the users would only receive one access code. However, we can solve this problem by removing all the partial users as soon the user otp verification is complete. Feel free to reach out to me if you need more clarity on the issue.

Documentation required

Type: Feature request

Currently we do not have a user manual and contributor guide for new folks coming to the platform. It would be great if it is described in great detail what the platform is all about and how it works. For developers it would be core concepts and code organisation in detail.

Android Client: Migrate from Kotlin Synthetics to Jetpack ViewBinding

Source: Build Warning
The 'kotlin-android-extensions' Gradle plugin is deprecated. Please use this migration guide (https://goo.gle/kotlin-android-extensions-deprecation) to start working with View Binding (https://developer.android.com/topic/libraries/view-binding) and the 'kotlin-parcelize' plugin.

Have created this issue just to track that it exists, after the codebase is migrated to Jetpack Compose this won't be required anymore.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.