Course URL:

Lecture: Attendance is required. During the fall semester of 2008, the class meets on Monday and Wednesday but NOT on Friday.  The idea is to leave a day for travel – we know that many of you will be interviewing for jobs, pitching ideas to venture capitalists (see assignment 3!), etc.  If you leave town on Wednesday you can interview on Thursday and Friday and still be rested and ready on Monday morning!


Hacking help is ALWAYS available!  Moreover, we all monitor the newsgroup.  And feel free to jump in if you know the answer to someone else's question. 


TA Office hours:

Jonathan Winter (primary course TA)

* 4-5pm Mondays, Upson 365.  If the door is closed, knock loudly and someone will unlock it for you.

* 4-5pm Wednesdays, Upson 365


Adam Davis (part time additional MEng TA):

* 12:30 to 1:30 Tuesday, CSUG lab.  Your Cornell ID card should give you access.

* 12:30 to 1:30 Thursday, CSUG lab



Teaching Staff:

Professor Ken Birman   (255-9199)
1415C Upson Hall
Office hours:   Ken doesn't have specific office hours but is available from 10am until 2:30pm most days.  Just drop in.  If you prefer an appointment, contact Bill Hogan (

Prerequisites. The course is open to any undergraduate or graduate student who has mastered the material in CS4410 (Operating Systems).   We do not require that you have taken these courses at Cornell, nor is it required that you have even taken the course.  But you do need to be at the equivalent level of preparation.  Your programming skills should be such that writing modest length applications that do things like file I/O or use threads won't pose a problem.

The course programming assignments are designed to be easy to do in the Visual Studio C# language using its ASP.NET framework.  We also accept projects in other languages like C++ or Java, but we may not be as prepared to help if you get stuck!  We realize that many students have never seen C#, but have no fear: C# and Java are essentially identical languages, the real differences are in the associated runtime environment and libraries.  Thus if you know how to program in Java, you know C#, and just didn't know that you know it!  The libraries are extensively documented in the Visual Studio online help system and you should be able to cut and paste anything elaborate, such as thread creation or tricky kinds of event handling.

Reading.  Reliable Distributed Systems: Technologies, Web Services and Applications (Ken Birman; Springer Verlag).  This is available on reserve in the Engineering library if you prefer not to own a copy.   We won't be assigning readings or problems from the book, although we will point to the appropriate chapters so that if you get lost in class, you can use the book to catch up.


Past students have recommended an e-book that may help you quickly learn C# programming.  The book is available for free from within the Cornell network just by pressing a button for agreement:


Assignments and Grading. In keeping with the professional (and practical) orientation of the course, homework assignments are underspecified, open-ended, and motivated by problems that arise in the real world (messy as it is). You will have to think, refine problem specifications, make reasonable and defensible assumptions, and be creative.   For us, this is a part of the learning process -- in undergraduate courses, everything is spelled out, but in the real world, everything is vague.  CS5410 is a great opportunity to begin that transition.

Most of your grade is based on the programming project, which involves the design and implementation of fault-tolerant, distributed and scalable services.  Professor Birman and the TAs are currently redesigning the assignment, which will be based on the same technologies used in Cloud Computing and Peer-to-Peer web systems.

Your final course grades will be computed primarily from your project grades: 25% each for assignments one and two, and 50% for the final assignment.

Assignments are due on the date stipulated.  If you can’t complete an assignment on time, you should meet with Professor Birman or one of the TAs to discuss the situation.  Sometimes we prefer to receive an incomplete solution so that you can get to work on the next assignment; in other cases we might be able to help you break through whatever is holding you up and finish the solution up quickly.  But no matter how a problem is to be resolved, we want you to begin the dialog with us before the deadline, not at the last second.

Students must work alone on assignments 1 and 2, but  can form 2 or 3-person groups for assignment 3. Although all our projects will be of a size that a single person could tackle on their own, working with other people can lead to a better understanding of the material, and will help you to develop collaboration skills that should prove helpful throughout your career. All participants, however, should be able to explain the entire content of any submitted solution.  By requiring that you do the first two assignments on our own, we're trying to ensure that everyone will have personally written some code and experienced the runtime environment of Windows .NET. 

MEng Project Option. Students enrolled in the Master of Engineering program in Computer Science may use the CS5410 project to satisfy their project requirement for that degree.  Here's what you would need to do: