We have 5 programming assignments and at most 14 labs in this class (13 planned so far). Starting with Week 1 of the semester, there is one lab assigned every week (no lab assigned for Week 15). You are expected to finish the labs early so you can finish the corresponding programming assignment on time.

[BC: updated 1/28/2020] On a Friday, if you are not done with the lab for that week, you may want to come to the discussion section to get help from the course producers. Lab is due by the end of Monday night of the following week (unless that Monday is a university holiday or the day of the midterm exam, and in that case, it's due on the next day). The discussion sections (labs) are fairly informal. There's nothing to "turn in" during lab time, the course producers will not "lecture" and they will just be standing around waiting for students to ask them for help or answer questions about the lab or the related programming assignment. Please do not monopolize the time of a course producer. If you have spent 15 minutes with a course producer and there are other students waiting in line, the course produce will have to go help another student and move you to the back of the line.

The purpose of the labs is to help you get started with your programming assignments. Doing the labs is for your own benefits. Therefore, if you make a reasonable attempt to do a lab correctly, you should be getting full credit for it. Although if it looks like you didn't put in much effort, your program crashes, or if you did not submit a required file, the grader will have to deduct points.

Access to lab assignments is restricted. These specs are private and you do not permissions to post/display these specs and your work based on these specs in a public place.

  • Lab 1 - install standard 32-bit on laptop, Unix/Linux commands, "hello", "Makefile", gdb, counting
  • Lab 2 - adjacency list, BFS, & Dijkstra
  • Lab 3 - "echo" server, "echo" client, & wireshark
  • Lab 4 - simple web server, simple web client, persistent connection
  • Lab 5 - INI parser, logging, read/write binary data, MD5, & text-based animation
  • Lab 6 - multithreaded web server
  • Lab 7 - multithreaded web server with console
  • Lab 8 - multithreaded web server with better console and reaper thread
  • Lab 9 - condition variable
  • Lab 10 - peer-to-peer: link layer
  • Lab 11 - link state algorithm (hard state)
  • Lab 12 - forwarding table, message routing and UDT
  • Lab 13 - the traceroute UDT application
  • Lab 14 - rdt-3.0, echo server, and echo client

The labs will be graded. Although the grader will not check for the correctness of your code. The grader will simply scan your code to see if it "looks right". It is not the job of the grader to fix your code or to debug your code in case your code doesn't work correctly. If your code doesn't work properly, it is your responsibility to seek help by going to the helpdesk hours of the graders/CPs or making appointments with the them if you are not available during their helpdesk hours. You are always welcomem to come to the instructor's office hours for help.

Each lab is worth 5 points. A lab is due at 11:45pm on a Friday (with a 15 minutes grace period). The late policy for labs is quite different from the late policy for programming assignments. For a lab assignment, if you are late, you lose 10% per day.

We will not be giving out "solutions" to lab assignments. If your code is not working, you are expected to come to office hours and helpdesk hours to seek help, although none of the teaching staff will be permitted to write code for you, debug for you, or fix your code. If you are not a strong programmer or you are not good at debugging, you need to be prepared to spend a lot of time doing the labs (and the programming assignments). The key to success is to start as early as possible. If you are stuck, come to us for help (and keep in mind that we cannot write code for you, debug for you, or fix your code). We can sit down with you and run the debugger together. If you only come to the teaching staff for help around the time the labs (or programming assignments) are due, it would be too late.

Below is the tentative schedule for the labs. Labs are due by Monday night of the week after the lab is assigned (unless that Monday is a university holiday or the day of the midterm exam, and in that case, it's due on the next day and shown in bold letters).
Lab # Due Date Topics Comments
Lab 1 1/17/2020 install standard 32-bit on laptop, Unix/Linux commands, "hello", "Makefile", gdb, counting  
Lab 2 1/24/2020 adjacency list, BFS, & Dijkstra (pa1 due at end of day on Friday, 1/31/2020)
Lab 3 2/3/2020 "echo" server, "echo" client, & wireshark  
Lab 4 2/10/2020 simple web server, simple web client, persistent connection  
Lab 5 2/18/2020 INI parser, logging, read/write binary data, MD5, & text-based animation (pa2 due at end of day on Friday, 2/21/2020)
Lab 6 2/24/2020 multithreaded web server  
Lab 7 3/2/2020 multithreaded web server with console  
Lab 8 3/10/2020 multithreaded web server with better console and reaper thread (midterm exam on Monday, 3/9/2020
pa3 due at end of day on Friday, 3/13/2020)
Lab 9 3/26/2020 condition variable  
- 3/20/2020 (spring break)  
Lab 10 4/2/2020 peer-to-peer: link layer  
Lab 11 4/7/2020 link state algorithm (hard state) (pa4 due at end of day on Friday, 4/10/2020)
Lab 12 4/14/2020 forwarding table, message routing and UDT  
Lab 13 4/21/2020 the traceroute UDT application  
Lab 14 (N/A) rdt-3.0, echo server, and echo client (pa5 due at end of day on Friday, 5/1/2020)
  (N/A) (no lab)