We have 5 programming assignments and 14 labs in this class. Starting with Week 1 of the semester, there is one lab assigned at the beginning of every week (no lab assigned for Week 15 and Lab 14 will not be collected and graded). You should start doing the lab as early as possible and you are are expected to finish the labs early so you can finish the corresponding programming assignment on time (or even early enough to get extra credit for early PA submission) since the PAs are worth a lot of points.

Lab N is meant to be done during week N of the semester and it's due by the end of Monday night of week N+1 of the semester (unless that Monday is a university holiday or a midterm exam day; and in that case, it's due on the next day).

The purpose of the labs is to help you get started with your programming assignments (which is worth a lot more than labs). 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 the lab. Although if it looks like you didn't put in much effort, your program crashes, your program cannot be compiled, 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 (due 11:45PM, Tue, 1/17/2023) - install standard 32-bit on laptop, Unix/Linux commands, "hello", "Makefile", gdb, counting
  • Lab 2 (due 11:45PM, Mon, 1/23/2023) - adjacency list, BFS, & Dijkstra
  • Lab 3 (due 11:45PM, Mon, 1/30/2023) - "echo" server, "echo" client, & wireshark
  • Lab 4 (due 11:45PM, Mon, 2/6/2023) - simple web server, simple web client, persistent HTTP connection
  • Lab 5 (due 11:45PM, Mon, 2/13/2023) - INI parser, logging, read/write binary data, MD5, & text-based animation
  • Lab 6 (due 11:45PM, Tue, 2/21/2023) - multithreaded web server
  • Lab 7 (due 11:45PM, Mon, 2/27/2023) - multithreaded web server with console
  • Lab 8 (due 11:45PM, Tue, 3/7/2023) - multithreaded web server with better console and reaper thread
  • Lab 9 (due 11:45PM, Mon, 3/20/2023) - condition variable
  • Lab 10 (due 11:45PM, Mon, 3/27/2023) - peer-to-peer: link layer
  • Lab 11 (due 11:45PM, Mon, 4/3/2023) - link state algorithm (hard state)
  • Lab 12 (due 11:45PM, Mon, 4/10/2023) - forwarding table, message routing and UDT
  • Lab 13 (due 11:45PM, Mon, 4/17/2023) - the traceroute UDT application
  • Lab 14 (will not be collected and graded) - rdt-3.0, echo server, and echo client

(Please note that access to these videos is restricted.)

Lab videos from a previous semester are provided here, in case that they can be helpful. You should get the requirements for a lab from its spec and not from these old lab videos since lab specs are more current than these old lab videos. If an old lab video and the corresponding current lab spec disagree with each other, you must follow what's in the current lab spec. These old videos can be helpful at a high level. Therefore, when you watch them, you should pay attention to high level descriptions and look at the examples at a high level (and probably ignore the details since they may be outdated).

Access to these old lab videos are protected by an additional level of security measure. All videos here are on D2L, please enter your D2L user ID and password before accessing these videos. Please also see hints about using the D2L video viewer. You also need to enable 3rd party cookies in your browser.

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 or send e-mail to the instructor for help.

The grader can only grade your labs on either a standard 32-bit Ubuntu 16.04 system or on viterbi-scf1.usc.edu. Please make sure that your code can compile and run on one of these systems.

Each lab is worth 5 points. A lab is due at 11:45pm on a Monday (unless that Monday is a university holiday, and in that case, it's due on the next day). There is a 14 minutes and 59 seconds grace period. So, if you submit before midnight, it's considered on time. 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% for the first 3 days. Afterwards, starting at the beginning of day 4 at midnight, you will lose 1% every 5 minutes (and it would take 350 minutes to lose the remaining 70%).

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.

Finally, we will automatically drop two of your lowest lab grades when we calculate your overall class grade at the end of the semester! When you are considering using free late days on a lab, please do the math first! Since we are dropping two of your lowest lab grades, each labs is worth 0.91% of your overall grade and using one free late day to save 10% of that may be a bit extravagant! In past semesters, some students were so confident that they wouldn't need to save free late days for PAs and then regretted their decisions.

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, 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/2023 install standard 32-bit on laptop, Unix/Linux commands, "hello", "Makefile", gdb, counting  
Lab 2 1/23/2023 adjacency list, BFS, & Dijkstra (pa1 due on Friday night, 1/27/2023)
Lab 3 1/30/2023 "echo" server, "echo" client, & wireshark  
Lab 4 2/6/2023 simple web server, simple web client, persistent HTTP connection  
Lab 5 2/13/2023 INI parser, logging, read/write binary data, MD5, & text-based animation (pa2 due on Friday night, 2/17/2023)
Lab 6 2/21/2023 multithreaded web server  
Lab 7 2/27/2023 multithreaded web server with console  
Lab 8 3/7/2023 multithreaded web server with better console and reaper thread pa3 due on Friday night, 3/10/2023)
Lab 9 3/20/2023 condition variable  
- - (Spring Recess)  
Lab 10 3/27/2023 peer-to-peer: link layer  
Lab 11 4/3/2023 link state algorithm (hard state) (pa4 due on Friday night, 4/7/2023)
Lab 12 4/10/2023 forwarding table, message routing and UDT  
Lab 13 4/17/2023 the traceroute UDT application  
Lab 14 (N/A) rdt-3.0, echo server, and echo client (pa5 due on Friday night, 4/28/2023)