Inside the main directory, type "make" to compile and "make clean" to clean up the compiled code in gen-py/
- Ensure that your thrift installation is in the same directory as the project directory. Otherwise you can change the sys path insert at the top of the file for each python file
- Ensure that you have the thrift compiler installed
- In order to change the possible compute nodes, change the compute_nodes.txt in the src/ directory
- To run:
$python3 <self_port> <supernode_ip> <supernode_port>- To run:
$python3 <self_port>- To run:
$python3 client.py <ip> <port>
The network is formed when compute nodes queries the supernode. The supernode will then give the compute an id based off of a 
When the compute node enters the network, it recursively goes through the network to find the correct position to enter (in this case between 4 and 10) and places itself there. Afterwards, the finger tables are updated recursively to allow for cross network communication (See Chord P2P research paper). This allows for extremely scalable network especially for filesharing or CDNs.

In this project, we utilize it for distributed machine learning and computing. By creating a network P2P network and indexing data, we allow efficient load-balancing and computation. The client will communicate with the supernode which will then choose a node to communicate with. This node will then receive the data and pass it along within the P2P network using forward/backward pointers or the finger table for cross network communication based off of the ID given. Once done, the supernode will query all nodes to aggregate the data and send back to the client.