Revised Syllabus
The following syllabus has been revised to reflect the proposed content of CS 360. Compared to the original proposal, the material on web caching and multimedia programming has been moved to CS 460. In addition, the amount of time spent on peer-to-peer programming has been reduced to one week. This allows for more focus on the important concepts of general socket programming, concurrency, performance measurement, and web database applications.
Course Description and Goals
This course covers Internet programming in depth, including client-server, peer-to-peer, and web applications. The primary goal of the course is to help students understand the principles of how distributed applications are built, while also giving them practical experience in creating common Internet applications. An important theme of the course is demonstrating that the Internet can provide many of the same services we have traditionally received from a desktop operating system, including access to applications, file systems, computing resources, and databases. Additional goals for this course include:
- Give students experience designing a variety of Internet applications, including client-server, peer-to-peer, and web applications.
- Introduce students to concurrent programming models that are used for building scalable servers, including an emphasis on synchronization of threads and processes using both sempahores and message passing.
- Provide students with experience writing a workload-generation tool and conducting an in-depth performance evaluation of their code to better understand design tradeoffs and operating system overhead.
- Help students understand web programming concepts, including database connectivity, security, and identity. Expose students to both traditional page-driven and asynchronous web application frameworks.
- Expose students to basic basic relational database concepts used in web programming, including structuring data and making queries.
- Help students prepare for future programming careers by exposing them to a variety of languages used for Internet programming, including C, Python and PHP.
To meet the goals of the course, students will complete lab assignments and several exams. The exams will consist primarily of written questions that ask the students to apply the principles of Internet programming to a given problem.
Lab assignments will be designed to provide practical experience in creating a variety of Internet applications. Students will also conduct extensive performance evaluation of their applications to find limitations and better understand design tradeoffs. An important theme of the labs will be their organization around the Internet, and specifically a web server, as a provider of services that we typically obtain from a desktop operating system. Applications will be written in C, Python, and PHP and will include:
- a basic web server: Help students understand basic client-server programming, and how to implement a protocol. Students will implement the full specification of HTTP, including conditional get and cookies.
- a concurrent web server: Help students understand principles of concurrent programming and the tradeoffs of threads and processes. Students will modify their web server so that it can use either threads or processes, with the option to use semaphores or message passing for synchronization. Students will then conduct an extensive performance evaluation of their server to examine the tradeoffs of threads and processes.
- a peer-to-peer file transfer program: Help students understand peer-to-peer programming and to build their own distributed file system. Students will create a web client that uses peer-to-peer file sharing to download a file when their web server is overloaded. Clients will coordinate their actions through a shared file system running on PlanetLab and will download portions of the file from each other. Students will re-use their performance testing framework from the previous assignment to demonstrate the scalability of their system.
- a social bookmarking web application: Help students develop a secure database-driven web application that tracks user identities. Students will then build a simple PHP and MySQL web application that enables users to register for accounts, add bookmarks that are associated with keywords, and see other users' bookmarks with the same keywords. Students will also add a shopping cart to the application so that users can 'check out' a set of bookmarks and have these exported into XML.
Textbooks
For the lecture material, we will use the following two books
- Web Protocols and Practice: HTTP/1.1, Networking Protocols, Caching, and Traffic Measurement, 1st Edition, by Balachander Krishnamurthy and Jennifer Rexford, Addison Wesley Professional, 2001, ISBN 0201710889.
- Web Database Applications with PHP, and MySQL, 2nd Edition, by Hugh E. Williams and David Lane, O'Reilly & Associates, May 2004, ISBN 0-596-00543-1.
Some topics, such as concurrency mechanisms, web performance tuning, peer-to-peer networking, and web programming with the AJAX model, are not covered in these books but will be covered in class.
We will do some C and Python programming in the class. While I do not require a book for these topics, you might find the following books to be useful references for C/C++:
- Practical C Programming, 3rd Edition, by Steve Oualline, O'Reilly & Associates, August 1997, ISBN 1-56592-306-5.
- Practical C++ Programming, 2nd Edition, by Steve Oualline, O'Reilly & Associates, December 2002, ISBN 0-596-00419-2.
We will use Python for scripting some performance evaluations and processing and graphing data, so you can use any scripting language you prefer. I can give you the most help if you use Python, but you may use Perl or Ruby if you prefer. For Python, I suggest you learn the language by reading two of the online books that are available:
Both of these books are available for purchase if you prefer a physical copy. I also suggest that you become familiar with the official Python documentation.
If you prefer Ruby, then the Ruby Home Page has some links to good online resources.
Assignments and Grading Policy
The assignments for this class will consist of labs and exams.
Labs must be written in the assigned language and must compile and run on the department's Linux machines. Labs will be graded on an scale of 0 to 100. A grading survey will be released before each assignment is due, indicating how many points each part of the assignment is worth.
Grading for exams be on a scale of 0 to 10 for each problem, with a final score based on the total possible points. A score of 10 indicates your answer is entirely correct (A), and a score of 5 indicates your answer is entirely wrong but you made a reasonable effort (E). Failure to make a reasonable effort to answer a question scores a 0.
Your final grade will be computed by weighting all scores as follows:
| Labs | 60% |
| Exams | 40% |
For the labs, each student receives 7 late days that can be used in any combination for any programs. After the late days are used, programs receive 10% off per day. No work can be turned in after the last day of class.
Educational Policies
Honor Code Standards
In keeping with the principles of the BYU Honor Code, students are expected to be honest in all of their academic work. Academic honesty means, most fundamentally, that any work you present as your own must in fact be your own work and not that of another. Violations of this principle may result in a failing grade in the course and additional disciplinary action by the university.
For this course, some assignments are categorized as group work. For these assignments, you may form a group that works together to produce one solution. Any assignment not categorized as group work must be done individually. You are encouraged to generally discuss problems with other groups or students, but you may never use some other group's or student's solution or code in any way. The use of sources (ideas, quotations, paraphrases) must be properly acknowledged and documented.
Preventing Sexual Discrimination or Harassment
Sexual discrimination or harassment (including student-to-student harassment) is prohibited both by the law and by Brigham Young University policy. If you feel you are being subjected to sexual discrimination or harassment, please bring your concerns to the professor. Alternatively, you may lodge a complaint with the Equal Employment Office (D-240C ASB, 422-5895, eeo@byu.edu) or with the Honor Code Office (4440 WSC, 422-2847, hco@byu.edu)
Students with Disabilities
If you have a disability that may affect your performance in this course, you should get in touch with the office of University Accessibility Center (1520 WSC, 422-2767, uac@byu.edu). This office can evaluate your disability and assist the professor in arranging for reasonable accommodations.
