We have 6 programming assignments in this class. The purpose of the discussion sections is to help you to do these programming assignments. Each discussion section has a "lecture part" where I will go over some programming assignment spec and give you some background. It also has a "lab part" where you will write small programs to get some practice on the code you will probably have to incorporate into your programming assignments.

For this semester, I will be giving the "lecture part" of discussion sections during regular lecture time. A lecture is 110 minutes long and a regular lecture suppose to last 80 minutes. In the remaining 30 minutes, I will switch to go over programming assignment specs. On Fridays, you will do the "lab part" of the discussion sections.

On Fridays, the discussion sections (labs) will be 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.

(Please note that access to labs is restricted.)

The following are tentative "lecture part" of discussion slides (in PDF format) for this semester.

The following are the "lab part" of discussion sections for this semester. Each lab is worth 5 points. A lab is due at 11:45pm of the corresponding discussion section on 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, you can submit one week late without losing any credit. After one week, you will lose 10% per day.

The purpose of these labs is to help you get started with your programming assignments. If you are not an expert programmer, I would strongly encourage you to finish these labs before they are due so you can get a head start with your programming assignments. Please understand that if you cannot get your code to work, we will not write code for you or fix your code! You need to learn how to fix your own code! If you cannot get your code to work, the expectation is that you will come look for us for help and you should do that as early as possible!

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 or debug code for you. The bottomline is that if you are not proficient at programming and debugging, you need to be prepared to spend a lot of time getting good at programming and debugger!

Below is the tentative schedule for the labs:

Week # Date Topics Comments
1 1/11/2019 Lab 1 (install 32-bit Ubuntu 16.04 on your Windows or Mac OS X laptop, Unix/Linux commands, write "hello" and counting programs and "Makefile" from scratch)  
2 1/18/2019 Lab 2 (adjacency list, BFS, & Dijkstra)  
3 1/25/2019 Lab 3 ("echo" server, "echo" client, & wireshark) (pa1 due at end of day on Friday)
4 2/1/2019 Lab 4 (simple web server & simple web client)  
5 2/8/2019 Lab 5 (INI parser, read/write binary data, MD5, & text-based animation)  
6 2/15/2019 Lab 6 (simple multithreaded web server) (pa2 and pa3 due at end of day on Friday)
7 2/22/2019 Lab 7 (multithreaded web server with console)  
8 3/1/2019 Lab 8 (mutex)  
9 3/8/2019 Lab 9 (condition variable) (midterm exam on Monday this week, pa4 due at end of day on Friday)
- 3/15/2019 - spring break
10 3/22/2019 Lab 10 (trace-drive, time-driven emulaiton)  
11 3/29/2019 Lab 11 (calculating statistics)  
12 4/5/2019 Lab 12 (peer-to-peer) (pa5 due at end of day on Friday)
13 4/12/2019 Lab 13 (link state algorithm - hard state)  
14 4/19/2019 Lab 14 (traceroute application)  
15 4/26/2019 (no lab) (pa6 due at end of day on Friday)