As the pandemic continues to aggravate, it was hard for everyone to keep it under control as it was difficult for people to recall their whereabouts for the past 14 days. Nevertheless, an old man who was infected could recall every location he’s been at for the past 14 days. This greatly helped to keep the pandemic after control as those “high risk” individuals that were in close contact with him could immediately be sent to self-quarantine or receive a Covid-19 (Nucleic Acid) test. However, it is quite rare for people to recall exactly where they’ve been for the past 2 weeks, so we thought of the idea of creating an APP that could help remember where you’ve been. A tracking APP that would record down where you’ve been would be almost unrealistic as it interferes with user privacy and may contain numerous personal information. Due to this reason, we decided to create a contact tracing app that is based on public information and does not contain any personal information.
What it does
Our application serves as a tool to cut down the transmission of the Coronavirus. As your device's MAC Address is sent to every WIFI router to establish a connection, our application records every MAC address that's on the same WIFI router your device is connected to. These MAC addresses that's recorded on your device would help identify users that were in close contact with you. When a user wishes to check if they are at risk or not, the application would compare the user's MAC address with all the "high risk" MAC Addresses stored in the online server to check whether or not they are at risk. By utilizing MAC Addresses, this app would greatly minimize the spread of the virus while protecting our user's privacy.
How I built it
Our entire program was written in the Python language. For our APP's front-end, we used the Kivy library. To access wifi networks and send ARP requests, we used the built-in arp command, which is already built into most OS systems. Server is hosted by IBM cloud foundry with a IBM Cloudant database (based on CouchDB principles). The server is based on a WSGI application written in Python 3.8 with the Flask library and Flask add-on flask_api library. The WSGI application code makes use of python core libraries for regular expression parsing, Json parsing / manipulation, hashing, date/time manipulation. It makes use of IBM Cloudant python library to manipulate the database and expiringdict library to manage dynamic ban lists. The WSGI application is served by the program gunicorn on cloud foundry.
Challenges I ran into
The 3 major hardships we went through while creating this application was during the planning phase, the cloudant documentation, and the part when we first started to compile our codes into an APP. While planning and coding for this APP, we were very concerned about user privacy and how to protect our users’ privacy. To prevent impersonation and others from hacking our website, we made sure that we had precautions to stop things like this from happening. For example, our application would only contain users’ MAC addresses. Our server would also automatically ban anyone who attempts to access the admin section without the correct password by IP for 15 minutes. It took us some time to both code and come up with ideas to avoid people from maliciously attacking our server. The cloudant documentation was often ambiguous which served as another major problem that we had to overcome. Lastly, compiling our code into an APP was the 3rd major challenge we went through. We contemplated whether we should keep the function or delete the function, whether we need to add anything, and whether the compilation would be successful. There were several things we were concerned about and worried about, but we were glad that the compilation worked in the end after several alterations to the code and several tries.
Accomplishments that I'm proud of
We are all very proud to create this app and participate in this competition. Although the whole process was tough sometimes, it paid off well. When we ran our code, the feeling of accomplishment was overwhelming, and we were definitely glad that we never gave up.
What I learned
Although we were familiar with the different computer languages, it was our first time creating an application by ourselves. In addition to learning the creation of a mobile app and the systemic usage of github, we also truly understood the power of computer and its real life applications. After this experience, computers are not just a bunch of variables, numbers, and strings anymore, and we clearly understood how computers are helping us in real life.
What's next for Privacy-Oriented Contact Tracing App
To support additional users and to support the iOS platform, we'll need to upgrade our servers in terms of RAM and storage by upgrading our IBM Cloudant DB and Cloud Foundry services. Further functions and features may also be added to our application for future use.