Teaching

Computer Networks

About

  • Course: Computer Networks (CO20-320301)
  • Semester: Spring 2018
  • Instructor: Jürgen Schönwälder
  • TA: Glontaru, Alexandru-Mihai
  • TA: Hambasan, Alexandru
  • Class: Monday, 09:45-11:00, Seminar Room RLH
  • Class: Friday, 11:15-12:30, Seminar Room RLH

Content

The course discusses network protocols in some depth in order to enable students to understand the core issues involved in network protocol design. Fundamental algorithms and principles are explained in the context of existing IEEE / Internet protocols in order to demonstrate how they are applied in real-world scenarios. This course is recommended for all students with a strong interest in communication networks and distributed systems.

The course covers topics such as local area networks (IEEE 802), Internet protocols, routing algorithms and protocols, flow and congestion control mechanisms, data representation, application layer protocols, remote procedure calls, network security.

CS Bachelor Project and Thesis

About

Timeline

Activity Deadline
Introduction 2017-09-11 (Monday)
Project topic/supervisor selection (campus track) 2017-09-18 (Monday)
Project topic/supervisor selection (world track) 2018-02-02 (Friday)
Presentations 2018-05-14 (Monday)
Presentations 2018-05-15 (Tuesday)
Bachelor thesis submission 2018-05-16 (Wednesday)

Materials

Doing research in computer science usually starts with a lot of reading and learning. In order to do research that is significant, it is crucial to pick a tractable topic and it is essential to understand the state of the art as well as any algorithms and tools that are relevant. While the details differ depending on the area of computer science, reading about the state of the art is essential for all of them. To find relevant literature, it is good to be aware of systems such as:

  • IEEE Xplore (digital library provided by the IEEE)
  • ACM Digital Library (digital library provided by the ACM)
  • Scopus (commercial research publication indexing system)
  • dblp (open computer science publication indexing system)

The project phase is essentially a way into your specific bachelor thesis topic. During the project phase, you should pick up and deepen the necessary knowledge, you should develop a good understanding of the state of the art, and you should get familiar with any programs or tools or datasets that are essential for carrying out a little research project during the bachelor thesis course.

LaTeX is widely used as the typesetting system for research papers in computer science. Hence, we expect that project and thesis reports are written in LaTeX. Below are some LaTeX templates that you are expected to use for typesetting the project report and later the thesis. Please do not change or improve the format, it is usually far better to spend your brain cycles on the content instead of the format (and we really appreciate a common format).

Secure and Dependable Systems

About

  • Course: Secure and Dependable Systems (CO21-320203)
  • Semester: Spring 2018
  • Instructor: Jürgen Schönwälder
  • TA: Liu, Yufei
  • TA: Xhelili, Orgest
  • Class: Monday, 08:15-09:30, Lecture Hall Research I
  • Class: Friday, 09:45-11:00, Conference Room Research IV

Content

This course introduces formal methods for analyzing and assuring safety and security of software systems. The course starts off with a clarification of concepts such as dependability, quality, safety, and security of software systems, and how to achieve them in the software development process. We introduce the foundations of cryptography as a basis for security mechanisms. The main part of the course introduces different paradigms of safety/security analysis such as formal testing (code coverage), static program analysis (control/data flow analysis and abstract interpretation), model checking (computational tree logic), and program verification (Hoare calculus, dynamic logic). The formal techniques will be used for analyzing both safety and security properties of programs. Where possible, students will be given hands-on micro-projects in state-of-the-art tools (e.g., Isabelle for program verification).

Operating Systems

About

  • Course: Operating Systems (CO20-320202)
  • Semester: Fall 2017
  • Instructor: Jürgen Schönwälder
  • TA: Mateen, Tayyab
  • Class: Wednesday, 14:15-15:30, Lecture Hall Research I
  • Class: Thursday, 14:15-15:30, Lecture Hall Research II

Content

This course provides an introduction to the concepts underlying operating systems. Students will develop an understanding how operating systems realize a virtual machine that can be used to execute multiple concurrent application programs. The course discusses resource allocation algorithms and how concurrency problems can be solved.

Topics: Operating system architectures, system calls and interrupts, concurrent processes and threads, scheduling, synchronization, deadlocks, virtual memory, file systems, inter-process communication, socket programming interface.

Introduction to Computer Science

About

  • Course: Introduction to Computer Science (CH08-320101)
  • Semester: Fall 2017
  • Instructor: Jürgen Schönwälder
  • TA: Abreu, Steven
  • TA: Granderath, Malte Aaron
  • TA: Hambasan, Alexandru
  • TA: Maiereanu, Tudor Cristian
  • TA: Shrestha, Mohit
  • TA: Tarigradschi, Mihail
  • Class: Tuesday, 08:15-09:30, Lecture Hall Research II
  • Class: Tuesday, 09:45-11:00, Lecture Hall Research II
  • Class: Thursday, 11:15-12:30, Lecture Hall Research II

Content

The course covers the fundamental concepts and techniques of computer science in a bottom-up manner. Based on clear mathematical foundations (which are developed as needed) the course discusses abstract and concrete notions of computing machines, information, and algorithms, focusing on the question of representation versus meaning in Computer Science.

To develop a theoretical notion of computation, we introduce basic concepts of discrete mathematics with a focus on inductively defined structures. The functional programming language Haskell will be introduced and used as the primary programming language for the course. We cover a basic subset of Haskell that includes types, recursion, tuples, lists, strings, and higher-order functions. Back on the theoretical side, we cover the syntax and semantics of Boolean expressions and we explain how Boolean algebra relates to logic gates and digital circuits. On the technical side, we introduce the representation of basic data types such as numbers, characters, strings and dates as well as the basics of computer architecture and assembly programming. On the algorithmic side, the course introduces the notion of correctness and elementary complexity theory (big-O notation) and we introduce abstract data types.

Computer Networks

About

  • Course: Computer Networks (CO20-320301)
  • Semester: Fall 2016
  • Instructor: Jürgen Schönwälder
  • TA: Schmoll, Felix
  • Class: Tuesday, 11:15-12:30, West Hall 5
  • Class: Friday, 11:15-12:30, West Hall 6
  • Start: 2016-09-02

Content

The course discusses network protocols in some depth in order to enable students to understand the core issues involved in network protocol design. Fundamental algorithms and principles are explained in the context of existing IEEE / Internet protocols in order to demonstrate how they are applied in real-world scenarios. This course is recommended for all students with a strong interest in communication networks and distributed systems.

The course covers topics such as local area networks (IEEE 802), Internet protocols, routing algorithms and protocols, flow and congestion control mechanisms, data representation, application layer protocols, remote procedure calls, network security.

Operating Systems Lab

About

  • Course: Operating Systems Lab (CO20-320202)
  • Semester: Fall 2016
  • Instructor: Jürgen Schönwälder
  • Labs: Thursday, 15:45-17:00 (West Hall 8)
  • Labs: Thursday, 17:15-18:30 (West Hall 8)
  • Start: 2016-09-01

Content

This lab complements the Operating Systems course. Students will gain practical experience with systems programming above and below the system call interface of operating systems. Students will learn how to write concurrent programs and gain understanding how kernel programming differs from normal application development.

Computer Networks

About

  • Course: Computer Networks (CO20-320301)
  • Semester: Spring 2017
  • Instructor: Jürgen Schönwälder
  • TA: Schmoll, Felix
  • Class: Tuesday, 09:45-11:00, Lecture Hall Research I
  • Class: Wednesday, 08:15-09:30, Lecture Hall Research I
  • Class: Wednesday, 14:15-15:30, Lecture Hall Research I
  • Class: Friday, 11:15-12:30, Lecture Hall Research III
  • Start: 2017-02-03

Content

The course discusses network protocols in some depth in order to enable students to understand the core issues involved in network protocol design. Fundamental algorithms and principles are explained in the context of existing IEEE / Internet protocols in order to demonstrate how they are applied in real-world scenarios. This course is recommended for all students with a strong interest in communication networks and distributed systems.

The course covers topics such as local area networks (IEEE 802), Internet protocols, routing algorithms and protocols, flow and congestion control mechanisms, data representation, application layer protocols, remote procedure calls, network security.

Programming in C II

About

  • Course: Programming in C II (JTSK-320112)
  • Semester: Spring 2017
  • Instructor: Jürgen Schönwälder
  • TA: Stefan Bogdan
  • TA: Joana Halili
  • Class: Thursday, 14:15-18:30, Seminar Room Research V (R-V)
  • Class: Friday, 14:15-18:30, Seminar Room Reimer Luest Hall (RLH)
  • Start: 2017-02-09

Content

Programming Language C

Books

  • Brian W. Kernighan, Dennis M. Ritchie: The C Programming Language, 2nd edition, Prentice Hall, 1988
  • Stephen Prata: C Primer Plus, 5th edition, Sams Publishing, 2004
  • Steve Oualline: Practical C Programming, 3rd edition, O'Reilly, 1997

Links

Schedule

Lab Session Topics
2017-02-09 (Thu) C Preprocessor, Bit Operations
2017-02-10 (Fri) Pointers and Arrays
2017-02-16 (Thu) Pointers and Structures, Compiling and Linking
2017-02-17 (Fri) Makefiles, Function Pointers
2017-02-23 (Thu) Stacks and Queues, Modifiers
2017-02-24 (Fri) File I/O

Dates

Date/Due Name Topics
2017-02-09 Sheet #1 C Preprocessor, Bit Operations
2017-02-10 Sheet #2 Arrays, Pointers, Multidimensional Arrays
2017-02-16 Sheet #3 Linked Lists and Multiple Sources
2017-02-17 Sheet #4 Makefiles and Function Pointers
2017-02-23 Sheet #5 Stacks and Queues
2017-02-24 Sheet #6 Queues and Files

Rules

The final grade is made up of the final exam (65 %), and the assignments (35 %). It is required to submit the solution for assignments electronically. Late submissions will not be accepted.

Any programs which have to be written will be evaluated based on the following criteria:

  • correctness including proper handling of error conditions
  • proper use of programming language constructs
  • clarity of the program organization and design
  • readability of the source code and any output produced

Some additional grading criteria were put together by the teaching assistants.

Operating Systems

About

  • Course: Operating Systems (CO20-320202)
  • Semester: Fall 2016
  • Instructor: Jürgen Schönwälder
  • TA: Al-Eryani, Aiman
  • Class: Monday, 08:15-09:30 (Lecture Hall Research III)
  • Class: Tuesday, 14:15-15:30 (Lecture Hall Research III)
  • Final: Friday, 2016-12-14, 12:30-14:30 (CNLH)
  • Office: Monday, 11:15-12:30 (Research I, Room 87)
  • Start: 2016-09-05

Content

This course provides an introduction to the concepts underlying operating systems. Students will develop an understanding how operating systems realize a virtual machine that can be used to execute multiple concurrent application programs. The course discusses resource allocation algorithms and how concurrency problems can be solved.

Topics: Operating system architectures, system calls and interrupts, concurrent processes and threads, scheduling, synchronization, deadlocks, virtual memory, file systems, inter-process communication, socket programming interface.