diff --git a/20181129/I2C_data_transfer.pdf b/20181129/I2C_data_transfer.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..0d5b8a241c624391cbf6f3a30f26320559358e1d
Binary files /dev/null and b/20181129/I2C_data_transfer.pdf differ
diff --git a/20181129/Retribution_Engine_Screenshot_120807.jpg b/20181129/Retribution_Engine_Screenshot_120807.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7
--- /dev/null
+++ b/20181129/Retribution_Engine_Screenshot_120807.jpg
@@ -0,0 +1 @@
+../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20181129/SPI_single_slave.pdf b/20181129/SPI_single_slave.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..6f724dad4a8ed23b262b0b1c672bf85b72405155
Binary files /dev/null and b/20181129/SPI_single_slave.pdf differ
diff --git a/20181129/SPI_three_slaves.pdf b/20181129/SPI_three_slaves.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b67dc94c790a62935c7b353449e2ce8c75a7d9fe
Binary files /dev/null and b/20181129/SPI_three_slaves.pdf differ
diff --git a/20181129/SPI_three_slaves_daisy_chained.pdf b/20181129/SPI_three_slaves_daisy_chained.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..46ac2027cfcbd598a609e43ce74e19e75d374ead
Binary files /dev/null and b/20181129/SPI_three_slaves_daisy_chained.pdf differ
diff --git a/20181129/Telefon_t-sinus-700.jpg b/20181129/Telefon_t-sinus-700.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..27c322c50b0f05edc8b07cfb0cc99b1876eb506d
--- /dev/null
+++ b/20181129/Telefon_t-sinus-700.jpg
@@ -0,0 +1 @@
+../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20181129/Zeichen_123.pdf b/20181129/Zeichen_123.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116
--- /dev/null
+++ b/20181129/Zeichen_123.pdf
@@ -0,0 +1 @@
+../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20181129/a380.jpg b/20181129/a380.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..33a5d1fd18843bf7385e5a6d90f69af9fd8720da
--- /dev/null
+++ b/20181129/a380.jpg
@@ -0,0 +1 @@
+../common/a380.jpg
\ No newline at end of file
diff --git a/20181129/curiosity.jpg b/20181129/curiosity.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..4452844da537414b751c5283ca8468b3ced9afb3
--- /dev/null
+++ b/20181129/curiosity.jpg
@@ -0,0 +1 @@
+../common/curiosity.jpg
\ No newline at end of file
diff --git a/20181129/dsc_8208.jpg b/20181129/dsc_8208.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..5796341ebc774aa09965a3a29854c65ce1144fb8
--- /dev/null
+++ b/20181129/dsc_8208.jpg
@@ -0,0 +1 @@
+../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20181129/es-20181129.pdf b/20181129/es-20181129.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..b334aa28de6024a62409125e538013e0ca26edfd
Binary files /dev/null and b/20181129/es-20181129.pdf differ
diff --git a/20181129/es-20181129.tex b/20181129/es-20181129.tex
new file mode 100644
index 0000000000000000000000000000000000000000..889c88afc705da67bc6647c8f4f81a7098588534
--- /dev/null
+++ b/20181129/es-20181129.tex
@@ -0,0 +1,2194 @@
+% es-20181129.pdf - Lecture Slides on Embedded Systems
+% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+% README: Bus-Systeme; Echtzeit
+
+\documentclass[10pt,t]{beamer}
+
+\usepackage{pgslides}
+\usepackage{rotating}
+\usepackage{tikz}
+\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
+
+\newrgbcolor{lightyellow}{0.95 0.85 0.0}
+\newrgbcolor{lightorange}{1.0 0.7 0.0}
+\newrgbcolor{lightgreen}{0.0 0.8 0.0}
+
+\newcommand{\underconstruction}{%
+  \begin{picture}(0,0)
+    \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
+    \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
+  \end{picture}}
+
+\title{Eingebettete Systeme}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{29.\ November 2018}
+
+\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
+
+\begin{document}
+
+\newlength{\normalpdfpageheight}
+\setlength{\normalpdfpageheight}{\pdfpageheight}
+
+\maketitleframe
+
+\nosectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+      \begin{itemize}
+        \color{medgreen}
+        \vspace*{-\smallskipamount}
+        \item[\dots]
+        \color{medgreen}
+        \item[3.6] SSH
+        \item[3.7] X11
+        \item[3.8] GNU screen
+        \item[3.9] Programmierung
+      \end{itemize}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+      \begin{itemize}
+        \color{medgreen}
+        \item[5.1] Was sind Bus-Systeme?
+        \item[5.2] RS-232
+        \item[5.3] \ItwoC\ (TWI)
+        \item[5.4] SPI
+        \color{red}
+        \item[5.5] PWM
+        \item[5.6] Sonstiges
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Echtzeit}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+  \end{itemize}
+
+  \vspace*{-1cm plus 1filll}
+
+  \underconstruction
+
+\end{frame}
+
+\setcounter{section}{2}
+\section{TCP/IP in der Praxis}
+\setcounter{subsection}{5}
+\subsection{SSH}
+
+\begin{frame}
+
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      \lstinline[style=cmd]{SSH <Rechner>}
+    \item
+      \lstinline[style=cmd]{-C}: Komprimierung
+    \item
+      \lstinline[style=cmd]{-L}: lokalen Port auf Remote-Port umleiten
+    \item
+      \lstinline[style=cmd]{-R}: Remote-Port auf lokalen Port umleiten
+  \end{itemize}
+
+\end{frame}
+
+\subsection{X11}
+
+\begin{frame}
+
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Grafik-Bildschirm und Eingabegeräte über's Netz
+    \item
+      \lstinline[style=cmd]{DISPLAY}-Variable: X-Server: Rechner und Bildschirm
+    \item
+      \lstinline[style=cmd]{ssh -X}: X11-Forwarding
+  \end{itemize}
+
+\end{frame}
+
+\subsection{GNU screen}
+
+\begin{frame}
+
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Text-Bildschirm und Eingabegeräte über's Netz
+    \item
+      \lstinline[style=cmd]{Ctrl+A c}: neues Fenster (create)
+    \item
+      \lstinline[style=cmd]{Ctrl+A Leertaste}: nächstes Fenster
+    \item
+      \lstinline[style=cmd]{Ctrl+A 3}: Fenster Nr.\ 3
+    \item
+      \lstinline[style=cmd]{Ctrl+A ESC}: hochscrollen, suchen, markieren (copy)
+    \item
+      \lstinline[style=cmd]{Ctrl+A Ctrl+]}: einfügen (paste)
+    \item
+      \lstinline[style=cmd]{Ctrl+A d}: von \file{screen} ablösen (detach)
+    \item
+      \lstinline[style=cmd]{screen -x}: an laufenden \file{screen} andocken
+    \medskip
+    \item
+      ähnliche Funktionalität für Grafik: \file{x2go}
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Programmierung}
+
+\begin{frame}
+
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      \file{tcpip-server-0.c}: auf Port 1234 lauschen, "`Hello, world!"' senden
+    \item
+      \file{tcpip-client-0.c}: Webseite \url{http://ngc224.gerwinski.de} abrufen
+  \end{itemize}
+
+\end{frame}
+
+\section{Bus-Systeme}
+\subsection{Was sind Bus-Systeme?}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{quote}
+    Ein Bus ist ein System zur Datenübertragung zwischen mehreren
+    Teilnehmern über einen gemeinsamen Übertragungsweg.
+%    \color{gray}
+%    Findet eine Datenübertragung zwischen zwei Teilnehmern statt, so
+%    müssen die übrigen Teilnehmer schweigen, da sie sich sonst
+%    gegenseitig stören würden. Umgangssprachlich werden mitunter --
+%    oft aus historischen Gründen – auch Datenübertragungssysteme als
+%    "`Bus"' bezeichnet, die technisch eigentlich eine andere
+%    Topologie besitzen.
+
+    \medskip
+
+    \strut\hfill\url{https://de.wikipedia.org/wiki/Bus_(Datenverarbeitung)}
+  \end{quote}
+  Beispiele:
+  \begin{itemize}
+    \item
+      Computer kommuniziert mit Peripherie
+    \item
+      Computer kommunizieren (direkt) miteinander
+    \item
+      Prozessor kommuniziert mit externem Speicher
+    \item
+      Teile eines Prozessors kommunizieren miteinander
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+  Standard-Computer:
+  \begin{itemize}
+    \item
+      Einsteckkarten: PCI (und Vorgänger)
+    \item
+      Festplatten: SATA (und Vorgänger)
+    \item
+      USB, FireWire, \dots
+    \item
+      Ethernet, CAN-Bus, \dots
+    \item
+      WLAN, BlueTooth, IR, \dots
+    \item
+      PS/2, RS-232, Centronics
+  \end{itemize}
+
+  \medskip
+
+  Minimal-Hardware:
+  \begin{itemize}
+    \item
+      RS-232
+    \item
+      \ItwoC\ (TWI)
+    \item
+      SPI
+  \end{itemize}
+
+  \begin{onlyenv}<1>
+    \begin{picture}(0,0)
+      \put(5,1.5){\includegraphics[height=3cm]{motherboard-anschluesse.jpg}}
+    \end{picture}
+  \end{onlyenv}
+  \begin{onlyenv}<2>
+    \begin{picture}(0,0)(-1.3,-4)
+      \put(1.8,-4.9){\includegraphics[height=3.5cm]{kompassmodul-an-roboter.jpg}}
+      \put(6.1,-3.3){\includegraphics[height=4.5cm]{kompassmodul.jpg}}
+      \put(6.1,1.2){\makebox(0,0)[tr]{\tikz{\draw(0,0)--(-1.9,-3.6);}}}
+      \put(6.1,-3.3){\makebox(0,0)[br]{\tikz{\draw(0,0)--(-1.8,0.2);}}}
+    \end{picture}
+  \end{onlyenv}
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsection
+  \showsubsection
+
+  \vspace*{-\bigskipamount}
+  \begin{tabbing}
+    \newterm{Punkt-zu-Punkt}\quad\=\kill
+    \newterm{seriell} \> jedes Bit einzeln übertragen\\
+    \newterm{parallel} \> mehrere Bits gleichzeitig\\[\smallskipamount]
+    \newterm{synchron} \> Abgleich über Steuerleitung: \newterm{Takt}\\
+    \newterm{asynchron} \> Abgleich über Zeitvereinbarungen\\[\smallskipamount]
+    \newterm{Punkt-zu-Punkt} \> genau zwei Teilnehmer\\
+    \newterm{busfähig} \> mehrere Teilnehmer, mit \newterm{Adressierung}
+  \end{tabbing}
+
+  \begin{itemize}
+    \item
+      \ItwoC: seriell, synchron, mit Adressierung
+    \item
+      RS-232: seriell, asynchron, Punkt-zu-Punkt
+    \item
+      RS-485, USB, CAN: seriell, asynchron, mit Adressierung
+    \item
+      SPI: seriell, synchron, Punkt-zu-Punkt oder mit Adressierung
+  \end{itemize}
+
+\end{frame}
+
+\subsection{RS-232}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  seriell
+  \begin{itemize}
+    \item
+      \newterm{TX\/}: 1 Leitung für Daten
+    \item
+      \newterm{RX\/}: ggf.\ 1 Leitung für Daten in der anderen Richtung
+    \item
+      \newterm{GND\/}: gemeinsame \newterm{Masse}
+    \item
+      evtl.\ zusätzliche Steuerleitungen
+  \end{itemize}
+
+  \medskip
+
+  asynchron
+  \begin{itemize}
+    \item
+      \emph{keine\/} Taktleitung für Abgleich, wann Daten anliegen
+    \item
+      Stattdessen: Abgleich über Zeitvereinbarungen
+    \arrowitem
+      Jeder Teilnehmer braucht eine eigene Zeitbasis.
+  \end{itemize}
+
+  \medskip
+
+  Punkt-zu-Punkt
+  \begin{itemize}
+    \item
+      nur 2 Teilnehmer vorgesehen
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \showsubsection
+  \vspace*{-0.35cm}
+  \begin{center}
+    \includegraphics[scale=0.9]{rs-232.pdf}
+  \end{center}
+\end{frame}
+
+\subsection{\protect\ItwoC\ (TWI)}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \ItwoC\ = Inter-IC; TWI = Two-Wire-Interface
+
+  \medskip
+
+  seriell
+  \begin{itemize}
+    \item
+      \newterm{SDA\/}: 1 Leitung für Daten (in beiden Richtungen)
+    \item
+      \newterm{SCL\/}: Taktleitung (Clock)
+    \item
+      \newterm{GND\/}: gemeinsame Masse
+    \item
+      evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät
+  \end{itemize}
+
+  \medskip
+
+  synchron
+  \begin{itemize}
+    \item
+      Abgleich über\\Taktleitung
+      \begin{picture}(0,0)
+        \put(0.4,-0.4){\includegraphics[width=9.7cm]{I2C_data_transfer.pdf}}
+      \end{picture}
+  \end{itemize}
+
+  \medskip
+
+  busfähig
+  \begin{itemize}
+    \item
+      \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung
+    \item
+      erstes gesendetes Byte: \newterm{Adresse\/} des Teilnehmers
+    \item
+      2 Adressen pro Teilnehmer: Lesen/Schreiben
+  \end{itemize}
+  \vspace*{-1cm}
+\end{frame}
+
+\subsection{SPI}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Serial Peripheral Interface
+
+  \medskip
+
+  seriell
+  \begin{itemize}
+    \item
+      \newterm{MOSI\/}: Master Out, Slave In
+    \item
+      \newterm{MISO\/}: Master In, Slave Out
+    \item
+      \newterm{SCLK\/}: Taktleitung (Clock)
+    \item
+      \newterm{$\overline{\text{SS}}$\/}: Slave Select (invertiert)
+    \item
+      \newterm{GND\/}: gemeinsame Masse
+    \item
+      evtl.\ \newterm{VCC\/}: Stromversorgung für Peripheriegerät
+  \end{itemize}
+
+  \medskip
+
+  synchron
+  \begin{itemize}
+    \item
+      Abgleich über Taktleitung
+  \end{itemize}
+
+  \medskip
+
+  busfähig
+  \begin{itemize}
+    \item
+      \newterm{Master\/} initiiert Kommuniation und steuert Taktleitung
+    \item
+      \newterm{Slave\/} wird über \newterm{Slave Select\/} ausgewählt
+      \begin{picture}(0,0)(0,-0.2)
+        \only<1>{\put(-2.175,2.875){\includegraphics[scale=0.7]{SPI_single_slave.pdf}}}
+        \only<2>{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves.pdf}}}
+        \only<2>{\put(2.55,3.1){\begin{minipage}[t]{2.5cm}
+                                  \newterm{Stern}
+                                \end{minipage}}}
+        \only<3->{\put(-2.0,3.0){\includegraphics[scale=0.7]{SPI_three_slaves_daisy_chained.pdf}}}
+        \only<3->{\put(2.55,3.1){\begin{minipage}[t]{2.5cm}
+                                   \newterm{Kaskade}\\
+                                   \newterm{Daisy Chain}\pause[4]\par\smallskip
+                                   \setlength{\leftskip}{-3.5cm}\small
+                                   Slave gibt MOSI-Input um 1 Takt verzögert
+                                   an MISO aus \textarrow\ Master setzt
+                                   "`im richtigen Moment"' $\overline{\text{SS}}$
+                                 \end{minipage}}}
+      \end{picture}
+  \end{itemize}
+  \vspace*{-1cm}
+  
+\end{frame}
+
+\subsection{PWM}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Pulsweitenmodulation -- \emph{pulse-width modulation}
+
+  \begin{itemize}
+    \item
+      Steuerung von Motoren
+    \item
+      Nutzung als allgemeines Protokoll\\
+      zur Übertragung analoger Werte
+  \end{itemize}
+\end{frame}
+
+\subsection{Sonstiges}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Matrix-Schaltung
+  \begin{itemize}
+    \item
+      möglichst viele Aktoren/Sensoren\\
+      über möglichst wenige digitals Inputs abfragen\\
+      bzw.\ über möglichst wenige digitale Outputs steuern
+    \item
+      Beispiele: LED-Felder, Tastaturen
+  \end{itemize}
+
+  \bigskip
+
+  R/2R-Netzwerk
+  \begin{itemize}
+    \item
+      möglichst viele digitale Inputs\\
+      über einen einzigen analogen Input abfragen
+    \item
+      Beispiele: Tastaturen
+  \end{itemize}
+
+\end{frame}
+
+\nosectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+      \begin{itemize}
+        \color{medgreen}
+        \item[5.1] Was sind Bus-Systeme?
+        \item[5.2] RS-232
+        \item[5.3] \ItwoC\ (TWI)
+        \item[5.4] SPI
+%        \item[5.5] Beispiel: Benutzung des \ItwoC-Busses
+        \color{medgreen}
+        \item[5.5] PWM
+        \item[5.6] Sonstiges
+      \end{itemize}
+    \item[\textbf{6}] \textbf{Echtzeit}
+      \begin{itemize}
+        \color{red}
+        \item[5.1] Was ist Echtzeit?
+        \item[5.2] Echtzeitprogrammierung
+        \item[5.3] Multitasking
+        \item[5.4] Ressourcen
+        \item[5.5] Prioritäten
+      \end{itemize}
+    \vspace*{-\medskipamount}
+    \item[\textbf{\dots}]
+  \end{itemize}
+
+  \vspace*{-1cm plus 1filll}
+
+  \underconstruction
+
+\end{frame}
+
+\section{Echtzeit}
+
+\subsection{Was ist Echtzeit?}
+
+\begin{frame}
+  
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \pause
+    \item
+      Animation in Echtzeit:\\
+      schnelle Berechnung anstatt Wiedergabe einer Aufzeichnung
+    \pause
+    \medskip
+    \item
+      Fantasy-Rollenspiel in Echtzeit:\\
+      Der Zeitverlauf der Spielwelt entspricht dem der realen Welt.
+    \pause
+    \medskip
+    \item
+      Datenverarbeitung in Echtzeit:\\
+      Die Daten werden so schnell verarbeitet, wie sie anfallen.
+    \pause
+    \medskip
+    \item
+      speziell: Echtzeit-Steuerung von Maschinen:\\
+      Die Berechnung kann mit den physikalischen Vorgängen schritthalten.
+    \pause
+    \bigskip
+    \arrowitem
+      "`Schnell genug."'
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsubsection
+
+  "`Schnell genug."' \pause-- "`Und wenn nicht?"'
+
+  \pause
+
+  \begin{itemize}
+    \item
+      "`Ganz schlecht."' \pause\textarrow\ \newterm{harte Echtzeit}
+      \begin{onlyenv}<4-8>
+        \begin{picture}(0,0)(0,-0.3)
+          \pause
+          \put(0,-4){\makebox(0,0)[br]{\includegraphics[height=3.5cm]{a380.jpg}}}
+          % http://de.wikipedia.org/w/index.php?title=Datei:Airbus_A380_overfly.jpg&filetimestamp=20111223141606
+          \pause
+          \put(0.2,-3.9){\makebox(0,0)[bl]{\includegraphics[height=4.0cm]{quadrocopter.jpg}}}
+          %\put(0.2,-3.5){\makebox(0,0)[bl]{\includegraphics[height=3.5cm]{mercedes-benz-w116.jpg}}}
+          % http://commons.wikimedia.org/wiki/File:1973-1980_Mercedes-Benz_450_SEL_%28W116%29_sedan_%282010-12-28%29_01.jpg
+          \pause
+          \put(-0.5,-4.2){\makebox(0,0)[tr]{\includegraphics[height=3.5cm]{herzschrittmacher.jpg}}}
+          % http://de.wikipedia.org/w/index.php?title=Datei:Pacemaker_GuidantMeridianSR.jpg&filetimestamp=20051203173642
+          \pause
+          \put(0,-4){\makebox(0,0)[tl]{\includegraphics[height=3.5cm]{curiosity.jpg}}}
+          % http://mars.jpl.nasa.gov/msl/news/whatsnew/index.cfm?FuseAction=ShowNews&NewsID=1344
+        \end{picture}
+      \end{onlyenv}
+    \pause\\[2pt]
+    rechtzeitiges Ergebnis funktionsentscheidend
+
+    \smallskip
+
+    \pause
+    \item
+      "`Unschön."' \textarrow\ \newterm{weiche Echtzeit}
+      \begin{onlyenv}<10-12>
+        \begin{picture}(0,0)(0,0.3)
+          \pause
+          \put(0,-4){\makebox(0,0)[br]{\includegraphics[width=5cm]{Retribution_Engine_Screenshot_120807.jpg}}}
+          % http://en.wikipedia.org/wiki/File:Retribution_Engine_Screenshot_120807.jpg
+          \pause
+          \put(0.1,-4.5){\makebox(0,0)[bl]{\includegraphics[width=5cm]{Telefon_t-sinus-700.jpg}}}
+          % http://de.wikipedia.org/w/index.php?title=Datei:Telefon_t-sinus-700.jpg&filetimestamp=20050807203655
+        \end{picture}
+      \end{onlyenv}
+      \pause\\[2pt]
+      verspätetes Ergebnis qualitätsmindernd
+      \begin{itemize}
+        \baselineskip14pt\par
+        \item
+          verwenden und Verzögerung in Kauf nehmen
+        \item
+          verwerfen und Ausfall in Kauf nehmen
+      \end{itemize}
+
+    \smallskip
+
+    \pause
+    \item
+      "`Es gibt keinen festen Termin. Möglichst schnell halt."'\pause\\[2pt]
+      \textarrow\ \newterm{keine Echtzeit}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Das Problem:
+  \vspace{-\bigskipamount}
+  \begin{center}
+    \begin{picture}(6,2)
+      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
+      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
+%      \put(2.75,0.875){\vector(1,3){0.25}}
+%      \put(2.75,0.875){\line(2,1){0.5}}
+%      \put(3.25,1.125){\vector(-1,-3){0.25}}
+      \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}}
+    \end{picture}
+%    \begin{pdfpic}
+%      \begin{pspicture}(6,2)
+%        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
+%        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
+%        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
+%      \end{pspicture}
+%    \end{pdfpic}
+  \end{center}
+
+  \pause
+
+  Beispiel:
+  \begin{itemize}
+    \item
+      Eine Motorsteuerung benötigt alle \SI{2000}{\mics} einen Steuerimpuls,\\
+      dessen Berechnung maximal \SI{10}{\mics} dauert.
+    \pause[3]
+    \item
+      Entweder: Der Steuer-Computer macht noch andere Dinge.\\
+      \textarrow\ Risiko der Zeitüberschreitung
+    \pause
+    \item
+      Oder: Der Steuer-Computer macht nichts anderes.\\
+      \textarrow\ Verschwendung von Rechenzeit\\
+      \pause
+      {\color{red}\textarrow\ Na und?}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \showsubsection
+
+  Das Problem:
+  \vspace{-\bigskipamount}
+  \begin{center}
+    \begin{picture}(6,2)
+      \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
+      \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
+%      \put(2.75,0.875){\vector(1,3){0.25}}
+%      \put(2.75,0.875){\line(2,1){0.5}}
+%      \put(3.25,1.125){\vector(-1,-3){0.25}}
+      \put(2.70,0.350){\tikz{\draw[latex-latex](0.25,0.625)--(0,-0.12)--(0.5,0.12)--(0.25,-0.625);}}
+    \end{picture}
+%    \begin{pdfpic}
+%      \begin{pspicture}(6,2)
+%        \put(3,2){\makebox(0,0)[t]{Harte Echtzeitanforderungen}}
+%        \put(3,0){\makebox(0,0)[b]{Ressourcen optimal nutzen}}
+%        \psline[arrows=<->](3,0.4)(3.2,1.125)(2.8,0.875)(3,1.6)
+%      \end{pspicture}
+%    \end{pdfpic}
+  \end{center}
+
+  \medskip
+
+  {\large\color{structure}\textbf{"`Verschwendung von Rechenzeit -- na und?"'}}
+
+  \medskip
+
+  \pause
+  Große Stückzahlen
+  \begin{itemize}
+    \item
+      138\,000 Toyota Prius V von Mai 2011 bis April 2012
+  \end{itemize}
+
+  \medskip
+
+  \pause
+  Wertvolle Ressourcen
+  \begin{itemize}
+    \item
+      Fähigkeiten einer Raumsonde optimieren
+      % (Marsumlaufbahn: ab ca.~127\,000 Euro pro kg)
+      % 70000000 / 550000 = 127._27
+      % http://www.bernd-leitenberger.de/blog/2009/09/29/reduktion-der-kosten-von-planetenmissionen/
+      \only<.(1)>{\\[\medskipamount]\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.3cm]{curiosity.jpg}}\vspace*{-1cm}}
+    \pause
+    \item
+      Implantat: Platz- und Stromverbrauch minimieren
+      \only<.(1)>{\\\strut\hfill\makebox(0,0)[r]{\includegraphics[height=3.4cm]{herzschrittmacher.jpg}}\vspace*{-1cm}}
+  \end{itemize}
+
+  \bigskip
+
+  \pause
+  \textarrow\ {\large\color{structure}\textbf{Echtzeitprogrammierung}}\\[2pt]
+  \strut \phantom{\textarrow} Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
+
+\end{frame}
+
+\subsection{Echtzeitprogrammierung}
+
+\begin{frame}
+
+  \showsubsection
+
+  Echtzeitanforderungen erfüllen, ohne Ressourcen zu verschwenden
+
+  \bigskip
+
+  \alt<.(1)>{Aber wie?}{Beispiele für Lösungen:}
+
+  \begin{itemize}
+    \pause
+    \item
+      ZigBee-Modul:\only<.(1)>{\hfill\makebox(0,0)[tr]{\includegraphics[width=5cm]{xbee.jpg}}}\\
+      % http://commons.wikimedia.org/wiki/File:Arduino_xbee.JPG
+      Funk- vs.\ UART-Protokoll\\
+      \textarrow\ dedizierte Hardware
+    \pause
+    \item
+      RP6:\\
+      Motorsteuerung vs.\ Anwender-Software\\
+      \textarrow\ spezielle Software
+      \only<.(1)>{\hfill\makebox(0,0)[r]{\includegraphics[width=5cm]{rp6.jpg}}}
+    \pause
+    \item
+      Quadrocopter:\\
+      Motorsteuerung vs.\ Sensoren-Abfrage\\
+      vs.\ Funk-Fernsteuerung \dots\\
+      \textarrow\ spezielle Software
+      \only<.(1)>{\hfill\makebox(0,0)[br]{\includegraphics[width=5cm]{quadrocopter.jpg}}}\\
+    \pause
+    \item
+      Flugzeugkabinensimulatortür:\\
+      Türsteuerung vs.\ Bedienung\\
+      \textarrow\ Echtzeitbetriebssystem
+      \only<.(1)>{\\[-3.2cm]\strut\hfill\makebox(0,0)[r]{\includegraphics[angle=-90,width=5cm]{dsc_8208.jpg}}}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsubsection
+
+  Quadrocopter-Steuerung \emph{MultiWii}
+  \begin{itemize}
+    \item
+      Konfiguration durch bedingte Compilierung (Präprozessor)
+    \item
+      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
+      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
+  \end{itemize}
+
+  \pause
+
+  RP6-Steuerung
+  \begin{itemize}
+    \item
+      Konfiguration durch bedingte Compilierung (Präprozessor)
+    \item
+      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
+      Die Interrupt-Handler zählen Variable hoch.
+    \item
+      10000mal pro Sekunde: Timer-Interrupt\\
+      Durch Zähler im Interrupt-Handler: verschiedene Taktraten\\
+      1000mal pro Sekunde: Stopwatches\\
+      5mal pro Sekunde: Blinkende Power-On-LED\\
+      1000mal pro Sekunde: Bumper, ACS, PWM zur Motorsteuerung\\
+      Geschwindigkeitsmessung durch Zählen der Ticks in 0.2\,s\\
+      Anpassung der Motorkraft in $\pm$1-Schritten
+    \pause
+    \item
+      Nebenbei: \only<4->{1 }Benutzerprogramm
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Multitasking}
+
+\begin{frame}
+
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      \newterm{Kooperatives Multitasking}\\
+      Prozesse geben freiwillig Rechenzeit ab
+    \item
+      \newterm{Präemptives Multitasking}\\
+      Das Betriebssystem unterbricht laufende Prozesse\\
+      (englisch: \emph{to pre-empt\/} -- jemandem zuvorkommen)
+    \bigskip
+    \item
+      \newterm{Scheduler}\\
+      Steuerprogramm, das Prozessen Rechenzeit zuteilt
+    \item
+      \newterm{Kontextwechsel}\\
+      Umschalten zwischen zwei Prozessen
+    \item
+      \newterm{Round-Robin-Verfahren (Rundlauf)}\\
+      Zuteilung von \newterm{Zeitschlitzen\/} auf einer \newterm{Zeitscheibe} an die Prozesse
+    \bigskip
+    \pause
+    \item
+      Ausblick: Zuteilung von Rechenzeit = wichtiger Spezialfall\\
+      allgemein: Zuteilung von Ressourcen
+  \end{itemize}
+
+\end{frame}
+
+\subsectionnonumber{Beispiele für Multitasking}
+
+\begin{frame}
+
+  \showsubsectionnonumber
+
+  Quadrocopter-Steuerung \emph{MultiWii}
+  \begin{itemize}
+    \item
+      Konfiguration durch bedingte Compilierung (Präprozessor)
+    \item
+      In der Hauptschleife wird 50mal pro Sekunde der RC-Task aufgerufen,\\
+      ansonsten zyklisch einer von bis zu 5 weiteren Tasks.
+  \end{itemize}
+
+  RP6-Steuerung
+  \begin{itemize}
+    \item
+      Konfiguration durch bedingte Compilierung (Präprozessor)
+    \item
+      Lichtschranken an Encoder-Scheiben lösen bei Bewegung Interrupts aus.\\
+      Die Interrupt-Handler zählen Variable hoch.
+    \item
+      10000mal pro Sekunde: Timer-Interrupt\\
+      verschiedene Tasks werden unterschiedlich häufig aufgerufen
+    \item
+      Nebenbei: 1 Benutzerprogramm
+  \end{itemize}
+
+  Linux 0.01
+  \begin{itemize}
+    \item
+      Timer-Interrupt:\only<2->{ Zähler des aktuellen Tasks wird dekrementiert;}\\
+      Task mit höchstem Zähler bekommt Rechenzeit.
+    \item
+      Wenn es keinen laufbereiten Task mit positivem Zähler gibt,\\
+      bekommen alle Tasks gemäß ihrer Priorität neue Zähler zugewiesen.
+    \item
+      \emph{keine\/} harte Echtzeit
+      % Aufgabe: Wo wird der Zähler heruntergezählt?
+  \end{itemize}
+
+\end{frame}
+
+\subsectionnonumber{Zombies}
+
+\begin{frame}
+
+  \showsubsectionnonumber
+
+  \pause
+  Wikipedia:
+  \begin{quote}
+    Als Zombie wird die fiktive Figur eines zum Leben erweckten
+    Toten (Untoter) oder eines seiner Seele beraubten, willenlosen
+    Wesens bezeichnet. Der Begriff leitet sich von dem Wort nzùmbe
+    aus der zentralafrikanischen Sprache Kimbundu ab und bezeichnet
+    dort ursprünglich einen Totengeist.
+  \end{quote}
+
+  \bigskip
+
+  \pause
+  Ein Zombie-Prozeß ist bereits beendet ("`tot"'),\\
+  bekommt keine Rechenzeit mehr ("`seiner Seele beraubt"'),\\
+  hat alle belegten Ressourcen wieder freigegeben ("`willenlos"'),\\
+  wird aber noch in der Prozeßliste geführt ("`untot"').
+  \begin{itemize}
+    \pause
+    \item
+      Warum?
+      \textarrow\
+      Ein anderer Prozeß (Elternprozeß) wartet noch auf den
+      Rückgabewert des beendeten Prozesses.
+    \pause
+    \item
+      Schadet das?
+      \textarrow\
+      Nein.
+    \pause
+    \item
+      Aber?
+      \textarrow\
+      Wenn sich Zombie-Prozesse anhäufen, deutet dies auf einen
+      Prozeß hin, der andere Prozesse erzeugt und anschließend "`hängt"'.
+    \pause
+    \item
+      Beispiel:
+      Datenträger entfernt, zugreifender Prozeß "`hängt"'.\\
+      \textarrow\
+      Tochterprozesse werden zu Zombies.
+  \end{itemize}
+
+\end{frame}
+
+\subsectionnonumber{Multitasking}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \begin{minipage}[t]{6cm}
+    Qualitätsaspekte beim Multitasking
+    \begin{itemize}
+      \item<2->
+        Verschiedene Anforderungen:
+        \newterm{Latenz\/} vs.\ \newterm{Jitter\/}\\
+        vs.\ \newterm{Durchsatz}
+        \smallskip
+        \begin{onlyenv}<3>
+          \begin{itemize}
+            \item
+              \newterm{Latenz:} interaktive Anwendungen
+            \item
+              \newterm{Jitter:} Echtzeitanwendungen
+            \item
+              \newterm{Durchsatz:} Stapelverarbeitung
+          \end{itemize}
+          \vspace*{-3cm}
+        \end{onlyenv}
+      \item<4->
+        Ressourcen reservieren:\\
+        \newterm{Mutexe}
+        \only<5->{(= spezielle \newterm{Semaphore\/})\\}
+        \only<6->{\textarrow\ kommt gleich}
+      \item<7->
+        Verschiedene Methoden\\
+        der Priorisierung\\
+        \textarrow\ später\\
+        \strut
+      \item<8->
+        Umgehung der Probleme durch
+        speziell geschriebene Software\\
+        (MultiWii, RP6, \dots)
+    \end{itemize}
+  \end{minipage}
+  \hfill
+  \pause[9]%
+  \begin{minipage}[t]{6.2cm}
+    Qualitätsaspekte für Netzwerke:
+    \begin{itemize}
+      \item
+        Verschiedene Anforderungen:
+        \newterm{Latenz\/} vs.\ \newterm{Jitter\/} vs.\ \newterm{Verluste\/}\\vs.\ \newterm{Durchsatz}
+      \item
+        Ressourcen reservieren:\\
+        \newterm{IntServ} mit \newterm{Resource Reservation Protocol (RSVP)}
+      \item
+        Klassifizierung und Priorisierung:
+        \newterm{DiffServ} mit Type-of-Service-Bits (IPv4)
+        bzw.\ Traffic-Class-Bits (IPv6) im IP-Header
+      \item
+        Eigenes Protokoll (Telefondienste):\\
+        \newterm{Asynchronous Transfer Mode (ATM)}
+    \end{itemize}
+  \end{minipage}
+
+\end{frame}
+
+\subsection{Ressourcen}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Ressourcen reservieren
+  \begin{itemize}
+    \item
+      \newterm{Semaphor}\\
+      gemeinsame Variable mehrerer Prozesse\\
+      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
+      Ressource belegt \textarrow\ Kontextwechsel
+      \begin{onlyenv}<1>
+        \par\medskip
+        griechisch: \emph{sema\/} -- Zeichen, \emph{pherein\/} -- tragen\\
+        "`Eisenbahnsignal"'
+        \vspace*{-3cm}
+      \end{onlyenv}
+    \pause
+    \medskip
+    \item
+      \newterm{Mutex}\\
+      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
+      auf eine Ressource zugreifen kann
+      \begin{onlyenv}<2>
+        \par\medskip
+        englisch: \emph{mutual exclusion\/} -- wechselseitiger Ausschluß\\
+        spezieller binärer Semaphor: nur "`Besitzer"' darf freigeben\\
+        % allgemein: auch jemand anderer dürfte freigeben
+        \vspace*{-3cm}
+      \end{onlyenv}
+    \pause
+    \medskip
+    \item
+      \newterm{Spinlock} (\emph{busy waiting\/})\\
+      leichtgewichtige Alternative zu Kontextwechsel
+      \begin{onlyenv}<3>
+        \par\medskip
+        englisch: \emph{spin\/} -- rotieren, \emph{lock\/} Sperre\\
+        \emph{busy waiting} auf etwas Schnelles, z.\,B.\ auf einen Semaphor\\[\medskipamount]
+        Hardware-Unterstützung:
+        Prüfen, ob Variable bestimmten Wert hat;\\
+        wenn ja, auf anderen Wert setzen; andere Prozessoren solange anhalten
+        \vspace*{-3cm}
+      \end{onlyenv}
+    \pause
+    \medskip
+    \item
+      \newterm{Kritischer Abschnitt -- critical section}\\
+      Programmabschnitt zwischen Reservierung\\
+      und Freigabe einer Ressource\\
+      \textarrow\ sollte immer so kurz wie möglich sein
+  \end{itemize}
+  \vspace*{-1cm}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Ressourcen reservieren --
+  Beispiel: \file{linux-3.7rc1}
+  \begin{itemize}
+    \item
+      \newterm{Semaphor}\\
+      \file{kernel/semaphor.c}\\
+      \file{drivers/usb/core/file.c}
+    \medskip
+    \item
+      \newterm{Mutex}\\
+      \file{kernel/mutex.c}\\
+      \file{drivers/usb/serial/usb-serial.c}
+    \medskip
+    \item
+      \newterm{Spinlock}\\
+      \file{kernel/spinlock.c}\\
+      \file{kernel/semaphor.c},
+      \file{kernel/mutex.c}
+  \end{itemize}
+
+  % Aufgabe: Anwendungsarten im MultiWii- und RP6-Code identifizieren
+
+  % evtl. Aufgabe: Warte-Problem
+
+  % Aufgabe: Wie lösen bekannte Multitasking-Betriebssysteme
+  % das o.a. Zuteilungsproblem?
+
+  % Danach: Semaphoren, Mutexe, Spinlocks
+  % Priorisierungsmethoden und -probleme
+
+  % Festplatten: completely fair queueing
+  % cat /sys/block/sdc/queue/scheduler
+  % "noop" hat sich für SVG gelohnt
+
+  % Virtualisierung + Kernel-Threads + Multiprozessorsystem = Chaos
+
+\end{frame}
+
+\begin{frame}[fragile]
+
+  \textbf{Beispiel:}
+  \lstinline{usb_serial_get_by_index()} -- serielle Schnittstelle reservieren
+
+  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
+
+  \medskip
+
+  \begin{lstlisting}
+    struct usb_serial *usb_serial_get_by_index (unsigned index)
+    {
+      struct usb_serial *serial;
+      mutex_lock (&table_lock);
+      serial = serial_table[index];
+      if (serial)
+        {
+          mutex_lock (&serial->disc_mutex);
+          if (serial->disconnected)
+            {
+              mutex_unlock (&serial->disc_mutex);
+              serial = NULL;
+            }
+          else
+            kref_get (&serial->kref);
+        }
+      mutex_unlock (&table_lock);
+      return serial;
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(5.1,6.85){\vector(-1,0){0.5}}
+    \put(5.2,6.85){\makebox(0,0)[l]{exklusiven Zugriff auf Tabelle sichern}}
+    \put(5.4,1.35){\vector(-1,0){0.5}}
+    \put(5.5,1.35){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Tabelle\\wieder freigeben}}}
+  \end{picture}
+
+\end{frame}
+
+\setlength{\pdfpageheight}{48cm}
+
+\begin{frame}[fragile]
+
+  \lstinline{mutex_lock()} -- Ressource beanspruchen, notfalls warten
+
+  Datei \file{linux-3.7-rc1/drivers/usb/serial/usb-serial.c}, ab Zeile 62
+
+  \medskip
+
+  \begin{lstlisting}
+    void __sched mutex_lock (struct mutex *lock)
+    {
+      might_sleep ();
+      __mutex_fastpath_lock (&lock->count, __mutex_lock_slowpath);
+      mutex_set_owner (lock);
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(11.6,1.35){\line(-1,0){1}}
+    \put(11.6,1.35){\line(0,-1){2.45}}
+    \put(11.6,-1.10){\vector(-1,0){2.0}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/arch/x86/include/asm/mutex\_32.h}, ab Zeile 24
+
+  Macro-Definition für \lstinline{__mutex_fastpath_lock} (expandiert)
+
+  \medskip
+
+  Assembler:
+  \begin{lstlisting}[language={[x86masm]Assembler}]
+        lock dec (lock->count)
+        jns 1
+        call __mutex_lock_slowpath
+    1:
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(9,0.95){\line(-1,0){3.5}}
+    \put(9,0.95){\line(0,-1){2.5}}
+    \put(9.0,-1.55){\vector(-1,0){1.0}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 398
+
+  \medskip
+
+  \begin{lstlisting}
+    static __used noinline void __sched
+      __mutex_lock_slowpath (atomic_t *lock_count)
+    {
+      struct mutex *lock = container_of (lock_count, struct mutex, count);
+      __mutex_lock_common (lock, TASK_UNINTERRUPTIBLE, 0,
+                               NULL, _RET_IP_);
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(11.0,1.40){\line(-1,0){1.0}}
+    \put(11.0,1.40){\vector(0,-1){2.5}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/kernel/mutex.c}, ab Zeile 132
+
+  \medskip
+
+  \begin{lstlisting}
+    static inline int __sched
+    __mutex_lock_common (struct mutex *lock, long state, unsigned int subclass,
+                             struct lockdep_map *nest_lock, unsigned long ip)
+    {
+      struct task_struct *task = current;
+      struct mutex_waiter waiter;
+      unsigned long flags;
+
+      preempt_disable ();
+      mutex_acquire_nest (&lock->dep_map, subclass, 0, nest_lock, ip);
+
+      /* ... */
+
+      spin_lock_mutex (&lock->wait_lock, flags);
+
+      debug_mutex_lock_common (lock, &waiter);
+      debug_mutex_add_waiter (lock, &waiter, task_thread_info (task));
+
+      /* add waiting tasks to the end of the waitqueue (FIFO): */
+      list_add_tail (&waiter.list, &lock->wait_list);
+      waiter.task = task;
+
+      if (atomic_xchg (&lock->count, -1) == 1)
+        goto done;
+
+      lock_contended (&lock->dep_map, ip);
+
+      for (;;)
+        {
+          /*
+           * Lets try to take the lock again - this is needed even if
+           * we get here for the first time (shortly after failing to
+           * acquire the lock), to make sure that we get a wakeup once
+           * it's unlocked. Later on, if we sleep, this is the
+           * operation that gives us the lock. We xchg it to -1, so
+           * that when we release the lock, we properly wake up the
+           * other waiters:
+           */
+          if (atomic_xchg (&lock->count, -1) == 1)
+            break;
+
+          /*
+           * got a signal? (This code gets eliminated in the
+           * TASK_UNINTERRUPTIBLE case.)
+           */
+          if (unlikely (signal_pending_state (state, task)))
+            {
+              mutex_remove_waiter (lock, &waiter, task_thread_info (task));
+              mutex_release (&lock->dep_map, 1, ip);
+              spin_unlock_mutex (&lock->wait_lock, flags);
+
+              debug_mutex_free_waiter (&waiter);
+              preempt_enable ();
+              return -EINTR;
+            }
+          __set_task_state (task, state);
+
+          /* didn't get the lock, go to sleep: */
+          spin_unlock_mutex (&lock->wait_lock, flags);
+          schedule_preempt_disabled ();
+          spin_lock_mutex (&lock->wait_lock, flags);
+        }
+
+    done:
+      lock_acquired (&lock->dep_map, ip);
+      /* got the lock - rejoice! */
+      mutex_remove_waiter (lock, &waiter, current_thread_info ());
+      mutex_set_owner (lock);
+
+      /* set it to 0 if there are no waiters left: */
+      if (likely (list_empty (&lock->wait_list)))
+        atomic_set (&lock->count, 0);
+
+      spin_unlock_mutex (&lock->wait_lock, flags);
+
+      debug_mutex_free_waiter (&waiter);
+      preempt_enable ();
+
+      return 0;
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(7.9,28.3){\vector(-1,0){0.5}}
+    \put(8.0,28.3){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff\\auf Mutex sichern}}}
+    \put(7.4,2.3){\vector(-1,1){0.4}}
+    \put(7.5,2.0){\makebox(0,0)[l]{\shortstack[l]{exklusiven Zugriff auf Mutex\\wieder freigeben}}}
+  \end{picture}
+
+\end{frame}
+
+\setlength{\pdfpageheight}{40.5cm}
+
+\begin{frame}[fragile]
+
+  \lstinline{spin_lock_mutex()} -- Mutex beanspruchen, notfalls \emph{busy waiting}
+
+  Datei \file{linux-3.7-rc1/kernel/mutex.h}, ab Zeile 12
+
+  \medskip
+
+  \begin{lstlisting}
+    #define spin_lock_mutex(lock, flags) \
+      do \
+        { \
+          spin_lock (lock); \
+          (void) (flags); \
+        } \
+      while (0)
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(8.5,1.75){\line(-1,0){4.5}}
+    \put(8.5,1.75){\line(0,-1){2.9}}
+    \put(8.5,-1.15){\vector(-1,0){1.0}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, ab Zeile 283
+
+  \medskip
+
+  \begin{lstlisting}
+    static inline void spin_lock (spinlock_t *lock)
+    {
+      raw_spin_lock (&lock->rlock);
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(9.3,0.95){\line(-1,0){4.0}}
+    \put(9.3,0.95){\line(0,-1){2.1}}
+    \put(9.3,-1.15){\vector(-1,0){1.0}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/kernel/spinlock.h}, Zeile 170
+
+  \medskip
+
+  \begin{lstlisting}
+    #define raw_spin_lock(lock)  _raw_spin_lock (lock)
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(10.0,0.55){\line(-1,0){0.5}}
+    \put(10.0,0.55){\line(0,-1){1.7}}
+    \put(10.0,-1.15){\vector(-1,0){1.3}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/include/linux/spinlock\_api\_smp.h}, Zeile 47
+
+  \medskip
+
+  \begin{lstlisting}
+    #define _raw_spin_lock(lock)  __raw_spin_lock (lock)
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(10.7,0.55){\line(-1,0){0.5}}
+    \put(10.7,0.55){\line(0,-1){1.75}}
+    \put(10.7,-1.2){\vector(-1,0){2.3}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/kernel/spinlock.c}, ab Zeile 46 (expandiert):
+
+  \medskip
+
+  \begin{lstlisting}
+    void __lockfunc __raw_spin_lock (spinlock_t *lock)
+    {
+      for (;;)
+        {
+          preempt_disable ();
+          if (likely (do_raw_spin_trylock (lock)))
+            break;
+          preempt_enable ();
+
+          if (!(lock)->break_lock)
+            (lock)->break_lock = 1;
+          while (!raw_spin_can_lock (lock) && (lock)->break_lock)
+            arch_spin_relax (&lock->raw_lock);
+        }
+      (lock)->break_lock = 0;
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(10.7,4.75){\line(-1,0){3.5}}
+    \put(10.7,4.75){\line(0,-1){5.95}}
+    \put(10.7,-1.2){\vector(-1,0){1.1}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{linux-3.7-rc1/include/linux/spinlock.h}, ab Zeile 150:
+
+  \medskip
+
+  \begin{lstlisting}
+    static inline int do_raw_spin_trylock (raw_spinlock_t *lock)
+    {
+      return arch_spin_trylock (&(lock)->raw_lock);
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(11.5,0.95){\line(-1,0){3.5}}
+    \put(11.5,0.95){\line(0,-1){2.1}}
+    \put(11.5,-1.15){\vector(-1,0){0.7}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 116:
+
+  \medskip
+
+  \begin{lstlisting}
+    static __always_inline int arch_spin_trylock (arch_spinlock_t *lock)
+    {
+      return __ticket_spin_trylock (lock);
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(9.5,0.95){\line(-1,0){3.5}}
+    \put(9.5,0.95){\vector(0,-1){1.7}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{arch/x86/include/asm/spinlock.h}, ab Zeile 65:
+
+  \medskip
+
+  \begin{lstlisting}
+    static __always_inline int __ticket_spin_trylock (arch_spinlock_t *lock)
+    {
+      arch_spinlock_t old, new;
+
+      old.tickets = ACCESS_ONCE (lock->tickets);
+      if (old.tickets.head != old.tickets.tail)
+        return 0;
+
+      new.head_tail = old.head_tail + (1 << TICKET_SHIFT);
+
+      /* cmpxchg is a full barrier, so nothing can move before it */
+      return cmpxchg (&lock->head_tail, old.head_tail, new.head_tail) == old.head_tail;
+    }
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(2.2,0.3){\line(0,1){0.4}}
+    \put(9.0,0.3){\line(-1,0){6.8}}
+    \put(9.0,0.3){\line(0,-1){1.45}}
+    \put(9.0,-1.15){\vector(-1,0){3.2}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 147:
+
+  \medskip
+
+  \begin{lstlisting}
+    #define cmpxchg(ptr, old, new) \
+      __cmpxchg (ptr, old, new, sizeof (*(ptr)))
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(9.0,0.5){\line(-1,0){1.8}}
+    \put(9.0,0.5){\line(0,-1){1.65}}
+    \put(9.0,-1.15){\vector(-1,0){2.2}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 131:
+
+  \medskip
+
+  \begin{lstlisting}
+    #define __cmpxchg(ptr, old, new, size) \
+      __raw_cmpxchg ((ptr), (old), (new), (size), LOCK_PREFIX)
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(2.2,-0.1){\line(0,1){0.3}}
+    \put(9.0,-0.1){\line(-1,0){6.8}}
+    \put(9.0,-0.1){\line(0,-1){1.05}}
+    \put(9.0,-1.15){\vector(-1,0){2.2}}
+  \end{picture}
+
+  \bigskip
+
+  Datei \file{arch/x86/include/asm/cmpxchg.h}, ab Zeile 110:
+
+  \medskip
+
+  \begin{lstlisting}
+    asm volatile (lock "cmpxchgl %2,%1" \
+                  : "=a" (__ret), "+m" (*__ptr) \
+                  : "r" (__new), "0" (__old) \
+                  : "memory");
+  \end{lstlisting}
+  \begin{picture}(0,0)
+    \color{red}
+    \put(9.8,1.8){\vector(-1,0){0.6}}
+    \put(9.8,1.2){\line(0,1){0.6}}
+    \put(9.8,1.1){\makebox(0,0)[t]{\shortstack{atomarer und exklusiver\\Zugriff auf Spinlock\\durch Hardware-Unterstützung}}}
+  \end{picture}
+
+\end{frame}
+
+\setlength{\pdfpageheight}{\normalpdfpageheight}
+
+%\sectionnonumber{Literaturempfehlung}
+%\subsectionnonumber{Automotive Embedded Systeme}
+%
+%\begin{frame}[c]
+%
+%  \showsectionnonumber
+%
+%  Prof.\ Dr.\ Joachim Wietzke, FH Darmstadt,\\
+%  Prof.\ Dr.\ Manh Tien Tran, FH Kaiserslautern:
+%
+%  \medskip
+%
+%  \showsubsectionnonumber
+%
+%  \vspace{-\medskipamount}
+%
+%  Springer-Verlag, Berlin, Heidelberg 2005
+%
+%  \bigskip
+%
+%  Lizenz: proprietär
+%
+%  \medskip
+%
+%  (gesetzt mit \textrm{\LaTeX}, ca.\ \EUR{10})
+%
+%\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Ressourcen reservieren
+  \begin{itemize}
+    \item
+      \newterm{Semaphor}\\
+      gemeinsame Variable mehrerer Prozesse\\
+      zur Regelung des Zugriffs auf eine Ressource\\[\smallskipamount]
+      Ressource belegt \textarrow\ Kontextwechsel
+    \medskip
+    \item
+      \newterm{Mutex}\\
+      Mechanismus, damit immer nur ein Prozeß gleichzeitig\\
+      auf eine Ressource zugreifen kann
+    \medskip
+    \item
+      \newterm{Spinlock} (\emph{busy waiting\/})\\
+      leichtgewichtige Alternative zu Kontextwechsel
+    \medskip
+    \item
+      \newterm{Kritischer Abschnitt -- critical section}\\
+      Programmabschnitt zwischen Reservierung\\
+      und Freigabe einer Ressource\\
+      \textarrow\ sollte immer so kurz wie möglich sein
+  \end{itemize}
+  \vspace*{-1cm}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \begin{picture}(0,0)
+    \only<2-3>{\put(6.3,-7){\includegraphics[height=6cm]{philosophenproblem.jpg}}}
+  \end{picture}%
+  \newterm{Verklemmungen\/}: Gegenseitiges Blockieren von Ressourcen
+  \begin{itemize}
+    \item
+      \newterm{Deadlock\/}: Prozeß wartet
+    \item
+      \newterm{Livelock\/}: Prozeß macht andere Dinge\\
+      (z.\,B.\ \emph{busy waiting\/})
+  \end{itemize}
+
+  \pause
+  \bigskip
+
+  Beispiel: Philosophenproblem
+
+  \only<2-3>{%
+    \begin{itemize}
+      \item
+        5 Philosophen, 5 Gabeln
+      \item
+        2 Gabeln zum Essen notwendig
+      \item
+        Wer essen will, nimmt eine Gabel\\
+        und wartet notfalls auf die zweite.
+      \item
+        Keiner legt eine einzelne Gabel\\
+        wieder zurück.
+    \end{itemize}
+    Jeder hält 1 Gabel \textarrow\ \newterm{Verklemmung}\\[0.5\smallskipamount]
+    \pause
+    \strut\quad schweigen \textarrow\ \newterm{Deadlock}\\
+    \strut\quad philosophieren weiter \textarrow\ \newterm{Livelock}\\[-1cm]
+  }
+  \only<4->{%
+    \bigskip
+
+    Bedingungen für Verklemmungen:
+
+    \begin{minipage}[t]{4.5cm}
+      \begin{itemize}
+        \item
+          Exklusivität
+        \item
+          \newterm{hold and wait}
+        \item
+          Entzug nicht möglich
+        \item
+          zirkuläre Blockade
+      \end{itemize}
+    \end{minipage}\pause[5]
+    \begin{minipage}[t]{7.5cm}
+      \begin{itemize}
+        \arrowitem
+          Spooling
+        \arrowitem
+          simultane Zuteilung
+        \arrowitem
+          Prozesse suspendieren, beenden, \newterm{Rollback}
+        \arrowitem
+          Reihenfolge abhängig von Ressourcen
+      \end{itemize}
+    \end{minipage}
+  }
+
+\end{frame}
+
+\subsection{Prioritäten}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Linux 0.01
+  \begin{itemize}
+    \item
+      Timer-Interrupt: Zähler des aktuellen Prozesses wird dekrementiert;\\
+      Prozeß mit höchstem Zähler bekommt Rechenzeit.
+    \item
+      Wenn es keinen laufbereiten Prozeß mit positivem Zähler gibt,\\
+      bekommen alle Prozesse gemäß ihrer \newterm{Priorität\/} neue Zähler zugewiesen.
+    \item
+      \emph{keine\/} harte Echtzeit
+    \arrowitem
+      \newterm{dynamische Prioritätenvergabe\/}:\\
+      Rechenzeit hängt vom Verhalten des Prozesses ab
+  \end{itemize}
+
+  \medskip
+
+  Echtzeitbetriebssysteme
+  \begin{itemize}
+    \item
+      Prozesse können einen festen Anteil an Rechenzeit bekommen.
+    \item
+      Bei Ereignissen können Prozesse hoher Priorität\\
+      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
+    \arrowitem
+      \newterm{statische Prioritätenvergabe}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Echtzeitbetriebssysteme
+  \begin{itemize}
+    \item
+      Prozesse können einen festen Anteil an Rechenzeit bekommen.
+    \item
+      Bei Ereignissen können Prozesse hoher Priorität\\
+      Prozesse niedriger Priorität unterbrechen, aber nicht umgekehrt.
+  \end{itemize}
+
+  \vspace{0cm plus 1filll}
+
+  \begin{center}
+    \begin{picture}(11,4)(-1,0)
+      \small
+
+      \put(-0.1,0.5){\vector(1,0){10.1}}
+      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
+      \put(0,0.4){\vector(0,1){3.6}}
+      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
+
+      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+      \put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
+      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
+      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
+      \put(0,3){\line(1,0){10}}
+
+      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
+      \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
+      \put(3.7,1){{\color{lightgreen}\rule{0.6cm}{0.4cm}}}
+      \alt<1>{%
+        \put(7.9,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
+      }{%
+        \put(8.1,1){{\color{lightgreen}\rule{0.9cm}{0.4cm}}}
+      }
+      \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
+      \put(0,1){\line(1,0){10}}
+
+      \pause
+
+      \put(4.6,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
+      \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
+      \put(7.7,2){{\color{lightyellow}\rule{0.4cm}{0.4cm}}}
+      \put(0,2){\line(1,0){10}}
+
+    \end{picture}
+  \end{center}
+
+\end{frame}
+
+\subsectionnonumber{Prioritäten \protect\color{darkgray}und Ressourcen}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \only<4->{%
+    Der höher priorisierte Prozeß bewirkt selbst,\\
+    daß er eine Ressource verspätet bekommt.
+
+    \medskip
+
+    \textarrow\ \newterm{begrenzte Prioritätsinversion}
+
+    \medskip
+
+    maximale Verzögerung: Länge des kritischen Bereichs
+  }
+
+  \vspace{0cm plus 1filll}
+
+  \begin{center}
+    \begin{picture}(11,4)(-1,0)
+      \small
+
+      \put(-0.1,0.5){\vector(1,0){10.1}}
+      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
+      \put(0,0.4){\vector(0,1){3.6}}
+      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
+
+      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+      \only<1-2>{\put(3,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}}
+      \only<3->{\put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}}
+      \only<3-4>{%
+        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
+        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
+        {\thicklines
+        \put(3.3,2.95){\line(2,1){1.0}}
+        \put(3.3,3.45){\line(2,-1){1.0}}}
+      }
+      \only<5->{%
+        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
+        \put(4.7,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
+      }
+      \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
+      \only<1-2>{%
+        \put(5.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
+        \put(6.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
+      }
+      \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+      \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
+      \put(0,3){\line(1,0){10}}
+
+      \only<2->{%
+        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
+        \put(1.5,1){{\color{lightgreen}\rule{1.5cm}{0.4cm}}}
+        \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
+        \only<2-4>{%
+          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
+          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
+        }
+        \only<5->{%
+          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
+          \put(4.9,1){{\color{lightgreen}\rule{0.1cm}{0.4cm}}}
+          \put(5.6,1){{\color{lightgreen}\rule{0.2cm}{0.4cm}}}
+        }
+        \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
+        \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
+        \put(0,1){\line(1,0){10}}
+      }
+    \end{picture}
+  \end{center}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  \visible<4->{%
+    Ein Prozeß mit mittlerer Priorität bewirkt,
+    daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
+
+    \medskip
+
+  \textarrow\ }\newterm{unbegrenzte Prioritätsinversion}
+
+  \pause
+  \vspace{0cm plus 1filll}
+
+  \begin{center}
+    \begin{picture}(11,4)(-1,0)
+      \small
+
+      \put(-0.1,0.5){\vector(1,0){10.1}}
+      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
+      \put(0,0.4){\vector(0,1){3.6}}
+      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
+
+      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
+      \only<2>{%
+        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
+        \put(4.2,3){{\color{lightorange}\rule{0.2cm}{0.4cm}}}
+        {\thicklines
+        \put(3.3,2.95){\line(2,1){1.0}}
+        \put(3.3,3.45){\line(2,-1){1.0}}}
+        \put(5,3){{\color{lightorange}\rule{0.6cm}{0.4cm}}}
+        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
+      }
+      \put(0,3){\line(1,0){10}}
+
+      \only<2->{%
+        \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
+        \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
+        \alt<1-4>{%
+          \put(2.6,1){{\color{medgreen}\rule{0.4cm}{0.4cm}}}
+        }{%
+          \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
+        }
+        \only<2>{%
+          \put(3.7,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
+          \put(4.2,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
+        }
+        \only<3-4>{%
+          \put(3.4,1){{\color{medgreen}\rule{0.5cm}{0.4cm}}}
+%          \put(3.9,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
+        }
+        \only<2>{%
+          \put(7.7,1){{\color{lightgreen}\rule{1.3cm}{0.4cm}}}
+          \put(9.7,1){{\color{lightgreen}\rule{0.3cm}{0.4cm}}}
+        }
+        \put(0,1){\line(1,0){10}}
+      }
+
+      \only<5->{%
+        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
+        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
+        \put(0,2){\line(1,0){10}}
+      }
+    \end{picture}
+  \end{center}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Ein Prozeß mit mittlerer Priorität bewirkt,
+  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
+
+  \medskip
+
+  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
+
+  \medskip
+
+  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
+
+  \only<1>{%
+    \begin{center}
+      \includegraphics[width=8.5cm]{pathfinder.jpg}
+      \vspace*{-1.5cm}
+    \end{center}
+  }
+
+  \bigskip
+
+  \only<2>{%
+    Gegenmaßnahmen
+    \begin{itemize}
+      \item
+        \newterm{Priority Inheritance -- Prioritätsvererbung}\\
+        Der Besitzer des Mutex erbt die Priorität\\
+        des Prozesses, der auf den Mutex wartet.
+    \end{itemize}
+
+    \bigskip
+
+    \begin{minipage}{7.0cm}
+      \begin{flushright}
+        \url{http://research.microsoft.com/en-us/\\um/people/mbj/Mars\_Pathfinder/}
+      \end{flushright}
+    \end{minipage}
+
+    \vspace{-0.2cm}\strut\hfill\makebox(0,0)[br]{\includegraphics[height=2.7cm]{pathfinder.jpg}}\vspace*{-1cm}
+  }
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Ein Prozeß mit mittlerer Priorität bewirkt,
+  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
+
+  \medskip
+
+  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
+
+  \bigskip
+
+  Gegenmaßnahme: \newterm{Priority Inheritance -- Prioritätsvererbung}
+
+  \vspace{0cm plus 1filll}
+
+  \begin{center}
+    \begin{picture}(11,4)(-1,0)
+      \small
+
+      \put(-0.1,0.5){\vector(1,0){10.1}}
+      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
+      \put(0,0.4){\vector(0,1){3.6}}
+      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
+
+      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
+      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
+      \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
+      \put(0,1){\line(1,0){10}}
+
+      \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
+      \only<1-2>{%
+        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
+      }
+      \put(0,2){\line(1,0){10}}
+
+      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+      \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
+      \put(0,3){\line(1,0){10}}
+
+      \only<2>{%
+        \put(3.4,3){{\color{red}\rule{0.8cm}{0.4cm}}}
+        {\thicklines
+        \put(3.3,2.95){\line(2,1){1.0}}
+        \put(3.3,3.45){\line(2,-1){1.0}}}
+      }
+
+      \only<3->{%
+        \put(3.4,3){{\color{medgreen}\rule{0.7cm}{0.4cm}}}
+        \put(4.1,3){{\color{red}\rule{0.8cm}{0.4cm}}}
+        \put(5.7,2){{\color{lightyellow}\rule{1.3cm}{0.4cm}}}
+        \put(4.9,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
+        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
+        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
+        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
+      }
+    \end{picture}
+  \end{center}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Ein Prozeß mit mittlerer Priorität bewirkt,
+  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
+
+  \medskip
+
+  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
+
+  \bigskip
+
+  Gegenmaßnahme: \newterm{Priority Ceiling -- Prioritätsobergrenze}
+
+  \vspace{0cm plus 1filll}
+
+  \begin{center}
+    \begin{picture}(11,4)(-1,0)
+      \small
+
+      \put(-0.1,0.5){\vector(1,0){10.1}}
+      \put(9.75,0.4){\makebox(0,0)[tr]{Zeit}}
+      \put(0,0.4){\vector(0,1){3.6}}
+      \put(-0.1,3.75){\makebox(0,0)[tr]{Priorität}}
+
+      \put(0,1){{\color{lightgreen}\rule{1cm}{0.4cm}}}
+      \put(1.5,1){{\color{lightgreen}\rule{1.1cm}{0.4cm}}}
+%      \only<1>{%
+%        \put(2.6,1){{\color{medgreen}\rule{0.2cm}{0.4cm}}}
+%      }
+      \put(0,1){\line(1,0){10}}
+
+%      \only<1>{%
+%        \put(2.8,2){{\color{lightyellow}\rule{0.2cm}{0.4cm}}}
+%        \put(3.4,2){{\color{lightyellow}\rule{6.6cm}{0.4cm}}}
+%      }
+      \put(0,2){\line(1,0){10}}
+
+      \put(1,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+%      \only<1>{%
+%        \put(3,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
+%      }
+      \put(0,3){\line(1,0){10}}
+
+%      \only<2>{%
+%      \only<2>{%
+        \put(2.6,3){{\color{medgreen}\rule{0.9cm}{0.4cm}}}
+        \put(3.5,3){{\color{lightorange}\rule{0.4cm}{0.4cm}}}
+        \put(3.9,3){{\color{red}\rule{0.8cm}{0.4cm}}}
+        \put(4.7,3){{\color{lightorange}\rule{0.8cm}{0.4cm}}}
+        \put(5.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
+        \put(7,3){{\color{lightorange}\rule{0.5cm}{0.4cm}}}
+        \put(7.5,2){{\color{lightyellow}\rule{1.5cm}{0.4cm}}}
+        \put(9,3){{\color{lightorange}\rule{0.7cm}{0.4cm}}}
+        \put(9.7,2){{\color{lightyellow}\rule{0.3cm}{0.4cm}}}
+%      }
+    \end{picture}
+  \end{center}
+
+\end{frame}
+
+\begin{frame}
+
+  \showsection
+  \showsubsection
+
+  Ein Prozeß mit mittlerer Priorität bewirkt,
+  daß ein Prozeß mit hoher Priorität eine Ressource überhaupt nicht bekommt.
+
+  \medskip
+
+  \textarrow\ \newterm{unbegrenzte Prioritätsinversion}
+
+  \medskip
+
+  Beispiel: Beinahe-Verlust der Marssonde \emph{Pathfinder\/} im Juli 1997
+
+  \bigskip
+
+  Gegenmaßnahmen
+  \begin{itemize}
+    \item
+      \newterm{Priority Inheritance -- Prioritätsvererbung}\\
+      Der Besitzer des Mutex erbt die Priorität\\
+      des Prozesses, der auf den Mutex wartet.
+    \smallskip
+    \item
+      \newterm{Priority Ceiling -- Prioritätsobergrenze}\\
+      Der Besitzer des Mutex bekommt sofort\\
+      die Priorität des höchstmöglichen Prozesses,\\
+      der evtl.\ den Mutex benötigen könnte.
+      \pause
+      \begin{picture}(0,0)
+        \put(1.2,1.45){\makebox(0,0)[l]{$\left\}\rule{0pt}{1.7cm}\right.$
+          \begin{minipage}{4cm}
+            nur möglich, wenn\\
+            Mutexe im Spiel sind
+          \end{minipage}}}
+      \end{picture}
+    \smallskip
+    \pause
+    \item
+      \newterm{Priority Aging}\\
+      Die Priorität wächst mit der Wartezeit.
+  \end{itemize}
+  \vspace*{-1cm}
+
+\end{frame}
+
+\nosectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}%
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+      \begin{itemize}
+        \item[4.1] Was sind Bus-Systeme?
+        \item[4.2] RS-232
+        \item[4.3] \ItwoC\ (TWI)
+        \item[4.4] SPI
+        \color{medgreen}
+        \item[4.5] PWM
+        \item[5.6] Sonstiges
+      \end{itemize}
+    \item[\textbf{5}] \textbf{Echtzeit}
+      \begin{itemize}
+        \color{medgreen}
+        \item[5.1] Was ist Echtzeit?
+        \item[5.2] Echtzeitprogrammierung
+        \item[5.3] Multitasking
+        \item[5.4] Ressourcen
+        \item[5.5] Prioritäten
+      \end{itemize}
+    \vspace*{-\medskipamount}
+    \item[\textbf{\dots}]
+  \end{itemize}
+
+  \vspace*{-1cm plus 1filll}
+
+  \underconstruction
+
+\end{frame}
+
+\end{document}
diff --git a/20181129/herzschrittmacher.jpg b/20181129/herzschrittmacher.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..92d8f0053003cc555aec83f5d088f1cec822ad81
--- /dev/null
+++ b/20181129/herzschrittmacher.jpg
@@ -0,0 +1 @@
+../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20181129/kompassmodul-an-roboter.jpg b/20181129/kompassmodul-an-roboter.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..dab8b38c1a92bf8072d42dc3abcc07be54a58c7b
--- /dev/null
+++ b/20181129/kompassmodul-an-roboter.jpg
@@ -0,0 +1 @@
+../common/kompassmodul-an-roboter.jpg
\ No newline at end of file
diff --git a/20181129/kompassmodul.jpg b/20181129/kompassmodul.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..be108a5341df13a693959dbe69b7b9541b36fc4c
--- /dev/null
+++ b/20181129/kompassmodul.jpg
@@ -0,0 +1 @@
+../common/kompassmodul.jpg
\ No newline at end of file
diff --git a/20181129/logo-hochschule-bochum-cvh-text-v2.pdf b/20181129/logo-hochschule-bochum-cvh-text-v2.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8
--- /dev/null
+++ b/20181129/logo-hochschule-bochum-cvh-text-v2.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20181129/logo-hochschule-bochum.pdf b/20181129/logo-hochschule-bochum.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1
--- /dev/null
+++ b/20181129/logo-hochschule-bochum.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20181129/make-zombies.c b/20181129/make-zombies.c
new file mode 100644
index 0000000000000000000000000000000000000000..3e1418aa5567a38d274cbb2ba1588d7e765823d4
--- /dev/null
+++ b/20181129/make-zombies.c
@@ -0,0 +1,39 @@
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+ 
+int main(void){
+    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
+    int i; // Laufvariable
+ 
+    for (i = 0; i < 10; ++i) {
+        // Der Vaterprozess erzeugt nun einen Kindprozess,
+        // welcher unabh�ngig vom Vaterprozess mit der
+        // erneuten Ausf�hrung des Programms beginnt.
+        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
+        pids[i] = fork();
+        if (pids[i] == 0) {
+            // dann befinden wir uns in einem der 10 Kindprozesse
+            // Der erste Kindprozess wartet 10 Sekunden und jeder
+            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
+            // vorige.
+            printf ("BRAINS! ");
+            sleep(10-i);
+            exit(0); // Kindprozess erfolgreich beenden
+        }
+    }
+/*
+    // hier kommt nur der Vaterprozess vorbei
+    for (i = 0; i < 10; ++i){
+        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
+        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
+        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
+        // die anderen Kinder l�ngst erfolgreich beendet wurden,
+        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
+        waitpid(pids[i], NULL, 0);
+    }
+*/
+    while (1);
+    return 0; // Vaterprozess erfolgreich beenden
+}
diff --git a/20181129/motherboard-anschluesse.jpg b/20181129/motherboard-anschluesse.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..07335d7dff65c71a683588d2ed108485c4653fb7
--- /dev/null
+++ b/20181129/motherboard-anschluesse.jpg
@@ -0,0 +1 @@
+../common/motherboard-anschluesse.jpg
\ No newline at end of file
diff --git a/20181129/no-zombies.c b/20181129/no-zombies.c
new file mode 100644
index 0000000000000000000000000000000000000000..c7b04d78410a44b1d727cc5a966fb8580b9a3efa
--- /dev/null
+++ b/20181129/no-zombies.c
@@ -0,0 +1,39 @@
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+ 
+int main(void){
+    pid_t pids[10]; // Platz f�r 10 Prozess-IDs (die Kindprozesse)
+    int i; // Laufvariable
+ 
+    for (i = 0; i < 10; ++i) {
+        // Der Vaterprozess erzeugt nun einen Kindprozess,
+        // welcher unabh�ngig vom Vaterprozess mit der
+        // erneuten Ausf�hrung des Programms beginnt.
+        // Ein Kindprozess erzeugt keinen Fork von sich selbst.
+        pids[i] = fork();
+        if (pids[i] == 0) {
+            // dann befinden wir uns in einem der 10 Kindprozesse
+            // Der erste Kindprozess wartet 10 Sekunden und jeder
+            // weitere Kindprozess wartet 1 Sekunde k�rzer als der
+            // vorige.
+            printf ("BRAINS! ");
+            sleep(i);
+            exit(0); // Kindprozess erfolgreich beenden
+        }
+    }
+
+    // hier kommt nur der Vaterprozess vorbei
+    for (i = 0; i < 10; ++i){
+        // Der Vaterprozess wartet nun, bis der Reihe nach jeder
+        // seiner 10 Kindprozesse beendet ist. Leider wird auf das
+        // Kind mit der l�ngsten Wartezeit zuerst gewartet. Obwohl
+        // die anderen Kinder l�ngst erfolgreich beendet wurden,
+        // blockiert das erste Kind eine Bereinigung der Prozesstabelle
+        waitpid(pids[i], NULL, 0);
+    }
+
+    while (1);
+    return 0; // Vaterprozess erfolgreich beenden
+}
diff --git a/20181129/pathfinder.jpg b/20181129/pathfinder.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..23c6444fee26e0cf0dd2f8639484b00aa5021b59
--- /dev/null
+++ b/20181129/pathfinder.jpg
@@ -0,0 +1 @@
+../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20181129/pgslides.sty b/20181129/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20181129/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file
diff --git a/20181129/philosophenproblem.jpg b/20181129/philosophenproblem.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..26591b2ac2dddfd4786814baf3f19ecb67f1f5ee
--- /dev/null
+++ b/20181129/philosophenproblem.jpg
@@ -0,0 +1 @@
+../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20181129/photo-20181129-170827.jpg b/20181129/photo-20181129-170827.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7c39104c882a4d354d5489505bc7fe8fa9cc0499
Binary files /dev/null and b/20181129/photo-20181129-170827.jpg differ
diff --git a/20181129/photo-20181129-170853.jpg b/20181129/photo-20181129-170853.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..2ce62c688f8b5c5107c5c0f56a633e3f365cfe58
Binary files /dev/null and b/20181129/photo-20181129-170853.jpg differ
diff --git a/20181129/photo-20181129-171122.jpg b/20181129/photo-20181129-171122.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..68e18aa53f31a050f33332fbf4e5013cde2608b1
Binary files /dev/null and b/20181129/photo-20181129-171122.jpg differ
diff --git a/20181129/photo-20181129-171158.jpg b/20181129/photo-20181129-171158.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..eccf86423b2d4a9ca81e8e82eb4ada1f79a61427
Binary files /dev/null and b/20181129/photo-20181129-171158.jpg differ
diff --git a/20181129/photo-20181129-184627.jpg b/20181129/photo-20181129-184627.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3b9d487aaa0447355e97883fce501234772e0ad3
Binary files /dev/null and b/20181129/photo-20181129-184627.jpg differ
diff --git a/20181129/quadrocopter.jpg b/20181129/quadrocopter.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c
--- /dev/null
+++ b/20181129/quadrocopter.jpg
@@ -0,0 +1 @@
+../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20181129/rp6.jpg b/20181129/rp6.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..2a0ecff23845770c3a98178eca6dce3ec73aca58
--- /dev/null
+++ b/20181129/rp6.jpg
@@ -0,0 +1 @@
+../common/rp6.jpg
\ No newline at end of file
diff --git a/20181129/rs-232.pdf b/20181129/rs-232.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..236ef5bf182048842613c5416b91afb68f451fa6
Binary files /dev/null and b/20181129/rs-232.pdf differ
diff --git a/20181129/tolles-programm b/20181129/tolles-programm
new file mode 100755
index 0000000000000000000000000000000000000000..ca9c919faad041b4ac2a27a91772e6f7972f3c7e
--- /dev/null
+++ b/20181129/tolles-programm
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+for t in $(seq 10 -1 0); do
+  sleep 1s
+  echo $t
+done
+
+echo "Hello, world!"
diff --git a/20181129/xbee.jpg b/20181129/xbee.jpg
new file mode 120000
index 0000000000000000000000000000000000000000..ff0adff2eadf3d9b775d03cea8cf1f118534e2b9
--- /dev/null
+++ b/20181129/xbee.jpg
@@ -0,0 +1 @@
+../common/xbee.jpg
\ No newline at end of file
diff --git a/20181206/photo-20181206-183205.jpg b/20181206/photo-20181206-183205.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..9504514720681c02ddbbd59c833f99b1977cd14e
Binary files /dev/null and b/20181206/photo-20181206-183205.jpg differ
diff --git a/20181220/721px-Pfs-logo.png b/20181220/721px-Pfs-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b9d6698223254ba7c4170905b311b162cad2274
Binary files /dev/null and b/20181220/721px-Pfs-logo.png differ
diff --git a/20181220/Adobe-Reader.png b/20181220/Adobe-Reader.png
new file mode 100644
index 0000000000000000000000000000000000000000..30d8d244efbda994a9c6e832705c93c3eba4ef4f
Binary files /dev/null and b/20181220/Adobe-Reader.png differ
diff --git a/20181220/Copyright.pdf b/20181220/Copyright.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..69f4ec0c29489b7c1eb24724c79153cea1087156
Binary files /dev/null and b/20181220/Copyright.pdf differ
diff --git a/20181220/Microsoft_Power_Point_2010.png b/20181220/Microsoft_Power_Point_2010.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce91df9e0cb33e1d0e644a5ac25f916c266f4524
Binary files /dev/null and b/20181220/Microsoft_Power_Point_2010.png differ
diff --git a/20181220/a-gnu-head.pdf b/20181220/a-gnu-head.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..3dcb28fc1147f4b801391c6e5d54a9c4c9311bd6
Binary files /dev/null and b/20181220/a-gnu-head.pdf differ
diff --git a/20181220/libreoffice-impress.pdf b/20181220/libreoffice-impress.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..df752f1d6d50d46ed2f1ed9964190ba4dad2fa75
Binary files /dev/null and b/20181220/libreoffice-impress.pdf differ
diff --git a/20181220/lic-20181220.pdf b/20181220/lic-20181220.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..d31668e9df0cbdc828a194f114482488c3f45f66
Binary files /dev/null and b/20181220/lic-20181220.pdf differ
diff --git a/20181220/lic-20181220.tex b/20181220/lic-20181220.tex
new file mode 100644
index 0000000000000000000000000000000000000000..b37ac376b6a3abf5fd5c4e1e0e86e8b9558e7760
--- /dev/null
+++ b/20181220/lic-20181220.tex
@@ -0,0 +1,634 @@
+% lic-20160512.pdf - Lecture Slides on Applied Computer Sciences
+% Copyright (C) 2012, 2015, 2016  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+\documentclass[10pt]{beamer}
+
+\usepackage[utf8]{luainputenc}
+\usepackage[german]{babel}
+\usepackage[T1]{fontenc}
+\usepackage{helvet}
+\renewcommand*\familydefault{\sfdefault}
+
+\usetheme{default}
+\usefonttheme{structurebold}
+\setbeamertemplate{navigation symbols}{}
+\setbeamersize{text margin left = 0.3cm, text margin right = 0.2cm}
+\setbeamertemplate{itemize item}{$\bullet$}
+\setbeamertemplate{itemize subitem}{--}
+\setbeamerfont{itemize/enumerate subbody}{size=\normalsize}
+\setbeamerfont{itemize/enumerate subsubbody}{size=\normalsize}
+\addtolength{\topmargin}{0.15cm}
+
+\usepackage{pstricks}
+\newrgbcolor{darkgreen}{0.0 0.3 0.0}
+\newrgbcolor{lightred}{1.0 0.7 0.7}
+\newrgbcolor{lightgray}{0.85 0.85 0.85}
+\newrgbcolor{medgray}{0.4 0.4 0.4}
+
+\usepackage{listings}
+\lstset{basicstyle=\color{structure},
+        language=C,
+        captionpos=b,
+        gobble=4,
+        columns=fullflexible,
+        aboveskip=0pt,
+        belowskip=0pt,
+        moredelim=**[is][\color{red}]{¡}{¿},
+        moredelim=**[is][\only<2->{\color{structure}}]{²}{¿},
+        moredelim=**[is][\only<3->{\color{structure}}]{³}{¿},
+        moredelim=**[is][\only<4->{\color{structure}}]{°}{¿},
+        moredelim=**[is][\only<5->{\color{structure}}]{¤}{¿},
+        moredelim=**[is][\only<6->{\color{structure}}]{¢}{¿},
+        moredelim=**[is][\only<7->{\color{structure}}]{æ}{¿},
+        moredelim=**[is][\only<8->{\color{structure}}]{ø}{¿}}
+\lstdefinestyle{terminal}{basicstyle=\ttfamily\color{darkgreen},
+                          columns=fixed,
+                          moredelim=**[is][\color{red}]{¡}{¿},
+                          moredelim=**[is][\color{structure}]{°}{¿}}
+\lstdefinestyle{shy}{basicstyle=\color{lightgray},
+                     moredelim=**[is][\color{structure}]{¡}{¿}}
+\lstdefinestyle{semishy}{basicstyle=\color{medgray},
+                         moredelim=**[is][\color{structure}]{¡}{¿}}
+
+\usepackage{multirow}
+
+\setcounter{topnumber}{3}
+\renewcommand\topfraction{0.7}
+\setcounter{bottomnumber}{3}
+\renewcommand\bottomfraction{0.7}
+\setcounter{totalnumber}{5}
+\renewcommand\textfraction{0.1}
+\renewcommand\floatpagefraction{0.9}
+
+\setlength{\unitlength}{1cm}
+
+\newcommand{\protectfile}[1]{#1}
+\newcommand{\file}[1]{{\color{structure}\protectfile{#1}}}
+\newcommand{\textarrow}{{\boldmath $\longrightarrow$}}
+\newcommand{\arrowitem}{\item[\textarrow]}
+\newcommand{\BIGskip}{\vspace{1cm}}
+\newcommand{\shy}{\color{lightgray}}
+\newcommand{\hot}{\color{red}}
+\newcommand{\shyhot}{\color{lightred}}
+
+\newcommand{\sectionnonumber}[1]{\section{#1}\addtocounter{section}{-1}}
+
+\def\showsectionnonumber{{\Large\color{structure}\bf\secname\par}\bigskip}
+
+\def\showsection{\hbox{\Large\color{structure}\bf
+                       \vtop{\hbox{\arabic{section}}}\kern1em%
+                       \vtop{\secname}\par}\bigskip}
+
+\newcommand{\subsectionnonumber}[1]{\subsection{#1}\addtocounter{subsection}{-1}}
+
+\def\showsubsectionnonumber{{\large\color{structure}\bf\subsecname\par}\bigskip}
+
+\def\showsubsection{\hbox{\large\color{structure}\bf
+                          \vtop{\hbox{\arabic{section}.\arabic{subsection}}}\kern1em%
+                          \vtop{\subsecname}\par}\bigskip}
+
+\begin{document}
+
+\sectionnonumber{Software-Lizenzen}
+\subsectionnonumber{Vorab: Dies ist keine Rechtsdienstleistung!}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \pause
+  \showsubsectionnonumber
+
+  \textbf{\S\,2 RDG: Begriff der Rechtsdienstleistung}
+
+  \smallskip
+
+  (1) Rechtsdienstleistung ist jede Tätigkeit in
+  {\only<3->{\color{red}}konkreten} fremden Angelegenheiten,
+  sobald sie eine rechtliche Prüfung des
+  {\only<3->{\color{red}}Einzelfalls} erfordert.
+
+  \medskip
+
+  \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/}
+
+  \pause
+  \pause
+
+  \bigskip
+
+  Konkreter Fall:
+  \begin{itemize}
+    \item
+      Konkretes Programm unter Lizenz A
+    \item
+      Konkrete Bibliothek unter Lizenz B
+    \item
+      Beratung: Paßt das zusammen?
+    \arrowitem
+      Rechtsdienstleistung
+  \end{itemize}
+\end{frame}
+
+  \subsectionnonumber{Lizenz-Beratung unter Kollegen?}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  \textbf{\S\,6 RDG: Unentgeltliche Rechtsdienstleistungen}
+
+  \smallskip
+
+  (1) Erlaubt sind Rechtsdienstleistungen, die nicht im Zusammenhang mit einer entgeltlichen
+  Tätigkeit stehen (unentgeltliche Rechtsdienstleistungen).
+
+  \smallskip
+
+  (2) Wer unentgeltliche Rechtsdienstleistungen außerhalb familiärer, nachbarschaftlicher oder
+  ähnlich enger persönlicher Beziehungen erbringt, muss sicherstellen, dass die Rechtsdienstleistung
+  durch eine Person, der die entgeltliche Erbringung dieser Rechtsdienstleistung erlaubt ist, durch
+  eine Person mit Befähigung zum Richteramt oder unter Anleitung einer solchen Person erfolgt.
+  [\,\dots]
+
+  \medskip
+
+  \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/}
+
+  \pause
+
+  \bigskip
+
+  \begin{itemize}
+    \arrowitem
+      Nur allgemein beraten!\\
+      Konkrete Fälle an Anwalt verweisen!
+  \end{itemize}
+
+\end{frame}
+
+  \subsectionnonumber{Überblick}
+  \newcommand{\lcr}{\includegraphics[width=0.5cm]{Copyright.pdf}}
+  \newcommand{\lcl}{\includegraphics[width=0.5cm]{Copyleft.pdf}}
+  \newcommand{\lcc}{\includegraphics[width=0.5cm]{creative-commons.png}}
+  \newcommand{\lpd}{\includegraphics[width=0.5cm]{PD-icon.pdf}}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  \begin{itemize}
+    \item
+      Grundlage: Urheberrecht ($\approx$ Copyright) \hfill \lcr\\
+      "`Wer Software schreibt, entscheidet, was damit geschehen darf."'
+    \pause
+    \medskip
+    \item
+      anderen etwas erlauben: Lizenz
+    \pause
+    \medskip
+    \item
+      "`gar keine Lizenz"' = alles verboten
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  \begin{center}
+    \begin{picture}(12,5)
+      \put(5,5){\makebox(0,0){Software-Lizenz}}
+      \put(4.5,4.7){\vector(-1,-1){1}}
+      \put(5.5,4.7){\vector(1,-1){1}}
+      \put(3,3.4){\makebox(0,0){proprietär}}
+      \put(7,3.4){\makebox(0,0){frei / Open Source}}
+      \put(6.5,3.1){\vector(-1,-1){1.5}}
+      \put(7.5,3.1){\vector(1,-1){1}}
+      \put(4.5,1.3){\makebox(0,0){freizügig}}
+      \put(9,1.8){\makebox(0,0){Copyleft}}
+    \end{picture}%
+    \begin{onlyenv}<2->%
+      \begin{picture}(0,0)(12,0)
+        \color{darkgreen}
+        \put(2.5,3.1){\vector(-1,-1){0.5}}
+        \put(3.5,3.1){\vector(1,-1){0.5}}
+        \put(2.0,2.3){\makebox(0,0){kommerziell}}
+        \put(4.0,2.3){\makebox(0,0){gratis}}
+        \put(4.0,1.0){\vector(-1,-1){0.5}}
+        \put(5.0,1.0){\vector(1,-1){0.5}}
+        \put(3.5,0.2){\makebox(0,0){kommerziell}}
+        \put(5.5,0.2){\makebox(0,0){gratis}}
+        \put(8.5,1.5){\vector(-1,-1){0.5}}
+        \put(9.5,1.5){\vector(1,-1){0.5}}
+        \put(8.0,0.7){\makebox(0,0){kommerziell}}
+        \put(10.0,0.7){\makebox(0,0){gratis}}
+      \end{picture}%
+    \end{onlyenv}%
+  \end{center}
+
+\end{frame}
+
+  \subsectionnonumber{Lizenzmodelle}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  \begin{itemize}
+    \item
+      Freie Software darf man
+      \hfill\begin{picture}(0,0)
+        \put(-1.8,-0.8){\includegraphics[width=2cm]{a-gnu-head.pdf}}
+      \end{picture}
+      \begin{itemize}
+        \item[0.]
+          benutzen,
+        \item[1.]
+          studieren und anpassen,
+        \item[2.]
+          weitergeben,
+        \item[3.]
+          weiterentwickeln und veröffentlichen.
+      \end{itemize}
+      \strut\hfill
+      4 Grundfreiheiten --
+      \url{http://www.gnu.org/philosophy/free-sw}\\
+      \pause
+      \begin{picture}(0,0)
+        \color{red}
+        \put(6.95,1.85){\vector(-1,0){1.5}}
+        \put(7.00,1.75){\vector(-1,-1){0.5}}
+        \put(7.05,1.85){\makebox(0,0)[l]{Quelltext erforderlich!}}
+      \end{picture}%
+    \pause
+    \medskip
+    \item
+      Open Source: i.\,w.\ dasselbe in 10 Kriterien
+      \hfill\begin{picture}(0,0)
+        \put(-1.2,-0.5){\includegraphics[width=1.1cm]{osi-logo.jpg}}
+      \end{picture}\\
+      Begründung: technisch statt philosophisch\\[\smallskipamount]
+      \strut\hfill
+      Definition:
+      \url{http://www.opensource.org/docs/osd}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  \begin{itemize}
+    \item
+      Proprietäre Software / Closed Source\\
+      Gegenteil von freier Software / Open Source
+      \medskip
+      \begin{itemize}
+        \item
+          Benutzen, Weitergeben und/oder Veröffentlichen\\
+          erfordert individuelle Erlaubnis des Rechteinhabers
+          \medskip
+        \item
+          Studieren, Anpassen und/oder Weiterentwickeln\\
+          nur dem Rechteinhaber erlaubt
+          \pause
+          {\color{red}und/oder möglich\\
+          (Quelltext erforderlich!)}
+      \end{itemize}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  \begin{itemize}
+    \item
+      Freie Software
+      \smallskip
+      \begin{itemize}
+        \item
+          Copyleft\only<2->{:}\\[\smallskipamount]
+          \begin{visibleenv}<2->
+            Weitergabe nur unter gleichen Bedingungen erlaubt\\
+            \textarrow\ Umwandlung in proprietäre Software nicht erlaubt
+          \end{visibleenv}
+        \medskip
+        \item
+          freizügig\only<3->{:}\\[\smallskipamount]
+          \begin{visibleenv}<3->
+            Weitergabe auch unter anderen Bedingungen erlaubt\\
+            \textarrow\ Umwandlung in \only<4->{Copyleft- oder }proprietäre Software erlaubt
+          \end{visibleenv}
+        \begin{onlyenv}<5->
+          \medskip
+          \item
+            Teil-Copyleft:\\[\smallskipamount]
+            Linken mit proprietärer Software erlaubt
+        \end{onlyenv}
+      \end{itemize}
+  \end{itemize}
+
+
+\end{frame}
+
+  \subsectionnonumber{Beispiel-Programme}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  \begin{center}
+    \renewcommand{\arraystretch}{2.5}
+    \begin{tabular}{|c||c|c|c|}\hline
+      & \multirow{2}{*}{proprietär} & \multicolumn{2}{c|}{frei}\\\cline{3-4}
+      & & freizügig & Copyleft \\\hline\hline
+      \color{darkgreen}kommerziell
+        & \color{structure}\visible<2->{\shortstack{\\\includegraphics[width=0.5cm]{Microsoft_Power_Point_2010.png}\\\small Microsoft PowerPoint}}
+        & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=1.0cm]{721px-Pfs-logo.png}\\\small pfSense}}
+        & \color{structure}\visible<5->{\shortstack{\\\includegraphics[width=0.8cm]{open-xchange.jpg}\\\small Open-Xchange}} \\\hline
+      \color{darkgreen}gratis
+        & \color{structure}\visible<4->{\shortstack{\\\includegraphics[width=0.8cm]{Adobe-Reader.png}\\\small Adobe Reader}}
+        & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=0.5cm]{putty.png}\\\small PuTTY}}
+        & \color{structure}\visible<3->{\shortstack{\\\includegraphics[width=0.5cm]{libreoffice-impress.pdf}\\\small LibreOffice Impress}} \\\hline
+    \end{tabular}
+  \end{center}
+  \begin{onlyenv}<7->%
+    \begin{picture}(0,0)(0,-0.5)
+      \color{red}
+      \put(7.38,1.38){$\updownarrow$}
+      \put(9.8,1.38){$\updownarrow$}
+    \end{picture}%
+  \end{onlyenv}%
+  \begin{onlyenv}<8->%
+    \begin{picture}(0,0)(0,-0.7)
+      \color{red}
+      \put(6.3,2.7){$\longleftarrow$}
+      \put(8.05,2.7){$\longrightarrow$}
+    \end{picture}%
+  \end{onlyenv}%
+
+\end{frame}
+
+  \subsectionnonumber{Beispiel-Lizenzen}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  \pause
+  Freie Software / Open Source
+  \begin{itemize}
+    \item
+      strenges Copyleft:
+      GNU GPL, GNU FDL, CC BY-SA
+    \pause
+    \item
+      Teil-Copyleft:
+      GNU LGPL, Mozilla-Lizenz, Microsoft Public License
+    \pause
+    \item
+      freizügig:
+      Modifizierte BSD-Lizenz, Apache-Lizenz, CC BY,\\
+      CC0, Public Domain
+  \end{itemize}
+  \pause
+  \strut\hfill\url{http://www.gnu.org/licenses/license-list}
+
+\end{frame}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Lizenz i.\,d.\,R.\ für jedes Programm anders
+    \pause
+    \medskip
+    \item
+      "`Normales"' Beispiel (Januar 2012):\\
+      Adobe Reader EULA\\[\smallskipamount]
+      Verwenden \only<3->{nur auf PCs }erlaubt\pause\pause,\\
+      Studieren und Weitergeben nicht erlaubt\pause,\\
+      Screenshots nicht erlaubt\\[\smallskipamount]
+      \pause
+      Der Software ist die Kommunikation mit Adobe\\
+      und mit Werbeanbietern erlaubt.\\[\medskipamount]
+      \pause
+      \strut\hfill\url{http://www.adobe.com/products/eulas/reader/x/eula_de_de.html}
+    \medskip
+  \end{itemize}
+                                                                
+\end{frame}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Kontroverses Beispiel (Januar 2012):\\
+      iBooks Author EULA\\[\smallskipamount]
+      Layout für elektronische Bücher erstellen\\
+      \pause
+      \textarrow\ Buch darf nur über den iBooks Store verkauft werden\\[\medskipamount]
+      \strut\hfill\url{http://venomousporridge.com/post/16126436616/}\\
+      \strut\hfill\url{ibooks-author-eula-audacity}
+  \end{itemize}
+                                                                
+\end{frame}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Kontroverses Beispiel (September 2001):\\
+      Microsoft FrontPage 2002 EULA\\[\smallskipamount]
+      Webseiten erstellen\\
+      \pause
+      \textarrow\ Webseiten dürfen Microsoft nicht "`herabsetzen"'\\[\medskipamount]
+      \strut\hfill\url{http://www.heise.de/newsticker/data/jes-21.09.01-001/}
+  \end{itemize}
+                                                                
+\end{frame}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Kontroverses Beispiel (Juli 2001):\\
+      Microsoft Mobile Internet Toolkit EULA\\[\smallskipamount]
+      Software erstellen\\
+      \pause
+      \textarrow\ Verbot, {\color{darkgreen}"`virale"'} Software
+                  \only<3->{(= Copyleft-Software) }zu erstellen \\
+      \pause
+      \pause
+      \textarrow\ Verbot, Copyleft-Werkzeuge mit einzusetzen \\
+      \textarrow\ Verbot, entwickelte Software gemeinsam mit Copyleft-Software\\
+      \strut\phantom{\textarrow} einzusetzen oder zu vertreiben\\[\medskipamount]
+      \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\
+      \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm}
+  \end{itemize}
+
+  % Nicht auf derselben CD: http://msdn.microsoft.com/downloads/eula_mit.htm, 22.7.2001
+                                                                
+\end{frame}
+
+  \subsectionnonumber{Copyleft}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+  \showsubsectionnonumber
+
+  Microsoft: Copyleft-Software ist {\color{darkgreen}"`viral"'}\\[\smallskipamount]
+  \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\
+  \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm}
+
+  \bigskip
+
+  \begin{center}
+    \color{structure}%
+    \begin{onlyenv}<2->%
+      \begin{picture}(10,5)
+        \put(5,5){\makebox(0,0){Code aus fremder Software benutzen}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<3->%
+      \begin{picture}(0,0)(10,0)
+        \put(4.5,4.7){\vector(-1,-1){1}}
+        \put(3.5,3.4){\makebox(0,0){\strut GPL-Software:}}
+        \put(3.5,2.95){\makebox(0,0){\strut{\color{darkgreen}bedingt} erlaubt}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<4->%
+      \begin{picture}(0,0)(10,0)
+        \color{darkgreen}
+        \put(3.0,2.7){\vector(0,-1){0.7}}
+        \put(3.0,1.8){\makebox(0,0){\strut Gesamtwerk muß}}
+        \put(3.0,1.35){\makebox(0,0){\strut unter GPL stehen}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<5->%
+      \begin{picture}(0,0)(10,0)
+        \put(5.5,4.7){\vector(1,-1){1}}
+        \put(6.5,3.4){\makebox(0,0){\strut MS-Software:}}
+        \put(6.5,2.95){\makebox(0,0){\strut{\color{red}nicht} erlaubt}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<6->%
+      \begin{picture}(0,0)(10,0)
+        \color{black}
+        \put(5.5,1.2){\makebox(0,0)[l]{\textarrow\ 
+                                     \begin{minipage}[t]{5cm}
+                                       Lizenzen lesen,\\
+                                       sorgfältig auswählen
+                                     \end{minipage}}}
+      \end{picture}%
+    \end{onlyenv}%
+  \end{center}
+
+\end{frame}
+
+  \subsectionnonumber{Fazit}
+
+\begin{frame}[t,plain]
+  \showsectionnonumber
+
+  {\large\color{structure}\bf Fazit\par}
+  \begin{itemize}
+    \item
+      Generell: Vor Benutzung Lizenz lesen, durch Anwalt prüfen lassen
+    \pause
+    \item
+      "`gar keine Lizenz"' = alles verboten
+  \end{itemize}
+
+  \pause
+  Bearbeitung, Weitergabe und Mitverwendung
+  \begin{itemize}
+    \pause
+    \item
+      nicht erlaubt oder nicht möglich
+      \textarrow\ proprietäre Software / Closed Source
+    \pause
+    \item
+      erlaubt \textarrow\ freie Software / Open Source
+      \begin{itemize}
+        \pause
+        \item
+          bei Mitverwendung Lizenz übernehmen \textarrow\ Copyleft
+        \pause
+        \item
+          Lizenz umwandelbar \textarrow\ freizügig
+      \end{itemize}
+  \end{itemize}
+
+  \pause
+
+  \bigskip
+
+  {\large\color{structure}\bf Lizenz für diese Lehrmaterialien\par}
+  \begin{itemize}
+    \item
+      Vortragsfolien und Skripte: Copyleft
+    \item
+      Beispiel-Programme: freizügig
+  \end{itemize}
+
+\end{frame}
+
+\end{document}
diff --git a/20181220/logo-hochschule-bochum-cvh-text-v2.pdf b/20181220/logo-hochschule-bochum-cvh-text-v2.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8
--- /dev/null
+++ b/20181220/logo-hochschule-bochum-cvh-text-v2.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20181220/logo-hochschule-bochum-cvh-text.pdf b/20181220/logo-hochschule-bochum-cvh-text.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..649b6a8b8f51ddc370a3626310c172fb3f8b0807
Binary files /dev/null and b/20181220/logo-hochschule-bochum-cvh-text.pdf differ
diff --git a/20181220/logo-hochschule-bochum.pdf b/20181220/logo-hochschule-bochum.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1
--- /dev/null
+++ b/20181220/logo-hochschule-bochum.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20181220/open-xchange.jpg b/20181220/open-xchange.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d1e06bfb8722813f3e4dfff4c3a5da2016d594a2
Binary files /dev/null and b/20181220/open-xchange.jpg differ
diff --git a/20181220/osi-logo.jpg b/20181220/osi-logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d9d29548b455ec1bb9ee4e7a9b9757c1567dc375
Binary files /dev/null and b/20181220/osi-logo.jpg differ
diff --git a/20181220/pgslides.sty b/20181220/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20181220/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file
diff --git a/20181220/photo-20190117-173529.jpg b/20181220/photo-20190117-173529.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..3f919d5f7b3a86ff45b43c23576cd577d038a4b5
Binary files /dev/null and b/20181220/photo-20190117-173529.jpg differ
diff --git a/20181220/photo-20190117-173700.jpg b/20181220/photo-20190117-173700.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..0463ac933a24d9f22d5c9bfa331d41a6666b994c
Binary files /dev/null and b/20181220/photo-20190117-173700.jpg differ
diff --git a/20181220/putty.png b/20181220/putty.png
new file mode 100644
index 0000000000000000000000000000000000000000..63693df07f200e3e74119fed16237b438cac651b
Binary files /dev/null and b/20181220/putty.png differ
diff --git a/20181220/verschluesselung-20181220.pdf b/20181220/verschluesselung-20181220.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..dab45861cfffe47022913e3fa883f2ba6b06ebcb
Binary files /dev/null and b/20181220/verschluesselung-20181220.pdf differ
diff --git a/20181220/verschluesselung-20181220.tex b/20181220/verschluesselung-20181220.tex
new file mode 100644
index 0000000000000000000000000000000000000000..8c314e2a6c81e50c32a3e0053c76389fa886618c
--- /dev/null
+++ b/20181220/verschluesselung-20181220.tex
@@ -0,0 +1,380 @@
+% verschluesselung-20181220.pdf - Lecture Slides on Email Encryption
+% Copyright (C) 2012, 2013, 2015, 2016, 2017, 2018  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+% README: E-Mail-Verschlüsselung
+
+\documentclass[10pt,t]{beamer}
+
+\usepackage{pgslides}
+\usepackage{pdftricks}
+\usepackage{tikz}
+
+\begin{psinputs}
+  \usepackage[utf8]{inputenc}
+  \usepackage[german]{babel}
+  \usepackage[T1]{fontenc}
+  \usepackage{helvet}
+  \renewcommand*\familydefault{\sfdefault}
+  \usepackage{pstricks,pst-grad}
+\end{psinputs}
+
+\title{E-Mail-Verschlüsselung}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{20.\ Dezember 2018}
+
+\begin{document}
+
+\maketitleframe
+
+\nosectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/hp.git}}}
+      \begin{itemize}
+        \item[1.1]
+          Warum verschlüsseln?
+        \item[1.2]
+          Einfache Verschlüsselungsalgorithmen
+        \item[1.2]
+          Symmetrische Verschlüsselungsalgorithmen
+      \end{itemize}
+    \item[\textbf{2}] \textbf{Ihr Verschlüsselungs-"`Führerschein"'}
+      \begin{itemize}
+        \item[2.1]
+          Geheime und öffentliche Schlüssel
+        \item[2.2]
+          Digitale Signaturen
+        \item[2.3]
+          Zertifikate -- Web of Trust
+      \end{itemize}
+    \item[\textbf{3}] \textbf{Verschlüsselung in der Praxis}
+    \item[\textbf{4}] \textbf{Fazit}
+  \end{itemize}
+
+\end{frame}
+
+\section{Einführung}
+\subsection{Warum verschlüsseln?}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{quote}
+    "`Ich habe nichts zu verbergen."'
+  \end{quote}
+
+  \begin{itemize}
+    \item
+      Vor wem? Wirklich vor jedem?\\
+      Wirklich alles über Sie?
+    \item
+      Auch nicht vor dem organisierten Verbrechen?
+    \item
+      Illegaler Zugriff auf staatlich gesammelte Daten ist möglich!
+    \bigskip
+    \arrowitem
+      Der einzige wirklich sichere Weg,\\
+      Datensammlungen gegen Mißbrauch zu schützen,\\
+      ist, die Daten gar nicht erst zu sammeln.
+  \end{itemize}
+\end{frame}
+
+\subsection{Einfache Verschlüsselungsalgorithmen}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Cäsar-Chiffre: Alphabet rotieren\\
+      Beispiel: ROT13 (mit Schlüssel 13)\\
+      25 verschiedene Schlüssel
+      \textarrow\ Schlüssellänge $\approx 4.64$\,Bit
+      ($2^{4.64} \approx 25$)\\
+      leicht zu knacken
+      \pause
+    \item
+      Zufälliges Rotieren des gesamten Zeichensatzes:\\
+      Für jedes Zeichen wird neu "`gewürfelt"'.\\
+      \pause
+      \textarrow\ Schlüssellänge = Länge der Nachricht\\
+      unknackbar
+      (mathematisch beweisbar)\\
+      \pause
+      praktische Probleme:
+      \begin{itemize}
+        \item Schlüssel genauso lang wie Nachricht
+              \textarrow\ schwer zu übertragen
+        \item Schlüssel (echter Zufall!) schwer zu generieren
+      \end{itemize}
+      \pause
+    \item
+      Dasselbe mit Pseudozufallsgenerator\\
+      Schlüssel = Startwert\\
+      \pause
+      \textarrow\ Schlüssellänge = Bits des Startwerts\\
+      meistens knackbar,
+      nur für spezielle Pseudozufallsgeneratoren sicher\\
+      \textarrow\ Verschlüsselungsverfahren
+  \end{itemize}
+  \vspace*{-1cm}
+\end{frame}
+
+\subsection{Symmetrische Verschlüsselungsalgorithmen}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \renewcommand{\arraystretch}{1.2}
+  \begin{center}
+    \begin{tabular}{l|c|c}
+      \textbf{Verfahren} & \textbf{Schlüssellänge} & \textbf{sicher} \\\hline
+      Cäsar-Chiffre & 4.64 Bit & nein \\
+      One-Time Pad (OTP) & Länge der Nachricht & ja \\
+      Enigma & 81.2 Bit & nein \\
+      Standard-Pseudozufallszahlen & typischerweise 64 Bit & nein \\\hline
+      DES & 56 Bit & nein \\
+      IDEA & 128 Bit & ja \\
+      Blowfish & 128 Bit & ja \\
+      Twofish & 128 Bit & ja \\
+      CAST & 128 Bit & ja \\
+      AES / Rijndael & 128 Bit & ja
+    \end{tabular}
+  \end{center}
+\end{frame}
+
+\section{Ihr Verschlüsselungs-"`Führerschein"'}
+\subsection{Geheime und öffentliche Schlüssel}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Verschlüsselte Kommunikation:
+  \begin{itemize}
+    \item
+      Versenden der Nachricht über öffentlichen Kanal (z.\,B.\ E-Mail)
+    \item
+      Versenden des Schlüssels über geheimen Kanal (z.\,B.\ persönlich)
+  \end{itemize}
+
+  \medskip
+
+  Probleme:
+  \begin{itemize}
+    \item
+      Kommunikation mit Unbekannten
+    \item
+      Kommunikation in Gruppen
+  \end{itemize}
+
+  \medskip
+
+  Lösung:
+  \begin{itemize}
+    \item
+      Asymmetrische Verschlüsselungsverfahren
+    \item
+      Geheime und öffentliche Schlüssel
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Asymmetrische Verschlüsselungsverfahren:
+  \begin{itemize}
+    \item
+      Unterschiedliche Schlüssel zum Ver- und Entschlüsseln
+    \item
+      Verschlüsseln: \newterm{öffentlicher Schlüssel}
+    \item
+      Entschlüsseln: \newterm{geheimer Schlüssel}
+  \end{itemize}
+
+  \medskip
+
+  Schlüsselaustausch:
+  \begin{itemize}
+    \item
+      Abhören: kein Problem mehr
+    \item
+      Identifikation: persönlicher Kontakt weiterhin erforderlich
+  \end{itemize}
+
+  \medskip
+
+  Lösung:
+  \begin{itemize}
+    \item
+      Digitale Signaturen
+    \item
+      Zertifikate -- Web of Trust
+  \end{itemize}
+
+  \vspace{0cm plus 1filll minus 1filll}
+
+  \renewcommand{\arraystretch}{1.2}
+  \begin{flushright}
+    \begin{tabular}{l|c|c}
+      \textbf{Verfahren} & \textbf{Schlüssellänge} & \textbf{sicher} \\\hline
+      RSA & ab 2048 Bit & ja \\
+      ElGamal & ab 2048 Bit & ja \\
+      ECDSA & 160 Bit & ja
+    \end{tabular}
+  \end{flushright}
+\end{frame}
+
+\subsection{Digitale Signaturen}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Asymmetrische Verschlüsselungsverfahren:
+  \begin{itemize}
+    \item
+      Unterschiedliche Schlüssel zum Ver- und Entschlüsseln
+    \item
+      Verschlüsseln: geheimer Schlüssel
+    \item
+      Entschlüsseln: öffentlicher Schlüssel
+    \item
+      Prüfwert der Nachricht verschlüsseln
+    \arrowitem
+      Wer das verschlüsselt hat,\\
+      muß im Besitz des geheimen Schlüssels sein.\\
+      \textarrow\ \newterm{digitale Signatur}
+  \end{itemize}
+
+  \vspace{0cm plus 1filll minus 1filll}
+
+  \renewcommand{\arraystretch}{1.2}
+  \begin{flushright}
+    \begin{tabular}{l|c|c}
+      \textbf{Verfahren} & \textbf{Schlüssellänge} & \textbf{sicher} \\\hline
+      RSA & ab 2048 Bit & ja \\
+      ElGamal & ab 2048 Bit & ja \\
+      ECDSA & 160 Bit & ja
+    \end{tabular}
+  \end{flushright}
+\end{frame}
+
+\subsection{Zertifikate -- Web of Trust}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Alice will Bob eine verschlüsselte Nachricht schicken.
+    \item
+      Alice lädt den öffentlichen Schlüssel von Bob herunter.
+    \arrowitem
+      Ist der Schlüssel wirklich der von Bob?
+    \pause
+    \medskip
+    \item
+      Trent hat den öffentlichen Schlüssel von Bob unterschrieben:\\
+      "`Ich bezeuge, daß dieser Schlüssel wirklich Bob gehört."'
+    \arrowitem
+      Trent agiert als \newterm{Zertifizierungsstelle}.
+    \medskip
+    \item
+      Alice hat bereits den öffentlichen Schlüssel von Trent\\
+      und kann daher die Signatur prüfen.
+    \item
+      Alice vertraut Trent. \textarrow\ \newterm{Vertrauen in Person}
+    \arrowitem
+      Der öffentliche Schlüssel von Bob ist echt. \textarrow\ \newterm{Vertrauen in Schlüssel}
+  \end{itemize}
+\end{frame}
+
+\section{Verschlüsselung in der Praxis}
+
+\begin{frame}
+  \showsection
+
+  \begin{itemize}
+    \item
+      Software: GNU Privacy Guard (GnuPG)\\
+      herunterladen und installieren
+      \begin{itemize}
+        \item
+          Plug-In für Mozilla Thunderbird: Enigmail
+        \item
+          GnuPG Basics Pack
+        \item
+          GPG4Win
+        \item
+          \dots
+      \end{itemize}
+      Für Smartphones: K-9 Mail
+    \item
+      Schlüsselerzeugung
+    \item
+      Öffentliche Schlüssel austauschen und prüfen
+    \pause
+    \medskip
+    \item
+      Schlüssel-Server
+    \medskip
+    \item
+      Ende-zu-Ende-Verschlüsselung
+    \item
+      Auf verschlüsselte Nachrichten immer verschlüsselt antworten!
+    \item
+      Betreff-Zeilen werden nicht immer mit verschlüsselt.
+    \item
+      Die Verbindungsdaten werden nicht mit verschlüsselt.
+  \end{itemize}
+\end{frame}
+
+\section{Fazit}
+
+\begin{frame}
+  \showsection
+
+  \begin{itemize}
+    \item
+      E-Mail-Verschlüsselung ist sinnvoll \dots
+    \item
+      \dots\ und machbar.
+    \item
+      Der richtige Umgang ist entscheidend.
+    \medskip
+    \arrowitem
+      Sicherheitsbewußtsein ist entscheidend.
+  \end{itemize}
+\end{frame}
+
+\end{document}
diff --git a/20190110/721px-Pfs-logo.png b/20190110/721px-Pfs-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..1b9d6698223254ba7c4170905b311b162cad2274
Binary files /dev/null and b/20190110/721px-Pfs-logo.png differ
diff --git a/20190110/Adobe-Reader.png b/20190110/Adobe-Reader.png
new file mode 100644
index 0000000000000000000000000000000000000000..30d8d244efbda994a9c6e832705c93c3eba4ef4f
Binary files /dev/null and b/20190110/Adobe-Reader.png differ
diff --git a/20190110/Copyright.pdf b/20190110/Copyright.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..69f4ec0c29489b7c1eb24724c79153cea1087156
Binary files /dev/null and b/20190110/Copyright.pdf differ
diff --git a/20190110/Microsoft_Power_Point_2010.png b/20190110/Microsoft_Power_Point_2010.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce91df9e0cb33e1d0e644a5ac25f916c266f4524
Binary files /dev/null and b/20190110/Microsoft_Power_Point_2010.png differ
diff --git a/20190110/Zeichen_123.pdf b/20190110/Zeichen_123.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..fdbc897227df059cfda790a16555e6e417682116
--- /dev/null
+++ b/20190110/Zeichen_123.pdf
@@ -0,0 +1 @@
+../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20190110/a-gnu-head.pdf b/20190110/a-gnu-head.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..3dcb28fc1147f4b801391c6e5d54a9c4c9311bd6
Binary files /dev/null and b/20190110/a-gnu-head.pdf differ
diff --git a/20190110/es-20190110.pdf b/20190110/es-20190110.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..d9e39180c5106296669ca5a6b0c8bbe91f69d347
Binary files /dev/null and b/20190110/es-20190110.pdf differ
diff --git a/20190110/es-20190110.tex b/20190110/es-20190110.tex
new file mode 100644
index 0000000000000000000000000000000000000000..3de523a4fb8395c9615265fa6d20b458fee39eab
--- /dev/null
+++ b/20190110/es-20190110.tex
@@ -0,0 +1,759 @@
+% es-20190110.pdf - Lecture Slides on Embedded Systems
+% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019  Peter Gerwinski
+%
+% This document is free software: you can redistribute it and/or
+% modify it either under the terms of the Creative Commons
+% Attribution-ShareAlike 3.0 License, or under the terms of the
+% GNU General Public License as published by the Free Software
+% Foundation, either version 3 of the License, or (at your option)
+% any later version.
+%
+% This document is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+% GNU General Public License for more details.
+%
+% You should have received a copy of the GNU General Public License
+% along with this document.  If not, see <http://www.gnu.org/licenses/>.
+%
+% You should have received a copy of the Creative Commons
+% Attribution-ShareAlike 3.0 Unported License along with this
+% document.  If not, see <http://creativecommons.org/licenses/>.
+
+% README: Web-Interfaces, Software-Lizenzen
+
+\documentclass[10pt,t]{beamer}
+
+\usepackage{pgslides}
+\usepackage{rotating}
+\usepackage{tikz}
+\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
+
+\usepackage{multirow}
+
+\newrgbcolor{lightyellow}{0.95 0.85 0.0}
+\newrgbcolor{lightorange}{1.0 0.7 0.0}
+\newrgbcolor{lightgreen}{0.0 0.8 0.0}
+
+\newcommand{\underconstruction}{%
+  \begin{picture}(0,0)
+    \put(9,0.9){\makebox(0,0)[b]{\includegraphics[width=1.5cm]{Zeichen_123.pdf}}}
+    \put(9,0.6){\makebox(0,0)[t]{\shortstack{Änderungen\\vorbehalten}}}
+  \end{picture}}
+
+\title{Eingebettete Systeme}
+\author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
+\date{10.\ Januar 2019}
+
+\newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
+
+\begin{document}
+
+\maketitleframe
+
+\nosectionnonumber{\inserttitle}
+
+\begin{frame}
+
+  \shownosectionnonumber
+
+  \begin{itemize}
+    \item[\textbf{1}] \textbf{Einführung}
+      \hfill\makebox(0,0)[br]{\raisebox{2.25ex}{\url{https://gitlab.cvh-server.de/pgerwinski/es.git}}}
+    \item[\textbf{2}] \textbf{Einführung in Unix}
+    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
+    \item[\textbf{4}] \textbf{Bus-Systeme}
+    \item[\textbf{6}] \textbf{Echtzeit}
+    \item[\textbf{7}] \textbf{Web-Interfaces}
+    \item[\textbf{8}] \textbf{Software-Lizenzen}
+    \vspace*{-\smallskipamount}
+    \item[\textbf{\dots}]
+  \end{itemize}
+
+  \vspace*{-1cm plus 1filll}
+
+  \underconstruction
+
+\end{frame}
+
+\setcounter{section}{6}
+
+\section{Web-Interfaces}
+\subsection{HTTP, HTML und CGI}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{lstlisting}[style=terminal]
+    $ ¡nc -C localhost 80¿
+    GET / HTTP/1.1
+    Host: localhost
+
+    HTTP/1.1 200 OK
+    Date: Wed, 22 Nov 2017 19:58:55 GMT
+    Server: Apache/2.4.25 (Debian)
+    [...]
+    Content-Type: text/html
+
+    <html>
+     <body>
+      <h1 align="center">Vertiefung<br>Vertiefung Systemtechnik &ndash; Eingebettete Systeme</h1>
+      <p align="center">23. November 2017</p>
+      <p align="center">Prof. Dr. Peter Gerwinski</p>
+     </body>
+    </html>
+  \end{lstlisting}
+  \vspace*{-1cm}
+\end{frame}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      \newterm{Hypertext Transport Protocol (HTTP)}: Netzwerk-Protokoll\\
+      HTML-Inhalt + zusätzliche Daten
+    \pause
+    \item
+      \newterm{Hypertext Markup Language (HTML)}: Markup-Sprache\\
+      Inhalte + Formulare
+      \begin{onlyenv}<2>
+        \bigskip
+        \begin{lstlisting}[language=html,gobble=10]
+          <form action="/cgi-bin/welcome.cgi" method="get">
+            Your name: <input type="text" name="name"><br>
+            <input type="submit">
+          </form>
+        \end{lstlisting}
+        \vspace*{-2cm}
+      \end{onlyenv}
+    \pause
+    \item
+      \newterm{Common Gateway Interface (CGI)}: Schnittstelle zu Programmen\\
+      Liste von Variablen mit Werten
+      \par\smallskip
+      \begin{itemize}
+        \item
+          \newterm{GET-Methode}: Umgebungsvariable \lstinline{QUERY_STRING}
+        \smallskip
+        \item
+          \newterm{POST-Methode}: Standardeingabe
+      \end{itemize}
+  \end{itemize}
+  \bigskip
+  \lstinline[style=terminal]{http://localhost/cgi-bin/welcome.cgi?name=Peter&answer=42}
+\end{frame}
+
+\subsection{Externe CGI-Skripte, GET und POST}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}\itemsep\medskipamount
+    \item
+      HTML-Formular verweist auf CGI-Programm ("`CGI-Skript"')
+      \par
+      \lstinline[language=html]{<form action="/cgi-bin/welcome.cgi"}
+      \lstinline[language=html]{method="get">}
+    \item
+      Web-Server ruft CGI-Programm auf
+    \item
+      CGI-Programm wertet Variablenliste aus
+      \begin{itemize}
+        \item
+          GET-Methode: Umgebungsvariable \lstinline{QUERY_STRING}
+        \smallskip
+        \item
+          POST-Methode: Standardeingabe
+      \end{itemize}
+    \item
+      CGI-Programm gibt HTTP-Header und Inhalt aus
+      \par\smallskip
+      \begin{lstlisting}[language=bash]
+        #!/bin/bash
+        echo Content-Type: text/plain
+        echo
+        echo "Hello, world!"
+      \end{lstlisting}
+    \item
+      speziell: Inhalt ist \lstinline{text/html}
+  \end{itemize}
+\end{frame}
+
+\subsection{Skript im Server: PHP}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Interpreter in Web-Server integriert
+  \end{itemize}
+
+  \bigskip
+
+  \begin{lstlisting}[language=php]
+    <html>
+      <body>
+        Hello, <?php echo $_POST["name"]; ?>!
+      </body>
+    </html> 
+  \end{lstlisting}
+\end{frame}
+
+\subsection{Server im Skript: Twisted}
+
+\begin{frame}[fragile]
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      individuell geschriebener Web-Server
+    \item
+      "`Baukasten"' in JavaScript: \file{node.js}
+    \item
+      "`Baukasten"' in Python: \file{Twisted}
+  \end{itemize}
+
+  \bigskip
+
+  \begin{lstlisting}[language=python]
+    def render_GET(self, request):
+        return '<html><body><form method="POST">Your name: ' \
+               + '<input name="name" type="text" /><br/>' \
+               + '<input type="submit"></form></body></html>'
+
+    def render_POST(self, request):
+        return '<html><body>Hello, %s!</body></html>' \
+               % (cgi.escape(request.args["name"][0]),)
+  \end{lstlisting}
+\end{frame}
+
+\section{Software-Lizenzen}
+\subsectionnonumber{Vorab: Dies ist keine Rechtsdienstleistung!}
+
+\begin{frame}
+  \showsection
+  \pause
+  \showsubsectionnonumber
+
+  \textbf{\S\,2 RDG: Begriff der Rechtsdienstleistung}
+
+  \smallskip
+
+  (1) Rechtsdienstleistung ist jede Tätigkeit in
+  {\only<3->{\color{red}}konkreten} fremden Angelegenheiten,
+  sobald sie eine rechtliche Prüfung des
+  {\only<3->{\color{red}}Einzelfalls} erfordert.
+
+  \medskip
+
+  \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/}
+
+  \pause
+  \pause
+
+  \bigskip
+
+  Konkreter Fall:
+  \begin{itemize}
+    \item
+      Konkretes Programm unter Lizenz A
+    \item
+      Konkrete Bibliothek unter Lizenz B
+    \item
+      Beratung: Paßt das zusammen?
+    \arrowitem
+      Rechtsdienstleistung
+  \end{itemize}
+\end{frame}
+
+\subsectionnonumber{Lizenz-Beratung unter Kollegen?}
+
+\begin{frame}
+  \showsection
+  \showsubsectionnonumber
+
+  \textbf{\S\,6 RDG: Unentgeltliche Rechtsdienstleistungen}
+
+  \smallskip
+
+  (1) Erlaubt sind Rechtsdienstleistungen, die nicht im Zusammenhang mit einer entgeltlichen
+  Tätigkeit stehen (unentgeltliche Rechtsdienstleistungen).
+
+  \smallskip
+
+  (2) Wer unentgeltliche Rechtsdienstleistungen außerhalb familiärer, nachbarschaftlicher oder
+  ähnlich enger persönlicher Beziehungen erbringt, muss sicherstellen, dass die Rechtsdienstleistung
+  durch eine Person, der die entgeltliche Erbringung dieser Rechtsdienstleistung erlaubt ist, durch
+  eine Person mit Befähigung zum Richteramt oder unter Anleitung einer solchen Person erfolgt.
+  [\,\dots]
+
+  \medskip
+
+  \strut\hfill Quelle: \url{http://www.gesetze-im-internet.de/rdg/}
+
+  \pause
+
+  \bigskip
+
+  \begin{itemize}
+    \arrowitem
+      Nur allgemein beraten!\\
+      Konkrete Fälle an Anwalt verweisen!
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Überblick}
+\newcommand{\lcr}{\includegraphics[width=0.5cm]{Copyright.pdf}}
+\newcommand{\lcl}{\includegraphics[width=0.5cm]{Copyleft.pdf}}
+\newcommand{\lcc}{\includegraphics[width=0.5cm]{creative-commons.png}}
+\newcommand{\lpd}{\includegraphics[width=0.5cm]{PD-icon.pdf}}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Grundlage: Urheberrecht ($\approx$ Copyright) \hfill \lcr\\
+      "`Wer Software schreibt, entscheidet, was damit geschehen darf."'
+    \pause
+    \medskip
+    \item
+      anderen etwas erlauben: Lizenz
+    \pause
+    \medskip
+    \item
+      "`gar keine Lizenz"' = alles verboten
+  \end{itemize}
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{center}
+    \begin{picture}(12,5)
+      \put(5,5){\makebox(0,0){Software-Lizenz}}
+      \put(4.5,4.7){\vector(-1,-1){1}}
+      \put(5.5,4.7){\vector(1,-1){1}}
+      \put(3,3.4){\makebox(0,0){proprietär}}
+      \put(7,3.4){\makebox(0,0){frei / Open Source}}
+      \put(6.5,3.1){\vector(-1,-1){1.5}}
+      \put(7.5,3.1){\vector(1,-1){1}}
+      \put(4.5,1.3){\makebox(0,0){freizügig}}
+      \put(9,1.8){\makebox(0,0){Copyleft}}
+    \end{picture}%
+    \begin{onlyenv}<2->%
+      \begin{picture}(0,0)(12,0)
+        \color{darkgreen}
+        \put(2.5,3.1){\vector(-1,-1){0.5}}
+        \put(3.5,3.1){\vector(1,-1){0.5}}
+        \put(2.0,2.3){\makebox(0,0){kommerziell}}
+        \put(4.0,2.3){\makebox(0,0){gratis}}
+        \put(4.0,1.0){\vector(-1,-1){0.5}}
+        \put(5.0,1.0){\vector(1,-1){0.5}}
+        \put(3.5,0.2){\makebox(0,0){kommerziell}}
+        \put(5.5,0.2){\makebox(0,0){gratis}}
+        \put(8.5,1.5){\vector(-1,-1){0.5}}
+        \put(9.5,1.5){\vector(1,-1){0.5}}
+        \put(8.0,0.7){\makebox(0,0){kommerziell}}
+        \put(10.0,0.7){\makebox(0,0){gratis}}
+      \end{picture}%
+    \end{onlyenv}%
+  \end{center}
+
+\end{frame}
+
+\subsection{Lizenzmodelle}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Freie Software darf man
+      \hfill\begin{picture}(0,0)
+        \put(-1.8,-0.8){\includegraphics[width=2cm]{a-gnu-head.pdf}}
+      \end{picture}
+      \begin{itemize}
+        \item[0.]
+          benutzen,
+        \item[1.]
+          studieren und anpassen,
+        \item[2.]
+          weitergeben,
+        \item[3.]
+          weiterentwickeln und veröffentlichen.
+      \end{itemize}
+      \strut\hfill
+      4 Grundfreiheiten --
+      \url{http://www.gnu.org/philosophy/free-sw}\\
+      \pause
+      \begin{picture}(0,0)
+        \color{red}
+        \put(6.95,1.85){\vector(-1,0){1.5}}
+        \put(7.00,1.75){\vector(-1,-1){0.5}}
+        \put(7.05,1.85){\makebox(0,0)[l]{Quelltext erforderlich!}}
+      \end{picture}%
+    \pause
+    \medskip
+    \item
+      Open Source: i.\,w.\ dasselbe in 10 Kriterien
+      \hfill\begin{picture}(0,0)
+        \put(-1.2,-0.5){\includegraphics[width=1.1cm]{osi-logo.jpg}}
+      \end{picture}\\
+      Begründung: technisch statt philosophisch\\[\smallskipamount]
+      \strut\hfill
+      Definition:
+      \url{http://www.opensource.org/docs/osd}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Proprietäre Software / Closed Source\\
+      Gegenteil von freier Software / Open Source
+      \medskip
+      \begin{itemize}
+        \item
+          Benutzen, Weitergeben und/oder Veröffentlichen\\
+          erfordert individuelle Erlaubnis des Rechteinhabers
+          \medskip
+        \item
+          Studieren, Anpassen und/oder Weiterentwickeln\\
+          nur dem Rechteinhaber erlaubt
+          \pause
+          {\color{red}und/oder möglich\\
+          (Quelltext erforderlich!)}
+      \end{itemize}
+  \end{itemize}
+
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{itemize}
+    \item
+      Freie Software
+      \smallskip
+      \begin{itemize}
+        \item
+          Copyleft\only<2->{:}\\[\smallskipamount]
+          \begin{visibleenv}<2->
+            Weitergabe nur unter gleichen Bedingungen erlaubt\\
+            \textarrow\ Umwandlung in proprietäre Software nicht erlaubt
+          \end{visibleenv}
+        \medskip
+        \item
+          freizügig\only<3->{:}\\[\smallskipamount]
+          \begin{visibleenv}<3->
+            Weitergabe auch unter anderen Bedingungen erlaubt\\
+            \textarrow\ Umwandlung in \only<4->{Copyleft- oder }proprietäre Software erlaubt
+          \end{visibleenv}
+        \begin{onlyenv}<5->
+          \medskip
+          \item
+            Teil-Copyleft:\\[\smallskipamount]
+            Linken mit proprietärer Software erlaubt
+        \end{onlyenv}
+      \end{itemize}
+  \end{itemize}
+
+\end{frame}
+
+\subsection{Beispiel-Programme}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  \begin{center}
+    \renewcommand{\arraystretch}{2.5}
+    \begin{tabular}{|c||c|c|c|}\hline
+      & \multirow{2}{*}{proprietär} & \multicolumn{2}{c|}{frei}\\\cline{3-4}
+      & & freizügig & Copyleft \\\hline\hline
+      \color{darkgreen}kommerziell
+        & \color{structure}\visible<2->{\shortstack{\\\includegraphics[width=0.5cm]{Microsoft_Power_Point_2010.png}\\\small Microsoft PowerPoint}}
+        & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=1.0cm]{721px-Pfs-logo.png}\\\small pfSense}}
+        & \color{structure}\visible<5->{\shortstack{\\\includegraphics[width=0.8cm]{open-xchange.jpg}\\\small Open-Xchange}} \\\hline
+      \color{darkgreen}gratis
+        & \color{structure}\visible<4->{\shortstack{\\\includegraphics[width=0.8cm]{Adobe-Reader.png}\\\small Adobe Reader}}
+        & \color{structure}\visible<6->{\shortstack{\\\includegraphics[width=0.5cm]{putty.png}\\\small PuTTY}}
+        & \color{structure}\visible<3->{\shortstack{\\\includegraphics[width=0.5cm]{libreoffice-impress.pdf}\\\small LibreOffice Impress}} \\\hline
+    \end{tabular}
+  \end{center}
+  \begin{onlyenv}<7->%
+    \begin{picture}(0,0)(0,-0.5)
+      \color{red}
+      \put(7.38,1.38){$\updownarrow$}
+      \put(9.8,1.38){$\updownarrow$}
+    \end{picture}%
+  \end{onlyenv}%
+  \begin{onlyenv}<8->%
+    \begin{picture}(0,0)(0,-0.7)
+      \color{red}
+      \put(6.3,2.7){$\longleftarrow$}
+      \put(8.05,2.7){$\longrightarrow$}
+    \end{picture}%
+  \end{onlyenv}%
+
+\end{frame}
+
+\subsection{Beispiel-Lizenzen}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  \pause
+  Freie Software / Open Source
+  \begin{itemize}
+    \item
+      strenges Copyleft:
+      GNU GPL, GNU FDL, CC BY-SA
+    \pause
+    \item
+      Teil-Copyleft:
+      GNU LGPL, Mozilla-Lizenz, Microsoft Public License
+    \pause
+    \item
+      freizügig:
+      Modifizierte BSD-Lizenz, Apache-Lizenz, CC BY,\\
+      CC0, Public Domain
+  \end{itemize}
+  \pause
+  \strut\hfill\url{http://www.gnu.org/licenses/license-list}
+
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Lizenz i.\,d.\,R.\ für jedes Programm anders
+    \pause
+    \medskip
+    \item
+      "`Normales"' Beispiel (Januar 2012):\\
+      Adobe Reader EULA\\[\smallskipamount]
+      Verwenden \only<3->{nur auf PCs }erlaubt\pause\pause,\\
+      Studieren und Weitergeben nicht erlaubt\pause,\\
+      Screenshots nicht erlaubt\\[\smallskipamount]
+      \pause
+      Der Software ist die Kommunikation mit Adobe\\
+      und mit Werbeanbietern erlaubt.\\[\medskipamount]
+      \pause
+      \strut\hfill\url{http://www.adobe.com/products/eulas/reader/x/eula_de_de.html}
+    \medskip
+  \end{itemize}
+                                                                
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Kontroverses Beispiel (Januar 2012):\\
+      iBooks Author EULA\\[\smallskipamount]
+      Layout für elektronische Bücher erstellen\\
+      \pause
+      \textarrow\ Buch darf nur über den iBooks Store verkauft werden\\[\medskipamount]
+      \strut\hfill\url{http://venomousporridge.com/post/16126436616/}\\
+      \strut\hfill\url{ibooks-author-eula-audacity}
+  \end{itemize}
+                                                                
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Kontroverses Beispiel (September 2001):\\
+      Microsoft FrontPage 2002 EULA\\[\smallskipamount]
+      Webseiten erstellen\\
+      \pause
+      \textarrow\ Webseiten dürfen Microsoft nicht "`herabsetzen"'\\[\medskipamount]
+      \strut\hfill\url{http://www.heise.de/newsticker/data/jes-21.09.01-001/}
+  \end{itemize}
+                                                                
+\end{frame}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Generell: Gewährleistungsausschluß
+
+  \bigskip
+
+  Proprietäre Software
+
+  \begin{itemize}
+    \item
+      Kontroverses Beispiel (Juli 2001):\\
+      Microsoft Mobile Internet Toolkit EULA\\[\smallskipamount]
+      Software erstellen\\
+      \pause
+      \textarrow\ Verbot, {\color{darkgreen}"`virale"'} Software
+                  \only<3->{(= Copyleft-Software) }zu erstellen \\
+      \pause
+      \pause
+      \textarrow\ Verbot, Copyleft-Werkzeuge mit einzusetzen \\
+      \textarrow\ Verbot, entwickelte Software gemeinsam mit Copyleft-Software\\
+      \strut\phantom{\textarrow} einzusetzen oder zu vertreiben\\[\medskipamount]
+      \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\
+      \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm}
+  \end{itemize}
+
+  % Nicht auf derselben CD: http://msdn.microsoft.com/downloads/eula_mit.htm, 22.7.2001
+                                                                
+\end{frame}
+
+\subsection{Copyleft}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+
+  Microsoft: Copyleft-Software ist {\color{darkgreen}"`viral"'}\\[\smallskipamount]
+  \strut\hfill\url{http://web.archive.org/web/20010626201507/}\\
+  \strut\hfill\url{http://msdn.microsoft.com/downloads/eula_mit.htm}
+
+  \bigskip
+
+  \begin{center}
+    \color{structure}%
+    \begin{onlyenv}<2->%
+      \begin{picture}(10,5)
+        \put(5,5){\makebox(0,0){Code aus fremder Software benutzen}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<3->%
+      \begin{picture}(0,0)(10,0)
+        \put(4.5,4.7){\vector(-1,-1){1}}
+        \put(3.5,3.4){\makebox(0,0){\strut GPL-Software:}}
+        \put(3.5,2.95){\makebox(0,0){\strut{\color{darkgreen}bedingt} erlaubt}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<4->%
+      \begin{picture}(0,0)(10,0)
+        \color{darkgreen}
+        \put(3.0,2.7){\vector(0,-1){0.7}}
+        \put(3.0,1.8){\makebox(0,0){\strut Gesamtwerk muß}}
+        \put(3.0,1.35){\makebox(0,0){\strut unter GPL stehen}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<5->%
+      \begin{picture}(0,0)(10,0)
+        \put(5.5,4.7){\vector(1,-1){1}}
+        \put(6.5,3.4){\makebox(0,0){\strut MS-Software:}}
+        \put(6.5,2.95){\makebox(0,0){\strut{\color{red}nicht} erlaubt}}
+      \end{picture}%
+    \end{onlyenv}%
+    \begin{onlyenv}<6->%
+      \begin{picture}(0,0)(10,0)
+        \color{black}
+        \put(5.5,1.2){\makebox(0,0)[l]{\textarrow\ 
+                                     \begin{minipage}[t]{5cm}
+                                       Lizenzen lesen,\\
+                                       sorgfältig auswählen
+                                     \end{minipage}}}
+      \end{picture}%
+    \end{onlyenv}%
+  \end{center}
+  \vspace*{-1cm}
+
+\end{frame}
+
+\subsection{Fazit}
+
+\begin{frame}
+  \showsection
+  \showsubsection
+  \begin{itemize}
+    \item
+      Generell: Vor Benutzung Lizenz lesen, durch Anwalt prüfen lassen
+    \pause
+    \item
+      "`gar keine Lizenz"' = alles verboten
+  \end{itemize}
+
+  \pause
+  Bearbeitung, Weitergabe und Mitverwendung
+  \begin{itemize}
+    \pause
+    \item
+      nicht erlaubt oder nicht möglich
+      \textarrow\ proprietäre Software / Closed Source
+    \pause
+    \item
+      erlaubt \textarrow\ freie Software / Open Source
+      \begin{itemize}
+        \pause
+        \item
+          bei Mitverwendung Lizenz übernehmen \textarrow\ Copyleft
+        \pause
+        \item
+          Lizenz umwandelbar \textarrow\ freizügig
+      \end{itemize}
+  \end{itemize}
+
+  \pause
+
+  \bigskip
+
+  {\large\color{structure}\bf Lizenz für diese Lehrmaterialien\par}
+  \begin{itemize}
+    \item
+      Vortragsfolien und Skripte: Copyleft (CC-BY-SA 3.0 oder GNU GPL v3+)
+    \item
+      Beispiel-Programme: freizügig (modifizierte BSD-Lizenz)
+  \end{itemize}
+
+\end{frame}
+
+\end{document}
diff --git a/20190110/libreoffice-impress.pdf b/20190110/libreoffice-impress.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..df752f1d6d50d46ed2f1ed9964190ba4dad2fa75
Binary files /dev/null and b/20190110/libreoffice-impress.pdf differ
diff --git a/20190110/logo-hochschule-bochum-cvh-text-v2.pdf b/20190110/logo-hochschule-bochum-cvh-text-v2.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..4aa99b8f81061aca6dcaf43eed2d9efef40555f8
--- /dev/null
+++ b/20190110/logo-hochschule-bochum-cvh-text-v2.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20190110/logo-hochschule-bochum-cvh-text.pdf b/20190110/logo-hochschule-bochum-cvh-text.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..649b6a8b8f51ddc370a3626310c172fb3f8b0807
Binary files /dev/null and b/20190110/logo-hochschule-bochum-cvh-text.pdf differ
diff --git a/20190110/logo-hochschule-bochum.pdf b/20190110/logo-hochschule-bochum.pdf
new file mode 120000
index 0000000000000000000000000000000000000000..b6b9491e370e499c9276918182cdb82cb311bcd1
--- /dev/null
+++ b/20190110/logo-hochschule-bochum.pdf
@@ -0,0 +1 @@
+../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20190110/open-xchange.jpg b/20190110/open-xchange.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d1e06bfb8722813f3e4dfff4c3a5da2016d594a2
Binary files /dev/null and b/20190110/open-xchange.jpg differ
diff --git a/20190110/osi-logo.jpg b/20190110/osi-logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..d9d29548b455ec1bb9ee4e7a9b9757c1567dc375
Binary files /dev/null and b/20190110/osi-logo.jpg differ
diff --git a/20190110/pgslides.sty b/20190110/pgslides.sty
new file mode 120000
index 0000000000000000000000000000000000000000..5be1416f4216f076aa268901f52a15d775e43f64
--- /dev/null
+++ b/20190110/pgslides.sty
@@ -0,0 +1 @@
+../common/pgslides.sty
\ No newline at end of file
diff --git a/20190110/putty.png b/20190110/putty.png
new file mode 100644
index 0000000000000000000000000000000000000000..63693df07f200e3e74119fed16237b438cac651b
Binary files /dev/null and b/20190110/putty.png differ