Distributed Computing WiFi Access Point
The distributed computing WiFi access point was a project I undertook with four classmates for the Hack the North hackathon. In a nutshell, the project was a wireless access point that gives users access to WiFi in exchange for some of their processing power. Many users, each dedicating a portion of their computer’s resources, can be joined together into a powerful distributed network. When users connect to the access point, they are given a choice of what they want their processing power to go towards – this can include anything from Folding@home to bitcoin mining. Users must keep one tab open in the background that performs the calculations required for whatever project they choose to work on. Through the use of OpenGL, and one day OpenCL, this browser based processing can be almost as powerful as native code. It is important to note that, because all the code is browser based, the user is not required to download and install anything, making the barrier for participation very low. The code for the project can be found here. This code is a bit of a mess, and extremely insecure, because of the time pressures of the hackathon.
Here is a video I created showing the access point in action:
My contributions to the project were on the back end. I implemented an apache2 server and used PHP to serve up the distributed computing jobs to users. Jobs are a small partition of the overall computation we are trying to accomplish, designed to be completed by a single user in a reasonable amount of time. I also implemented tracking for users and jobs to ensure I could spot abandoned jobs and reassign them. I used this tracking to determine whether users were actually completing jobs or not. In order capture the traffic of new users, as well as recapture the traffic of those not completing jobs, I delved deep into the murky depth of networking in Linux. I used iptables to selectively filter and redirect traffic to the apache2 server where users were served the landing pages and computing code. I also used SQL to pull a number of statistics from the user and job tables to provide on a dashboard for users.