|     |  | 
      
        
          | 
          
          Fatih University, Computer Engineering Department Fall 
          Semester 2003
 Wednesday,
          9:00 -  
          12:00, 
          E303
 |  
          |  |  
          | Instructor: Halûk 
          Gümüşkaya | Teaching Assistant: 
          Nasif Ekiz |  
          | Office: 
          EA301 | Office: 
          EA-202 |  
          | Office hours: 
          Tue 13-14, Wed 14-15, Thur 15-16 | Office hours: |  
          | Office phone: 
          0.212.889 0810-1036 | Office phone: 
          1026 |  
          | e-mail: haluk@fatih.edu.tr | e-mail: 
          
          nekiz@fatih.edu.tr |  
          |  |  |  
          | Mostly Static Information: | Mostly Dynamic Information: |  
          |  |  |  
          |  |  |  
          |  |  |  
          |  |  |  
          |  |  |  
          |  |  |  
          |  |  |  
    Course Description This course teaches how to design and implement 
    network programs, protocols and systems in a distributed environment 
    under TCP/IP using the Java programming language. The course tries to give some 
    hands-on experience as well as some theoretical background. We will use the 
    Internet and the Web as our test beds, and Java as our programming language. The following topics 
    are presented in the course: Communication models of network programs, 
    concurrency and concurrent programming, patterns for 
    concurrent and networked objects, Java I/O streams, Java net package and 
    introduction to network programming with high level classes, TCP
    socket programming, UDP socket programming, 
    multicast communication model and multicast sockets, accessing network databases 
    with JDBC, distributed applications with RMI, Java web programming, 
    servlets, JSP, Java based wireless applications 
    development and J2ME, security in network applications and introduction to EJB. The course will involve programming 
    assignments, one midterm, 
    a project, and a final exam. All programming is in Java. Students will 
    conduct and present in-depth programming assignments 
    and a project using 
    distributed and concurrent software design techniques (design patterns), 
    contemporary software development processes (like XP), tools (Together 
    6.1, JBuilder 9, MySQL, ...) , notations (like 
    UML).   
    Prerequisites CENG 564/463 is an advanced undergraduate 
    course and also is a graduate course. We will be 
    covering topics from a number of other courses: CENG 102 Computer Programming 
    (Java programming language), CENG 362 Computer Networks,
    CENG 217 Object Oriented Programming, CENG 341 
    Operating Systems and CENG 302 
    Software Engineering. You 
    will be required to understand a lot of diverse material and apply it in network programs. It also does 
    require a high level of Java programming skills.   
    Lecture Schedule 
      
        | Week | Topics
        Covered |  
        | 1 | Introduction to Network Programming and 
    
    Communication Models of Network Programs Communication primitives: send and receive operations, 
    communication models: client/server, peer-to-peer, group multicast 
    and mobile agent, two, three-tier 
    and multi-tier client/server 
    architectures, concurrent processing in client/server 
    software.
 |  
        | 2 | Concurrency and Concurrent Programming What is a Thread, 
    Multiprocessing and Multithreading, Thread Structure and Thread Creation, 
    The Life Cycle of a Thread: Thread States, Thread Scheduling and Priority.
 |  
        | 3 | Concurrency and Concurrent Programming 
    (Continued) Multithreaded Programs 
    and Synchronizing Threads, Basic Synchronization Strategies, Extending the 
    Threading Model, Producer-Consumer Problem, Deadlock Problem, 
    Patterns for Concurrent and Networked Objects (not given 
    in this semester).
 |  
        | 4 | 
    Building Blocks of Networking: Java I/O StreamsStream Basics, 
    Stream Types, Byte and Character Streams,
    I/O Exceptions, Data Sink Streams,
    Data Processing Streams, Object Streams and 
    Object Serialization.
 |  
        | 5 | Java Net 
        Package and Introduction to Network Programming with High Level Classes Introduction to Java Net (java.net) 
        Package, InetAddress Class, URL Class, Communication Using, 
        URLConnection, JavaMail API.
 |  
        | 6 | TCP Socket Programming: Introduction,
        Socket Class, ServerSocket Class,
        Iterative Connection-Oriented Client/Server Applications,
        Concurrent Connection-Oriented Client/Server Applications,
        A Chat Program Example. |  
        | 7 | UDP Socket Programming: UDP 
        Protocol and UDP Datagram, UDP and TCP Comparison,
        Java UDP Support, UDP Based Client/Server 
        Design, UDP Application Samples. |  
        | 8 | Introduction 
        to Distributed Computing: Remote Method Invocation (RMI) 
        (1): Introduction to Distributed 
        Computing, RMI System Architecture,
        Developing an RMI Application. |  
        | 9 | Introduction to Distributed Computing: Remote Method Invocation (RMI) 
        (2): RMI Architectural Details, 
        Parameters in RMI, Building a Generic Compute 
        Engine, Dynamic Class Loading,
        Creating a Peer-to-Peer RMI Application, A 
        3-tier RMI-JDBC Application. |  
        | 10 | An Overview of Enterprise 
        Applications Development Using J2EE Platform: 
        Distributed Multitiered Applications,
        J2EE Platform Architecture, Enterprise 
        JavaBeans (EJBs) Overview, J2EE Platform Software 
        Development Kit (J2EE 1.4 SDK), J2EE vs. .NET. |  
        | 11 | Midterm 
        Exam |  
        | 12 | Projects Meetings |  
        | 13 | Projects Meetings |  
        | 14 | Projects 
        Demo (7-9 January 2004) |  
    Textbooks There is no single 
    textbook that adequately covers such a diverse range of topics 
    that are taught in this course. Buying 
    multiple textbooks is clearly not very appealing financially. I therefore 
    will try to prepare my own lecture handouts and slides 
    available as course notes and they 
    will be 
    available at the photocopy 
    center or on the web site of the course. Here are some 
    textbooks that are helpful for various parts of the course: 
    Main References
    (for technology part of the 
    course) 
		|  | Advanced Java 2 Platform, How to 
      Program, H. M. Deitel, S. E. Santry, P. J. Deitel, 1811 pages, Prentice Hall,  2002. |  |  | Java Ağ Programcılığı, 
      H. Gümüşkaya, Ö. Boyacı, ALFA, 2003. |  
    References (for theory part of the course) 
		|  | 
      Distributed Systems, 
      Concepts and Design, Third Edition, 772 pages, G. Coulouris, J. Dollimore, T. Kindberg, 
      Addison Wesley, 2001. |  |  | 
      Pattern-Oriented 
      Software Architecture: Patterns for Concurrent and Networked Objects, 
      D. C. Schmidt, M. Stal, H. Rohnert and F. Buschmann,
      Wiley & Sons, 2000. |  |  | Java in Distributed Systems, 
      Concurrency, Distribution and Persistence, M. Boger, 414 pages, John 
      Wiley, 2001.  |  
    
    Other References 
		|  | Beginning Java Networking, C. 
      Darby, J. Griffin, 
, 900 pages, Wrox Press, 2001. |  |  | An Introduction to Network 
      Programming with Java, J. Graba, 374 pages, Addison Wesley, 2003. |  |  | Java Network Programming 
      (2nd edition),
      E. R. Harold, 731 pages, 
      OReilly, 2000. |  |  | Java Network Programming (2nd 
      Edition), M. 
      Hughes, C. Hughes, M. Shoffner, D. Hamner, Manning Publications, 807 
      pages,  1999. |  |  | Java I/O, E. R. Harold,  596 pages, 
      OReilly, 1999.
       |  
    
    Tools and Development Environments 
		|  | Together for JBuilder 
    6.1 (modeling, design and documentation tool) |  |  | Builder 9 (implementation 
    tool) |  |  | MySQL (for database 
    applications) |  
    Grading
    (tentative) 
    15 % : Homework Assignments  30 % : Project
 25 % : Midterm 
    (near the middle of the course)
 30 % : Final Exam (a 
    comprehensive exam at the end of the course)
 Homework:
    There will be homework
    in every 2 or 3 weeks. 
    The purpose of the homework is to give you a chance to exercise the 
    knowledge gained from the recent class material. Attendance: Attendance 
    is important in order to learn the topics in a timely manner. Attendance 
    will be forced by taking attendance
    and 
    by making quizzes at random times. Quizzes: There will 
    be 
    short quizzes at random times. We may not inform you about the quizzes. A 
    quiz may be done at any time during a lecture period.  Project: The project is 
    very important for a course of this kind. Midterm Exam: There will 
    be one midterm exam that will be given around the mid of the semester.
     Final Exam: There will 
    be one final exam that will be given during final exams period of the 
    semester.  
    Academic Integrity We will be very careful in 
    grading the projects, homeworks, 
    exams so that everybody 
    gets the grade that he/she deserves. Copying will not be tolerated and will be checked and punished rigorously.  The Fatih
    University has a very strict policy on 
    academic dishonesty. All work on homeworks and 
    examinations must be strictly individual.  Violations of this policy will 
    result in an F grade for the class and may result in suspension/expulsion 
    from the university.   |