IC312: Data Structures (FA16)

Home Policy Calendar Units Assignments Resources

Course Resources

z#+HTMLHEAD: <link rel="stylesheet" type="text/css" href="class.css" />

Exam Crib Sheets

No study sheets or other aids are allowed for the midterm exams.

Students will be allowed to make and bring one study sheet to use during part of the final exam. The second half of the final exam will be done without any study sheets or other aids. Here are the detailed regulations:

  • Each sheet must be standard letter-size paper (8.5 by 11 inches).
  • Sheets must be individually prepared. This means that, although the content can be the same between students, everyone's study sheet should be unique. Students are encouraged to study in groups and talk about study sheet content, but must actually make their own.

-Study sheets will be collected with the exams.

Sending Programming Questions via Email

Your instructors encourage you to send emails with questions about your programs. You may be surprised by our responsiveness and ability to help, and we do very much want to help. So, please send us your questions.

However, not all email questions are as easy to answer as others, and to make the process smoother for you, here is some guidelines (— credit to Dr. Dan Roche for the points!)

  1. Clearly indicate what class, assignment, reading, etc you are talking about. Probably a good idea to put the class and the assignment number in the subject of the email, along with a short description.
  2. Try to ask a clear question that probably has a definite answer. If your message says "I'm lost and don't know where to start", there's nothing I can do for you over email. In that case, you should schedule a time to talk in person.
  3. Explain (briefly) what you've already tried to solve your problem. That way we don't tell you something you already know!
  4. If you are asking about programming, include the short (maybe 10 lines) segment of code, and (if applicable) the exact error message you are seeing, in the plain-text body of the email. You should also attach the entire source code file(s) in case the error is not in the part of the code that you think it is and I need to look elsewhere.
  5. If you don't understand the response, or it's not helpful, email your instructor again so that they can try to explain it better. Keep in mind that the goal is to guide you to the solution, not just tell you how to do it.
  6. If you haven't received a response within 48 hours, email your instructor again to remind them of your query because your message has probably been buried in a large stack. (It is unlikely that this should happen!)

Connecting Remotely to Lab Machines

You should be able to connect to any CS department lab machine in order to work on your assignment and submit your code (see below). Submission will only work on a lab machine and not on your VM of your laptop.

To connect to a lab machine you should use ssh:

ssh -Y username@michROMcsd##u.academy.usna.edu


  • username is replaced with your username (e.g., m189999)
  • ROM is replaced by a Michelson lab room number (e.g., mich302)
  • ## is replaced by the machine number you want to connect to (e.g., 02)

So, for example, for users m189999 to connect to lab computer number 02 in mich302, they will use the following ssh command:

ssh -Y m189999@mich302csd02u.academy.usna.edu

Copying files to and from a Lab Machine

You can use a similar process to copy files to and from a lab machine from your local linux VM machine. The command you will use is scp which stands for "secure copy." It uses the ssh protocol to connect and perform a copy, so the syntax is very similar to that of ssh.

For example, when you are on your local VM, you can copy a file (helloworld.java) from the lab machine to your local VM using the following command:

scp m189999@mich302csd02u.academy.usna.edu:/path/to/helloworld.java .

where, the username and hostname information is filled out like above, and you provide the path to the helloworld.java file you wish to copy. This will copy the file to the current directory, indicated with a . as the destination.

You can copy a file to the lab machine in a similar way:

scp /path/to/helloworld.java m189999@mich302csd02u.academy.usna.edu:

Notice the : /colon at the end of the hostname. This is required to indicate that this is a remote copy. If you want, after the colon, you can specify a destination path for the file, for example:

scp /path/to/helloworld.java m189999@mich302csd02u.academy.usna.edu:ic312/HW1/

This will place helloworld.java in your ic312/HW1 directory on the lab machine.

Code Management System

We will use a code management system that works through the lab machines to both distribute code examples and starter code to you and for you to submit code to us. This systems should be familiar from ic221.

The code management system ONLY works on the lab machines and you must be connected to a lab machine to receive code updates and submit your code.

Updating your ic312 directory

To retrieve code updates, you run the "update" script while connected to a lab computer, either at the computer or under ssh.


This will create a directory called ic312 in your home directory and synchronize any file updates under there. Only files in this directory on the lab computer can be submitted for credit.

Submitting your ic312 code

To submit your HW/project code, you use the "submit" script.


The submit script will prompt you for the assignment to select, so select the right one. Then it will confirm the submission. The process works by fixed paths under your ic312 directory, so if the code is not in that directory at the right path, it will not be submitted. Check the output for which files are included in the submission.

You may submit multiple times. Only your last submission will be graded.

Checking your Submission

You can check your prior submission and which files were submitted using the check script:


The script will list all your submission and times submitted.