Programming Plans

From Death of Net Neutrality Wiki
Jump to: navigation, search

This page contains plans and musings related to the development of the software that is going to be necessary for this project.

Language

Descision: Use C++. It's harder to learn, but Dr. Ramsey has experience with it, and it's best to learn it when there's someone who knows it around to answer questions.

C++ would give the most low level access. Can be compiled for multiple platforms. Dr. Ramsey has the most experience with it. Generally has the best efficiency as a fully compiled language.
Python would be quicker to develop in, and Python can be run on multiple platforms. Generally not efficient as it is interpreted.
Java cross platform compatible. Must accept lots of proprietary licenses to use. Middle efficiency as a compiled and interpreted language.

While efficiency of the high-level language is not likely to be our main concern, we want this software to be as lightweight as possible on hosts and cross-platform compatible where possible.

Classes

This section outlines the different parts of the program, organized into classes.

commandLineInterface

The user interface that would be used if the local host was to be managed without a Graphical User Interface.

graphicalUserInterface

The user interface that would be used if the local host was to be managed with a Graphical User Interface.

webInterface

The user interface that would be used if the local host was to be managed using a web-based control panel.

database

  • store(hostname, ip, data) - stores a record of network link data for a particular host
  • retrieve(hostname) - retrieves network link data for a particular host

remoteHost

Listens for network link data sent to the local host. Contains details of a remote host, such as IP address, hostname, available network tests, and that host's networkLinks. (Availability of a test can be determined by firewalls and/or software versions.)

networkLink

A network link between the local host and a remote host. This link includes tests that are used to determine latency, jitter, and bandwidth.