{%hackmd bxsQAKRrSe-0K7dbTGPINQ %}
## Network Programming
### @CS.NCTU
#### Lecture 0: Syllabus
#### Instructor: Kate Ching-Ju Lin (林靖茹)
<!-- Put the link to this slide here so people can follow -->
https://hackmd.io/@wbjfRtFvQ96uXiHjQ0AvgA/ryMroKwyF
---
### Network Programming
* Instructors:
* 林靖茹, EC-538
* Email: katelin@nycu.edu.tw
* WWW: https://people.cs.nctu.edu.tw/~katelin/
* Materials and online course
* Microsoft Teams: [NetProg](https://reurl.cc/xEg0ZE) (Code: 23d5gvq, for NYTU only)
* Fill the [form](https://forms.gle/68ao1Y8FtSTBe76B7) if you cannot join the team

* Projects
* Bitbucket
* E3
---
### TA Group
* 高誌佑 (lcd010308@gmail.com)
* 郭奎廷 (kuo0404@gmail.com)
* 許博鈞 (hpc.cs08g@nctu.edu.tw)
* 林蕎婷 (kyojeong.cs10@nycu.edu.tw)
* Office hour: Monday 10:00 a.m. ~ 12:00 p.m.
* Online discussion using Microsoft Teams
* The meeting link will be scheduled before the office hour
* You should send an email to all the TAs to make an appointment
<p align="center">
<img src="https://i.imgur.com/2j5YbCm.png" height="200">
<img src="https://i.imgur.com/1Ih0IbP.jpg" height="200">
<img src="https://i.imgur.com/Z0t2l1D.jpg" height="200">
<img src="https://i.imgur.com/GmZtjNU.jpg" height="200">
</p>
---
### Microsoft Teams
* Slides: **++general channel++ > slides**
* Only the TAs and I can post in the general channel, which is used for announcement
* ++TA channel++ is created for you to ask questions (may only respond once every week)
* The video will be recorded ans automatically stored in **++general channel++ > files > recording**
* You don't need to recode the video from your side
* If you have any questions about the lectures or labs, please go to the specific channels to leave your messages
* For example, you can post in the ++Lectures channel++ to ask questions about the lectures and ask the questions about lab0 in the ++Lab0 channel++
---
### Assignments
* Homework x 1 (HW)
* Projects x 4 (P1-P4)
* You are required to use Git-type version control, announced by TAs
* Two weeks per project
* Demo dates should have no conflicts with class dates
* If the due dates are marked as the date of this class, it means one day ahead
* Final Exam
* Mostly from lectures
---
### Grading
* HW(5%)
* P1 (15%)
* P2 (25%)
* P3 (20%)
* P4 (15%)
* Exam (20%)
> The percentage may vary slightly
---
### Outline
* W1: Syllabus + Introduction
* W2-3: Unix Programming [S]
* W4: Network Primer [S]
* <span class="orange"> P1: Simple shell (W4) </span>
* W5: Berkeley Socket [S]
* W6-8: Socket Programming Paradigms [C]
* Iterative Servers
* Concurrent Servers
* Single-Process Concurrent Servers
* Multi-services Servers
* Server issues
* Concurrent Clients
* <span class="orange"> P2: Chat room servers (W7) </span>
---
### Outline
* W9: Internet and Distributed Information Systems [H]
* HTTP, CGI
* FastCGI
* Winsock and AsyncSock
* Thread vs. Select
* AIO, C10K problem, Boost
* Cookie, Web Programming, PHP, I18N
* <span class="orange"> P3: HTTP servers, CGI (W10) </span>
---
### Outline
* W10-11: Firewalls [H]
* W12: P2P
* W13: NAT and UDP Hole Punching, BT
* <span class="orange"> P4: SOCKS server (W13) </span>
* W14: Remote Procedure Call (RPC)
* Sun RPC, DCE RPC
* RMI, Corba
* Web services
* <span class="orange"> Final exam (W16) </span>
---
### Projects
1. Simple Shell
* Handle process execution, I/O redirection, and pipe
2. Chat room
* Design servers for multi-user communication using socket
3. HTTP server
* Implement HTTP protocol and Common Gateway Interface with asynchronous I/O
4. Proxy server
* Implement a proxy server with SOCKS protocol
* Discuss in the channels of Microsoft Teams (each lab a channel)
---
### Textbooks
* [S] Unix Network Programming, W. R. Stevens
* [C] Internetworking with TCP/IP Vol III (BSD Socket Version), Comer and Stevens
* [F] Building Internet Firewalls, Chapman and Zwicky
* Source code in the textbooks: in the web site of this course
  
---
### References
* [R] TCP/IP Administration, Craig Hunt
* [Q] [UnixFAQ](http://langevin.univ-tln.fr/cours/UPS/extra/unixfaq.html)
* [U] [Unix Tutorial](https://www.tutorialspoint.com/unix/index.htm)
* [H] Handouts
{"metaMigratedAt":"2023-06-16T06:00:09.421Z","metaMigratedFrom":"YAML","title":"L0_Syllabus","breaks":true,"description":"View the slide with \"Slide Mode\".","slideOptions":"{\"spotlight\":{\"enabled\":false},\"transition\":\"fade\",\"display\":\"block\",\"slideNumber\":true,\"overview\":true}","contributors":"[{\"id\":\"c1b8df46-d16f-43de-ae5e-21e343402f80\",\"add\":6704,\"del\":1989}]"}