CS219 - Programming for the World Wide Web (W99)
Instructor
Instructor: David Beazley (beazley@cs.uchicago.edu)
Office: Ryerson 257, 702-9111
Class times : 11:30 MWF, Ryerson 277
Office Hours : 10:30-11:30 MWF, Other times by appointment.
Class web-page : http://classes.cs.uchicago.edu/classes/archive/1999/winter/CS219
Prerequisites
- CS 115-116 or prior programming experience with C/C++.
- Prior experience using the Internet.
Course Description
In this course, you will gain experience with the
programming techniques, technologies, and issues associated with the Internet.
Topics include network programming with sockets, TCP/IP, the HTTP
protocol, web-servers, browsers, security, authentication, distributed objects, and
client-server computing. This is a project-oriented course in which you
will be expected to develop software in the Unix environment using a
variety of programming languages including C/C++, Java, Python, and Perl.
Note: This is not an introductory programming course nor a course
on the creation of web-pages (HTML, CGI, Javascript, etc...). Students
interested in these topics should consider taking CS101.
Textbooks
There is no official textbook for this class. However, the following
books may be generally useful:
- Java Network Programming, by Elliotte Rusty Harold. O'Reilly and Associates. ISBN 1-56592-227-1.
- Internet Programming with Python, by Watters, van Rossum, and Ahlstrom. ISBN 1-55851-484-8.
- Java in a Nutshell, by David Flanagan. O'Reilly and Associates. ISBN 1-56592-262-X.
- Unix Network Programming : Networking APIs : Sockets and XTI (Volume 1),
by W. Richard Stevens, Prentice Hall. ISBN 013490012X.
All of the material covered in this class is already available on the
web so it is probably not necessary for you to buy these books unless
you want to add them to your library.
Computer Accounts
All of the programs in this course will be implemented under Unix. If you do not
have a Unix account, please go to http://classes.cs.uchicago.edu
to find out about obtaining an account on 'classes'. It is critical that you do this as soon as possible.
You may also use Linux, but be aware that your projects must still compile and run on classes when
you turn them in.
If you have never used Unix, the first few weeks of this course are likely to make your head spin.
Please come see me as soon as possible if this case and I will try to point you in the right
direction. You may also want to get your hands on a copy of the following:
- The Unix Programming Environment, by Brian Kernighan and Rob Pike, Prentice Hall, ISBN 0-13-937681-X.
Grading Structure
- Project 1 - Programming with sockets (15%). Due: Friday, January 15.
- Project 2 - Web-server (20%). Due : Friday, January 29.
- Project 3 - Security (20%). Due : Friday, February 12.
- Project 4 - Group project (you choose the topic) (25%). Due : Monday, March 5.
- Final exam (20%)
This class is entirely project oriented in nature (there will be no midterm
nor any sort of weekly busy-work). If you wish, you may work on the
projects by yourself or with one other person as a team. For the final
project, you will get to choose the topic and be expected to make a short
class presentation at the end of the term. The final exam will primarily
cover material related to the class projects.
Grading scale
- 90-100% = A
- 80-89% = B
- 70-79% = C
- 60-69% = D
- < 60% = F
Handin Policy
Late assignments are not accepted without prior arrangement. All
projects should be turned in electronically and must include a README
file describing how to run the programs and a Makefile (if appropriate).
Your grade will largely be determined by how your program runs (and if it
operates correctly), not the method by which it is implemented.
Academic Dishonesty
Feel free to discuss any aspect of the class projects with others, but
be aware that the code you develop should be your own. Blatantly copying
someone else's work or downloading code from the net and claiming it as
your will not be tolerated. You may, however, borrow ideas from others
and third party packages as long as you give appropriate credit (i.e.,
"I borrowed this cool hack from package X.").
General Comments
I hope to make this class a challenge, but I also want you to succeed.
Please do not hesistate to come see me if you run into any problems.
Calendar
This is only a tenative outline and subject to revision at any time.
Week 1
Mon - Introduction and History of the Internet
Wed - Basic networking. TCP/IP, DNS, Network layers, and associated topics.
Fri - Network programming in C. Introduction to sockets.
Week 2
Mon - Network programming in C (continued).
Wed - Introduction to Java and Python.
Fri - Network programming in Java and Python.
Project 1 Due
Week 3
Mon - Web servers and the HTTP protocol.
Wed - Document encoding. HTML, MIME, images formatting, etc...
Fri - CGI and server-side plugins.
Week 4
Mon - Dynamic content generation and XML.
Wed - Performance issues and access control.
Fri - A look at some commercial web-servers.
Project 2 Due
Week 5
Mon - Public key encryption.
Wed - Secure sockets.
Fri - Authentication.
Week 6
Mon - Browsers (and browser wars)
Wed - Interacting with clients. Cookies and related topics.
Fri - Dynamic HTML, Applets, Client-side plugins, ActiveX.
Project 3 Due
Week 7
Mon - Applets, scripting, continued.
Wed - Web crawlers and search engines.
Fri - Proxy servers.
Week 8
Mon - Client-side security and privacy issues.
Wed - Push technology, audio/video streaming, multicast sockets.
Fri - Slack.
Week 9
Mon - Distributed objects. Introduction to CORBA and Beans.
Wed - CORBA/Beans continued.
Fri - CORBA/Beans continued.
Project 4 Due
Week 10
Mon - Project presentations
Wed - Project presentations
Fri - Discussion, class evaluations.
David M. Beazley
Last modified: Tue Dec 23 13:51:50 CST