Message In A Bottle is a peer-to-peer mesh network app that allows iPhones, iPads, and Macs to communicate with each other (or first responders) without the use of an actual network (Cellular or WiFi). This allows those affected to be connected, even with common network outages.
We've heard many reports of people downloading walkie talkie apps such as Zello in order to prepare for Blizzards or Hurricanes. The issue with this being that if power and or network coverage is lost during the storm, Zello will also cease to work since it is an internet based system. We know how important it can be to be able to reach out to emergency services or loved ones in times of crisis such as these, and wanted to do our part to work towards a solution.
Our project creates a mesh network of devices (iPods, iPhones, iPads, Macs) and allows users to communicate via chat with each other. The more devices added to the mesh network, the stronger and wider reaching the network becomes. Users are prompted for their first and last name upon launching the app, and then asked about the status of their safety. They are given four options ranging from "Okay" to "Immediate Assistance Needed". Users who flag themselves as "Immediate Assistance Needed" are given red message bubbles to help them stand out to first responders. This allows those in a crisis situation to utilize the mesh network to contact someone who could be out of range of their sole device.
Message in a bottle was solely constructed by the network first. Because all that stuff about pushing us past our limits was accurate, in the beginning this was something all three of us were collaborating on in order to figure out. Eventually it actually became quite intuitive. Each device needed to act as though it were part of an an actual Linked List. It needed a head to point to its host and then a tail to point to its followers. Defining the event for the device to simultaneously host and connect to, initially we thought that this would not be feasible. Instead, however, we learned through experimentation that the device was capable of being connected to 7 other devices at a time. This mean that we could create a network that ‘received information from its head (or tail) and then pushes the information to all of its other connected devices, Created a “Mesh” of connectivity. This means that the more people in the network the smoother it is but also it means the farther the distance o the network will be. While the internet between two devices is around 50 ft on the network, in small form tests of stringing multiple devices together we could reach spans of entire buildings. Work was split evenly between team members, each taking on a feature at a time, using git to parallelize the work. This allowed for fast paced development with version control that provided us with smaller checkpoints throughout the weekend where we could stop everything and test the state of the project together. That lead to increased feedback from the rest of the team, which pushed ourselves to implement harder features.
No one on our team had much if any experience creating network based apps before this, so it was certainly a challenge to not only make a network based app, but also create the network that it ran on. Additionally, while we thought it was important to have this application on as many devices as it could be, none of us had any experience developing for macOS either. So, learning how to develop for that platform was a challenge in its own right.
We are proud of being able to follow through with the ambitious goals we had set out for ourselves on Friday night. There were a lot of unknowns for us going into this project, but we were able to work through the uncertainty and generate an actual product. We were able to create a working peer-to-peer mesh network running on device, with no prior network development experience at all. It was really encouraging to see the first two devices connect to each other, and set the pace for the rest of the hack.
We learned the intricacies of creating a peer-to-peer networking system, and that you're not limited to Cellular Data or WiFi Internet to make a connected application.
Since the basis of our project is connecting those in need during network outages, we believe the clear next step is finding a way to add the internet to that equation. Peer-to-peer networks are a great stepping stone, but could also be the foundation of something larger. The next feature we would explore would be having one client with Internet connectivity on our network relay that connectivity throughout the network, even if at a basic level. You don't need to be able to stream a 4K movie while stuck on the roof of your house during flooding, but being able to send an email to a loved one telling them you are okay could mean the world to someone. In addition to disaster relief, we could also see our application being utilized on college campuses. Due to the high density nature of college campuses, schools could utilize a peer-to-peer mesh network to send out emergency notifications during outages.
We built our project with Xcode on our MacBook Pros, using Git and Github for version control.