Google Summer of Code’18 with AOSSIE

While the rest of the mob forages for food, one of the meerkats (or sometimes more), called a sentry, will find a high point, like a termite mound, and perch on its back legs. From here it scans the sky and desert for predators such as eagles, hawks and jackals. A sentry who senses danger will let out a high-pitched squeal, sending the mob scrambling for cover. Photo by Erik-Jan Leusink on Unsplash

Hi, I’m Joydeep Mukherjee, a computer science undergraduate, currently in junior, from India.

This summer, I had been working with Australian Open Source Software Innovation and Education to craft CrowdAlert as a part Google Summer of Code 2018 program.

Google Summer of Code, often abbreviated as GSoC, is an international annual program, focused on open-source development. Since 2005, Google Summer of Code has been bringing new developers into the open source community every year. This year 1,264 students from 62 countries got accepted into the 2018 GSoC program to work with 206 open source organisations.

CrowdAlert

Live: https://crowdalert.herokuapp.com/

CrowdAlert Map with several incident reports

CrowdAlert, designed to be a trustworthy crowdsourced information channel, focuses on delivering the right information to the right people on time. It provides a global platform where users are able to view incidents nearby. Whenever a user reports an incident, CrowdAlert does the heavy lifting of notifying the nearby people.

Current Situation

On traditional social media, information is designed to flow through a graph, where every vertex represents a user. The reach of a post heavily relies on the connectivity of two adjacent vertices. With this mechanism, the visibility of an incident is dependant on how many users decide to share the post. On CrowdAlert, users are clustered based on their geographical location, in a tree-like hierarchy. This approach has its own merits. In this manner, we can target a wide cluster of potential users who might be able to respond to the incident.

My Goals

CrowdAlert was conceived and idealized by Bruno Woltzenlogel Paleo, in 2017 and was initially developed as a mobile app by Siddartha Sekhar Padhi as a part of GSoC 2017. This year I’ve extended the idea to develop a full-fledged web app.
The main goal of my project was to develop a responsive, cross-browser, progressive web app with extensive service worker based caching techniques, which should feel like a native app on low powered devices. CrowdAlert web harnesses the power of the state of the art deep learning models to filter out spam, toxic comments, hate speech implicitly, providing the end users a safe experience. It has built-in spam report mechanisms which allow users to flag malicious or wrongly reported incidents. All these features make CrowdAlert is ready to provide a reliable broadcasting platform where users are able to generate alerts and get alerted at the same time.

10,000 Feet View

CrowdAlert web can be decomposed into frontend, backend and the deep learning engine, where each of the components has a unique job to perform.
From a 10,000 feet view, the frontend is responsible for presenting the hand-tailored experience to the user. The backend does the heavy-lifting of managing the users, saving the incidents in the database, storing the images in a remote server, dispatching the notifications and a lot more. The deep learning engine sits on a different server and does the job of filtering spam, classifying the comments using state of the art neural networks.

Detailed event description

Nuts and Bolts of CrowdAlert

Frontend

The frontend of CrowdAlert is built using React, Redux & RxJS. React is a JavaScript library for building user interfaces. It is maintained by Facebook and a community of individual developers and companies. Redux helps us to manage application state in a convenient way. RxJS deploys several Reactive Programming paradigms, the Observable pattern and a lot more. With the Observable pattern, we can conveniently make asynchronous requests to the server. With the power of observables, ajax requests are cancellable, preventing memory leaks and nasty bugs. Application routing is managed using the excellent react-router library which is tightly integrated with the whole react ecosystem. React router enables us to handle routing on the client side. With the backing of service workers, we can extensively cache the assets, update the dependencies on the fly. All of these combined with the manifest file help us to achieve the behavior of an offline native app.

Backend

The backend of CrowdAlert is built using Django, Django Rest Framework. As of now, we are using Firebase Real-time Database as our primary storage of database. Firebase provides us with a highly scalable NoSQL database. Our notification layer depends on Firebase Cloud Messaging Service. Firebase also provides the OAuth authentication mechanisms, which lets users to conveniently sign in with their social media accounts.

Deep Learning Stack

The deep learning engine uses a Word2Vec based Convolutional Neural Network architecture in order to classify whether a text should be allowed on CrowdAlert or not.

Features

Here are some salient features of the application in no particular order:

View Events

The event view page is the single most important feature of CrowdAlert. It lets users view the details of the incident. View events page contains the event description, reporter name, relevant location information and a handy map. Below the event card, a comment section is there where users can interact with each other. Events can be upvoted and flagged.

Images

In order to establish the validity of a report, users can upload images either from their camera or device. Photographs snapped directly from the camera interface are viewable directly. However, for images uploaded from a device are labeled as unverified.

Comments

Comments allow users to interact with each other. Discussions in the comments section are often helpful for any prospective visitor.

Upvotes

Upvotes are a great way to verify the authenticity of a report. Reports and comments with a high number of upvotes are likely to be more relevant.

Flags

The deep learning stack should be able to throw away only the generic spam content. However, for falsely or maliciously reported incidents, we need to rely on user-sourced data. The flag button lets users mark an incident as unsafe/ spam. After a threshold amount of flags, the text gets collapsed.

Share

Users can share a unique URL for the incident on Facebook, WhatsApp, Google+, Twitter.

Report

In order to report an incident on CrowdAlert, the user needs to pin a location on the map & provide a short description of the incident.
User’s location is determined using either the device GPS or the IP address of the device. If the distance between user’s location & the user provided marker is greater than 100 KM, users are not allowed to report the incident.

Notifications

CrowdAlert extensively depends on Firebase Cloud Messaging Service in order to deliver the notifications to the user device.

Authentication

CrowdAlert currently supports the following authentication mechanism, namely Email & Password, Facebook OAuth, Google OAuth. 
Users are enforced to verify their email in order to report an incident.

Merge Requests

Future Scope

Conclusion

To conclude, I would like to thank both Google and AOSSIE for providing me with this marvelous opportunity. Without the guidance of my mentors, Bruno Woltzenlogel Paleo, Vaibhav Sharma and Chirag Arora this project wouldn’t have been possible. My peers, Rishabh Maheshwary and Vibhav Agarwal who were working on the mobile app of CrowdAlert were also really helpful.