This project is due on 9/1 at midnight.
Submission Directory: project01 in your pair’s GitHub repository. Failure to follow the submission instructions means your project will not be graded.
Note: These items are graded—
Mailing List: Sign up for the course mailing list.
GitHub: Make sure you are signed up for GitHub at IU by going here.
Partnership: Find a partner among the students in the class. You’ll be working with this person for the first half of the class, and developing software together, so make sure it’s someone who you can develop with, not just that you’re friends with.
Then notify Pavan of your partnership, and he will create a team for your pair in the p532-13 organization on GitHub.
Lab Book: Start your Lab Book.
Your group is to implement a project from scratch for a new customer. The project has no connection to any pieces of the existing code base in your company, meaning you are free to choose whatever programming language and programming IDE you wish to use. Your manager has put you in charge of making the choice, justifying the choice, and writing a draft memo, which he will edit and pass on to his manager (replacing your name with his naturally).
Here are the constraints that your manager has spelled out. The chosen language must come with support
for modularity (packages, modules, functors, units)
for automatic unit testing (often called xyzUnit, after the original sUnit)
for reading and writing XML
for dealing with tcp/ip sockets
for constructing graphical user interfaces
The IDE should make it easy to write exploratory code. In addition, the language must satisfy two deployment constraints:
the code will be deployed on the Linux machines that the SoIC (as the first customer) deploys in its labs, and
the code should run without any real changes on your own computer/OS as well.
Draft the memo. It is not to exceed a single page (letter format, 11pt font), including the memo header. Your grade will depend on the memo format, its English correctness (style, grammar, organization), and the content.
Delivery format: PDF version checked in GitHub.
Your company has decided to outsource the implementation of a graph management component. The component’s client is going to be constructed in-house, because it deals with sensitive data.
It is your task to specify a Java interface or a Racket provide specification for the outsourced component. You may document each element of the specification with English phrases that do not exceed two lines of 80 chars each. You may comment the entire specification as a whole with a single line of 80 chars.
Informally, the library must manage directed, planar graphs. The nodes are labeled. The edges of the graph are labeled with a traversal cost. They also obey the usual triangle inequality. That is, in a triangle such as
the triangle inequality x + y ≥ z where x, y, and z are the costs associated with traversing these edges. The costs are real numbers may not exceed some specified cost interval. At a minimum, your library should be able to add edges to a graph, join two graphs that operate on the same cost interval and disjoint sets of nodes, and compute whether there is a path from one node to another and, if so, its cost.
There is no need to pay attention to performance constraints for the library.
Delivery Format: Text file in GitHub.