Requirements - MRHS/APrime GitHub Wiki
Task
Create a distributed computing platform that can compute the primality of a given set of numbers.
Rationale
There was interest in creating a group project, preferably one that could be planned and could be used in the future. Distributed computing can be used for any task that can be further sub-tasked, and is actively being used by multiple projects to spread relatively complex tasks out amongst a large number of systems. SETI@Home is an example of a distributed computing project which has gained traction as they analyze radio signals in the search for extraterrestrial intelligence. As we progress towards the end of the course, the idea of learning networking in Java has come up, and this project would create the perfect outlet to learn how it works, while still remaining in a controlled environment.
The idea of computing the primality of numbers was chosen because of the fact that it can be broken down into smaller sub-tasks. It is also a small amount of data that would have to be transferred to other nodes, which means that it will be easier to visualize the movement of data across nodes as it is being processed. Because computing the primality of a number can be a relatively simple process, it will be easier for a group of people to comprehend how it needs to be done.
Storage
Because this would be a group project, all involved would need to be able to share a common code base with minimal issues. It is common for source control to be used in situations similar to this, and it would be useful to introduce all involved to the inner workings of source control in order to prepare them for possible future careers. Git is becoming the most prevalent version control system, and would be the recommended system to use in this project. GitHub offers free hosting for education, which would make it a fitting place to use as the central git repository.
Documentation
Especially in a system that is versatile enough to be used across many systems, documentation is a necessity as you set up additional nodes. Both internal documentation (comments, javadoc) and external documentation (help files) should be provided. This will make it easier to adapt the system to different needs and allow for future contributions to the project. Creating portable documentation will also prepare students for future careers, where the creation of documentation may be a necessity.
Interface
While this project does not require a graphical interface, it would introduce all involved to the conventions of modern interfaces as they are prepared for future careers. A graphical interface will allow users of the system to see a visual representation of how the network is set up and determine what tasks nodes should be handling. The design and implementation of this interface should be left up to all involved, but should be approved before it is finished to allow for the design to be reviewed to ensure it is visually appealing and conveys all necessary information.
Planning
A plan should be made ahead of time that outlines the general plan and goals of the project. It should also outline any tools and technologies that will be used along with the reasoning behind the choice and how it will be used in the project. A general plan should be formed of the part all involved will play in the different steps of the project, along with milestones which sh be monitored.
Implementation
The system should be implemented in a way that allows for components to be swapped and changes to be made quickly. While the initial system should only need to process primes, it should be designed to handle other tasks as well. If the system is designed with enough flexibility, it will allow it to be used on other projects with few issues.