Google Summer of Code’18 with AOSSIE
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, 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.
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.
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.
Nuts and Bolts of CrowdAlert
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.
Here are some salient features of the application in no particular order:
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.
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 allow users to interact with each other. Discussions in the comments section are often helpful for any prospective visitor.
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.
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.
Users can share a unique URL for the incident on Facebook, WhatsApp, Google+, Twitter.
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.
CrowdAlert extensively depends on Firebase Cloud Messaging Service in order to deliver the notifications to the user device.
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.
Working boilerplate code for react & django, deployed on herokugitlab.com
Basic wire frame for a responsive UI. Can be added to home screen on android using chrome menu > Add to home screen…gitlab.com
This MR contains code for the ViewEvents page. Closes #1, #2, #5 Preview: https://www.youtube.com/watch?v=1C4vgQcyCWU…gitlab.com
Crowdalert API code. Documentation is remaining. Closes #3 & backend of #4gitlab.com
Allows users to report incidents. The form is distributed in three parts, first, we get the incident location, then we…gitlab.com
In this merge request, client-side authentication is done using firebase auth. Modes of authentication: Email-Password…gitlab.com
Adds a component to let users comment on incidents Closes #9gitlab.com
Allow users to upvote or spam report an incident. Having an upvote mechanism for comments & incidents lets us detect…gitlab.com
Notifies users whenever an incident is reported nearby or some user replies to a thread, which the former user is…gitlab.com
Closes #12 #11gitlab.com
Below are some new features that CrowdAlert should have, grouped according to their prospective difficulties. Easy: * […gitlab.com
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.