diff --git a/20211007/Zeichen_123.pdf b/20211007/Zeichen_123.pdf
deleted file mode 120000
index fdbc897227df059cfda790a16555e6e417682116..0000000000000000000000000000000000000000
--- a/20211007/Zeichen_123.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20211007/chmod-1.txt b/20211007/chmod-1.txt
deleted file mode 100644
index 6b1df1fc6d7316666e045fb0fdec08189cd8c510..0000000000000000000000000000000000000000
--- a/20211007/chmod-1.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> ls -l hello
--rwxr-xr-x 1 peter peter 16608 Okt  7 17:49 hello
-cassini/home/peter/bo/2021ws/es/20211007> ./hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007> chmod -x hello
-cassini/home/peter/bo/2021ws/es/20211007> ./hello
-bash: ./hello: Keine Berechtigung
-cassini/home/peter/bo/2021ws/es/20211007> ls -l hello
--rw-r--r-- 1 peter peter 16608 Okt  7 17:49 hello
-cassini/home/peter/bo/2021ws/es/20211007> chmod +x hello
-cassini/home/peter/bo/2021ws/es/20211007> ./hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007> ls -l hello
--rwxr-xr-x 1 peter peter 16608 Okt  7 17:49 hello
-cassini/home/peter/bo/2021ws/es/20211007> chmod o-x hello
-cassini/home/peter/bo/2021ws/es/20211007> ./hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007> ls -l hello
--rwxr-xr-- 1 peter peter 16608 Okt  7 17:49 hello
-cassini/home/peter/bo/2021ws/es/20211007> chmod 777 hello
-cassini/home/peter/bo/2021ws/es/20211007> ./hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007> ls -l hello
--rwxrwxrwx 1 peter peter 16608 Okt  7 17:49 hello
-cassini/home/peter/bo/2021ws/es/20211007> chmod 750 hello
-cassini/home/peter/bo/2021ws/es/20211007> ./hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007> chmod 750 hello
-cassini/home/peter/bo/2021ws/es/20211007> ls -l hello
--rwxr-x--- 1 peter peter 16608 Okt  7 17:49 hello
-cassini/home/peter/bo/2021ws/es/20211007>
diff --git a/20211007/chmod-2.txt b/20211007/chmod-2.txt
deleted file mode 100644
index 8ee4d0f438c9713822ef9d65a3084ba99518cbf6..0000000000000000000000000000000000000000
--- a/20211007/chmod-2.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> cat toll
-cat test-2.txt
-ls -l test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> chmod +x toll
-cassini/home/peter/bo/2021ws/es/20211007> ls -l toll
--rwxr-xr-x 1 peter peter 32 Okt  7 18:54 toll
-cassini/home/peter/bo/2021ws/es/20211007> ./toll
-Dies ist noch ein Test.
-Er enthält total wertvolle Daten.
-Wirklich.
--rw-r--r-- 1 peter peter 69 Okt  7 18:31 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007>
diff --git a/20211007/cp-1.txt b/20211007/cp-1.txt
deleted file mode 100644
index 4e9d58c6207d9ae5b8bcdd50e7e4e24aaadd1a5e..0000000000000000000000000000000000000000
--- a/20211007/cp-1.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> cat test-1.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211007> ls -l test*
-<Fiese Dinge }:->
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> cp test-1.txt test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> ls -l test*
-<Fiese Dinge }:->
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 19 Okt  7 18:24 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> cp -p test-1.txt test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> ls -l test*
-<Fiese Dinge }:->
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007>
diff --git a/20211007/cp-2.txt b/20211007/cp-2.txt
deleted file mode 100644
index fc41477e862ea45179d9937e2b764694f4931f0a..0000000000000000000000000000000000000000
--- a/20211007/cp-2.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> ls -l test*
-<Fiese Dinge }:->
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007>
-cassini/home/peter/bo/2021ws/es/20211007> mkdir test
-cassini/home/peter/bo/2021ws/es/20211007> cd test/
-cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-1.txt .
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 4
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
-cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-1.txt
-cp: Fehlender Zieldatei‐Operand hinter '../test-1.txt'
-„cp --help“ liefert weitere Informationen.
-cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-*.txt .
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 8
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007/test> rm *.txt
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 0
-cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test-*.txt
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 0
-cassini/home/peter/bo/2021ws/es/20211007/test> echo cp -p ../test-*.txt
-cp -p ../test-1.txt ../test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007/test>
diff --git a/20211007/cp-3.txt b/20211007/cp-3.txt
deleted file mode 100644
index a32ba837ad035a5effcb6e008c3a788895ede0ed..0000000000000000000000000000000000000000
--- a/20211007/cp-3.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> cat test-2.txt
-Dies ist noch ein Test.
-Er enthält total wertvolle Daten.
-Wirklich.
-cassini/home/peter/bo/2021ws/es/20211007> cat test-1.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211007> ls -l test*.txt
-<Fiese Dinge }:->
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 69 Okt  7 18:29 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> cd test
-cassini/home/peter/bo/2021ws/es/20211007/test> cp -p ../test*.txt
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 0
-cassini/home/peter/bo/2021ws/es/20211007/test> cd ..
-cassini/home/peter/bo/2021ws/es/20211007> ls -l test*.txt
-<Fiese Dinge }:->
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> cat test-2.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211007>
diff --git a/20211007/cp-4.txt b/20211007/cp-4.txt
deleted file mode 100644
index 249fd139a7f4e72acc156eaaf5ea9f03381afa4d..0000000000000000000000000000000000000000
--- a/20211007/cp-4.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> ls -l test-*.txt
-<Fiese Dinge }:->
--rw-r--r-- 1 peter peter 19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter 69 Okt  7 18:31 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211007> cat test-1.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211007> cat test-2.txt
-Dies ist noch ein Test.
-Er enthält total wertvolle Daten.
-Wirklich.
-cassini/home/peter/bo/2021ws/es/20211007> cd test/
-cassini/home/peter/bo/2021ws/es/20211007/test> cp -pi ../test*.txt
-cp: '../test-2.txt' überschreiben? n
-cassini/home/peter/bo/2021ws/es/20211007/test>
diff --git a/20211007/hello.c b/20211007/hello.c
deleted file mode 100644
index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000
--- a/20211007/hello.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
diff --git a/20211007/ls b/20211007/ls
deleted file mode 100755
index eff3f9a4770972d8c669bfdaa9f42361529e1781..0000000000000000000000000000000000000000
--- a/20211007/ls
+++ /dev/null
@@ -1,2 +0,0 @@
-echo "<Fiese Dinge }:->"
-/bin/ls "$@"
diff --git a/20211007/ls-1.txt b/20211007/ls-1.txt
deleted file mode 100644
index f688febf2418de9885b428b0e4db6354f5791b45..0000000000000000000000000000000000000000
--- a/20211007/ls-1.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> ls -l
-insgesamt 4240
--rw-r--r-- 1 peter peter    1416 Okt  7 18:53 chmod-1.txt
--rw-r--r-- 1 peter peter     450 Okt  7 18:55 chmod-2.txt
--rw-r--r-- 1 peter peter     783 Okt  7 18:24 cp-1.txt
--rw-r--r-- 1 peter peter    1323 Okt  7 18:28 cp-2.txt
--rw-r--r-- 1 peter peter     914 Okt  7 18:30 cp-3.txt
--rw-r--r-- 1 peter peter     586 Okt  7 18:33 cp-4.txt
-lrwxrwxrwx 1 peter peter      18 Apr 13  2016 csa2.jpg -> ../common/csa2.jpg
--rw-r--r-- 1 peter peter 4220460 Okt  7 09:39 es-20211007.pdf
--rw-r--r-- 1 peter peter   20247 Okt  7 09:39 es-20211007.tex
-lrwxrwxrwx 1 peter peter      21 Apr 13  2016 floppys.jpg -> ../common/floppys.jpg
--rwxr-x--- 1 peter peter   16608 Okt  7 17:49 hello
--rw-r--r-- 1 peter peter      82 Okt  7 17:48 hello.c
-lrwxrwxrwx 1 peter peter      48 Okt  7  2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf
-lrwxrwxrwx 1 peter peter      36 Okt  5  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
--rwxr-xr-x 1 peter peter      38 Okt  7 17:54 ls
--rw-r--r-- 1 peter peter     614 Okt  7 17:24 options-1.txt
--rw-r--r-- 1 peter peter     901 Okt  7 17:29 options-2.txt
--rw-r--r-- 1 peter peter     987 Okt  7 17:53 path-1.txt
--rw-r--r-- 1 peter peter    3034 Okt  7 17:57 path-2.txt
-lrwxrwxrwx 1 peter peter      22 Okt  5  2016 pgslides.sty -> ../common/pgslides.sty
--rw-r--r-- 1 peter peter     519 Okt  7 18:37 rm-1.txt
--rw-r--r-- 1 peter peter     472 Okt  7 18:38 rm-2.txt
-drwxr-xr-x 2 peter peter    4096 Okt  7 18:38 test
--rw-r--r-- 1 peter peter      19 Okt  7 18:23 test-1.txt
--rw-r--r-- 1 peter peter      69 Okt  7 18:31 test-2.txt
--rwxr-xr-x 1 peter peter      32 Okt  7 18:54 toll
-lrwxrwxrwx 1 peter peter      27 Okt  7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg
-lrwxrwxrwx 1 peter peter      25 Okt  3  2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf
-cassini/home/peter/bo/2021ws/es/20211007> ls -l /dev/sdb1
-brw-rw---- 1 root disk 8, 17 Okt  7 18:56 /dev/sdb1
-cassini/home/peter/bo/2021ws/es/20211007>
diff --git a/20211007/options-1.txt b/20211007/options-1.txt
deleted file mode 100644
index 3a69ba1ebac9be142b4bce27c951ed95e9339624..0000000000000000000000000000000000000000
--- a/20211007/options-1.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-cassini/home/peter/bo/2021ws> ls -l -r -t
-insgesamt 20
-drwxr-xr-x 4 peter peter 4096 Okt  3 12:12 kis
-drwxr-xr-x 3 peter peter 4096 Okt  3 19:20 misc
-drwxr-xr-x 6 peter peter 4096 Okt  3 20:00 hp
-drwxr-xr-x 5 peter peter 4096 Okt  4 16:27 bachelor
-drwxr-xr-x 4 peter peter 4096 Okt  7 09:36 es
-cassini/home/peter/bo/2021ws> ls -lrt
-insgesamt 20
-drwxr-xr-x 4 peter peter 4096 Okt  3 12:12 kis
-drwxr-xr-x 3 peter peter 4096 Okt  3 19:20 misc
-drwxr-xr-x 6 peter peter 4096 Okt  3 20:00 hp
-drwxr-xr-x 5 peter peter 4096 Okt  4 16:27 bachelor
-drwxr-xr-x 4 peter peter 4096 Okt  7 09:36 es
-cassini/home/peter/bo/2021ws>
diff --git a/20211007/options-2.txt b/20211007/options-2.txt
deleted file mode 100644
index eb6d3cee5faabd1f4f29a48d50b50137c5345537..0000000000000000000000000000000000000000
--- a/20211007/options-2.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> ls -lrth
-insgesamt 4,1M
-lrwxrwxrwx 1 peter peter   21 Apr 13  2016 floppys.jpg -> ../common/floppys.jpg
-lrwxrwxrwx 1 peter peter   18 Apr 13  2016 csa2.jpg -> ../common/csa2.jpg
-lrwxrwxrwx 1 peter peter   25 Okt  3  2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf
-lrwxrwxrwx 1 peter peter   22 Okt  5  2016 pgslides.sty -> ../common/pgslides.sty
-lrwxrwxrwx 1 peter peter   36 Okt  5  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
-lrwxrwxrwx 1 peter peter   48 Okt  7  2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf
-lrwxrwxrwx 1 peter peter   27 Okt  7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg
--rw-r--r-- 1 peter peter  20K Okt  7 09:39 es-20211007.tex
--rw-r--r-- 1 peter peter 4,1M Okt  7 09:39 es-20211007.pdf
--rw-r--r-- 1 peter peter  614 Okt  7 17:24 options-1.txt
diff --git a/20211007/path-1.txt b/20211007/path-1.txt
deleted file mode 100644
index fa872b2bb9168be9372d4b5430ea40bcb8120503..0000000000000000000000000000000000000000
--- a/20211007/path-1.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
-cassini/home/peter/bo/2021ws/es/20211007> gcc -Wall -O hello.c -o hello
-cassini/home/peter/bo/2021ws/es/20211007> hello
-bash: hello: Kommando nicht gefunden.
-cassini/home/peter/bo/2021ws/es/20211007> echo $PATH
-/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
-cassini/home/peter/bo/2021ws/es/20211007> /home/peter/bo/2021ws/es/20211007/hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007> ./hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007> PATH=.:$PATH
-cassini/home/peter/bo/2021ws/es/20211007> echo $PATH
-.:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/usr/bin:/home/peter/.cargo/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
-cassini/home/peter/bo/2021ws/es/20211007> hello
-Hello, world!
-cassini/home/peter/bo/2021ws/es/20211007>
diff --git a/20211007/path-2.txt b/20211007/path-2.txt
deleted file mode 100644
index 0166fe07ded6c0e8bbe5bc3c6c47f606e7557f4e..0000000000000000000000000000000000000000
--- a/20211007/path-2.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007> vi ls
-
-echo "<Fiese Dinge }:->"
-/bin/ls "$@"
-~
-~
-"ls" [Neu] 2L, 38C geschrieben
-cassini/home/peter/bo/2021ws/es/20211007> ls -lrt
-insgesamt 4188
-lrwxrwxrwx 1 peter peter      21 Apr 13  2016 floppys.jpg -> ../common/floppys.jpg
-lrwxrwxrwx 1 peter peter      18 Apr 13  2016 csa2.jpg -> ../common/csa2.jpg
-lrwxrwxrwx 1 peter peter      25 Okt  3  2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf
-lrwxrwxrwx 1 peter peter      22 Okt  5  2016 pgslides.sty -> ../common/pgslides.sty
-lrwxrwxrwx 1 peter peter      36 Okt  5  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
-lrwxrwxrwx 1 peter peter      48 Okt  7  2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf
-lrwxrwxrwx 1 peter peter      27 Okt  7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg
--rw-r--r-- 1 peter peter   20247 Okt  7 09:39 es-20211007.tex
--rw-r--r-- 1 peter peter 4220460 Okt  7 09:39 es-20211007.pdf
--rw-r--r-- 1 peter peter     614 Okt  7 17:24 options-1.txt
--rw-r--r-- 1 peter peter     901 Okt  7 17:29 options-2.txt
--rw-r--r-- 1 peter peter      82 Okt  7 17:48 hello.c
--rwxr-xr-x 1 peter peter   16608 Okt  7 17:49 hello
--rw-r--r-- 1 peter peter     987 Okt  7 17:53 path-1.txt
--rw-r--r-- 1 peter peter      38 Okt  7 17:54 ls
-cassini/home/peter/bo/2021ws/es/20211007> chmod +x ls
-cassini/home/peter/bo/2021ws/es/20211007> ls -lrt
-<Fiese Dinge }:->
-insgesamt 4188
-lrwxrwxrwx 1 peter peter      21 Apr 13  2016 floppys.jpg -> ../common/floppys.jpg
-lrwxrwxrwx 1 peter peter      18 Apr 13  2016 csa2.jpg -> ../common/csa2.jpg
-lrwxrwxrwx 1 peter peter      25 Okt  3  2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf
-lrwxrwxrwx 1 peter peter      22 Okt  5  2016 pgslides.sty -> ../common/pgslides.sty
-lrwxrwxrwx 1 peter peter      36 Okt  5  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
-lrwxrwxrwx 1 peter peter      48 Okt  7  2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf
-lrwxrwxrwx 1 peter peter      27 Okt  7 09:37 wetterstation.jpg -> ../common/wetterstation.jpg
--rw-r--r-- 1 peter peter   20247 Okt  7 09:39 es-20211007.tex
--rw-r--r-- 1 peter peter 4220460 Okt  7 09:39 es-20211007.pdf
--rw-r--r-- 1 peter peter     614 Okt  7 17:24 options-1.txt
--rw-r--r-- 1 peter peter     901 Okt  7 17:29 options-2.txt
--rw-r--r-- 1 peter peter      82 Okt  7 17:48 hello.c
--rwxr-xr-x 1 peter peter   16608 Okt  7 17:49 hello
--rw-r--r-- 1 peter peter     987 Okt  7 17:53 path-1.txt
--rwxr-xr-x 1 peter peter      38 Okt  7 17:54 ls
-cassini/home/peter/bo/2021ws/es/20211007> ls
-<Fiese Dinge }:->
-csa2.jpg         hello                                   ls             pgslides.sty
-es-20211007.pdf  hello.c                                 options-1.txt  wetterstation.jpg
-es-20211007.tex  logo-hochschule-bochum-cvh-text-v2.pdf  options-2.txt  Zeichen_123.pdf
-floppys.jpg      logo-hochschule-bochum.pdf              path-1.txt
-cassini/home/peter/bo/2021ws/es/20211007>
diff --git a/20211007/rm-1.txt b/20211007/rm-1.txt
deleted file mode 100644
index db4edce2e268ee084836db9d8b9bae4bdd0ca321..0000000000000000000000000000000000000000
--- a/20211007/rm-1.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 0
--rw-r--r-- 1 peter peter 0 Okt  7 18:36 test
--rw-r--r-- 1 peter peter 0 Okt  7 18:36 test.bla
--rw-r--r-- 1 peter peter 0 Okt  7 18:36 test.blubb
--rw-r--r-- 1 peter peter 0 Okt  7 18:36 test.log
--rw-r--r-- 1 peter peter 0 Okt  7 18:36 test.txt
-cassini/home/peter/bo/2021ws/es/20211007/test> rm *.*
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 0
--rw-r--r-- 1 peter peter 0 Okt  7 18:36 test
-cassini/home/peter/bo/2021ws/es/20211007/test>
diff --git a/20211007/rm-2.txt b/20211007/rm-2.txt
deleted file mode 100644
index 771e3ade2e39048aadc989803f9c42b8d114e55e..0000000000000000000000000000000000000000
--- a/20211007/rm-2.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 0
--rw-r--r-- 1 peter peter 0 Okt  7 18:36 test
--rw-r--r-- 1 peter peter 0 Okt  7 18:38 test.bla
--rw-r--r-- 1 peter peter 0 Okt  7 18:38 test.blubb
--rw-r--r-- 1 peter peter 0 Okt  7 18:38 test.log
--rw-r--r-- 1 peter peter 0 Okt  7 18:38 test.txt
-cassini/home/peter/bo/2021ws/es/20211007/test> rm *
-cassini/home/peter/bo/2021ws/es/20211007/test> ls -l
-insgesamt 0
-cassini/home/peter/bo/2021ws/es/20211007/test>
diff --git a/20211007/test-1.txt b/20211007/test-1.txt
deleted file mode 100644
index d7e5cff47f0303c2d892d3e790e00552759b639c..0000000000000000000000000000000000000000
--- a/20211007/test-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-Dies ist ein Test.
diff --git a/20211007/test-2.txt b/20211007/test-2.txt
deleted file mode 100644
index d89647ad07abd859c580d7695cf152da3bb1468c..0000000000000000000000000000000000000000
--- a/20211007/test-2.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Dies ist noch ein Test.
-Er enthält total wertvolle Daten.
-Wirklich.
diff --git a/20211007/toll b/20211007/toll
deleted file mode 100755
index 6c37e7b94289aca866d7e7c4eabf62050606bc53..0000000000000000000000000000000000000000
--- a/20211007/toll
+++ /dev/null
@@ -1,2 +0,0 @@
-cat test-2.txt
-ls -l test-2.txt
diff --git a/20211014/Zeichen_123.pdf b/20211014/Zeichen_123.pdf
deleted file mode 120000
index fdbc897227df059cfda790a16555e6e417682116..0000000000000000000000000000000000000000
--- a/20211014/Zeichen_123.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/Zeichen_123.pdf
\ No newline at end of file
diff --git a/20211014/c-1.txt b/20211014/c-1.txt
deleted file mode 100644
index 4243e12114637b9a8ca16733cc9275b14d9ffdc3..0000000000000000000000000000000000000000
--- a/20211014/c-1.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> gcc -Wall -O hello.c -o hello
-cassini/home/peter/bo/2021ws/es/20211014> ls -l hello*
--rwxr-xr-x 1 peter peter 16608 Okt 14 16:08 hello
--rwxr-xr-x 1 peter peter    82 Okt 14 16:05 hello.c
-cassini/home/peter/bo/2021ws/es/20211014> cat hello.c
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
-cassini/home/peter/bo/2021ws/es/20211014> cat hello
-ELF>P@`9@8
-          @@@@h���``��   PP�-�=�=HP�-�=�=����DDP�td   <<Q�tdR�td�-�=�=/lib64/ld-linux-x86-64.so.2GNUGNUT��o��z�cԑ�5�^�2���e�m=
-                                Y h "libc.so.6puts__cxa_finalize__libc_start_mainGLIBC_2.2.5_ITM_deregisterTMCloneTable__gmon_start___ITM_registerTMCloneTableui       1�0��((@�?�?�?�?�?@H�H��H�=��f/�DH�=�/H��/H9�tH�>/H��t%�����H�=y/H�5r/H)�H��H��H��?H�H��tH�/H����fD���=9/u/UH�=�.H��tH�=/�-����h����/]�����{���H�H�=�������H�ÐAWI��AVI��AUA��ATL�%�,UH�-�,SL)�H�����H��t�L��L��D��A��H��H9�u�H�[]A\A]A^A_��H�H��Hello, world!;8����,����<���T!����<��������$zR�����+zR�$���� FJ
-                                                                                          �?;*3�������0���DDtX���]B�E�E �E(�H0�H8�G@j8A0A(B BB�p���0�
-�
- @H�    ������oh���o���oZ���o�=6(@GCC: (Debian 8.3.0-6) 8.3.0��0�h      �
-H
-@P�  P �=�=�=�?@ @0@����!�70@F�=m0y�=������L!����=��=��=� �@�
-                                                             � j  @0B0@�Ih @u �(@� �P]�8@nP+�0@�5�0@� �"crtstuff.cderegister_tm_clones__do_global_dtors_auxcompleted.7325__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryhello.c__FRAME_END____init_array_end_DYNAMIC__init_array_start__GNU_EH_FRAME_HDR_GLOBAL_OFFSET_TABLE___libc_csu_fini_ITM_deregisterTMCloneTableputs@@GLIBC_2.2.5_edata__libc_start_main@@GLIBC_2.2.5__data_start__gmon_start____dso_handle_IO_stdin_used__libc_csu_init__bss_startmain__TMC_END___ITM_registerTMCloneTable__cxa_finalize@@GLIBC_2.2.5.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.got.text.fini.rodata.eh_frame_hdr.eh_frame.init_array.fini_array.dynamic.got.plt.data.bss.comment��#�� 1��$D��No
-                                                                              00V���^���oZZk���ohhz���BH��   �PPa���   �  �  <�P P������=�-��?��@� @ 0@0�000P0-P6S8cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/chmod-1.txt b/20211014/chmod-1.txt
deleted file mode 100644
index 3790dfb5e217fa28be5c2e56b8fe8e5c2a1da023..0000000000000000000000000000000000000000
--- a/20211014/chmod-1.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> echo "ls -l" > ll
-cassini/home/peter/bo/2021ws/es/20211014> ./ll
-bash: ./ll: Keine Berechtigung
-cassini/home/peter/bo/2021ws/es/20211014> ls -l ll
--rw-r--r-- 1 peter peter 6 Okt 14 16:02 ll
-cassini/home/peter/bo/2021ws/es/20211014> chmod +x ll
-cassini/home/peter/bo/2021ws/es/20211014> ls -l ll
--rwxr-xr-x 1 peter peter 6 Okt 14 16:02 ll
-cassini/home/peter/bo/2021ws/es/20211014> ./ll
-insgesamt 212
--rw-r--r-- 1 peter peter 162254 Okt 14 10:41 es-20211014.pdf
--rw-r--r-- 1 peter peter  23811 Okt 14 10:41 es-20211014.tex
--rwxr-xr-x 1 peter peter      6 Okt 14 16:02 ll
-lrwxrwxrwx 1 peter peter     48 Okt  7  2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf
-lrwxrwxrwx 1 peter peter     36 Okt  5  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
-lrwxrwxrwx 1 peter peter     22 Okt  5  2016 pgslides.sty -> ../common/pgslides.sty
-drwxr-xr-x 2 peter peter   4096 Okt 14 15:47 test
--rw-r--r-- 1 peter peter     19 Okt 14 15:43 test-1.txt
--rw-r--r-- 1 peter peter     11 Okt 14 15:43 test-2.txt
--rw-r--r-- 1 peter peter    828 Okt 14 15:42 wildcards-1.txt
--rw-r--r-- 1 peter peter    589 Okt 14 15:45 wildcards-2.txt
--rw-r--r-- 1 peter peter    352 Okt 14 15:47 wildcards-3.txt
-lrwxrwxrwx 1 peter peter     25 Okt  3  2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/chmod-2.txt b/20211014/chmod-2.txt
deleted file mode 100644
index 915307690ac55973304017e683406aecb2ab1e38..0000000000000000000000000000000000000000
--- a/20211014/chmod-2.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
-cassini/home/peter/bo/2021ws/es/20211014> ls -l hello.c
--rw-r--r-- 1 peter peter 82 Okt 14 16:05 hello.c
-cassini/home/peter/bo/2021ws/es/20211014> chmod +x hello.c
-cassini/home/peter/bo/2021ws/es/20211014> ./hello.c
-./hello.c: Zeile 3: Syntaxfehler beim unerwarteten Wort `('
-./hello.c: Zeile 3: `int main (void)'
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/es-20211014.pdf b/20211014/es-20211014.pdf
deleted file mode 100644
index 8b4016eb0b216da6b78bb40b1c1c03d2a4166391..0000000000000000000000000000000000000000
Binary files a/20211014/es-20211014.pdf and /dev/null differ
diff --git a/20211014/es-20211014.tex b/20211014/es-20211014.tex
deleted file mode 100644
index 8a408396a3b1c8e80f86643ee639f56fd6b4171a..0000000000000000000000000000000000000000
--- a/20211014/es-20211014.tex
+++ /dev/null
@@ -1,953 +0,0 @@
-% es-20211014.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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: Unix-Kommandozeile: Links, Ein- und Ausgabeströme, Pipes
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{tikz}
-
-\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{14.\ Oktober 2021}
-
-\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}}}%
-      \begin{itemize}
-        \color{medgreen}
-        \item[1.1] Was sind eingebettete Systeme?
-        \item[1.2] Vertiefung Systemtechnik
-        \item[1.3] In dieser Lehrveranstaltung
-      \end{itemize}
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-      \begin{itemize}
-        \color{medgreen}
-        \item[2.1] Grundkonzepte
-        \item[2.2] Die Kommandozeile: Grundlagen
-        \color{orange}
-        \item[2.3] Dateisysteme
-        \color{red}
-        \item[2.4] Ein- und Ausgabeströme
-        \item[2.5] Pipes
-        \item[2.6] Verzweigungen und Schleifen
-%        \item[\dots]
-      \end{itemize}
-    \color{gray}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-%  \vspace*{-1cm plus 1filll}
-
-%  \underconstruction
-
-\end{frame}
-
-\sectionnonumber{Was sind eingebettete Systeme?}
-
-\begin{frame}
-
-  \showsectionnonumber
-
-  \emph{Der Ausdruck \textbf{\newterm{eingebettetes System\/}} (\dots\,) bezeichnet
-        einen elektronischen Rechner oder auch Computer,
-        der in einen technischen Kontext eingebunden (eingebettet) ist.}
-  \vspace*{-0.5cm}
-  \begin{flushright}
-    \url{https://de.wikipedia.org/wiki/Eingebettetes_System}
-  \end{flushright}
-
-  \begin{itemize}
-%    \pause
-    \item
-      \emph{keine\/} Aussage über die Größe
-%    \pause
-    \item
-      in der Praxis: so klein wie möglich, z.\,B.:
-%      \only<4>{\vspace*{-3.3cm}\hspace*{0.7cm}\includegraphics[height=8cm]{csa2.jpg}\hspace*{-1cm}\vspace*{-8cm}}
-%    \pause
-%    \pause
-      \begin{itemize}
-        \item
-          mehrere Rechnerschränke
-        \item
-          Industrie-PC
-        \item
-          Einplatinencomputer
-        \item
-          Mikro-Controller
-      \end{itemize}
-%    \pause
-    \item
-      Bedienung über spezielle Ein-/Ausgabegeräte (z.\,B.\ Flugsimulator, Telefon)
-%    \pause
-    \item
-      Wartung über speziellen Adminstrator-Zugang
-      \begin{itemize}
-        \item
-          Bus-Schnittstelle (RS-232, CAN-BUS)
-        \item
-          Netzwerk (TCP/IP, Ethernet oder WLAN)
-      \end{itemize}
-%    \pause
-    \item
-      Programmierung oft außerhalb des Systems\\
-      (Cross-Entwicklungswerkzeuge)
-  \end{itemize}
-  \vspace*{-1cm}
-
-\end{frame}
-
-\sectionnonumber{In dieser Lehrveranstaltung}
-
-\begin{frame}
-
-  \showsectionnonumber
-  \vspace*{-\medskipamount}
-  \begin{itemize}
-    \item
-      Einführung in Unix
-    \item
-      TCP/IP und Bus-Systeme in der Praxis
-    \item
-      C-Programmierung für Fortgeschrittene
-    \item
-      Echtzeit-Systeme in Theorie und Praxis
-    \medskip
-    \item
-      Prüfungsleistung: Projektaufgabe\\
-      Eingebettetes System eigener Wahl zum Laufen bringen
-    \arrowitem
-      {\color{red}Projektaufgabe überlegen}
-  \end{itemize}
-
-  \bigskip
-
-  Ideen:
-  \begin{itemize}
-    \item
-      Steuerung von Robotern
-    \item
-      Smart Home
-    \item
-      Smartphone im Selbstbau
-    \item
-      Verbesserungen an unseren Online-Werkzeugen\\für Lehre und Home-Office
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{1}
-\section{Einführung in Unix}
-
-\subsection{Grundkonzepte}
-
-\begin{frame}
-
-  \begin{minipage}[b]{6.5cm}
-    \showsection
-    \vspace{-\medskipamount}
-    \showsubsection
-  \end{minipage}
-
-  \begin{description}
-    \addtolength{\leftskip}{-1cm}
-    \item[1965]
-      Vorgänger: Multics (Multiplexed Information and Computing Service)\\
-      "`überladen"'
-    \item[1970]
-      Unix: Einfachheit als Grundkonzept
-    \item[1972]
-      Umstellung auf neu entwickelte Programmiersprache C
-    \item[1975]
-      AT\&T: Unix inkl.\ Quelltext für Universitäten
-    \item[1977]
-      Berkeley Software Distribution (BSD)
-    \item[1983]
-      GNU-Projekt
-    \item[1987]
-      Minix
-    \item[1991]
-      Linux
-    \item[1993]
-      FreeBSD, NetBSD
-    \item[1994]
-      OpenBSD
-    \item[2000]
-      Darwin (Mac OS X, BSD-basiert)
-    \item[2008]
-      Android (Linux-basiert)
-  \end{description}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \begin{minipage}[b]{6.5cm}
-    \showsection
-    \vspace{-\medskipamount}
-    \showsubsection
-
-    Unix und C: Einfachheit als Grundkonzept
-%    \vspace{-\bigskipamount}
-    \begin{itemize}
-      \item
-        Vermeiden von Ausnahmen
-      \item[\color{lightgray}$\bullet$]
-        \color{lightgray}Baukastensystem
-    \end{itemize}
-  \end{minipage}\hspace*{0.5cm}%
-  \begin{minipage}[b]{5cm}
-    \small
-    C: Hauptprogramm\\
-    = "`normale"' Funktion
-
-    \medskip
-
-    \begin{lstlisting}[gobble=6]
-      int main (int argc, char **argv)
-      {
-        printf ("Hello, world!\n");
-        return 0;
-      }
-    \end{lstlisting}
-    \vspace{-\bigskipamount}
-  \end{minipage}
-
-  \bigskip
-  \bigskip
-
-  Unix: übergeordnetes Verzeichnis = "`normales"' Verzeichnis
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    cassini/home/peter/foo> ¡ls -la¿
-    insgesamt 24
-    drwxr-xr-x   2 peter peter  4096 Okt  6 13:30 .
-    drwxr-xr-x 172 peter peter 20480 Okt  6 13:30 ..
-    cassini/home/peter/foo> ¡cd ..¿
-    cassini/home/peter>
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \begin{minipage}[b]{6.5cm}
-    \showsection
-    \vspace{-\medskipamount}
-    \showsubsection
-
-    Unix und C: Einfachheit als Grundkonzept
-%    \vspace{-\bigskipamount}
-    \begin{itemize}
-      \item
-        Vermeiden von Ausnahmen
-      \item
-        Baukastensystem
-    \end{itemize}
-  \end{minipage}%
-  \begin{minipage}[b]{5.5cm}
-    \small
-    C: Bibliotheken
-    
-    \smallskip
-
-    z.\,B.: \lstinline{printf()} = "`normale"' Funktion\\
-    aus eine Bibliothek (\file{libc})
-  \end{minipage}
-
-  \bigskip
-  \bigskip
-
-  Unix: Programme arbeiten zusammen
-
-  \medskip
-
-  \begingroup\small
-
-  \begin{lstlisting}[style=terminal]
-    cassini/home/peter/bo> ¡find . -name "*klausur*.tex" \
-      | xargs grep -l "PBM-Datei"¿
-    ./2014ws/ainf/20150130.0/ainf-klausur-20150130.tex
-    ./2016ws/hp/20170920.0/klausur.tex
-    ./2016ws/hp/20170206.0/klausur.tex
-    ./2011ws/rarch/20120322.0/rarch-klausur-20120322.tex
-    ./2012ws/klausuren-gerwinski/rarch-klausur-20120322.tex
-    ./2013ws/ainf/20140918.0/ainf-klausur-20140918.tex
-    ./2017ws/hp/20180213.k1/klausur.tex
-    ./2017ws/hp/20180205/klausur.tex
-    ./2015ws/ainf/20160913/ainf-klausur-20160913.tex
-  \end{lstlisting}
-
-  \endgroup
-
-\end{frame}
-
-\subsection{Die Kommandozeile: Grundlagen}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Programm aufrufen: Namen eingeben, z.\,B.: \lstinline[style=cmd]{ls}
-    \item
-      Optionen: \lstinline[style=cmd]{ls -l}
-    \item
-      Lange Optionen (GNU-Konvention): \lstinline[style=cmd]{ls --help}
-    \medskip
-    \item
-      Text schreiben: \lstinline[style=cmd]{echo "Hello, world!"}
-    \item
-      (String-)Variable setzen: \lstinline[style=cmd]{FOO=bar}
-    \item
-      Variable abrufen: \lstinline[style=cmd]{echo $FOO}
-  \end{itemize}
-
-%  \pause
-  \begin{lstlisting}[style=terminal]
-    cassini/home/peter/bo> ¡FOO=ls¿
-    cassini/home/peter/bo> ¡echo $FOO¿
-    ls
-    cassini/home/peter/bo> ¡$FOO¿
-    2011ws  2012ws  2013ws  doc       misc  projekte
-    2012ss  2013ss  briefe  material  orga
-    cassini/home/peter/bo>
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Befehl zurückholen: Pfeiltasten $\uparrow$, $\downarrow$
-    \item
-      Befehl bearbeiten: Pfeiltasten $\leftarrow$, $\rightarrow$ usw.
-    \item
-      Befehl vervollständigen: TAB
-    \item
-      Befehl rückwärts suchen: Ctrl+R
-    \item
-      Bildschirm löschen: Ctrl+L
-    \item
-      Befehl abbrechen: Ctrl+C
-    \bigskip
-%    \pause
-    \item
-      Hilfe-Option: \lstinline[style=cmd]{ls --help}
-    \item
-      Unix-Handbuch -- \emph{manual\/}: \lstinline[style=cmd]{man ls}\\
-      (Beenden mit \lstinline[style=cmd]{q})
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Verzeichnisse für Programme: \lstinline[style=cmd]{echo $PATH}
-    \item
-      Programm in explizitem Verzeichnis aufrufen: \lstinline[style=cmd]{/bin/ls -l}
-    \item
-      Programm im aktuellen Verzeichnis aufrufen: \lstinline[style=cmd]{./hello}
-    \bigskip
-
-    \addtolength{\leftskip}{1cm}
-    \item[MS-DOS:]
-      Ausführbare Programme werden gefunden,\\
-      wenn sie im \lstinline[style=terminal]{PATH} stehen\\
-      \emph{oder\/} sich im aktuellen Verzeichnis befinden.
-    \smallskip
-    \item[Unix:]
-      Ausführbare Programme werden gefunden,\\
-      wenn sie im \lstinline[style=terminal]{PATH} stehen.
-      
-      \smallskip
-      \textarrow\ Vermeiden von Ausnahmen
-
-%      \pause
-      \smallskip
-      Das aktuelle Verzeichnis (\lstinline[style=terminal]{.})
-      \emph{kann\/} im \lstinline[style=terminal]{PATH} stehen,\\
-      muß dies aber nicht --\\
-      und sollte es aus Sicherheitsgründen auch nicht.
-
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Dateisysteme}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Dateien listen: \lstinline[style=cmd]{ls}\\
-      langes Listenformat: \lstinline[style=cmd]{ls -l}\\
-      rückwärts nach Zeit sortiert: \lstinline[style=cmd]{ls -lrt}
-    \item
-      Datei ausgeben: \lstinline[style=cmd]{cat hello.c}
-    \item
-      Datei anzeigen: \lstinline[style=cmd]{less hello.c}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Arbeitsverzeichnis anzeigen: \lstinline[style=cmd]{pwd}\\
-    \item
-      Arbeitsverzeichnis wechseln: \lstinline[style=cmd]{cd script}\\
-      (\emph{kein\/} Programm, sondern Shell-Befehl)
-    \item
-      übergeordnetes Verzeichnis: \lstinline[style=cmd]{cd ..}
-    \item
-      eigenes \newterm{Home-\/}Verzeichnis: \lstinline[style=cmd]{cd}
-    \item
-      Wurzelverzeichnis: \lstinline[style=cmd]{cd /}
-    \item
-      wieder zurück: \lstinline[style=cmd]{cd -}
-  \end{itemize}
-
-%  \pause
-  \begin{lstlisting}[style=terminal]
-    cassini/home/peter/bo/2013ss/net/script> ¡cd /usr/bin¿
-    cassini/usr/bin> ¡cd ../lib¿
-    cassini/usr/lib> ¡cd¿
-    cassini/home/peter>
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Dateien kopieren (\emph{copy\/}): \lstinline[style=cmd]{cp}
-    \item
-      Dateien verschieben/umbenennen (\emph{move\/}): \lstinline[style=cmd]{mv}
-    \item
-      Dateien löschen (\emph{remove\/}): \lstinline[style=cmd]{rm}
-  \end{itemize}
-
-  \begin{lstlisting}[style=terminal,xleftmargin=-3pt]
-    cassini/home/peter> ¡cp -p foo/test.txt¿
-    cp: missing destination file operand after `foo/test.txt'
-    Try `cp --help' for more information.
-    cassini/home/peter> ¡cp -p foo/test.txt .¿
-    cassini/home/peter> ¡mv test.txt bla.txt¿
-    cassini/home/peter> ¡cat bla.txt¿
-    Dies ist ein Test.
-    cassini/home/peter> ¡rm bla.txt¿
-    cassini/home/peter>
-  \end{lstlisting}
-
-  \medskip
-
-  Aktuelles Verzeichnis: \lstinline[style=cmd]{.}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Datenträger in Verzeichnis \newterm{einhängen\/}: \lstinline[style=cmd]{mount}
-  \end{itemize}
-
-  \begin{lstlisting}[style=terminal]
-    cassini/home/peter> ¡ls /media/usb1/¿
-    cassini/home/peter> ¡mount /media/usb1¿
-    cassini/home/peter> ¡ls /media/usb1/¿
-    es-20191002.pdf  hello.c  hexapode  KIS-Bericht.pdf
-    cassini/home/peter> ¡umount /media/usb1¿
-    cassini/home/peter> ¡ls /media/usb1/¿
-    cassini/home/peter>
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \newterm{Zugriffsrechte}
-  \end{itemize}
-
-  \begingroup
-%    \small
-    \begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt]
-      cassini/home/peter/bo/2019ws/es/20191009> ¡ls -l¿
-      ...
-      -rw-r--r-- 1 peter peter 24523 Okt  8 21:47 es-20191009.tex
-    \end{lstlisting}
-  \endgroup
-  \begin{onlyenv}<2>
-    \begin{picture}(0,1)
-      \color{red}
-      \put(0.3,0){\tikz{\draw[-latex,red](0,0)--(0,1);
-                        \draw[-latex,red](0,0)--(2.5,1);}}
-      \put(0,-0.1){\makebox(0,0)[tl]{Benutzer (u -- \emph{user\/}) darf lesen und schreiben}}
-    \end{picture}
-  \end{onlyenv}
-  \begin{onlyenv}<3>
-    \begin{picture}(0,1)
-      \color{red}
-      \put(0.84,0){\tikz{\draw[-latex,red](0,0)--(0,1);
-                        \draw[-latex,red](0,0)--(3.2,1);}}
-      \put(0,-0.1){\makebox(0,0)[tl]{Gruppe (g -- \emph{group\/}) darf lesen}}
-    \end{picture}
-  \end{onlyenv}
-  \begin{onlyenv}<4>
-    \begin{picture}(0,1)
-      \color{red}
-      \put(1.47,0){\tikz{\draw[-latex,red](0,0)--(0,1);}}
-      \put(0,-0.1){\makebox(0,0)[tl]{alle anderen (o -- \emph{other\/}) dürfen lesen}}
-    \end{picture}
-  \end{onlyenv}
-
-  \medskip
-  \pause[5]
-  \begin{itemize}
-    \item
-      Zugriffsrechte ändern:\\
-      \lstinline[style=cmd]{chmod o-r es-20191009.tex} -- Lesezugriff entziehen\\
-      \lstinline[style=cmd]{chmod g+w es-20191009.tex} -- Schreibzugriff gewähren\\
-      \lstinline[style=cmd]{chmod 640 es-20191009.tex} --
-      auf \lstinline[style=terminal]{-}%
-          \lstinline[style=terminal]{rw-}%
-          \lstinline[style=terminal]{r--}%
-          \lstinline[style=terminal]{---} setzen
-  \end{itemize}
-  \pause
-  \begin{picture}(0,0)
-    \color{red}
-    \put(7.22,0.55){\makebox(0,0)[tl]{%
-      \small
-      \begin{math}%
-        \underbrace{\rule{0.7em}{0pt}}_{\textstyle 6}%
-        \underbrace{\rule{0.7em}{0pt}}_{\textstyle 4}%
-        \underbrace{\rule{0.7em}{0pt}}_{\textstyle 0}
-      \end{math}}}
-  \end{picture}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \newterm{ausführbare\/} Dateien
-  \end{itemize}
-
-  \begingroup
-%    \small
-    \begin{lstlisting}[style=terminal,gobble=6,xleftmargin=-3pt]
-      cassini/home/peter/bo/2019ws/es/20191002> ¡cat test2.txt¿
-      ls -l
-      cassini/home/peter/bo/2019ws/es/20191002> ¡chmod +x test2.txt¿
-      cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l test2.txt¿
-      -rwxr-xr-x 1 peter peter 6 Okt  2 13:43 test2.txt
-      cassini/home/peter/bo/2019ws/es/20191002> ¡./test2.txt¿
-      insgesamt 4828
-      lrwxrwxrwx 1 peter peter      18 Apr 13  2016 csa2.jpg -> ../common/csa2.jpg
-      -rw-r--r-- 1 peter peter 4619138 Okt  8 21:28 es-20191002.pdf
-      ...
-    \end{lstlisting}
-  \endgroup
-
-%  \pause
-  \begin{itemize}
-    \item
-      ausführbare Textdateien: \newterm{Skripte}
-
-%      \pause
-      \smallskip
-      hier: ausführbare Textdatei mit Shell-Befehlen\\
-      (ohne spezielle Kennung): Shell-Skript
-
-      \pause
-      \smallskip
-      Kennung: 1.\ Zeile enthält \lstinline[style=terminal]{#!} und den Interpreter,\\
-      z.\,B.\ \lstinline[style=terminal]{#!/bin/bash}\\
-  \end{itemize}
-
-\end{frame}
-
-\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}}}%
-      \begin{itemize}
-        \color{medgreen}
-        \item[1.1] Was sind eingebettete Systeme?
-        \item[1.2] Vertiefung Systemtechnik
-        \item[1.3] In dieser Lehrveranstaltung
-      \end{itemize}
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-      \begin{itemize}
-        \color{medgreen}
-        \item[2.1] Grundkonzepte
-        \item[2.2] Die Kommandozeile: Grundlagen
-        \color{orange}
-        \item[2.3] Dateisysteme
-        \color{red}
-        \item[2.4] Ein- und Ausgabeströme
-        \item[2.5] Pipes
-        \item[2.6] Verzweigungen und Schleifen
-      \end{itemize}
-    \color{gray}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-%  \vspace*{-1cm plus 1filll}
-
-%  \underconstruction
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \newterm{Symbolische Verknüpfungen -- symbolic links}
-
-      \smallskip
-
-      Verweis auf die eigentliche Datei\\
-      \textarrow\ Wenn man die Datei löscht, zeigt der Link ins Leere.
-
-      \smallskip
-
-      Verknüpfung anlegen: \lstinline[style=cmd]{ln -s datei link}\\
-      (Richtung: wie bei \lstinline[style=cmd]{cp})
-
-      \smallskip
-
-      Beispiel: \lstinline[style=cmd]{ln -s ../common/GNU-GPL-3 gpl.txt}
-    \pause
-    \medskip
-    \item
-      \newterm{Harte Verknüpfungen -- hard links}
-
-      \smallskip
-      
-      Dieselben Daten auf dem Datenträger\\
-      sind unter mehreren Namen verfügbar.\\
-      \textarrow\ Wenn man einen löscht, sind die Daten noch da.
-
-      \smallskip
-
-      \begingroup
-        \begin{lstlisting}[style=terminal,gobble=10,xleftmargin=-3pt]
-          cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l¿
-          ...
-          -rw-r--r-- 1 peter peter    1202 Okt  2 13:35 shell-06.txt
-          drwxr-xr-x 2 peter peter    4096 Okt  2 13:16 test
-        \end{lstlisting}
-      \endgroup
-      \begin{picture}(0,0.5)
-        \color{red}
-        \put(2.31,0){\tikz{\draw[-latex,red](0,0)--(0,0.5);}}
-        \put(0,-0.1){\makebox(0,0)[tl]{Anzahl der ("`harten"') Links
-                                       auf diese Datei / dieses Verzeichnis}}
-      \end{picture}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{grep}: Dateien durchsuchen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal,xleftmargin=-3pt]
-    cassini/home/peter/bo/2019ws/es/20191002> ¡grep gcc *.txt¿
-    shell-03.txt: cassini/...> gcc -Wall -O hello.c -o hello
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{find}: Dateien anhand ihrer Eigenschaften suchen
-  \end{itemize}
-
-%  \small
-  \begin{lstlisting}[style=terminal]
-    $ ¡find . -name "*.txt"¿
-    ./shell-06.txt
-    ./shell-03.txt
-    ./shell-05.txt
-    ./test.txt
-    ./test/test.txt
-    ...
-    $ ¡find . -name "*.txt" -perm /u+x¿
-    ./test2.txt
-    $ ¡find . -name "*.txt" -perm /u+x -exec ls -l {} \;¿
-    -rwxr-xr-x 1 peter peter 6 Okt  2 13:43 ./test2.txt
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Ein- und Ausgabeströme}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Standard-Ausgabe in Datei umleiten
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "Dies ist ein Test." > test.txt¿
-    $ ¡cat test.txt¿
-    Dies ist ein Test.
-  \end{lstlisting}
-
-  \pause
-  \smallskip
-
-  \begin{itemize}
-    \item
-      Standard-Ausgabe an Datei anhängen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "Dies ist noch ein Test." >> test.txt¿
-    $ ¡cat test.txt¿
-    Dies ist ein Test.
-    Dies ist noch ein Test.
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Fehler-Ausgabe in Datei umleiten
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡cat gibtsnicht.txt > fehler.txt¿
-    cat: gibtsnicht.txt: No such file or directory
-    $ ¡cat fehler.txt¿
-    $ ¡cat gibtsnicht.txt 2> fehler.txt¿
-    $ ¡cat fehler.txt¿
-    cat: gibtsnicht.txt: No such file or directory
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Standard-Eingabe aus Datei lesen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡bc¿
-    bc 1.06.95
-    Copyright [...] 2006 Free Software Foundation, Inc.
-    This is free software with ABSOLUTELY NO WARRANTY.
-    For details type `warranty'.
-    ¡2 + 2¿
-    4
-    $ ¡echo "2 + 2" > test.bc¿
-    $ ¡bc < test.bc¿
-    4
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Pipes}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Standard-Ausgabe von Programm A\\
-  wird zu Standard-Eingabe von Programm B
-
-  \smallskip
-
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "2 + 2" | bc¿
-    4
-  \end{lstlisting}
-
-  \smallskip
-
-  \textarrow\ sehr mächtiger "`Baukasten"'
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{sed}: \emph{stream editor}\\
-      Suchen und Ersetzen (und noch viel mehr)
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿
-    Schlimmer geht immer.
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡ls | grep slides¿
-    pgslides.sty
-    $ ¡ls *.pdf | grep -v logo¿
-    es-20191002.pdf
-    Zeichen_123.pdf
-    $ ¡ls -l $(ls *.pdf | grep -v logo)¿
-    -rw-r--r-- 1 ... 4619138 Okt 8 21:28 es-20191002.pdf
-    lrwxrwxrwx 1 ...      25 Okt 3  2016 Zeichen_123.pdf -> ...
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Verzweigungen und Schleifen}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{lstlisting}[style=terminal]
-    $ ¡if grep Blubb test.txt; then echo "gefunden"; \
-      else echo "nicht gefunden"; fi¿
-    nicht gefunden
-    $ ¡for x in foo bar baz; do echo $x; done¿
-    foo
-    bar
-    baz
-  \end{lstlisting}
-
-\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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-      \begin{itemize}
-        \item[2.1] Grundkonzepte
-        \item[2.2] Die Kommandozeile: Grundlagen
-        \color{medgreen}
-        \item[2.3] Dateisysteme
-        \item[2.4] Ein- und Ausgabeströme
-        \item[2.5] Pipes
-        \item[2.6] Verzweigungen und Schleifen
-      \end{itemize}
-    \color{red}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-%  \vspace*{-1cm plus 1filll}
-
-%  \underconstruction
-
-\end{frame}
-
-\end{document}
diff --git a/20211014/fehler.txt b/20211014/fehler.txt
deleted file mode 100644
index be6e4a2f52986509e117253929140d3be3fb88bc..0000000000000000000000000000000000000000
--- a/20211014/fehler.txt
+++ /dev/null
@@ -1 +0,0 @@
-cat: gibtsnicht.txt: Datei oder Verzeichnis nicht gefunden
diff --git a/20211014/find-1.txt b/20211014/find-1.txt
deleted file mode 100644
index 7ec6bf023cb3a3938e044a5bfcf59f49e1c27fc0..0000000000000000000000000000000000000000
--- a/20211014/find-1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cassini/home/peter/bo/2021ws/es> find . -name "test*"
-./20211014/test-3.txt
-./20211014/test
-./20211014/test-1.txt
-./20211014/test-2.txt
-./20211014/test-4.txt
-./20211007/test
-./20211007/test-1.txt
-./20211007/test-2.txt
diff --git a/20211014/find-2.txt b/20211014/find-2.txt
deleted file mode 100644
index fc13098141dbcaafcbedc578d7da1785a49f77de..0000000000000000000000000000000000000000
--- a/20211014/find-2.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-cassini/home/peter/bo/2021ws/es> find . -name test*
-./20211014/test-3.txt
-./20211014/test
-./20211014/test-1.txt
-./20211014/test-2.txt
-./20211014/test-4.txt
-./20211007/test
-./20211007/test-1.txt
-./20211007/test-2.txt
-cassini/home/peter/bo/2021ws/es>
diff --git a/20211014/find-3.txt b/20211014/find-3.txt
deleted file mode 100644
index 828096b5780a13154bf15696d3f5a85eb921b8a4..0000000000000000000000000000000000000000
--- a/20211014/find-3.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-cassini/home/peter/bo/2021ws/es> ls
-20211007  20211014  common  es-slides-2021ws.pdf  find-1.txt  find-2.txt  README.md  update
-cassini/home/peter/bo/2021ws/es> find . -name find*
-find: paths must precede expression: `find-2.txt'
-find: possible unquoted pattern after predicate `-name'?
-cassini/home/peter/bo/2021ws/es> echo find . -name find*
-find . -name find-1.txt find-2.txt
-cassini/home/peter/bo/2021ws/es>
diff --git a/20211014/find-4.txt b/20211014/find-4.txt
deleted file mode 100644
index fcd9bfa18b1e440a3a0785252af7978815ac696a..0000000000000000000000000000000000000000
--- a/20211014/find-4.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2021ws/es> find . -name "*.txt" -perm /u+x
-./20211014/test-3.txt
-cassini/home/peter/bo/2021ws/es> ls -l ./20211014/test-3.txt
-lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 ./20211014/test-3.txt -> test-1.txt
-cassini/home/peter/bo/2021ws/es> 20211014/test-3.txt
-bash: 20211014/test-3.txt: Keine Berechtigung
-cassini/home/peter/bo/2021ws/es> find . -name "*.txt" -type f -perm /u+x
-cassini/home/peter/bo/2021ws/es> find . -name "*.sh" -type f -perm /u+x
-./20211014/script-2.sh
-./20211014/script-1.sh
-cassini/home/peter/bo/2021ws/es>
diff --git a/20211014/for-1.txt b/20211014/for-1.txt
deleted file mode 100644
index fd86ec89417e3ce8671169cf64196e2b2497b427..0000000000000000000000000000000000000000
--- a/20211014/for-1.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> for x in foo bar baz; do echo $x; done
-foo
-bar
-baz
-cassini/home/peter/bo/2021ws/es/20211014> seq
-seq: fehlender Operand
-„seq --help“ liefert weitere Informationen.
-cassini/home/peter/bo/2021ws/es/20211014> seq 3
-1
-2
-3
-cassini/home/peter/bo/2021ws/es/20211014> seq 5
-1
-2
-3
-4
-5
-cassini/home/peter/bo/2021ws/es/20211014> ls test*.txt
-test-1.txt  test-2.txt  test-3.txt  test-4.txt  test-5.txt  test-6.txt
-cassini/home/peter/bo/2021ws/es/20211014> seq 7 10
-7
-8
-9
-10
-cassini/home/peter/bo/2021ws/es/20211014> for x in $(seq 7 10); do echo "Test" > test-$x.txt; done
-cassini/home/peter/bo/2021ws/es/20211014> ls test*.txt                                         test-10.txt  test-2.txt  test-4.txt  test-6.txt  test-8.txt
-test-1.txt   test-3.txt  test-5.txt  test-7.txt  test-9.txt
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/grep-1.txt b/20211014/grep-1.txt
deleted file mode 100644
index 61db19087099360876bafa320cba1632e46024f0..0000000000000000000000000000000000000000
--- a/20211014/grep-1.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> grep "^[Tt]est" *.txt
-cassini/home/peter/bo/2021ws/es/20211014> grep "[Tt]est$" *.txt
-chmod-1.txt:drwxr-xr-x 2 peter peter   4096 Okt 14 15:47 test
-wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> mkdir test
-wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> cd test
-wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014> cd test
-cassini/home/peter/bo/2021ws/es/20211014> grep "[Tt]est.$" *.txt
-links-1.txt:Dies ist ein Test.
-links-1.txt:Dies ist ein Test.
-links-1.txt:Dies ist ein Test.
-links-1.txt:Dies ist ein besonders schöner Test.
-links-2.txt:Dies ist ein besonders schöner Test.
-links-2.txt:Dies ist ein Test.
-links-3.txt:Dies ist ein Test.
-test-1.txt:Dies ist ein Test.
-test-3.txt:Dies ist ein Test.
-test-4.txt:Dies ist ein Test.
-wildcards-1.txt:Dies ist ein Test.
-wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014/test>
-wildcards-3.txt:cassini/home/peter/bo/2021ws/es/20211014/test>
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/grep-2.txt b/20211014/grep-2.txt
deleted file mode 100644
index 67bcf542566b674efb5a7659b9a83e3f3277c138..0000000000000000000000000000000000000000
--- a/20211014/grep-2.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> grep -i "[Dd]ies.*[Tt]est" *.txt
-grep-1.txt:links-1.txt:Dies ist ein Test.
-grep-1.txt:links-1.txt:Dies ist ein Test.
-grep-1.txt:links-1.txt:Dies ist ein Test.
-grep-1.txt:links-1.txt:Dies ist ein besonders schöner Test.
-grep-1.txt:links-2.txt:Dies ist ein besonders schöner Test.
-grep-1.txt:links-2.txt:Dies ist ein Test.
-grep-1.txt:links-3.txt:Dies ist ein Test.
-grep-1.txt:test-1.txt:Dies ist ein Test.
-grep-1.txt:test-3.txt:Dies ist ein Test.
-grep-1.txt:test-4.txt:Dies ist ein Test.
-grep-1.txt:wildcards-1.txt:Dies ist ein Test.
-links-1.txt:Dies ist ein Test.
-links-1.txt:Dies ist ein Test.
-links-1.txt:Dies ist ein Test.
-links-1.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt
-links-1.txt:Dies ist ein besonders schöner Test.
-links-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt
-links-2.txt:Dies ist ein besonders schöner Test.
-links-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt               cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt
-links-2.txt:Dies ist ein Test.
-links-3.txt:Dies ist ein Test.
-test-1.txt:Dies ist ein Test.
-test-3.txt:Dies ist ein Test.
-test-4.txt:Dies ist ein Test.
-wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt
-wildcards-1.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt
-wildcards-1.txt:Dies ist ein Test.
-wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt
-wildcards-2.txt:cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/grep-3.txt b/20211014/grep-3.txt
deleted file mode 100644
index 3094dcc08633849229c1777c1d42285e9fbc8c23..0000000000000000000000000000000000000000
--- a/20211014/grep-3.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> grep "public key" index.html
-<tr><td><a href="peter-gerwinski.public-key.asc">GnuPG public key:<code><br>2CFD EA6C 31E6 12A0 BFFF<br>2451 D955 0227 6224 E7F5</code></a></td></tr>
-cassini/home/peter/bo/2021ws/es/20211014> grep "href=\".*\".*public key" index.html
-<tr><td><a href="peter-gerwinski.public-key.asc">GnuPG public key:<code><br>2CFD EA6C 31E6 12A0 BFFF<br>2451 D955 0227 6224 E7F5</code></a></td></tr>
-cassini/home/peter/bo/2021ws/es/20211014> grep -o "href=\".*\".*public key" index.html
-href="peter-gerwinski.public-key.asc">GnuPG public key
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/hello-1.c b/20211014/hello-1.c
deleted file mode 100644
index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000
--- a/20211014/hello-1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
diff --git a/20211014/hello-2.c b/20211014/hello-2.c
deleted file mode 100644
index ad00a77d2f568db1c8e32ecc56a6dd5a38970db8..0000000000000000000000000000000000000000
--- a/20211014/hello-2.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hallo, Welt!\n");
-  return 0;
-}
diff --git a/20211014/hello-3.c b/20211014/hello-3.c
deleted file mode 100644
index 45a6c793407abd7596c15caa379c4c29bf6e25e4..0000000000000000000000000000000000000000
--- a/20211014/hello-3.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Bonjour, le monde !\n");
-  return 0;
-}
diff --git a/20211014/hello.c b/20211014/hello.c
deleted file mode 100755
index b19d80e9bd0bd7c5ed8f54b20c6a50d9166f03ac..0000000000000000000000000000000000000000
--- a/20211014/hello.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Hello, world!\n");
-  return 0;
-}
diff --git a/20211014/if-1.txt b/20211014/if-1.txt
deleted file mode 100644
index c72ca141ef635453cc88bfb7aebf77b43d02f754..0000000000000000000000000000000000000000
--- a/20211014/if-1.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> if grep Blubb test*.txt; then echo "gefunden"; fi
-cassini/home/peter/bo/2021ws/es/20211014> if grep Blubb test*.txt; then echo "gefunden"; else echo "nicht gefunden"; fi
-nicht gefunden
-cassini/home/peter/bo/2021ws/es/20211014> \
-> if grep Blubb *.txt; then
->   echo "gefunden"
-> else
->   echo "nicht gefunden"
-> fi
-nicht gefunden
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/index.html b/20211014/index.html
deleted file mode 100644
index 098068edadb2c4a8666195c2c99d15a10b7cac1a..0000000000000000000000000000000000000000
--- a/20211014/index.html
+++ /dev/null
@@ -1,184 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
-<html lang="de">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Peter Gerwinski</title>
-<link rev="made" title="Peter Gerwinski"
-href="mailto:peter@gerwinski.de">
-</head>
-<body bgcolor="#FFFFFF" text="#100050" link="#0000FF" vlink="#1060C0"
-alink="#00A000">
-<p align="right">
-<table border="0" cellspacing="0" cellpadding="3">
-<tr>
-<td bgcolor="#FFFFFF" background="images/farbverlauf-dunkler.png">
-<img src="images/null.png" alt=". . o o O O "
-width="1" height="1" hspace="127">
-</td>
-<td bgcolor="#E0E0E0" background="images/grau.png">
-<img src="images/null.png" alt="("
-width="1" height="1" hspace="3">
-</td>
-<td valign="middle" bgcolor="#E0E0E0" background="images/grau.png">
-<font size="-1"><b>
-<font size="-2">Home</font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="physik/index.de.html">Physik</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="download/index.de.html">Download</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="artikel/index.de.html">Artikel</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="satire/index.de.html">Satire</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="fotos/index.de.html">Fotos</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="sitemap.de.html">Inhalt</a></font>
-</font>
-</td>
-<td bgcolor="#E0E0E0" background="images/grau.png">
-<img src="images/null.png" alt=")"
-width="1" height="1" hspace="3">
-</td>
-</tr>
-</table>
-</p>
-<p>
-</p>
-<a href="artikel/kein-wurm.de.html"><img
-src="images/kein-wurm-small.jpg"
-alt="Nein, ich habe Ihnen keinen Virus/Wurm geschickt!"
-align="right" width="196" height="112" border="0"></a>
-<h2>Peter Gerwinski</h2>
-<br clear="all">
-<table border="0" cellspacing="0" cellpadding="10" hspace="20" vspace="0">
-<tr valign="top">
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>Berufliches</b></td></tr>
-<tr><td><a href="https://www.hs-bochum.de">Hochschule Bochum</a><br>(Professor für hardwarenahe IT-Systeme)</td></tr>
-<tr><td><a href="physik/index.de.html">Physiker</a></td></tr>
-</table>
-</td>
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>Business</b></td></tr>
-<tr><td><a href="https://www.hs-bochum.de">Bochum University of Applied Sciences</a><br>(professor for low-level IT systems)</td></tr>
-<tr><td><a href="physik/index.de.html">Physicist</a></td></tr>
-</table
-</td>
-</tr>
-<tr valign="top">
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>GNU &ndash; Freie Software</b></td></tr>
-<tr><td><a href="https://www.gnu-pascal.de">GNU Pascal</a> (Maintainer)</td></tr>
-<tr><td><a href="https://www.elug.de">Essener Linux User Group</a> (Gründungsmitglied)</td></tr>
-<tr><td><a href="https://www.gnu.de">GNU-Projekt</a> (Kontributor)</li></td></tr>
-</table>
-</td>
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>GNU &ndash; Free Software</b></td></tr>
-<tr><td><a href="https://www.gnu-pascal.de">GNU Pascal</a> (maintainer)</td></tr>
-<tr><td><a href="https://www.elug.de">Essener Linux User Group</a><br>(founding member)</td></tr>
-<tr><td><a href="https://www.gnu.org">GNU Project</a> (contributor)</td></tr>
-</table>
-</td>
-</tr>
-<tr>
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>Sport</b></td></tr>
-<tr><td><a href="https://www.sportschule-tokio.de">Judo &ndash; Sportschule Tokio</a><br>(Inhaber, Lehrer)</td></tr>
-</table>
-</td>
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>Sports</b></td></tr>
-<tr><td><a href="https://www.sportschule-tokio.de">Judo &ndash; Sportschule Tokio</a><br>(owner, teacher)</td></tr>
-</table>
-</td>
-</tr>
-<tr>
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>Kontakt / Impressum</b></td></tr>
-</table>
-</td>
-<td width="50%">
-<table width="100%" border="0" cellspacing="0" cellpadding="2">
-<tr background="images/farbverlauf-heller.png"
-bgcolor="#E0E0E0"><td><b>Contact</b></td></tr>
-</table>
-</td>
-</tr>
-<tr>
-<td colspan="2" width="100%" align="center">
-<table width="70%" border="0" cellspacing="0" cellpadding="2">
-<tr><td>Prof. Dr. rer. nat. Peter Gerwinski<br>Gerlachfeld 13, 45279 Essen<br>Deutschland &ndash; Germany</td></tr>
-<tr><td>E-Mail: <a href="mailto:peter@gerwinski.de">peter@gerwinski.de</a></td></tr>
-<tr><td><a href="peter-gerwinski.public-key.asc">GnuPG public key:<code><br>2CFD EA6C 31E6 12A0 BFFF<br>2451 D955 0227 6224 E7F5</code></a></td></tr>
-</table>
-</td>
-</tr>
-<tr>
-<td colspan="2" width="100%" align="center">
-<table width="70%" border="0" cellspacing="0" cellpadding="2">
-<tr><td><pre>
------BEGIN GEEK CODE BLOCK-----
-Version: 3.12@
-GAT d+(++)@ s: a0x7af C++$ UL+++
-P+ L++++$ E- W-(++) N@ w---- M- !V
-PS+ PE Y++ GPG++ GPC++++@ R+@ !tv b+
-D-- G+++ e++++ h++ r+++ y?
-------END GEEK CODE BLOCK------
-</pre></td></tr>
-</table>
-</td>
-</tr>
-</table>
-<p align="right">
-<table border="0" cellspacing="0" cellpadding="3">
-<tr>
-<td bgcolor="#FFFFFF" background="images/farbverlauf-dunkler.png">
-<img src="images/null.png" alt=". . o o O O "
-width="1" height="1" hspace="127">
-</td>
-<td bgcolor="#E0E0E0" background="images/grau.png">
-<img src="images/null.png" alt="("
-width="1" height="1" hspace="3">
-</td>
-<td valign="middle" bgcolor="#E0E0E0" background="images/grau.png">
-<font size="-1"><b>
-<font size="-2">Home</font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="physik/index.de.html">Physik</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="download/index.de.html">Download</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="artikel/index.de.html">Artikel</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="satire/index.de.html">Satire</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="fotos/index.de.html">Fotos</a></font>
-<img src="images/punkt.png" alt="-" width="8" height="8" hspace="3">
-<font size="-2"><a href="sitemap.de.html">Inhalt</a></font>
-</font>
-</td>
-<td bgcolor="#E0E0E0" background="images/grau.png">
-<img src="images/null.png" alt=")"
-width="1" height="1" hspace="3">
-</td>
-</tr>
-</table>
-</p>
-</body>
-</html>
diff --git a/20211014/io-redirection-1.txt b/20211014/io-redirection-1.txt
deleted file mode 100644
index 3c7523e321f3aed7649dae9d83bbd791fb213c24..0000000000000000000000000000000000000000
--- a/20211014/io-redirection-1.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Toast." > test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Toast.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Ach nee: Dies ist ein Test." >> test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Toast.
-Ach nee: Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/io-redirection-2.txt b/20211014/io-redirection-2.txt
deleted file mode 100644
index ff7923a500ca0cd064542a73cc30b52670b40ed7..0000000000000000000000000000000000000000
--- a/20211014/io-redirection-2.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> cat >> io-redirection-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Toast." > test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Toast.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Ach nee: Dies ist ein Test." >> test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Toast.
-Ach nee: Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014>
\ No newline at end of file
diff --git a/20211014/io-redirection-3.txt b/20211014/io-redirection-3.txt
deleted file mode 100644
index b2053d1a9357de7faee19e0e267c1b05bee888e5..0000000000000000000000000000000000000000
--- a/20211014/io-redirection-3.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> cat io-redirection-2.txt 
-cassini/home/peter/bo/2021ws/es/20211014> cat >> io-redirection-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Toast." > test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Toast.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Ach nee: Dies ist ein Test." >> test-5.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-5.txt
-Dies ist ein Toast.
-Ach nee: Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/links-1.txt b/20211014/links-1.txt
deleted file mode 100644
index f7e33e1eca8fc1f6227b386171247342f0e82de7..0000000000000000000000000000000000000000
--- a/20211014/links-1.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> cat test-1.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014> cat test-2.txt
-Dies auch.
-cassini/home/peter/bo/2021ws/es/20211014> ln -s test-1.txt test-3.txt
-cassini/home/peter/bo/2021ws/es/20211014> ls -l test*.txt
--rw-r--r-- 1 peter peter 19 Okt 14 15:43 test-1.txt
--rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt
-lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-1.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014> cat test-3.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014> cat test-2.txt
-Dies auch.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-3.txt
-Dies ist ein besonders schöner Test.
-cassini/home/peter/bo/2021ws/es/20211014> rm test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-3.txt
-cat: test-3.txt: Datei oder Verzeichnis nicht gefunden
-cassini/home/peter/bo/2021ws/es/20211014> ls -l test-3.txt
-lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> which vi
-/usr/bin/vi
-cassini/home/peter/bo/2021ws/es/20211014> ls -l /usr/bin/vi
-lrwxrwxrwx 1 root root 20 Dez 22  2012 /usr/bin/vi -> /etc/alternatives/vi
-cassini/home/peter/bo/2021ws/es/20211014> ls -l /etc/alternatives/vi
-lrwxrwxrwx 1 root root 18 Feb  5  2020 /etc/alternatives/vi -> /usr/bin/vim.basic
-cassini/home/peter/bo/2021ws/es/20211014> ls -l /usr/bin/vim.basic
--rwxr-xr-x 1 root root 2704360 Jun 15  2019 /usr/bin/vim.basic
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/links-2.txt b/20211014/links-2.txt
deleted file mode 100644
index ad1d8cdc578d52e4d681263ab3d4a9b341f8c446..0000000000000000000000000000000000000000
--- a/20211014/links-2.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein besonders schöner Test." > test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> ln test-1.txt test-4.txt                             cassini/home/peter/bo/2021ws/es/20211014> ls -l test-*.txt
--rw-r--r-- 2 peter peter 38 Okt 14 16:30 test-1.txt
--rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt
-lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt
--rw-r--r-- 2 peter peter 38 Okt 14 16:30 test-4.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt
-Dies ist ein besonders schöner Test.
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt               cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/links-3.txt b/20211014/links-3.txt
deleted file mode 100644
index b2255e25128fdbe739531bffd2d7ee1684fc37c9..0000000000000000000000000000000000000000
--- a/20211014/links-3.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> rm test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> ls -l test-*.txt
--rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt
-lrwxrwxrwx 1 peter peter 10 Okt 14 16:20 test-3.txt -> test-1.txt
--rw-r--r-- 1 peter peter 19 Okt 14 16:31 test-4.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-4.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/ll b/20211014/ll
deleted file mode 100755
index 7bcac8bfc897131206cb32ba88d805ed03dca042..0000000000000000000000000000000000000000
--- a/20211014/ll
+++ /dev/null
@@ -1 +0,0 @@
-ls -l
diff --git a/20211014/logo-hochschule-bochum-cvh-text-v2.pdf b/20211014/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211014/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211014/logo-hochschule-bochum.pdf b/20211014/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211014/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211014/pgslides.sty b/20211014/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211014/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211014/pipes-1.txt b/20211014/pipes-1.txt
deleted file mode 100644
index a97d28bc04471296cfa677cc8d14adcc6a27b52c..0000000000000000000000000000000000000000
--- a/20211014/pipes-1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | bc
-4
-cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | sed -e 's/2/4/'
-4 + 2
-cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | sed -e 's/2/4/g'
-4 + 4
-cassini/home/peter/bo/2021ws/es/20211014> echo "2 + 2" | sed -e 's/2/4/g' | bc
-8
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/script-1.sh b/20211014/script-1.sh
deleted file mode 100755
index 7bcac8bfc897131206cb32ba88d805ed03dca042..0000000000000000000000000000000000000000
--- a/20211014/script-1.sh
+++ /dev/null
@@ -1 +0,0 @@
-ls -l
diff --git a/20211014/script-2.sh b/20211014/script-2.sh
deleted file mode 100755
index cbdd06a11b722d2cb0549a68bab423d42c246256..0000000000000000000000000000000000000000
--- a/20211014/script-2.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-ls -l
diff --git a/20211014/script-3.bc b/20211014/script-3.bc
deleted file mode 100755
index 824ea4ec82fb458e0f05cf8de828f5f41f142d49..0000000000000000000000000000000000000000
--- a/20211014/script-3.bc
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/bc
-
-2 + 2
diff --git a/20211014/script-4.bc b/20211014/script-4.bc
deleted file mode 100755
index f1bff564d4c6419879aa4ab5546490249ca21bc5..0000000000000000000000000000000000000000
--- a/20211014/script-4.bc
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/bc
-
-2 + 2
-quit
diff --git a/20211014/script-5.bc b/20211014/script-5.bc
deleted file mode 100755
index 5c9b89f5905da3fa328443da6f35241a28da5605..0000000000000000000000000000000000000000
--- a/20211014/script-5.bc
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/usr/bin/bc -q
-
-2 + 2
-quit
diff --git a/20211014/test-1.txt b/20211014/test-1.txt
deleted file mode 100644
index d7e5cff47f0303c2d892d3e790e00552759b639c..0000000000000000000000000000000000000000
--- a/20211014/test-1.txt
+++ /dev/null
@@ -1 +0,0 @@
-Dies ist ein Test.
diff --git a/20211014/test-10.txt b/20211014/test-10.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20211014/test-10.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20211014/test-11.c b/20211014/test-11.c
deleted file mode 100644
index df820341fa5429bed1b66fd06d7ad4749ce51f8f..0000000000000000000000000000000000000000
--- a/20211014/test-11.c
+++ /dev/null
@@ -1,74 +0,0 @@
-Hallo?
-
-Ich schreibe noch was dazwischen. <--
-Und noch was (i: vor dem Punkt).
-Und noch was. (a: nach dem Punkt) (A: am Zeilenende anfügen) <--
-
-Dies ist ein wunder-wunderschöner Test.
-
-  1  A  alpha
-  2  B  beta
-  3  C  gamma
-
-insgesamt 388
--rw-r--r-- 1 peter peter   2987 Okt 14 16:09 c-1.txt
--rw-r--r-- 1 peter peter   1420 Okt 14 16:04 chmod-1.txt
--rw-r--r-- 1 peter peter    438 Okt 14 16:08 chmod-2.txt
--rw-r--r-- 1 peter peter 162254 Okt 14 10:41 es-20211014.pdf
--rw-r--r-- 1 peter peter  23811 Okt 14 10:41 es-20211014.tex
--rw-r--r-- 1 peter peter     59 Okt 14 17:45 fehler.txt
--rw-r--r-- 1 peter peter    218 Okt 14 16:58 find-1.txt
--rw-r--r-- 1 peter peter    249 Okt 14 16:59 find-2.txt
--rw-r--r-- 1 peter peter    412 Okt 14 17:01 find-3.txt
--rw-r--r-- 1 peter peter    548 Okt 14 17:03 find-4.txt
--rw-r--r-- 1 peter peter    864 Okt 14 18:01 for-1.txt
--rw-r--r-- 1 peter peter   1004 Okt 14 16:48 grep-1.txt
--rw-r--r-- 1 peter peter   1758 Okt 14 16:50 grep-2.txt
--rw-r--r-- 1 peter peter    639 Okt 14 16:56 grep-3.txt
--rw-r--r-- 1 peter peter     82 Okt 14 18:03 hello-1.c
--rw-r--r-- 1 peter peter     81 Okt 14 18:07 hello-2.c
--rw-r--r-- 1 peter peter     88 Okt 14 18:11 hello-3.c
--rwxr-xr-x 1 peter peter     82 Okt 14 16:05 hello.c
--rw-r--r-- 1 peter peter    414 Okt 14 17:57 if-1.txt
--rw-r--r-- 1 peter peter   7178 Okt  6 11:10 index.html
--rw-r--r-- 1 peter peter    554 Okt 14 17:35 io-redirection-1.txt
--rw-r--r-- 1 peter peter    623 Okt 14 17:36 io-redirection-2.txt
--rw-r--r-- 1 peter peter    692 Okt 14 17:38 io-redirection-3.txt
--rw-r--r-- 1 peter peter   1671 Okt 14 16:26 links-1.txt
--rw-r--r-- 1 peter peter    784 Okt 14 16:31 links-2.txt
--rw-r--r-- 1 peter peter    403 Okt 14 16:33 links-3.txt
--rwxr-xr-x 1 peter peter      6 Okt 14 16:02 ll
-lrwxrwxrwx 1 peter peter     48 Okt  7  2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf
-lrwxrwxrwx 1 peter peter     36 Okt  5  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
-lrwxrwxrwx 1 peter peter     22 Okt  5  2016 pgslides.sty -> ../common/pgslides.sty
--rw-r--r-- 1 peter peter    344 Okt 14 17:49 pipes-1.txt
--rwxr-xr-x 1 peter peter      6 Okt 14 16:11 script-1.sh
--rwxr-xr-x 1 peter peter     19 Okt 14 16:11 script-2.sh
--rwxr-xr-x 1 peter peter     21 Okt 14 16:13 script-3.bc
--rwxr-xr-x 1 peter peter     26 Okt 14 16:14 script-4.bc
--rwxr-xr-x 1 peter peter     29 Okt 14 16:16 script-5.bc
-drwxr-xr-x 2 peter peter   4096 Okt 14 15:47 test
--rw-r--r-- 1 peter peter      5 Okt 14 18:00 test-10.txt
--rw-r--r-- 1 peter peter     77 Okt 14 18:46 test-11.c
--rw-r--r-- 2 peter peter     19 Okt 14 16:31 test-1.txt
--rw-r--r-- 1 peter peter     11 Okt 14 15:43 test-2.txt
-lrwxrwxrwx 1 peter peter     10 Okt 14 16:20 test-3.txt -> test-1.txt
--rw-r--r-- 2 peter peter     19 Okt 14 16:31 test-4.txt
--rw-r--r-- 1 peter peter     48 Okt 14 17:32 test-5.txt
--rw-r--r-- 1 peter peter     77 Okt 14 17:42 test-6.txt
--rw-r--r-- 1 peter peter      5 Okt 14 18:00 test-7.txt
--rw-r--r-- 1 peter peter      5 Okt 14 18:00 test-8.txt
--rw-r--r-- 1 peter peter      5 Okt 14 18:00 test-9.txt
--rw-r--r-- 1 peter peter      6 Okt 14 17:45 test.bc
--rw-r--r-- 1 peter peter    572 Okt 14 18:55 vi-1.txt
--rwxr-xr-x 1 peter peter   1110 Dez 22  2020 vic
--rwxr-xr-x 1 peter peter    129 Okt 21  2018 vicat
--rw-r--r-- 1 peter peter    828 Okt 14 15:42 wildcards-1.txt
--rw-r--r-- 1 peter peter    589 Okt 14 15:45 wildcards-2.txt
--rw-r--r-- 1 peter peter    352 Okt 14 15:47 wildcards-3.txt
--rwxr-xr-x 1 peter peter   1003 Dez 25  2019 xkcd
-lrwxrwxrwx 1 peter peter     25 Okt  3  2016 Zeichen_123.pdf -> ../common/Zeichen_123.pdf
-
-
-vi ist schön.
-vi ist schön.
diff --git a/20211014/test-2.txt b/20211014/test-2.txt
deleted file mode 100644
index 2bfbacbaf474dd3743bbc4f7f79409cb6efb2ead..0000000000000000000000000000000000000000
--- a/20211014/test-2.txt
+++ /dev/null
@@ -1 +0,0 @@
-Dies auch.
diff --git a/20211014/test-3.txt b/20211014/test-3.txt
deleted file mode 120000
index e512c20fae491086c36ada7e2b276df83e32b1bd..0000000000000000000000000000000000000000
--- a/20211014/test-3.txt
+++ /dev/null
@@ -1 +0,0 @@
-test-1.txt
\ No newline at end of file
diff --git a/20211014/test-4.txt b/20211014/test-4.txt
deleted file mode 100644
index d7e5cff47f0303c2d892d3e790e00552759b639c..0000000000000000000000000000000000000000
--- a/20211014/test-4.txt
+++ /dev/null
@@ -1 +0,0 @@
-Dies ist ein Test.
diff --git a/20211014/test-5.txt b/20211014/test-5.txt
deleted file mode 100644
index c233f5f99e7759ff135c060c524c514b844b4b85..0000000000000000000000000000000000000000
--- a/20211014/test-5.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Dies ist ein Toast.
-Ach nee: Dies ist ein Test.
diff --git a/20211014/test-6.txt b/20211014/test-6.txt
deleted file mode 100644
index 7acacd5a0886bc962816aee843046db872c84342..0000000000000000000000000000000000000000
--- a/20211014/test-6.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Ich ging im Walde
-So für mich hin,
-Und nichts zu suchen,
-Das war mein Sinn.
diff --git a/20211014/test-7.txt b/20211014/test-7.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20211014/test-7.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20211014/test-8.txt b/20211014/test-8.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20211014/test-8.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20211014/test-9.txt b/20211014/test-9.txt
deleted file mode 100644
index 345e6aef713208c8d50cdea23b85e6ad831f0449..0000000000000000000000000000000000000000
--- a/20211014/test-9.txt
+++ /dev/null
@@ -1 +0,0 @@
-Test
diff --git a/20211014/test.bc b/20211014/test.bc
deleted file mode 100644
index a922b775b5315bf2bc04d96cbdaba8d32c911404..0000000000000000000000000000000000000000
--- a/20211014/test.bc
+++ /dev/null
@@ -1 +0,0 @@
-2 + 2
diff --git a/20211014/vi-1.txt b/20211014/vi-1.txt
deleted file mode 100644
index 3969e54f2c1fe946c0f4b21c14ad7ee7e5158a11..0000000000000000000000000000000000000000
--- a/20211014/vi-1.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-Aufruf: vi <Dateiname>
-Notausgang: ESC : q ! ENTER
-
-In den Insert-Modus gehen: i ("insert")
-                           a ("append")
-... und am Zeilenende anfügen: A
-In den Insert-Modus gehen, neue Zeile eröffnen: o ("open")
-Insert-Modus verlassen: ESC
-Speichern: : w ENTER (erscheint unten links)
-
-Alternative zu den Pfeiltasten: h j k l
-
-Letzte Aktion wiederholen: .
-
-Text markieren: v
-... zeilenweise: V
-... rechteckig: Ctrl+V
-
-In die Zwischenablage kopieren: y
-Ausschneiden: d
-Zeile löschen: dd
-Wort löschen: dw
-Undo: u
-Redo: Strg+R
-Zwischenablage links einfügen: P
-Zwischenablage rechts einfügen: p
-
-Shell-Befehl ausführen: :! <Befehl> ENTER
-Shell-Befehl ausführen, Ausgabe hier einfügen: :r! <Befehl> ENTER
-
-Aktion mehrfach ausführen: <Zahl> <vi-Kommando>
-Beispiele:
- - 100mal schreieben: "vi ist schön."  100ovi ist schön. ESC
- - 98 Zeilen löschen:  98dd 
- - 2 Wörter löschen: 2dw
diff --git a/20211014/vic b/20211014/vic
deleted file mode 100755
index 063daa1366b11b0914121af554892a2e2c68183f..0000000000000000000000000000000000000000
--- a/20211014/vic
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/bash
-
-debug=false
-
-if [ $# -gt 0 ]; then
-  $debug && echo "parameters = $@"
-  shift $(( $# - 1 ))
-  file_template="$1"
-else
-  file_template=$(ls -rt *.c *.cpp *.sh *.py *.tex *.diff 2>/dev/null | tail -1)
-fi
-
-$debug && echo "file_template = $file_template"
-
-file_extension=$(echo $file_template | sed -e 's/.*\.\(.*$\)/\1/')
-file_base=$(echo $file_template | sed -e 's/\(.*\)\..*$/\1/')
-
-$debug && echo "file_extension = $file_extension"
-$debug && echo "file_base = $file_base"
-
-file_number=$(echo $file_base | sed -e 's/^.*-\([0-9]*$\)/\1/')
-file_stem=$(echo $file_base | sed -e 's/^\(.*\)-[0-9]*$/\1/')
-
-$debug && echo "file_number = $file_number"
-$debug && echo "file_number = $file_stem"
-
-while [ -e "$file_stem-$file_number.$file_extension" ]; do
-  file_number=$((file_number + 1))
-done
-new_file_name="$file_stem-$file_number.$file_extension"
-
-$debug && echo "new_file_name = $new_file_name" && read junk
-
-cp -pi "$file_template" "$new_file_name"
-#$EDITOR "$new_file_name"
-/usr/bin/vim -X -c 'set sw=2' -c 'set expandtab' -c 'set ai' -c 'set nowrap' \
-  "$new_file_name"
-clear
-cat "$new_file_name"
diff --git a/20211014/vicat b/20211014/vicat
deleted file mode 100755
index c3565c648e9320f871f275b135cef86d4c918ebd..0000000000000000000000000000000000000000
--- a/20211014/vicat
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/bash
-/usr/bin/vim -X -c 'set sw=2' -c 'set expandtab' -c 'set ai' -c 'set nowrap' "$@"
-clear
-shift $(( $# - 1 ))
-cat "$1"
diff --git a/20211014/wildcards-1.txt b/20211014/wildcards-1.txt
deleted file mode 100644
index 2f253b9576279d71959587512268b1de79d0375b..0000000000000000000000000000000000000000
--- a/20211014/wildcards-1.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt
-cassini/home/peter/bo/2021ws/es/20211014> ls -l test*.txt
--rw-r--r-- 1 peter peter 19 Okt 14 15:40 test-1.txt
--rw-r--r-- 1 peter peter 11 Okt 14 15:41 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211014> mkdir test
-cassini/home/peter/bo/2021ws/es/20211014> cd test
-cassini/home/peter/bo/2021ws/es/20211014/test> mv ../test*.txt
-cassini/home/peter/bo/2021ws/es/20211014/test> ls -l
-insgesamt 0
-cassini/home/peter/bo/2021ws/es/20211014/test> cd ..
-cassini/home/peter/bo/2021ws/es/20211014> ls -l test*.txt
--rw-r--r-- 1 peter peter 19 Okt 14 15:40 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211014> cat test-2.txt
-Dies ist ein Test.
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211014/wildcards-2.txt b/20211014/wildcards-2.txt
deleted file mode 100644
index 3cc2ff29275c1aaa042162f9c1187341467c631b..0000000000000000000000000000000000000000
--- a/20211014/wildcards-2.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies ist ein Test." > test-1.txt
-cassini/home/peter/bo/2021ws/es/20211014> echo "Dies auch." > test-2.txt
-cassini/home/peter/bo/2021ws/es/20211014> cd test
-cassini/home/peter/bo/2021ws/es/20211014/test> mv -i ../test*.txt
-mv: '../test-2.txt' überschreiben? n
-cassini/home/peter/bo/2021ws/es/20211014/test> mv ../test*.txt .
-cassini/home/peter/bo/2021ws/es/20211014/test> ls -l
-insgesamt 8
--rw-r--r-- 1 peter peter 19 Okt 14 15:43 test-1.txt
--rw-r--r-- 1 peter peter 11 Okt 14 15:43 test-2.txt
-cassini/home/peter/bo/2021ws/es/20211014/test>
diff --git a/20211014/wildcards-3.txt b/20211014/wildcards-3.txt
deleted file mode 100644
index c781087c3e8da320fcdf28122ba46b7b941d3d2e..0000000000000000000000000000000000000000
--- a/20211014/wildcards-3.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014/test> echo mv ../*.txt .
-mv ../test-1.txt ../test-2.txt ../wildcards-1.txt ../wildcards-2.txt .
-cassini/home/peter/bo/2021ws/es/20211014/test> echo mv ../test*.txt .
-mv ../test-1.txt ../test-2.txt .
-cassini/home/peter/bo/2021ws/es/20211014/test> mv ../test*.txt .
-cassini/home/peter/bo/2021ws/es/20211014/test>
diff --git a/20211014/xkcd b/20211014/xkcd
deleted file mode 100755
index 9964c95684e445d54fa4d26b6eb096257bed767c..0000000000000000000000000000000000000000
--- a/20211014/xkcd
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/sh
-
-set -e
-
-prefix="${1:-xkcd}"
-suffix="$2"
-url=$(xsel)
-
-filebase="$prefix-$(echo $url | sed -e 's/^.*\///')"
-filename="$filebase$suffix"
-orig_filename=$(echo $filename | sed -e 's/\.png$/-orig.png/')
-if [ -e "$orig_filename" ]; then
-  echo -n "$orig_filename exists. Press ENTER to proceed, ^C to abort. "
-  read junk
-fi
-
-if [ -e "$filename" ]; then
-  mv "$filename" "$orig_filename"
-fi
-
-if [ "$prefix" = "xkcd" ]; then
-  url2=$(echo $url | sed -e 's/\.png$/_2x.png/')
-  filename2=$(echo $filename | sed -e 's/\.png$/_2x.png/')
-  if [ -e "$filename2" ]; then
-    echo -n "$filename2 exists. Press ENTER to proceed, ^C to abort. "
-    read junk
-  fi
-  wget "$url" -O "$filename"
-  wget "$url2" -O "$filename2"
-  ls -l "$filename" "$filename2"
-  test -s "$filename2" || rm "$filename2"
-else
-  wget "$url" -O "$filename"
-  ls -l "$filename"
-fi
-
-if [ -e "$orig_filename" ]; then
-  if diff "$orig_filename" "$filename"; then
-    echo "$filename unchanged"
-    mv "$orig_filename" "$filename"
-  fi
-fi
diff --git a/20211021/DSC_0001.JPG b/20211021/DSC_0001.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0002.JPG b/20211021/DSC_0002.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0003.JPG b/20211021/DSC_0003.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0004.JPG b/20211021/DSC_0004.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0005.JPG b/20211021/DSC_0005.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0006.JPG b/20211021/DSC_0006.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0007.JPG b/20211021/DSC_0007.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0008.JPG b/20211021/DSC_0008.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0009.JPG b/20211021/DSC_0009.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0010.JPG b/20211021/DSC_0010.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0011.JPG b/20211021/DSC_0011.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0012.JPG b/20211021/DSC_0012.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0013.JPG b/20211021/DSC_0013.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0014.JPG b/20211021/DSC_0014.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0015.JPG b/20211021/DSC_0015.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0016.JPG b/20211021/DSC_0016.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0017.JPG b/20211021/DSC_0017.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0018.JPG b/20211021/DSC_0018.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0019.JPG b/20211021/DSC_0019.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/DSC_0020.JPG b/20211021/DSC_0020.JPG
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/X-1.txt b/20211021/X-1.txt
deleted file mode 100644
index 40ec99f2131d67041f454de3c002cdca9329af05..0000000000000000000000000000000000000000
--- a/20211021/X-1.txt
+++ /dev/null
@@ -1,63 +0,0 @@
-cassini/home/peter/bo/2020ws/es/20201117> xwininfo -root -children
-
-xwininfo: Window id: 0x394 (the root window) (has no name)
-
-  Root window id: 0x394 (the root window) (has no name)
-  Parent window id: 0x0 (none)
-     33 children:
-     0x2003cf (has no name): ()  149x218+1086+862  +1086+862
-     0x200260 (has no name): ()  94x20+0+0  +0+0
-     0x1200153 (has no name): ()  80x144+0+0  +0+0
-     0x1200147 "Xpdf: Print": ("printDialog_popup" "Xpdf")  5x5+0+0  +0+0
-     0x1200146 "Xpdf: Find": ("findDialog_popup" "Xpdf")  5x5+0+0  +0+0
-     0x1200138 "Xpdf: About": ("aboutDialog_popup" "Xpdf")  450x300+0+0  +0+0
-     0x1200124 (has no name): ()  5x5+0+0  +0+0
-     0x1200123 "Xpdf: Password": ("passwordDialog_popup" "Xpdf")  5x5+0+0  +0+0
-     0x1200002 (has no name): ()  961x622+959+128  +959+128
-     0x1200001 "xpdf.real": ("xpdf.real" "Xpdf")  961x622+957+128  +957+128
-     0x20026a (has no name): ()  1132x1036+0+0  +0+0
-     0x200438 (has no name): ()  961x622+959+128  +959+128
-     0x20042e (has no name): ()  480x360+1440+720  +1440+720
-     0x20042a (has no name): ()  640x640+0+0  +0+0
-     0x20031f (has no name): ()  484x28+0+1044  +0+1044
-     0x200266 (has no name): ()  120x120+1800+0  +1800+0
-     0x2002d5 (has no name): ()  484x28+1580+0  +1580+0
-     0x10009ba "Pan Icon": ("display-im6.q16" "Display-im6.q16")  96x72+1824+1008  +1824+1008
-     0x10008c4 "Magnify 3X": ("display-im6.q16" "Display-im6.q16")  256x256+1664+720  +1664+720
-     0x10007c5 (has no name): ("display-im6.q16" "Display-im6.q16")  1x1+960+960  +960+960
-     0x10006cb (has no name): ("display-im6.q16" "Display-im6.q16")  1x1+1488+756  +1488+756
-     0x10005d1 "Commands": ("display-im6.q16" "Display-im6.q16")  134x410+1281+670  +1281+670
-     0x10001f3 (has no name): ("display-im6.q16" "Display-im6.q16")  96x72+960+960  +960+960
-     0x2003fb (has no name): ()  212x149+791+931  +791+931
-     0x2003d0 (has no name): ()  328x295+346+785  +346+785
-     0x3bf (has no name): ()  100x100+0+0  +0+0
-     0x1800001 (has no name): ()  10x10+-100+-100  +-100+-100
-     0xa00001 "screensaver": ("xscreensaver" "XScreenSaver")  1920x1080+0+0  +0+0
-     0x200265 (has no name): ()  1920x2+0+1078  +0+1078
-     0x200264 (has no name): ()  2x1080+1918+0  +1918+0
-     0x200263 (has no name): ()  2x1080+0+0  +0+0
-     0x200262 (has no name): ()  1920x2+0+0  +0+0
-     0x20014c "FVWM": ("fvwm" "FVWM")  10x10+-10+-10  +-10+-10
-
-cassini/home/peter/bo/2020ws/es/20201117> xwininfo -root -children | grep -i xpdf
-     0x1200147 "Xpdf: Print": ("printDialog_popup" "Xpdf")  5x5+0+0  +0+0
-     0x1200146 "Xpdf: Find": ("findDialog_popup" "Xpdf")  5x5+0+0  +0+0
-     0x1200138 "Xpdf: About": ("aboutDialog_popup" "Xpdf")  450x300+0+0  +0+0
-     0x1200123 "Xpdf: Password": ("passwordDialog_popup" "Xpdf")  5x5+0+0  +0+0
-     0x1200001 "xpdf.real": ("xpdf.real" "Xpdf")  961x622+957+128  +957+128
-cassini/home/peter/bo/2020ws/es/20201117> xwininfo -root -children | grep xpdf
-     0x1200001 "xpdf.real": ("xpdf.real" "Xpdf")  961x622+957+128  +957+128
-cassini/home/peter/bo/2020ws/es/20201117> line=$(xwininfo -root -children | grep xpdf)
-cassini/home/peter/bo/2020ws/es/20201117> echo $line
-0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128
-cassini/home/peter/bo/2020ws/es/20201117> echo "echo $line"
-echo      0x1200001 "xpdf.real": ("xpdf.real" "Xpdf")  961x622+957+128  +957+128
-cassini/home/peter/bo/2020ws/es/20201117> echo $line
-0x1200001 "xpdf.real": ("xpdf.real" "Xpdf") 961x622+957+128 +957+128
-cassini/home/peter/bo/2020ws/es/20201117> echo $line | cut -d " " -f 1
-0x1200001
-cassini/home/peter/bo/2020ws/es/20201117> echo $line | cut -d " " -f 2
-"xpdf.real":
-cassini/home/peter/bo/2020ws/es/20201117> echo $line | cut -d " " -f 3
-("xpdf.real"
-cassini/home/peter/bo/2020ws/es/20201117>
diff --git a/20211021/a b/20211021/a
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/20211021/es-20211021.pdf b/20211021/es-20211021.pdf
deleted file mode 100644
index 12f2f21c0be5a3656d13e2ee8f63502be9f05d70..0000000000000000000000000000000000000000
Binary files a/20211021/es-20211021.pdf and /dev/null differ
diff --git a/20211021/es-20211021.tex b/20211021/es-20211021.tex
deleted file mode 100644
index 66c5c318cb2b1bd23e27907f5367e74da83e8a79..0000000000000000000000000000000000000000
--- a/20211021/es-20211021.tex
+++ /dev/null
@@ -1,808 +0,0 @@
-% es-20211021.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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: GNU Screen
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{tikz}
-
-\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{21.\ Oktober 2021}
-
-\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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-      \begin{itemize}
-        \item[2.1] Grundkonzepte
-        \item[2.2] Die Kommandozeile: Grundlagen
-        \color{medgreen}
-        \item[2.3] Dateisysteme
-        \item[2.4] Ein- und Ausgabeströme
-        \item[2.5] Pipes
-        \item[2.6] Verzweigungen und Schleifen
-        \item[2.7] Skript-Programmierung
-        \color{red}
-        \item[2.8] GNU screen
-      \end{itemize}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-%      \begin{itemize}
-%        \color{medgreen}
-%        \item[3.0] Vorbereitungen
-%        \item[3.1] IP-Adressen
-%        \item[3.2] MAC-Adressen
-%        \item[3.3] TCP- und UDP-Ports
-%        \item[3.4] TCP-Protokolle
-%        \item[3.5] Routing
-%        \color{orange}
-%        \item[3.6] Netzwerkanalyse
-%        \item[3.7] SSH
-%        \item[3.8] X11
-%%        \color{red}
-%%        \item[3.9] Programmierung
-%      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-%  \vspace*{-1cm plus 1filll}
-
-%  \underconstruction
-
-\end{frame}
-
-\setcounter{section}{1}
-\section{Einführung in Unix}
-\setcounter{subsection}{2}
-\subsection{Dateisysteme}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \newterm{Symbolische Verknüpfungen -- symbolic links}
-
-      \smallskip
-
-      Verweis auf die eigentliche Datei\\
-      \textarrow\ Wenn man die Datei löscht, zeigt der Link ins Leere.
-
-      \smallskip
-
-      Verknüpfung anlegen: \lstinline[style=cmd]{ln -s datei link}\\
-      (Richtung: wie bei \lstinline[style=cmd]{cp})
-
-      \smallskip
-
-      Beispiel: \lstinline[style=cmd]{ln -s ../common/GNU-GPL-3 gpl.txt}
-    \pause
-    \medskip
-    \item
-      \newterm{Harte Verknüpfungen -- hard links}
-
-      \smallskip
-      
-      Dieselben Daten auf dem Datenträger\\
-      sind unter mehreren Namen verfügbar.\\
-      \textarrow\ Wenn man einen löscht, sind die Daten noch da.
-
-      \smallskip
-
-      \begingroup
-        \begin{lstlisting}[style=terminal,gobble=10,xleftmargin=-3pt]
-          cassini/home/peter/bo/2019ws/es/20191002> ¡ls -l¿
-          ...
-          -rw-r--r-- 1 peter peter    1202 Okt  2 13:35 shell-06.txt
-          drwxr-xr-x 2 peter peter    4096 Okt  2 13:16 test
-        \end{lstlisting}
-      \endgroup
-      \begin{picture}(0,0.5)
-        \color{red}
-        \put(2.31,0){\tikz{\draw[-latex,red](0,0)--(0,0.5);}}
-        \put(0,-0.1){\makebox(0,0)[tl]{Anzahl der ("`harten"') Links
-                                       auf diese Datei / dieses Verzeichnis}}
-      \end{picture}
-  \end{itemize}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{grep}: Dateien durchsuchen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal,xleftmargin=-3pt]
-    cassini/home/peter/bo/2019ws/es/20191002> ¡grep gcc *.txt¿
-    shell-03.txt: cassini/...> gcc -Wall -O hello.c -o hello
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{find}: Dateien anhand ihrer Eigenschaften suchen
-  \end{itemize}
-
-%  \small
-  \begin{lstlisting}[style=terminal]
-    $ ¡find . -name "*.txt"¿
-    ./shell-06.txt
-    ./shell-03.txt
-    ./shell-05.txt
-    ./test.txt
-    ./test/test.txt
-    ...
-    $ ¡find . -name "*.txt" -perm /u+x¿
-    ./test2.txt
-    $ ¡find . -name "*.txt" -perm /u+x -exec ls -l {} \;¿
-    -rwxr-xr-x 1 peter peter 6 Okt  2 13:43 ./test2.txt
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Ein- und Ausgabeströme}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Standard-Ausgabe in Datei umleiten
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "Dies ist ein Test." > test.txt¿
-    $ ¡cat test.txt¿
-    Dies ist ein Test.
-  \end{lstlisting}
-
-%  \pause
-  \smallskip
-
-  \begin{itemize}
-    \item
-      Standard-Ausgabe an Datei anhängen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "Dies ist noch ein Test." >> test.txt¿
-    $ ¡cat test.txt¿
-    Dies ist ein Test.
-    Dies ist noch ein Test.
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Fehler-Ausgabe in Datei umleiten
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡cat gibtsnicht.txt > fehler.txt¿
-    cat: gibtsnicht.txt: No such file or directory
-    $ ¡cat fehler.txt¿
-    $ ¡cat gibtsnicht.txt 2> fehler.txt¿
-    $ ¡cat fehler.txt¿
-    cat: gibtsnicht.txt: No such file or directory
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Standard-Eingabe aus Datei lesen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡bc¿
-    bc 1.06.95
-    Copyright [...] 2006 Free Software Foundation, Inc.
-    This is free software with ABSOLUTELY NO WARRANTY.
-    For details type `warranty'.
-    ¡2 + 2¿
-    4
-    $ ¡echo "2 + 2" > test.bc¿
-    $ ¡bc < test.bc¿
-    4
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Pipes}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Standard-Ausgabe von Programm A\\
-  wird zu Standard-Eingabe von Programm B
-
-  \smallskip
-
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "2 + 2" | bc¿
-    4
-  \end{lstlisting}
-
-  \smallskip
-
-  \textarrow\ sehr mächtiger "`Baukasten"'
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{sed}: \emph{stream editor}\\
-      Suchen und Ersetzen (und noch viel mehr)
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿
-    Schlimmer geht immer.
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡ls | grep slides¿
-    pgslides.sty
-    $ ¡ls *.pdf | grep -v logo¿
-    es-20191002.pdf
-    Zeichen_123.pdf
-    $ ¡ls -l $(ls *.pdf | grep -v logo)¿
-    -rw-r--r-- 1 ... 4619138 Okt 8 21:28 es-20191002.pdf
-    lrwxrwxrwx 1 ...      25 Okt 3  2016 Zeichen_123.pdf -> ...
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Standard-Ausgabe im Befehl verwenden
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡grep -l "|" *.txt¿
-    regex-1.txt
-    regex-2.txt
-    regex-3.txt
-    regex-4.txt
-    shell-skripts-11.txt
-    X-1.txt
-    $ ¡vi $(grep -l "|" *.txt)¿
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Verzweigungen und Schleifen}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{lstlisting}[style=terminal]
-    $ ¡if grep Blubb test.txt; then echo "gefunden"; \
-      else echo "nicht gefunden"; fi¿
-    nicht gefunden
-    $ ¡for x in foo bar baz; do echo $x; done¿
-    foo
-    bar
-    baz
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Skript-Programmierung}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \textbf{Aufgabe:} Programmieren Sie ein Unix-Shell-Skript,\\
-  das etwas Nützliches macht. \mbox{:--)}
-
-  \bigskip
-
-  Beispiel: CSV-Import-Interface
-  \begin{itemize}
-    \item
-      CSV-Datei: "`comma-separated values"'\\
-      Tabelle, durch Kommata getrennt
-    \item
-      Viele Tabellenkalkulationsprogramme können CSV-Dateien exportieren.
-    \item
-      Beispiel-Datei: \file{test.csv} (siehe auch: \file{test.ods})
-    \item
-      Beispiel-Anwendung: Ermitteln der durchschnittlichen Note
-    \item
-      Beispiel-Anwendung für Datenbank-Experten:\\
-      Speichere die Spalten 1 und 2 in einer Datenbank.
-    \item
-      Hinweis 1: \lstinline[style=cmd]{cat X-1.txt}
-    \item
-      Hinweis 2: \lstinline[style=cmd]{man cut}
-  \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 ]}: 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{VNC}, \file{x2go}
-  \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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-      \begin{itemize}
-        \item[2.1] Grundkonzepte
-        \item[2.2] Die Kommandozeile: Grundlagen
-        \item[2.3] Dateisysteme
-        \item[2.4] Ein- und Ausgabeströme
-        \item[2.5] Pipes
-        \item[2.6] Verzweigungen und Schleifen
-        \color{medgreen}
-        \item[2.7] Skript-Programmierung
-        \item[2.8] GNU screen
-      \end{itemize}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-%      \begin{itemize}
-%        \color{red}
-%        \item[3.0] Vorbereitungen
-%        \item[3.1] IP-Adressen
-%        \item[3.2] MAC-Adressen
-%        \item[3.3] TCP- und UDP-Ports
-%        \item[3.4] TCP-Protokolle
-%        \color{orange}
-%        \item[3.5] Routing
-%        \item[3.6] Netzwerkanalyse
-%        \item[3.7] SSH
-%        \color{black}
-%        \item[3.8] X11
-%        \item[3.9] Programmierung
-%      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\iffalse
-
-\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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-%      \begin{itemize}
-%        \item[2.1] Grundkonzepte
-%        \item[2.2] Die Kommandozeile: Grundlagen
-%        \item[2.3] Dateisysteme
-%        \item[2.4] Ein- und Ausgabeströme
-%        \item[2.5] Pipes
-%        \color{medgreen}
-%        \item[2.6] Verzweigungen und Schleifen
-%        \item[2.7] Skript-Programmierung
-%        \color{red}
-%        \item[2.8] GNU screen
-%      \end{itemize}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-      \begin{itemize}
-        \color{red}
-        \item[3.0] Vorbereitungen
-        \item[3.1] IP-Adressen
-        \item[3.2] MAC-Adressen
-        \item[3.3] TCP- und UDP-Ports
-        \item[3.4] TCP-Protokolle
-        \color{orange}
-        \item[3.5] Routing
-        \item[3.6] Netzwerkanalyse
-        \item[3.7] SSH
-        \color{black}
-        \item[3.8] X11
-        \item[3.9] Programmierung
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\section{TCP/IP in der Praxis}
-\setcounter{subsection}{-1}
-\subsection{Vorbereitungen\quad {\color{red}(Nicht auf allen Rechnern ausführen!)}}
-
-\begin{frame}[fragile]
-
-  \showsection
-
-  {\large\textbf{Literatur:}}\\[\smallskipamount]
-  \url{http://www.peter.gerwinski.de/download/net-2013ss.tar.gz}
-
-  \bigskip\bigskip
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Verkabelung: Twisted-Pair-Kabel, Switches
-    \item
-      Automatismen abschalten
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # service network-manager stop
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{IP-Adressen}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item \lstinline[style=cmd]{ip addr} (Linux)\\
-          \lstinline[style=cmd]{ifconfig} (Unix allgemein)\\
-          \lstinline[style=cmd]{ipconfig} (MS Windows)
-    \item \lstinline[style=cmd]{ip addr add <Netz>}
-%                                                   \\
-%          Beispiel:
-%          \lstinline[style=cmd]{ip addr add 192.168.2.197/24}\\
-%          \includegraphics[width=7cm]{../20171026/photo-20171026-142620.jpg}
-    \item \lstinline[style=cmd]{ip link}
-    \item \lstinline[style=cmd]{ping <IP-Adresse>}
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # ifconfig
-    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
-            inet 127.0.0.1  netmask 255.0.0.0
-            inet6 ::1  prefixlen 128  scopeid 0x10<host>
-            [...]
-
-    wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
-            inet 192.168.42.101  netmask 255.255.255.0
-                                 broadcast 192.168.42.255
-            ether be:3f:ca:aa:7e:51 txqueuelen 1000  (Ethernet)
-            [...]
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  IPv4-Adressen:
-  \begin{itemize}
-    \item
-      32 Bit
-    \item
-      dezimal, 4 Gruppen zu je 8 Bit (0--255), durch Punkte getrennt
-  \end{itemize}
-
-  \medskip
-
-  IPv6-Adressen:
-  \begin{itemize}
-    \item
-      128 Bit
-    \item
-      hexadezimal, 8 Gruppen zu je 4 Hex-Ziffern, durch Doppelpunkte getrennt
-    \item 
-      Führende Nullen dürfen weggelassen werden.
-    \item
-      Zwei Dopppelpunkte bedeuten: Mit Nullen auffüllen.
-    \item
-      Literatur und Beispiel: \url{https://de.wikipedia.org/wiki/IPv6}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{MAC-Adressen}
-
-\begin{frame}
-
-  \showsubsection
-
-  MAC = Media Access Control
-
-  \smallskip
-
-  MAC-Adresse = Hardware-Adresse = Ethernet-Adresse
-
-  \begin{itemize}
-    \item \lstinline[style=cmd]{ip neig}\\
-          \lstinline[style=cmd]{arp}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{TCP- und UDP-Ports}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{nc <IP> <Port>}\\
-      Verbindung zu Programm $\langle$Port$\rangle$
-      auf Rechner $\langle$IP$\rangle$ aufnehmen
-    \item
-      \lstinline[style=cmd]{nc -l <Port>}
-      oder
-      \lstinline[style=cmd]{nc -p <Port> -l}\\
-      auf eingehende Verbindungen warten ("`lauschen"')
-    \medskip
-    \item
-      TCP-Ports: Verbindungskonzept, Netzwerk prüft
-    \item
-      UDP-Ports: einzelne Pakete, Anwendung muß selbst prüfen
-    \item
-      ICMP: keine Ports, nur Rechner:\\
-      Erreichbarkeit, Eigenschaften der Übertragung
-  \end{itemize}
-
-  \medskip
-
-  \begin{center}
-    \renewcommand{\arraystretch}{1.2}
-    \begin{tabular}{|l|}\hline
-      Anwendung: HTTP, SMTP, \dots \\\hline
-      Transport: TCP-/UDP-Ports, ICMP \\\hline
-      Internet: IP-Adresse \\\hline
-      Netzwerkzugang: Hardware-/MAC-Adresse \\\hline
-    \end{tabular}
-  \end{center}
-
-\end{frame}
-
-\subsection{TCP-Protokolle}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \textbf{HTTP}\\
-      \lstinline[style=cmd]{GET / HTTP/1.1}\\
-      \lstinline[style=cmd]{Host: www.hs-bochum.de}\\
-      (Leerzeile)
-%    \begin{onlyenv}<2>
-%      \par\medskip
-%      URL: Schema://Benutzer:Passwort@Rechner:port/Pfad?Query\#Fragment
-%    \end{onlyenv}
-    \begin{onlyenv}<2->
-      \medskip
-      \item
-        \textbf{SMTP}\\
-        \lstinline[style=cmd]{HELO cassini}\\
-        \lstinline[style=cmd]{MAIL FROM: <example@example.com>}\\
-        \lstinline[style=cmd]{RCPT TO: <beispiel@example.de>}\\
-        (E-Mail-Header -- Teil der Nutzdaten)\\
-        \lstinline[style=cmd]{From: Eddie Example <example@example.com>}\\
-        \lstinline[style=cmd]{To: Bert Beispiel <beispiel@example.de>}\\
-        \lstinline[style=cmd]{Subject: Hello, world!}\\
-        (Leerzeile)\\
-        \lstinline[style=cmd]{Hi, there!}\\
-        \lstinline[style=cmd]{.}
-      \medskip
-      \item
-        Protokolle "`mal eben"' selbst schreiben:
-        \lstinline[style=cmd]{nc -c} oder \file{inetd}
-    \end{onlyenv}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Routing}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{ip route} (Linux)\\
-      \lstinline[style=cmd]{route} (MS-Windows, Unix)\\
-      \lstinline[style=cmd]{netstat -nr} (MacOS)
-%                                                \\[\medskipamount]
-%      \includegraphics[width=11cm]{../20171026/photo-20171026-162455.jpg}
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # route -n
-    Kernel-IP-Routentabelle
-    Ziel          Router        Genmask        [...]  Iface
-    0.0.0.0       192.168.42.1  0.0.0.0        [...]  wlan0
-    169.254.0.0   0.0.0.0       255.255.0.0    [...]  wlan0
-    192.168.42.0  0.0.0.0       255.255.255.0  [...]  wlan0
-  \end{lstlisting}
-
-  \bigskip
-
-  Netzmaske:\\
-  Wenn nach Und-Verknüpfung mit IP-Adresse gleich,
-  \textarrow\ im gleichen Netz
-
-  \medskip
-
-  \lstinline[style=terminal]{255.255.240.0} ist dasselbe wie
-  \lstinline[style=terminal]{/20}\\
-  (20 Bit sind 1; die restlichen 12 Bit sind 0)
-
-\end{frame}
-
-\subsection{Netzwerkanalyse}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{tcpdump}
-    \item
-      \lstinline[style=cmd]{wireshark}
-    \item
-      \lstinline[style=cmd]{ettercap}
-  \end{itemize}
-
-\end{frame}
-
-\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}
-
-\fi
-
-\end{document}
diff --git a/20211021/internet-1.txt b/20211021/internet-1.txt
deleted file mode 100644
index 4d303282391d3ad4a3ba68e261c217acbc59cc11..0000000000000000000000000000000000000000
--- a/20211021/internet-1.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-cassini/home/peter> nc -C 88.99.194.201 80
-GET /
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
-<html><head>
-<title>302 Found</title>
-</head><body>
-<h1>Found</h1>
-<p>The document has moved <a href="https://www.cvh-server.de/">here</a>.</p>
-<hr>
-<address>Apache/2.4.48 (Debian) Server at 0.cvh-server.de Port 80</address>
-</body></html>
-cassini/home/peter> host www.gerwinski.de
-www.gerwinski.de is an alias for https.gerwinski.de.
-https.gerwinski.de is an alias for mx3.gerwinski.de.
-mx3.gerwinski.de has address 88.198.170.59
-mx3.gerwinski.de has IPv6 address 2a01:4f8:192:4405::170:59
-cassini/home/peter> nc -C 88.198.170.59 80
-GET /
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
- <head>
-  <title>ngc224.gerwinski.de</title>
- </head>
- <body background="ngc224.jpg" bgcolor="#000000" text="#CFCFCF"
-       link="#7F7FFF" alink="#CFCFFF" vlink="#FF5FFF">
-  <h1>ngc224.gerwinski.de - der Server</h1>
-  <p>Benannt nach der Andromeda-Galaxie - M31 - NGC224
-  <p align="center"><img src="null.png" alt="" width="1" height="1" vspace="360">
-  <p><font size="-2"><a href="http://www.peter.gerwinski.de">Peter Gerwinski</a><br>
-  <a href="http://www.noao.edu/image_gallery/html/im0424.html">Bild:
-  Bill Schoening, Vanessa Harvey/REU program/NOAO/AURA/NSF</a></font>
- </body>
-</html>
-cassini/home/peter> nc -C 88.198.170.59 25
-220 mx3.gerwinski.de ESMTP Exim 4.92 Thu, 21 Oct 2021 18:52:21 +0200
-HELO cassini
-250 mx3.gerwinski.de Hello cassini [195.37.15.82]
-MAIL FROM: <bill@microsoft.com>
-250 OK
-RCPT TO: <peter@gerwinski.de>
-250 Accepted
-DATA
-354 Enter message, ending with "." on a line by itself
-Subject: Hello! B-)
-
-Hello from Microsoft.
- -b
-.
-250 OK id=1mdbJT-0000A5-U0
-QUIT
-221 mx3.gerwinski.de closing connection
-cassini/home/peter>
diff --git a/20211021/internet-2.txt b/20211021/internet-2.txt
deleted file mode 100644
index e23007b96a2a18b24a0867715615cd57b1c921a9..0000000000000000000000000000000000000000
--- a/20211021/internet-2.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-cassini/home/peter> nc -C 88.198.170.59 25
-220 mx3.gerwinski.de ESMTP Exim 4.92 Thu, 21 Oct 2021 18:59:26 +0200
-HELO cassini
-250 mx3.gerwinski.de Hello cassini [195.37.15.82]
-MAIL FROM: <jobs@apple.com>
-250 OK
-RCPT TO: <peter@gerwinski.de>
-250 Accepted
-DATA
-354 Enter message, ending with "." on a line by itself
-From: Steve <jobs@apple.com>
-To: Elon <musk@tesla.com>
-Subject: Did you receive my invitation?
-
-Hi, did you receive my invitation? Please send me $1,000,000,000 for the expenses. Thx, S.
-.
-250 OK id=1mdbQc-0000al-VZ
-QUIT
-221 mx3.gerwinski.de closing connection
-cassini/home/peter>
diff --git a/20211021/internet-3.txt b/20211021/internet-3.txt
deleted file mode 100644
index 4220f3f567b9706169e2710be8abe2032530e2d5..0000000000000000000000000000000000000000
--- a/20211021/internet-3.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-From jobs@apple.com Thu Oct 21 19:01:05 2021                                         |
-Return-path: <jobs@apple.com>                                                        |
-Envelope-to: peter@phoenix.intern                                                    |
-Delivery-date: Thu, 21 Oct 2021 19:01:05 +0200                                       |
-Received: from localhost ([127.0.0.1] helo=m31.gerwinski.de)                         |
-        by phoenix.intern with esmtp (Exim 4.92)                                     |
-        (envelope-from <jobs@apple.com>)                                             |
-        id 1mdbRB-0006az-PP                                                          |
-        for peter@phoenix.intern; Thu, 21 Oct 2021 19:01:05 +0200                    |
-Received: from [195.37.15.82] (helo=cassini)                                         |
-        by m31.gerwinski.de with smtp (Exim 4.92)                                    |
-        (envelope-from <jobs@apple.com>)                                             |
-        id 1mdbQc-0000al-VZ                                                          |
-        for peter@gerwinski.de; Thu, 21 Oct 2021 19:01:47 +0200                      |
-From: Steve <jobs@apple.com>                                                         |
-To: Elon <musk@tesla.com>                                                            |
-Subject: Did you receive my invitation?                                              |
-Message-Id: <E1mdbRB-0006az-PP@phoenix.intern>                                       |
-Date: Thu, 21 Oct 2021 19:01:05 +0200                                                |
-                                                                                     |
-Hi, did you receive my invitation? Please send me $1,000,000,000 for the expenses.   |
-+Thx, S.                                                                             |
diff --git a/20211021/logo-hochschule-bochum-cvh-text-v2.pdf b/20211021/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211021/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211021/logo-hochschule-bochum.pdf b/20211021/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211021/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211021/pgslides.sty b/20211021/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211021/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211021/sed-1.txt b/20211021/sed-1.txt
deleted file mode 100644
index 354968de8b6dff3939be2668cdba3a8833761492..0000000000000000000000000000000000000000
--- a/20211021/sed-1.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> sed -e 's/2/Hallo/g' < zusammen-1.txt
-a    1
-b    Hallo
-     3
-     4
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/sed-2.txt b/20211021/sed-2.txt
deleted file mode 100644
index 8cc3016af651c0074a31612f81dedbf527075f26..0000000000000000000000000000000000000000
--- a/20211021/sed-2.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo
-Doos oso oon Toso.
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo | tr o x
-Dxxs xsx xxn Txsx.
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo | tr o x | sed -e 's/x/Test/'
-DTestxs xsx xxn Txsx.
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo | tr o x | sed -e 's/x/Test/g'
-DTestTests TestsTest TestTestn TTestsTest.
-cassini/home/peter/bo/2021ws/es/20211021>
-
diff --git a/20211021/sed-3.txt b/20211021/sed-3.txt
deleted file mode 100644
index 1d395aefaa062dc803ad1c2fef58a113582e699b..0000000000000000000000000000000000000000
--- a/20211021/sed-3.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c
-hello-1.c
-cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep '\..*$'
-hello-1.c
-cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$'
-.c
-cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$' | cut -b 2-
-c
-cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$' | cut -d '.' -f 2
-c
-cassini/home/peter/bo/2021ws/es/20211014> echo hello-1.c | grep -o '\..*$' | sed -e 's/^.*\.//'c
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211021/seq-1.txt b/20211021/seq-1.txt
deleted file mode 100644
index ae2331cb186af058289c2d76cdc23b0198e1a14a..0000000000000000000000000000000000000000
--- a/20211021/seq-1.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> for x in 1 2 3 4 5 6 7 8 9 10; do echo -n "$x "; sleep 0.5; done; echo
-1 2 3 4 5 6 7 8 9 10
-cassini/home/peter/bo/2021ws/es/20211014> seq 10
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-cassini/home/peter/bo/2021ws/es/20211014> for x in $(seq 10); do echo -n "$x "; sleep 0.5; done; echo
-1 2 3 4 5 6 7 8 9 10
-cassini/home/peter/bo/2021ws/es/20211014> for (( x = 1; x <= 10; x++ )); do echo -n "$x "; sleep 0.5; done; echo
-1 2 3 4 5 6 7 8 9 10
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211021/seq-2.txt b/20211021/seq-2.txt
deleted file mode 100644
index 0ac9ec1df468316c181a809665f2d9242824cb66..0000000000000000000000000000000000000000
--- a/20211021/seq-2.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211014> seq -f "%x" 10                                       seq: das Format „%x“ enthält die unbekannte Direktive %x
-cassini/home/peter/bo/2021ws/es/20211014> seq -f "%04g" 10
-0001
-0002
-0003
-0004
-0005
-0006
-0007
-0008
-0009
-0010
-cassini/home/peter/bo/2021ws/es/20211014> seq -f "%4g" 10
-   1
-   2
-   3
-   4
-   5
-   6
-   7
-   8
-   9
-  10
-cassini/home/peter/bo/2021ws/es/20211014>
diff --git a/20211021/seq-3.txt b/20211021/seq-3.txt
deleted file mode 100644
index c0c16fc11e7de01acd5541efc9b3b00909fef811..0000000000000000000000000000000000000000
--- a/20211021/seq-3.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> seq -f "%04g" 6 10 | sed -e 's/\(.*\)/DSC_\1.JPG/'
-DSC_0006.JPG
-DSC_0007.JPG
-DSC_0008.JPG
-DSC_0009.JPG
-DSC_0010.JPG
-cassini/home/peter/bo/2021ws/es/20211021> ls -l $(seq -f "%04g" 6 10 | sed -e 's/\(.*\)/DSC_\1.JPG/')
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0006.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0007.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0008.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0009.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0010.JPG
-cassini/home/peter/bo/2021ws/es/20211021> seq -f "DSC_%04g.JPG" 6 10                           DSC_0006.JPG
-DSC_0007.JPG
-DSC_0008.JPG
-DSC_0009.JPG
-DSC_0010.JPG
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/seq-4.txt b/20211021/seq-4.txt
deleted file mode 100644
index ac2e6adb1635abf7b8d3c5103ef88e59d2cf4897..0000000000000000000000000000000000000000
--- a/20211021/seq-4.txt
+++ /dev/null
@@ -1,55 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> ls -l *.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0001.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0002.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0003.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0004.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0005.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0006.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0007.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0008.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0009.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0010.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0011.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0012.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0013.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0014.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0015.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0016.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0017.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0018.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0019.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0020.JPG
-cassini/home/peter/bo/2021ws/es/20211021> ls -l DSC_000[6-9].JPG DSC_00[1-9][0-9].JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0006.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0007.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0008.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0009.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30 DSC_0010.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0011.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0012.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0013.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0014.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0015.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0016.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0017.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0018.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0019.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37 DSC_0020.JPG
-cassini/home/peter/bo/2021ws/es/20211021> ls -l DSC_000[6-9].JPG DSC_00[1-9][0-9].JPG DSC_0[1-9][0-9][0-9].JPG
-ls: Zugriff auf 'DSC_0[1-9][0-9][0-9].JPG' nicht möglich: Datei oder Verzeichnis nicht gefunden
--rw-r--r-- 1 peter peter 0 Okt 21 17:30  DSC_0006.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30  DSC_0007.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30  DSC_0008.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30  DSC_0009.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:30  DSC_0010.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0011.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0012.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0013.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0014.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0015.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0016.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0017.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0018.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0019.JPG
--rw-r--r-- 1 peter peter 0 Okt 21 17:37  DSC_0020.JPG
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/tr-1.txt b/20211021/tr-1.txt
deleted file mode 100644
index bc2480e9d45494fd73e3671c55f9afd90971409a..0000000000000000000000000000000000000000
--- a/20211021/tr-1.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr i o
-Does ost eon Test.
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr ie oo
-Doos ost oon Tost.
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iet ooo
-Doos oso oon Toso.
-cassini/home/peter/bo/2021ws/es/20211021> echo "Dies ist ein Test." | tr iets ooox
-Doox oxo oon Toxo.
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/tr-2.txt b/20211021/tr-2.txt
deleted file mode 100644
index be256d3ebd252f8b8d465a947d05e36f2bd7eab3..0000000000000000000000000000000000000000
--- a/20211021/tr-2.txt
+++ /dev/null
@@ -1,36 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> cat zusammen-1.txt
-a    1
-b    2
-     3
-     4
-cassini/home/peter/bo/2021ws/es/20211021> tr [:alnum:] x < zusammen-1.txt
-x    x
-x    x
-     x
-     x
-cassini/home/peter/bo/2021ws/es/20211021> touch a
-cassini/home/peter/bo/2021ws/es/20211021> tr [:alnum:] x < zusammen-1.txt
-x    1
-b    2
-     3
-     4
-cassini/home/peter/bo/2021ws/es/20211021> ls -l
-insgesamt 248
--rw-r--r-- 1 peter peter      0 Okt 21 16:59 a
--rw-r--r-- 1 peter peter   9031 Okt 21 16:16 es-20211021.aux
--rw-r--r-- 1 peter peter  51093 Okt 21 16:16 es-20211021.log
--rw-r--r-- 1 peter peter   5269 Okt 21 16:16 es-20211021.nav
--rw-r--r-- 1 peter peter   1110 Okt 21 16:16 es-20211021.out
--rw-r--r-- 1 peter peter 130217 Okt 21 16:16 es-20211021.pdf
--rw-r--r-- 1 peter peter      0 Okt 21 16:16 es-20211021.snm
--rw-r--r-- 1 peter peter  19734 Okt 21 16:16 es-20211021.tex
--rw-r--r-- 1 peter peter   1065 Okt 21 16:16 es-20211021.toc
--rw-r--r-- 1 peter peter    982 Okt 21 16:16 es-20211021.vrb
-lrwxrwxrwx 1 peter peter     48 Okt  7  2018 logo-hochschule-bochum-cvh-text-v2.pdf -> ../common/logo-hochschule-bochum-cvh-text-v2.pdf
-lrwxrwxrwx 1 peter peter     36 Okt  5  2016 logo-hochschule-bochum.pdf -> ../common/logo-hochschule-bochum.pdf
-lrwxrwxrwx 1 peter peter     22 Okt  5  2016 pgslides.sty -> ../common/pgslides.sty
--rw-r--r-- 1 peter peter   1758 Okt 21 16:04 SCRATCH
--rw-r--r-- 1 peter peter    438 Okt 21 16:54 tr-1.txt
--rw-r--r-- 1 peter peter     28 Okt 21 16:44 zusammen-1.txt
--rw-r--r-- 1 peter peter     14 Okt 21 16:48 zusammen-2.txt
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/tr-3.txt b/20211021/tr-3.txt
deleted file mode 100644
index 07b75cc255c994cacf23ce346c29222b192800fb..0000000000000000000000000000000000000000
--- a/20211021/tr-3.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> tr "[:alnum:]" x < zusammen-1.txt
-x    x
-x    x
-     x
-     x
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/tr-4.txt b/20211021/tr-4.txt
deleted file mode 100644
index be6f3117b889d5ad534e456217da1cdecad2c029..0000000000000000000000000000000000000000
--- a/20211021/tr-4.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> echo tr [:alnum:] x < zusammen-1.txt
-tr a x
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/tr-5.txt b/20211021/tr-5.txt
deleted file mode 100644
index 4a9cede3021ace2ef38b8e0216a150ca22d334bb..0000000000000000000000000000000000000000
--- a/20211021/tr-5.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211021> echo tr '[:alnum:]' x < zusammen-1.txt
-tr [:alnum:] x
-cassini/home/peter/bo/2021ws/es/20211021> tr '[:alnum:]' x < zusammen-1.txt
-x    x
-x    x
-     x
-     x
-cassini/home/peter/bo/2021ws/es/20211021>
diff --git a/20211021/zusammen-1.txt b/20211021/zusammen-1.txt
deleted file mode 100644
index 75785a327fd72fd35d450678970870a67c6465d0..0000000000000000000000000000000000000000
--- a/20211021/zusammen-1.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-a    1
-b    2
-     3
-     4
diff --git a/20211021/zusammen-2.txt b/20211021/zusammen-2.txt
deleted file mode 100644
index 4c36f01563d3a6f901a26d2e7dcbc8e356142a9d..0000000000000000000000000000000000000000
--- a/20211021/zusammen-2.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-a	1
-b	2
-	3
-	4
diff --git a/20211028/es-20211028.pdf b/20211028/es-20211028.pdf
deleted file mode 100644
index 96cb07db1dec85380e40c3b75ab563e2190ac2d3..0000000000000000000000000000000000000000
Binary files a/20211028/es-20211028.pdf and /dev/null differ
diff --git a/20211028/es-20211028.tex b/20211028/es-20211028.tex
deleted file mode 100644
index 22fc664c013112b0b4faaad8960c5c6149bb2db5..0000000000000000000000000000000000000000
--- a/20211028/es-20211028.tex
+++ /dev/null
@@ -1,631 +0,0 @@
-% es-20211021.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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: TCP/IP in der Praxis
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{tikz}
-
-\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{28.\ Oktober 2021}
-
-\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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-      \begin{itemize}
-        \item[2.1] Grundkonzepte
-        \item[2.2] Die Kommandozeile: Grundlagen
-        \item[2.3] Dateisysteme
-        \item[2.4] Ein- und Ausgabeströme
-        \item[2.5] Pipes
-        \item[2.6] Verzweigungen und Schleifen
-        \item[2.7] Skript-Programmierung
-        \color{medgreen}
-        \item[2.8] GNU screen
-      \end{itemize}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-%      \begin{itemize}
-%        \color{medgreen}
-%        \item[3.0] Vorbereitungen
-%        \item[3.1] IP-Adressen
-%        \item[3.2] MAC-Adressen
-%        \item[3.3] TCP- und UDP-Ports
-%        \item[3.4] TCP-Protokolle
-%        \item[3.5] Routing
-%        \item[3.6] Netzwerkanalyse
-%        \item[3.7] SSH
-%        \item[3.8] X11
-%%        \color{red}
-%%        \item[3.9] Programmierung
-%      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-%  \vspace*{-1cm plus 1filll}
-
-%  \underconstruction
-
-\end{frame}
-
-\setcounter{section}{1}
-\section{Einführung in Unix}
-\setcounter{subsection}{4}
-\subsection{Pipes}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  Standard-Ausgabe von Programm A\\
-  wird zu Standard-Eingabe von Programm B
-
-  \smallskip
-
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "2 + 2" | bc¿
-    4
-  \end{lstlisting}
-
-  \smallskip
-
-  \textarrow\ sehr mächtiger "`Baukasten"'
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{sed}: \emph{stream editor}\\
-      Suchen und Ersetzen (und noch viel mehr)
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡echo "Schlimmer geht nimmer." | sed -e 's/nim/im/g'¿
-    Schlimmer geht immer.
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{grep}: Standard-Eingabe durchsuchen
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡ls | grep slides¿
-    pgslides.sty
-    $ ¡ls *.pdf | grep -v logo¿
-    es-20191002.pdf
-    Zeichen_123.pdf
-    $ ¡ls -l $(ls *.pdf | grep -v logo)¿
-    -rw-r--r-- 1 ... 4619138 Okt 8 21:28 es-20191002.pdf
-    lrwxrwxrwx 1 ...      25 Okt 3  2016 Zeichen_123.pdf -> ...
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Standard-Ausgabe im Befehl verwenden
-  \end{itemize}
-  \begin{lstlisting}[style=terminal]
-    $ ¡grep -l "|" *.txt¿
-    regex-1.txt
-    regex-2.txt
-    regex-3.txt
-    regex-4.txt
-    shell-skripts-11.txt
-    X-1.txt
-    $ ¡vi $(grep -l "|" *.txt)¿
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Verzweigungen und Schleifen}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{lstlisting}[style=terminal]
-    $ ¡if grep Blubb test.txt; then echo "gefunden"; \
-      else echo "nicht gefunden"; fi¿
-    nicht gefunden
-    $ ¡for x in foo bar baz; do echo $x; done¿
-    foo
-    bar
-    baz
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{Skript-Programmierung}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \textbf{Aufgabe:} Programmieren Sie ein Unix-Shell-Skript,\\
-  das etwas Nützliches macht. \mbox{:--)}
-
-  \bigskip
-
-  Beispiel: CSV-Import-Interface
-  \begin{itemize}
-    \item
-      CSV-Datei: "`comma-separated values"'\\
-      Tabelle, durch Kommata getrennt
-    \item
-      Viele Tabellenkalkulationsprogramme können CSV-Dateien exportieren.
-    \item
-      Beispiel-Datei: \file{test.csv} (siehe auch: \file{test.ods})
-    \item
-      Beispiel-Anwendung: Ermitteln der durchschnittlichen Note
-    \item
-      Beispiel-Anwendung für Datenbank-Experten:\\
-      Speichere die Spalten 1 und 2 in einer Datenbank.
-    \item
-      Hinweis 1: \lstinline[style=cmd]{cat X-1.txt}
-    \item
-      Hinweis 2: \lstinline[style=cmd]{man cut}
-  \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 ]}: 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{VNC}, \file{x2go}
-  \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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-      \begin{itemize}
-        \item[2.1] Grundkonzepte
-        \item[2.2] Die Kommandozeile: Grundlagen
-        \item[2.3] Dateisysteme
-        \item[2.4] Ein- und Ausgabeströme
-        \item[2.5] Pipes
-        \item[2.6] Verzweigungen und Schleifen
-        \color{medgreen}
-        \item[2.7] Skript-Programmierung
-        \item[2.8] GNU screen
-      \end{itemize}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-%      \begin{itemize}
-%        \color{red}
-%        \item[3.0] Vorbereitungen
-%        \item[3.1] IP-Adressen
-%        \item[3.2] MAC-Adressen
-%        \item[3.3] TCP- und UDP-Ports
-%        \item[3.4] TCP-Protokolle
-%        \item[3.5] Routing
-%        \item[3.6] Netzwerkanalyse
-%        \item[3.7] SSH
-%        \color{black}
-%        \item[3.8] X11
-%        \item[3.9] Programmierung
-%      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-%      \begin{itemize}
-%        \item[2.1] Grundkonzepte
-%        \item[2.2] Die Kommandozeile: Grundlagen
-%        \item[2.3] Dateisysteme
-%        \item[2.4] Ein- und Ausgabeströme
-%        \item[2.5] Pipes
-%        \color{medgreen}
-%        \item[2.6] Verzweigungen und Schleifen
-%        \item[2.7] Skript-Programmierung
-%        \color{red}
-%        \item[2.8] GNU screen
-%      \end{itemize}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-      \begin{itemize}
-        \color{red}
-        \item[3.0] Vorbereitungen
-        \item[3.1] IP-Adressen
-        \item[3.2] MAC-Adressen
-        \item[3.3] TCP- und UDP-Ports
-        \item[3.4] TCP-Protokolle
-        \item[3.5] Routing
-        \color{black}
-        \item[3.6] Netzwerkanalyse
-        \item[3.7] SSH
-        \item[3.8] X11
-        \item[3.9] Programmierung
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\section{TCP/IP in der Praxis}
-\setcounter{subsection}{-1}
-\subsection{Vorbereitungen\quad {\color{red}(Nicht auf allen Rechnern ausführen!)}}
-
-\begin{frame}[fragile]
-
-  \showsection
-
-  {\large\textbf{Literatur:}}\\[\smallskipamount]
-  \url{http://www.peter.gerwinski.de/download/net-2013ss.tar.gz}
-
-  \bigskip\bigskip
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Verkabelung: Twisted-Pair-Kabel, Switches
-    \item
-      Automatismen abschalten
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # service network-manager stop
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{IP-Adressen}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item \lstinline[style=cmd]{ip addr} (Linux)\\
-          \lstinline[style=cmd]{ifconfig} (Unix allgemein)\\
-          \lstinline[style=cmd]{ipconfig} (MS Windows)
-    \item \lstinline[style=cmd]{ip addr add <Netz>}
-%                                                   \\
-%          Beispiel:
-%          \lstinline[style=cmd]{ip addr add 192.168.2.197/24}\\
-%          \includegraphics[width=7cm]{../20171026/photo-20171026-142620.jpg}
-    \item \lstinline[style=cmd]{ip link}
-    \item \lstinline[style=cmd]{ping <IP-Adresse>}
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # ifconfig
-    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
-            inet 127.0.0.1  netmask 255.0.0.0
-            inet6 ::1  prefixlen 128  scopeid 0x10<host>
-            [...]
-
-    wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
-            inet 192.168.42.101  netmask 255.255.255.0
-                                 broadcast 192.168.42.255
-            ether be:3f:ca:aa:7e:51 txqueuelen 1000  (Ethernet)
-            [...]
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  IPv4-Adressen:
-  \begin{itemize}
-    \item
-      32 Bit
-    \item
-      dezimal, 4 Gruppen zu je 8 Bit (0--255), durch Punkte getrennt
-  \end{itemize}
-
-  \medskip
-
-  IPv6-Adressen:
-  \begin{itemize}
-    \item
-      128 Bit
-    \item
-      hexadezimal, 8 Gruppen zu je 4 Hex-Ziffern, durch Doppelpunkte getrennt
-    \item 
-      Führende Nullen dürfen weggelassen werden.
-    \item
-      Zwei Dopppelpunkte bedeuten: Mit Nullen auffüllen.
-    \item
-      Literatur und Beispiel: \url{https://de.wikipedia.org/wiki/IPv6}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{MAC-Adressen}
-
-\begin{frame}
-
-  \showsubsection
-
-  MAC = Media Access Control
-
-  \smallskip
-
-  MAC-Adresse = Hardware-Adresse = Ethernet-Adresse
-
-  \begin{itemize}
-    \item \lstinline[style=cmd]{ip neig}\\
-          \lstinline[style=cmd]{arp}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{TCP- und UDP-Ports}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{nc <IP> <Port>}\\
-      Verbindung zu Programm $\langle$Port$\rangle$
-      auf Rechner $\langle$IP$\rangle$ aufnehmen
-    \item
-      \lstinline[style=cmd]{nc -l <Port>}
-      oder
-      \lstinline[style=cmd]{nc -p <Port> -l}\\
-      auf eingehende Verbindungen warten ("`lauschen"')
-    \medskip
-    \item
-      TCP-Ports: Verbindungskonzept, Netzwerk prüft
-    \item
-      UDP-Ports: einzelne Pakete, Anwendung muß selbst prüfen
-    \item
-      ICMP: keine Ports, nur Rechner:\\
-      Erreichbarkeit, Eigenschaften der Übertragung
-  \end{itemize}
-
-  \medskip
-
-  \begin{center}
-    \renewcommand{\arraystretch}{1.2}
-    \begin{tabular}{|l|}\hline
-      Anwendung: HTTP, SMTP, \dots \\\hline
-      Transport: TCP-/UDP-Ports, ICMP \\\hline
-      Internet: IP-Adresse \\\hline
-      Netzwerkzugang: Hardware-/MAC-Adresse \\\hline
-    \end{tabular}
-  \end{center}
-
-\end{frame}
-
-\subsection{TCP-Protokolle}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \textbf{HTTP}\\
-      \lstinline[style=cmd]{GET / HTTP/1.1}\\
-      \lstinline[style=cmd]{Host: www.hs-bochum.de}\\
-      (Leerzeile)
-%    \begin{onlyenv}<2>
-%      \par\medskip
-%      URL: Schema://Benutzer:Passwort@Rechner:port/Pfad?Query\#Fragment
-%    \end{onlyenv}
-    \begin{onlyenv}<2->
-      \medskip
-      \item
-        \textbf{SMTP}\\
-        \lstinline[style=cmd]{HELO cassini}\\
-        \lstinline[style=cmd]{MAIL FROM: <example@example.com>}\\
-        \lstinline[style=cmd]{RCPT TO: <beispiel@example.de>}\\
-        (E-Mail-Header -- Teil der Nutzdaten)\\
-        \lstinline[style=cmd]{From: Eddie Example <example@example.com>}\\
-        \lstinline[style=cmd]{To: Bert Beispiel <beispiel@example.de>}\\
-        \lstinline[style=cmd]{Subject: Hello, world!}\\
-        (Leerzeile)\\
-        \lstinline[style=cmd]{Hi, there!}\\
-        \lstinline[style=cmd]{.}
-      \medskip
-      \item
-        Protokolle "`mal eben"' selbst schreiben:
-        \lstinline[style=cmd]{nc -c} oder \file{inetd}
-    \end{onlyenv}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Routing}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{ip route} (Linux)\\
-      \lstinline[style=cmd]{route} (MS-Windows, Unix)\\
-      \lstinline[style=cmd]{netstat -nr} (MacOS)
-%                                                \\[\medskipamount]
-%      \includegraphics[width=11cm]{../20171026/photo-20171026-162455.jpg}
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # route -n
-    Kernel-IP-Routentabelle
-    Ziel          Router        Genmask        [...]  Iface
-    0.0.0.0       192.168.42.1  0.0.0.0        [...]  wlan0
-    169.254.0.0   0.0.0.0       255.255.0.0    [...]  wlan0
-    192.168.42.0  0.0.0.0       255.255.255.0  [...]  wlan0
-  \end{lstlisting}
-
-  \bigskip
-
-  Netzmaske:\\
-  Wenn nach Und-Verknüpfung mit IP-Adresse gleich,
-  \textarrow\ im gleichen Netz
-
-  \medskip
-
-  \lstinline[style=terminal]{255.255.240.0} ist dasselbe wie
-  \lstinline[style=terminal]{/20}\\
-  (20 Bit sind 1; die restlichen 12 Bit sind 0)
-
-\end{frame}
-
-\subsection{Netzwerkanalyse}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{tcpdump}
-    \item
-      \lstinline[style=cmd]{wireshark}
-    \item
-      \lstinline[style=cmd]{ettercap}
-  \end{itemize}
-
-\end{frame}
-
-\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}
-
-\end{document}
diff --git a/20211028/http-1.txt b/20211028/http-1.txt
deleted file mode 100644
index 046dbe69e1caa093d0629b5dc4c428591b06e1e7..0000000000000000000000000000000000000000
--- a/20211028/http-1.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-cassini/home/peter> nc -C 88.198.170.59 80
-GET / HTTP/1.1
-Host: www.sportschule-tokio.de
-
-HTTP/1.1 200 OK
-Date: Thu, 28 Oct 2021 14:21:04 GMT
-Server: Apache/2.4.38 (Debian)
-Last-Modified: Tue, 05 Oct 2021 12:12:00 GMT
-ETag: "1c0c-5cd99efd08faf"
-Accept-Ranges: bytes
-Content-Length: 7180
-Vary: Accept-Encoding
-Content-Type: text/html; charset=ISO-8859-15
-
-<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<!-- Website designed by Felix Hamme & Peter Gerwinski -->
-<title>Sportschule Tokio &ndash; die besondere Judo-Schule in Essen-Bredeney</title>
-<link rel="icon" href="tokio-logo-80x80.jpg" type="image/jpeg">
-<link rel="stylesheet" href="stylesheets/default.css" type="text/css">
-<link rel="stylesheet" href="stylesheets/index.css" type="text/css">
-</head>
-<body bgcolor="#F0F0FF" text="#000000" link="#0033F0" vlink="#404090" alink="#0000FF">
-<div class="headline">
-<p><a href="#Impressum">Impressum</a> &nbsp; &nbsp; Sportschule Tokio</p>
-</div>
-<div class="menu">
-<ul>
-<li class="active">Aktuelles</li>
-<li><a href="training.de.html">Trainingsangebot</a></li>
-<li><a href="lageplan.de.html">Lageplan</a></li>
-<li><a href="tokio.de.html">�ber uns</a></li>
-<li><a href="techniken.de.html">Judo-Techniken</a></li>
-<li><a href="/fotos" target="_blank">Fotos</a></li>
-</ul>
-
-[...]
-
-</body>
-</html>
-cassini/home/peter>
diff --git a/20211028/logo-hochschule-bochum-cvh-text-v2.pdf b/20211028/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211028/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211028/logo-hochschule-bochum.pdf b/20211028/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211028/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211028/pgslides.sty b/20211028/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211028/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211028/regex-1.txt b/20211028/regex-1.txt
deleted file mode 100644
index 1216745b2d96adca0875d8e42ed16af4e3a9b10e..0000000000000000000000000000000000000000
--- a/20211028/regex-1.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-cassini/home/peter/bo/2021ws/es/20211028> echo "Meine E-Mail-Adresse ist peter.gerwinski@hs-bochum.de." | grep -o "[A-Za-z._0-9-]*@[A-Za-z.0-9-]*[A-Za-z0-9]"
-peter.gerwinski@hs-bochum.de
diff --git a/20211028/roboter.sh b/20211028/roboter.sh
deleted file mode 100755
index a82a83b68d1e01d0516caf4ba2b5803757ec9dd3..0000000000000000000000000000000000000000
--- a/20211028/roboter.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/bash
-
-echo "ROBOT CONTROL SOFTWARE v42.137 ;-)"
-echo -n "? "
-while read cmd; do
-  if [ "$cmd" = "h" ] || [ "$cmd" = "help" ]; then
-    echo "w = fahren"
-    echo "a = nach links lenken"
-    echo "s = stop"
-    echo "d = nach rechts lenken"
-    echo "q = beenden"
-  fi
-  if [ "$cmd" = "w" ]; then
-    echo "LOOOS!"
-  fi
-  if [ "$cmd" = "a" ]; then
-    echo "LllllIIIInks!"
-  fi
-  if [ "$cmd" = "s" ]; then
-    echo "StooooOOOOOP!"
-  fi
-  if [ "$cmd" = "d" ]; then
-    echo "RrrrrEEEEchts!"
-  fi
-  if [ "$cmd" = "q" ]; then
-    exit 0
-  fi
-  echo -n "? "
-done
diff --git a/20211028/routing.txt b/20211028/routing.txt
deleted file mode 100644
index 6cf0e04758b9904998af2adf2bfe42513a7e2dff..0000000000000000000000000000000000000000
--- a/20211028/routing.txt
+++ /dev/null
@@ -1,67 +0,0 @@
-192.168.42.0/24 bedeutet: Die letzte von den 4 Zahlen darf sich ändern.
-Netz-Adresse: 192.168.42.0
-Netz-Maske:   255.2555.255.0
-              `----v-----'
-                 24 Einsen (und danach 8 Nullen)
-
-
-$ ipcalc 192.168.42.0/24
-
-Address:   192.168.42.0         11000000.10101000.00101010. 00000000
-Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
-Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
-=>
-Network:   192.168.42.0/24      11000000.10101000.00101010. 00000000
-HostMin:   192.168.42.1         11000000.10101000.00101010. 00000001
-HostMax:   192.168.42.254       11000000.10101000.00101010. 11111110
-Broadcast: 192.168.42.255       11000000.10101000.00101010. 11111111
-Hosts/Net: 254                   Class C, Private Internet
-
-$ ipcalc 192.168.0.0/16
-
-Address:   192.168.0.0          11000000.10101000. 00000000.00000000
-Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
-Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
-=>
-Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
-HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
-HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
-Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
-Hosts/Net: 65534                 Class C, Private Internet
-
-$ ipcalc 192.168.0.0/20
-
-Address:   192.168.0.0          11000000.10101000.0000 0000.00000000
-Netmask:   255.255.240.0 = 20   11111111.11111111.1111 0000.00000000
-Wildcard:  0.0.15.255           00000000.00000000.0000 1111.11111111
-=>
-Network:   192.168.0.0/20       11000000.10101000.0000 0000.00000000
-HostMin:   192.168.0.1          11000000.10101000.0000 0000.00000001
-HostMax:   192.168.15.254       11000000.10101000.0000 1111.11111110
-Broadcast: 192.168.15.255       11000000.10101000.0000 1111.11111111
-Hosts/Net: 4094                  Class C, Private Internet
-
-$ ipcalc 192.168.64.0/20
-
-Address:   192.168.64.0         11000000.10101000.0100 0000.00000000
-Netmask:   255.255.240.0 = 20   11111111.11111111.1111 0000.00000000
-Wildcard:  0.0.15.255           00000000.00000000.0000 1111.11111111
-=>
-Network:   192.168.64.0/20      11000000.10101000.0100 0000.00000000
-HostMin:   192.168.64.1         11000000.10101000.0100 0000.00000001
-HostMax:   192.168.79.254       11000000.10101000.0100 1111.11111110
-Broadcast: 192.168.79.255       11000000.10101000.0100 1111.11111111
-Hosts/Net: 4094                  Class C, Private Internet
-
-$ ipcalc 192.168.137.80/28
-
-Address:   192.168.137.80       11000000.10101000.10001001.0101 0000
-Netmask:   255.255.255.240 = 28 11111111.11111111.11111111.1111 0000
-Wildcard:  0.0.0.15             00000000.00000000.00000000.0000 1111
-=>
-Network:   192.168.137.80/28    11000000.10101000.10001001.0101 0000
-HostMin:   192.168.137.81       11000000.10101000.10001001.0101 0001
-HostMax:   192.168.137.94       11000000.10101000.10001001.0101 1110
-Broadcast: 192.168.137.95       11000000.10101000.10001001.0101 1111
-Hosts/Net: 14                    Class C, Private Internet
-
diff --git a/20211028/screenshot-huygens.xwd b/20211028/screenshot-huygens.xwd
deleted file mode 100644
index 285bf3aee65f6c6cb56ca9ba33ea678470cc6b00..0000000000000000000000000000000000000000
Binary files a/20211028/screenshot-huygens.xwd and /dev/null differ
diff --git a/20211028/screenshot-vnc6.xwd b/20211028/screenshot-vnc6.xwd
deleted file mode 100644
index ff01bd651b0ccb70311fe520e274bd63d0c47268..0000000000000000000000000000000000000000
Binary files a/20211028/screenshot-vnc6.xwd and /dev/null differ
diff --git a/20211028/screenshot.xwd b/20211028/screenshot.xwd
deleted file mode 100644
index 05db57d51840e256b679438f618d75baf464641a..0000000000000000000000000000000000000000
Binary files a/20211028/screenshot.xwd and /dev/null differ
diff --git a/20211028/start-roboter.sh b/20211028/start-roboter.sh
deleted file mode 100755
index 5c31d01e511221d9410ddf1dfec7e7d3937652f1..0000000000000000000000000000000000000000
--- a/20211028/start-roboter.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-nc -p 5501 -l -c ./roboter.sh
diff --git a/20211028/start-shell.sh b/20211028/start-shell.sh
deleted file mode 100644
index 1c69feaba7dd4088da633470afbc0e6bed28a290..0000000000000000000000000000000000000000
--- a/20211028/start-shell.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-nc -p 5501 -l -c /bin/bash
diff --git a/20211104/I2C_data_transfer.pdf b/20211104/I2C_data_transfer.pdf
deleted file mode 120000
index 73e7ce07770a0599ae1a2aa11e97899767a1f9b0..0000000000000000000000000000000000000000
--- a/20211104/I2C_data_transfer.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/I2C_data_transfer.pdf
\ No newline at end of file
diff --git a/20211104/SPI_single_slave.pdf b/20211104/SPI_single_slave.pdf
deleted file mode 120000
index b51d59e51fffb101086bfaa811370f66436127e7..0000000000000000000000000000000000000000
--- a/20211104/SPI_single_slave.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_single_slave.pdf
\ No newline at end of file
diff --git a/20211104/SPI_three_slaves.pdf b/20211104/SPI_three_slaves.pdf
deleted file mode 120000
index b2e27257652bbefd9e1c9194ac1f518a43c8aa15..0000000000000000000000000000000000000000
--- a/20211104/SPI_three_slaves.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_three_slaves.pdf
\ No newline at end of file
diff --git a/20211104/SPI_three_slaves_daisy_chained.pdf b/20211104/SPI_three_slaves_daisy_chained.pdf
deleted file mode 120000
index 967389aeed788b2fed87b2a6b25a5ebd8256978f..0000000000000000000000000000000000000000
--- a/20211104/SPI_three_slaves_daisy_chained.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_three_slaves_daisy_chained.pdf
\ No newline at end of file
diff --git a/20211104/es-20211104.pdf b/20211104/es-20211104.pdf
deleted file mode 100644
index e4ef975ace8b6066695e0d2aaafecab3ed4eab1e..0000000000000000000000000000000000000000
Binary files a/20211104/es-20211104.pdf and /dev/null differ
diff --git a/20211104/es-20211104.tex b/20211104/es-20211104.tex
deleted file mode 100644
index 038e686806470b2913117c1a0389ce55677a43b4..0000000000000000000000000000000000000000
--- a/20211104/es-20211104.tex
+++ /dev/null
@@ -1,780 +0,0 @@
-% es-20211104.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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: Netzwerkanalyse, VNC, Netzwerk-Programmierung
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{tikz}
-
-\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{4.\ November 2021}
-
-\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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-      \begin{itemize}
-        \color{medgreen}
-        \item[3.0] Vorbereitungen
-        \item[3.1] IP-Adressen
-        \item[3.2] MAC-Adressen
-        \item[3.3] TCP- und UDP-Ports
-        \item[3.4] TCP-Protokolle
-        \item[3.5] Routing
-        \color{orange}
-        \item[3.6] Netzwerkanalyse
-        \color{medgreen}
-        \item[3.7] SSH
-        \color{orange}
-        \item[3.8] X11 und VNC
-        \color{red}
-        \item[3.9] Programmierung
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{2}
-\section{TCP/IP in der Praxis}
-\setcounter{subsection}{-1}
-\subsection{Vorbereitungen\quad {\color{red}(Nicht auf allen Rechnern ausführen!)}}
-
-\begin{frame}[fragile]
-
-  \showsection
-
-  {\large\textbf{Literatur:}}\\[\smallskipamount]
-  \url{http://www.peter.gerwinski.de/download/net-2013ss.tar.gz}
-
-  \bigskip\bigskip
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Verkabelung: Twisted-Pair-Kabel, Switches
-    \item
-      Automatismen abschalten
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # service network-manager stop
-  \end{lstlisting}
-
-\end{frame}
-
-\subsection{IP-Adressen}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item \lstinline[style=cmd]{ip addr} (Linux)\\
-          \lstinline[style=cmd]{ifconfig} (Unix allgemein)\\
-          \lstinline[style=cmd]{ipconfig} (MS Windows)
-    \item \lstinline[style=cmd]{ip addr add <Netz>}
-%                                                   \\
-%          Beispiel:
-%          \lstinline[style=cmd]{ip addr add 192.168.2.197/24}\\
-%          \includegraphics[width=7cm]{../20171026/photo-20171026-142620.jpg}
-    \item \lstinline[style=cmd]{ip link}
-    \item \lstinline[style=cmd]{ping <IP-Adresse>}
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # ifconfig
-    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
-            inet 127.0.0.1  netmask 255.0.0.0
-            inet6 ::1  prefixlen 128  scopeid 0x10<host>
-            [...]
-
-    wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
-            inet 192.168.42.101  netmask 255.255.255.0
-                                 broadcast 192.168.42.255
-            ether be:3f:ca:aa:7e:51 txqueuelen 1000  (Ethernet)
-            [...]
-  \end{lstlisting}
-
-\end{frame}
-
-\begin{frame}
-
-  \showsubsection
-
-  IPv4-Adressen:
-  \begin{itemize}
-    \item
-      32 Bit
-    \item
-      dezimal, 4 Gruppen zu je 8 Bit (0--255), durch Punkte getrennt
-  \end{itemize}
-
-  \medskip
-
-  IPv6-Adressen:
-  \begin{itemize}
-    \item
-      128 Bit
-    \item
-      hexadezimal, 8 Gruppen zu je 4 Hex-Ziffern, durch Doppelpunkte getrennt
-    \item 
-      Führende Nullen dürfen weggelassen werden.
-    \item
-      Zwei Dopppelpunkte bedeuten: Mit Nullen auffüllen.
-    \item
-      Literatur und Beispiel: \url{https://de.wikipedia.org/wiki/IPv6}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{MAC-Adressen}
-
-\begin{frame}
-
-  \showsubsection
-
-  MAC = Media Access Control
-
-  \smallskip
-
-  MAC-Adresse = Hardware-Adresse = Ethernet-Adresse
-
-  \begin{itemize}
-    \item \lstinline[style=cmd]{ip neig}\\
-          \lstinline[style=cmd]{arp}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{TCP- und UDP-Ports}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{nc <IP> <Port>}\\
-      Verbindung zu Programm $\langle$Port$\rangle$
-      auf Rechner $\langle$IP$\rangle$ aufnehmen
-    \item
-      \lstinline[style=cmd]{nc -l <Port>}
-      oder
-      \lstinline[style=cmd]{nc -p <Port> -l}\\
-      auf eingehende Verbindungen warten ("`lauschen"')
-    \medskip
-    \item
-      TCP-Ports: Verbindungskonzept, Netzwerk prüft
-    \item
-      UDP-Ports: einzelne Pakete, Anwendung muß selbst prüfen
-    \item
-      ICMP: keine Ports, nur Rechner:\\
-      Erreichbarkeit, Eigenschaften der Übertragung
-  \end{itemize}
-
-  \medskip
-
-  \begin{center}
-    \renewcommand{\arraystretch}{1.2}
-    \begin{tabular}{|l|}\hline
-      Anwendung: HTTP, SMTP, \dots \\\hline
-      Transport: TCP-/UDP-Ports, ICMP \\\hline
-      Internet: IP-Adresse \\\hline
-      Netzwerkzugang: Hardware-/MAC-Adresse \\\hline
-    \end{tabular}
-  \end{center}
-
-\end{frame}
-
-\subsection{TCP-Protokolle}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \textbf{HTTP}\\
-      \lstinline[style=cmd]{GET / HTTP/1.1}\\
-      \lstinline[style=cmd]{Host: www.hs-bochum.de}\\
-      (Leerzeile)
-%    \begin{onlyenv}<2>
-%      \par\medskip
-%      URL: Schema://Benutzer:Passwort@Rechner:port/Pfad?Query\#Fragment
-%    \end{onlyenv}
-    \begin{onlyenv}<2->
-      \medskip
-      \item
-        \textbf{SMTP}\\
-        \lstinline[style=cmd]{HELO cassini}\\
-        \lstinline[style=cmd]{MAIL FROM: <example@example.com>}\\
-        \lstinline[style=cmd]{RCPT TO: <beispiel@example.de>}\\
-        (E-Mail-Header -- Teil der Nutzdaten)\\
-        \lstinline[style=cmd]{From: Eddie Example <example@example.com>}\\
-        \lstinline[style=cmd]{To: Bert Beispiel <beispiel@example.de>}\\
-        \lstinline[style=cmd]{Subject: Hello, world!}\\
-        (Leerzeile)\\
-        \lstinline[style=cmd]{Hi, there!}\\
-        \lstinline[style=cmd]{.}
-      \medskip
-      \item
-        Protokolle "`mal eben"' selbst schreiben:
-        \lstinline[style=cmd]{nc -c} oder \file{inetd}
-    \end{onlyenv}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Routing}
-
-\begin{frame}[fragile]
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{ip route} (Linux)\\
-      \lstinline[style=cmd]{route} (MS-Windows, Unix)\\
-      \lstinline[style=cmd]{netstat -nr} (MacOS)
-%                                                \\[\medskipamount]
-%      \includegraphics[width=11cm]{../20171026/photo-20171026-162455.jpg}
-  \end{itemize}
-
-  \medskip
-
-  \begin{lstlisting}[style=terminal]
-    # route -n
-    Kernel-IP-Routentabelle
-    Ziel          Router        Genmask        [...]  Iface
-    0.0.0.0       192.168.42.1  0.0.0.0        [...]  wlan0
-    169.254.0.0   0.0.0.0       255.255.0.0    [...]  wlan0
-    192.168.42.0  0.0.0.0       255.255.255.0  [...]  wlan0
-  \end{lstlisting}
-
-  \bigskip
-
-  Netzmaske:\\
-  Wenn nach Und-Verknüpfung mit IP-Adresse gleich,
-  \textarrow\ im gleichen Netz
-
-  \medskip
-
-  \lstinline[style=terminal]{255.255.240.0} ist dasselbe wie
-  \lstinline[style=terminal]{/20}\\
-  (20 Bit sind 1; die restlichen 12 Bit sind 0)
-
-\end{frame}
-
-\subsection{Netzwerkanalyse}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{tcpdump}
-    \item
-      \lstinline[style=cmd]{wireshark}
-    \item
-      \lstinline[style=cmd]{ettercap}
-  \end{itemize}
-
-\end{frame}
-
-\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}
-
-\subsection{X11 und VNC}
-
-\begin{frame}
-
-  \showsection
-  \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
-    \pause
-    \bigskip
-    \item
-      VNC = Virtual Network Computing
-    \item
-      VNC-Server stellt Bildschirminhalt zur Verfügung
-      \begin{itemize}
-        \item entweder: eigener, virtueller X11-Server
-        \item oder: ruft Inhalt von anderem (X11-) Bildschirm ab
-      \end{itemize}
-    \item
-      VNC-Client ruft Bildschirminhalt ab und stellt ihn dar
-      \begin{itemize}
-        \item z.\,B.\ per X11
-        \item z.\,B.\ per Web-Interface: noVNC
-      \end{itemize}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Programmierung}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Shell-Skripte: \file{nc} (\file{traditional} oder \file{OpenBSD})
-    \item
-      C: Sockets, \lstinline{select()}
-    \item
-      C++: Callbacks
-  \end{itemize}
-
-  \pause
-  \bigskip
-
-  Aktuelles Beispiel: Programmierung eines VNC-Servers per Web-Interface
-
-  \begin{itemize}
-    \item
-      Grundlagen: RFC~6143
-    \item
-      Praxis: Untersuchung mit Wireshark
-    \item
-      Implementation: JavaScript, WebSockets, \file{websockify}, Callbacks
-  \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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-      \begin{itemize}
-        \vspace*{-\medskipamount}
-        \item[\textbf{\dots}]
-        \color{medgreen}
-        \item[3.6] Netzwerkanalyse
-        \color{black}
-        \item[3.7] SSH
-        \color{medgreen}
-        \item[3.8] X11 und VNC
-        \item[3.9] Programmierung
-      \end{itemize}
-    \item[\textbf{5}] \textbf{Bus-Systeme}
-      \begin{itemize}
-        \color{red}
-        \item[5.1]Was sind Bus-Systeme?
-        \item[5.2]RS-232
-        \item[5.3]\ItwoC\ (TWI)
-        \item[5.4]SPI
-        \vspace*{-\smallskipamount}
-        \item[\textbf{\dots}]
-      \end{itemize}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\iffalse
-
-\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-Personal-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
-
-  \begin{visibleenv}<2->
-    Minimal-Hardware:
-    \begin{itemize}
-      \item
-        RS-232
-      \item
-        \ItwoC\ (TWI)
-      \item
-        SPI
-    \end{itemize}
-  \end{visibleenv}
-
-  \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}
-
-  \pause
-  \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}
-
-\fi
-
-\end{document}
diff --git a/20211104/kompassmodul-an-roboter.jpg b/20211104/kompassmodul-an-roboter.jpg
deleted file mode 120000
index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000
--- a/20211104/kompassmodul-an-roboter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul-an-roboter.jpg
\ No newline at end of file
diff --git a/20211104/kompassmodul.jpg b/20211104/kompassmodul.jpg
deleted file mode 120000
index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000
--- a/20211104/kompassmodul.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul.jpg
\ No newline at end of file
diff --git a/20211104/logo-hochschule-bochum-cvh-text-v2.pdf b/20211104/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211104/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211104/logo-hochschule-bochum.pdf b/20211104/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211104/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211104/motherboard-anschluesse.jpg b/20211104/motherboard-anschluesse.jpg
deleted file mode 120000
index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000
--- a/20211104/motherboard-anschluesse.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/motherboard-anschluesse.jpg
\ No newline at end of file
diff --git a/20211104/pgslides.sty b/20211104/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211104/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211104/rs-232.pdf b/20211104/rs-232.pdf
deleted file mode 120000
index 67016059af4a0ca0db871b9dd784bcacc0eecf7a..0000000000000000000000000000000000000000
--- a/20211104/rs-232.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/rs-232.pdf
\ No newline at end of file
diff --git a/20211104/tcpip-client-0.c b/20211104/tcpip-client-0.c
deleted file mode 100644
index 6c6d6d89daeeff447a7bb87aee5da2e162269167..0000000000000000000000000000000000000000
--- a/20211104/tcpip-client-0.c
+++ /dev/null
@@ -1,56 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <netdb.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-
-#define TARGET_HOST "ngc224.gerwinski.de"
-#define PORT 80
-#define COMMAND "GET /\r\n"
-
-void error (char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-  exit (1);
-}
-
-int main (void)
-{
-  int s;
-  struct sockaddr_in name;
-  if ((s = socket (PF_INET, SOCK_STREAM, 0)) < 0)
-    error ("cannot create socket");
-  memset (&name, 0, sizeof (name));
-  name.sin_family = AF_INET;
-  name.sin_port = htons (PORT);
-  name.sin_addr.s_addr = htonl (INADDR_ANY);
-  struct hostent *ho = gethostbyname (TARGET_HOST);
-  if (!ho)
-    {
-      close (s);
-      error ("name server lookup error");
-    }
-  if (ho->h_length > (int) sizeof (name.sin_addr))
-    ho->h_length = sizeof (name.sin_addr);
-  memcpy (&name.sin_addr, ho->h_addr, ho->h_length);
-  if (connect (s, (struct sockaddr *) &name, sizeof (name)) < 0)
-    {
-      close (s);
-      error ("cannot connect to socket");
-    }
-  send (s, COMMAND, strlen (COMMAND), 0);
-  ssize_t l;
-  do
-    {
-      char buffer[100];
-      l = recv (s, buffer, 100, 0);
-      if (l > 0)
-        write (1, buffer, l);
-    }
-  while (l > 0);
-  shutdown (s, SHUT_RDWR);
-  close (s);
-  return 0;
-}
diff --git a/20211104/tcpip-client-1.cpp b/20211104/tcpip-client-1.cpp
deleted file mode 100644
index 1847bcaa5eb95028f4a70b3dc0369f0bb2244cad..0000000000000000000000000000000000000000
--- a/20211104/tcpip-client-1.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#include <boost/asio/io_service.hpp>
-#include <boost/asio/write.hpp>
-#include <boost/asio/buffer.hpp>
-#include <boost/asio/ip/tcp.hpp>
-#include <array>
-#include <string>
-#include <iostream>
-
-using namespace boost::asio;
-using namespace boost::asio::ip;
-
-io_service ioservice;
-tcp::resolver resolv{ioservice};
-tcp::socket tcp_socket{ioservice};
-std::array<char, 4096> bytes;
-
-void read_handler(const boost::system::error_code &ec,
-  std::size_t bytes_transferred)
-{
-  if (!ec)
-  {
-    std::cout.write(bytes.data(), bytes_transferred);
-    tcp_socket.async_read_some(buffer(bytes), read_handler);
-  }
-}
-
-void connect_handler(const boost::system::error_code &ec)
-{
-  if (!ec)
-  {
-    std::string r = "GET /\r\n";
-    write(tcp_socket, buffer(r));
-    tcp_socket.async_read_some(buffer(bytes), read_handler);
-  }
-}
-
-void resolve_handler(const boost::system::error_code &ec,
-  tcp::resolver::iterator it)
-{
-  if (!ec)
-    tcp_socket.async_connect(*it, connect_handler);
-}
-
-int main()
-{
-  tcp::resolver::query q{"ngc224.gerwinski.de", "80"};
-  resolv.async_resolve(q, resolve_handler);
-  ioservice.run();
-}
diff --git a/20211104/tcpip-server-0.c b/20211104/tcpip-server-0.c
deleted file mode 100644
index 868993c4ec429d02f5fe576af9ab57c807367ab6..0000000000000000000000000000000000000000
--- a/20211104/tcpip-server-0.c
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <netdb.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-
-#define PORT 1234
-#define MESSAGE "Hello, world!\n"
-
-void error (char *msg)
-{
-  fprintf (stderr, "%s\n", msg);
-  exit (1);
-}
-
-int main (void)
-{
-  int s;
-  struct sockaddr_in name;
-  if ((s = socket (PF_INET, SOCK_STREAM, 0)) < 0)
-    error ("cannot create socket");
-  memset (&name, 0, sizeof (name));
-  name.sin_family = AF_INET;
-  name.sin_port = htons (PORT);
-  name.sin_addr.s_addr = htonl (INADDR_ANY);
-  int on = 1;
-  setsockopt (s, SOL_SOCKET, SO_REUSEADDR, (void *) &on, sizeof (on));
-  if (bind (s, (struct sockaddr *) &name, sizeof (name)) < 0)
-    {
-      close (s);
-      error ("cannot bind socket");
-    }
-  if (listen (s, 16) < 0)
-    {
-      close (s);
-      error ("cannot listen on socket");
-    }
-  struct sockaddr_in clientname;
-  socklen_t size = sizeof (clientname);
-  s = accept (s, (struct sockaddr *) &clientname, &size);
-  if (s < 0)
-    error ("cannot accept connection");
-  char *host_address = inet_ntoa (clientname.sin_addr);
-  char *host_name;
-  struct hostent *hp = gethostbyaddr ((void *) &clientname.sin_addr, sizeof (clientname.sin_addr), clientname.sin_family);
-  if (hp)
-    host_name = hp->h_name;
-  else
-    host_name = inet_ntoa (clientname.sin_addr);
-  int remote_port = ntohs (clientname.sin_port);
-  printf ("connection from %s [%s], port %d\n",
-          host_name, host_address, remote_port);
-  send (s, MESSAGE, strlen (MESSAGE), 0);
-  shutdown (s, SHUT_RDWR);
-  close (s);
-  return 0;
-}
diff --git a/20211104/tcpip-server-1.cpp b/20211104/tcpip-server-1.cpp
deleted file mode 100644
index b2059c1d664a05b3581ac1f194ad203d0bca9401..0000000000000000000000000000000000000000
--- a/20211104/tcpip-server-1.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <boost/asio/io_service.hpp>
-#include <boost/asio/write.hpp>
-#include <boost/asio/buffer.hpp>
-#include <boost/asio/ip/tcp.hpp>
-#include <string>
-
-using namespace boost::asio;
-using namespace boost::asio::ip;
-
-io_service ioservice;
-tcp::endpoint tcp_endpoint{tcp::v4(), 1234};
-tcp::acceptor tcp_acceptor{ioservice, tcp_endpoint};
-tcp::socket tcp_socket{ioservice};
-std::string data;
-
-void write_handler(const boost::system::error_code &ec,
-  std::size_t bytes_transferred)
-{
-  if (!ec)
-    tcp_socket.shutdown(tcp::socket::shutdown_send);
-}
-
-void accept_handler(const boost::system::error_code &ec)
-{
-  if (!ec)
-  {
-    std::string data = "Hello, world!\n";
-    async_write(tcp_socket, buffer(data), write_handler);
-  }
-}
-
-int main()
-{
-  tcp_acceptor.listen();
-  tcp_acceptor.async_accept(tcp_socket, accept_handler);
-  ioservice.run();
-}
diff --git a/20211104/vnc-0-x-server.png b/20211104/vnc-0-x-server.png
deleted file mode 100644
index 73f5583b87a866bffe9ac6845e167f78c3cff9fa..0000000000000000000000000000000000000000
Binary files a/20211104/vnc-0-x-server.png and /dev/null differ
diff --git a/20211104/vnc-1-vnc.png b/20211104/vnc-1-vnc.png
deleted file mode 100644
index 135a88d2b3029bce6cb391ba519e76574bb23823..0000000000000000000000000000000000000000
Binary files a/20211104/vnc-1-vnc.png and /dev/null differ
diff --git a/20211104/vnc-2-cvh.png b/20211104/vnc-2-cvh.png
deleted file mode 100644
index bcea16ff26e2f7fef476aa38ea18e8f7147e0d02..0000000000000000000000000000000000000000
Binary files a/20211104/vnc-2-cvh.png and /dev/null differ
diff --git a/20211104/vnc-3-cvh-einspeisung.png b/20211104/vnc-3-cvh-einspeisung.png
deleted file mode 100644
index 6283298ae135a41a62cfd5b6a6399b710aacaffe..0000000000000000000000000000000000000000
Binary files a/20211104/vnc-3-cvh-einspeisung.png and /dev/null differ
diff --git a/20211104/vnc-4-cvh-einspeisung-pg.png b/20211104/vnc-4-cvh-einspeisung-pg.png
deleted file mode 100644
index 5fa3235ce1831ffea373afd70cc432e3e068eac3..0000000000000000000000000000000000000000
Binary files a/20211104/vnc-4-cvh-einspeisung-pg.png and /dev/null differ
diff --git a/20211104/vnc.xcf.gz b/20211104/vnc.xcf.gz
deleted file mode 100644
index a7cff1c05f5f77de274ec63714cd45ad532e2b33..0000000000000000000000000000000000000000
Binary files a/20211104/vnc.xcf.gz and /dev/null differ
diff --git a/20211104/yesvnc-wc-6.html b/20211104/yesvnc-wc-6.html
deleted file mode 100644
index e039f5ca712a2ae9526ec112428ef7b8ea74a997..0000000000000000000000000000000000000000
--- a/20211104/yesvnc-wc-6.html
+++ /dev/null
@@ -1,1282 +0,0 @@
-<!doctype html public "-//W3C//DTD HTML 4.0 Strict//EN">
-<html>
-  <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf8">
-    <title>yesVNC Web Connector</title>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta charset="utf-8">
-    <link rel="stylesheet" href="stylesheets/yesvnc-wc.css" type="text/css">
-  </head>
-  <body>
-    <main class="main">
-      <header class="main__header">
-        <h2 class="main__header-title">yesVNC Web Connector</h2>
-        <h3 id="room-indicator" class="main__header-subtitle">
-          Channel&nbsp;6
-        </h3>
-      </header>
-      <hr class="main__seperator" />
-      <div id="preview-section" class="hidden">
-        <div id="preview-container">
-          <video id="video" style="display: none;" autoplay></video>
-          <canvas id="canvas0" style="display:none;"></canvas>
-          <canvas class="preview" id="canvas1"></canvas>
-        </div>
-        <hr class="main__seperator" />
-      </div>
-      <div class="main__controls">
-        <button id="start">Start</button>
-        <button id="stop" disabled>Stop</button>
-      </div>
-    </main>
-    <script>
-
-      const debugging = 0;
-
-      const combine_rects_x_min_distance = 24;
-      const combine_rects_y_min_distance = 4;
-
-      const scroll_detection_x_min = -64;
-      const scroll_detection_x_max = 64;
-      const scroll_detection_y_min = -64;
-      const scroll_detection_y_max = 64;
-      const scroll_detection_r_max = 16;
-      const scroll_detection_min_width = 256;
-      const scroll_detection_min_height = 256;
-      const scroll_detection_min_stripe_width = 16;
-      const scroll_detection_min_stripe_height = 16;
-      const scroll_detection_point_divisor = 1024;
-      const scroll_detection_length_divisor = 8;
-      const scroll_detection_same_color_threshold = 0.995;
-      const scroll_detection_hit_threshold = 0.995;
-
-      let video = document.getElementById ("video");
-      const canvas0 = document.getElementById ("canvas0");
-      const canvas1 = document.getElementById ("canvas1");
-      let ctx0 = undefined;
-      let ctx1 = undefined;
-
-      function hideElement (el)
-      {
-        el.classList.add ('hidden');
-      }
-
-      function showElement (el)
-      {
-        el.classList.remove ('hidden');
-      }
-
-      const displayMediaOptions = { video: { cursor: "always" }, audio: false };
-
-      async function startCapture ()
-      {
-        video.srcObject = await navigator.mediaDevices.getDisplayMedia (displayMediaOptions);
-        showElement (document.getElementById ('preview-section'));
-      }
-
-      function stopCapture (evt)
-      {
-        hideElement (document.getElementById ('preview-section'));
-        let tracks = video.srcObject.getTracks ();
-        tracks.forEach (
-          function (track)
-          {
-            track.stop ();
-          });
-        video.srcObject = null;
-      }
-
-      const startButton = document.getElementById ("start");
-      const stopButton = document.getElementById ("stop");
-
-      startButton.addEventListener ("click",
-        function (evt)
-        {
-          startCapture ();
-          startButton.setAttribute ('disabled', '');
-          stopButton.removeAttribute ('disabled');
-        },
-        false);
-
-      stopButton.addEventListener ("click",
-        function (evt)
-        {
-          stopCapture ();
-          start.removeAttribute ('disabled');
-          stopButton.setAttribute ('disabled', '');
-          window.location.reload();
-        },
-        false);
-
-      let socket = undefined;
-
-      function buf2hex (buffer)
-      {
-        const b = new Uint8Array (buffer);
-        const hexdump = Array.prototype.map.call (b,
-          function (x)
-          {
-            return ("00" + x.toString (16)).slice (-2);
-          }).join (" ");
-        return hexdump + " (" + buffer.byteLength.toString ()
-                       + (buffer.byteLength == 1 ? " byte)" : " bytes)");
-      }
-
-      let wScreen = 0;
-      let hScreen = 0;
-
-      const rfb_padding = 0;
-      const rfb_encoding_raw = 0;
-      const rfb_encoding_copyrect = 1;
-      const rfb_encoding_rre = 2;
-      const rfb_encoding_tight = 7;
-      const rfb_name = "wc:6";
-      const rfb_name_length = rfb_name.length;
-
-      class Rect
-      {
-        constructor (x, y, w, h, encoding)
-        {
-          this.x = x;
-          this.y = y;
-          this.w = w;
-          this.h = h;
-          this.encoding = encoding;
-        }
-
-        send ()
-        {
-          const buffer = new ArrayBuffer (12);
-          const b = new Uint8Array (buffer);
-          b[0] = this.x >>> 8;
-          b[1] = this.x & 0xff;
-          b[2] = this.y >>> 8;
-          b[3] = this.y & 0xff;
-          b[4] = this.w >>> 8;
-          b[5] = this.w & 0xff;
-          b[6] = this.h >>> 8;
-          b[7] = this.h & 0xff;
-          b[8] = this.encoding >>> 24
-          b[9] = (this.encoding >>> 16) & 0xff;
-          b[10] = (this.encoding >>> 8) & 0xff;
-          b[11] = this.encoding & 0xff;
-          if (debugging)
-            console.log ("sending Rect object: " + buf2hex (buffer));
-          socket.send (buffer);
-        }
-      }
-
-      class RawRect extends Rect
-      {
-        constructor (x, y, w, h, data)
-        {
-          super (x, y, w, h, rfb_encoding_raw);
-          this.data = data;
-        }
-
-        send ()
-        {
-          super.send ();
-          if (debugging)
-            console.log ("sending RawRect object data (" + this.data.byteLength.toString () + " pixel bytes)");
-          socket.send (this.data);
-        }
-      }
-
-      class ScrollRect extends Rect
-      {
-        constructor (x, y, w, h, dx, dy)
-        {
-          super (x, y, w, h, rfb_encoding_copyrect);
-          this.dx = dx;
-          this.dy = dy;
-        }
-
-        send ()
-        {
-          super.send ();
-          const buffer = new ArrayBuffer (4);
-          const b = new Uint8Array (buffer);
-          b[0] = this.dx >>> 8;
-          b[1] = this.dx & 0xff;
-          b[2] = this.dy >>> 8;
-          b[3] = this.dy & 0xff;
-          if (debugging)
-            console.log ("sending ScrollRect object: " + buf2hex (buffer));
-          socket.send (buffer);
-        }
-      }
-
-      class SolidRect extends Rect
-      {
-        constructor (x, y, w, h, color)
-        {
-          super (x, y, w, h, rfb_encoding_rre);
-          this.color = color;
-        }
-
-        send ()
-        {
-          super.send ();
-          const buffer = new ArrayBuffer (8);
-          const b = new Uint8Array (buffer);
-          b[0] = 0;  // number of sub-rectangles
-          b[1] = 0;
-          b[2] = 0;
-          b[3] = 0;
-          b[4] = this.color >>> 16;
-          b[5] = (this.color >>> 8) & 0xff;
-          b[6] = this.color & 0xff;
-          b[7] = rfb_padding;
-          if (debugging)
-            console.log ("sending SolidRect object: " + buf2hex (buffer));
-          socket.send (buffer);
-        }
-      }
-
-      class TightRect extends Rect
-      {
-        constructor (x, y, w, h, data)
-        {
-          super (x, y, w, h, rfb_encoding_tight);
-          this.data = data;
-        }
-
-        send ()
-        {
-          super.send ();
-          const data_length = this.data.byteLength;
-          let data_length_length = undefined;
-          if (data_length <= 0x7f)
-            data_length_length = 1;
-          else if (data_length <= 0x3fff)
-            data_length_length = 2;
-          else
-            data_length_length = 3;
-          const buffer = new ArrayBuffer (1 + data_length_length);
-          const b = new Uint8Array (buffer);
-          b[0] = 0x90; // Tight-JPEG
-          if (data_length <= 0x7f)
-            b[1] = data_length & 0x7f;
-          else if (data_length <= 0x3fff)
-            {
-              b[1] = (data_length & 0x7f) | 0x80;
-              b[2] = (data_length & 0x3f80) >>> 7;
-            }
-          else
-            {
-              b[1] = (data_length & 0x7f) | 0x80;
-              b[2] = ((data_length & 0x3f80) >>> 7) | 0x80;
-              b[3] = (data_length & 0x3fc000) >>> 14;
-            }
-          if (debugging)
-            console.log ("sending TightRect object header: " + buf2hex (buffer));
-          socket.send (buffer);
-          if (debugging)
-            console.log ("sending TightRect object data (" + data_length.toString () + " pixel bytes)");
-          socket.send (this.data);
-        }
-      }
-
-      let rects = new Array ();
-
-      class ScrollParams
-      {
-        constructor (x, y, w, h, dx, dy)
-        {
-          this.x = x;
-          this.y = y;
-          this.w = w;
-          this.h = h;
-          this.dx = dx;
-          this.dy = dy;
-        }
-      }
-
-      let scrollRects = new Array ();
-
-      let rfb_bits_per_pixel = 32;
-      let rfb_depth = 24;
-      let rfb_big_endian_flag = 0;
-      let rfb_true_color_flag = 1;
-      let rfb_red_maximum = 255;
-      let rfb_green_maximum = 255;
-      let rfb_blue_maximum = 255;
-      let rfb_red_shift = 24;
-      let rfb_green_shift = 16;
-      let rfb_blue_shift = 8;
-
-      let isFirstFrame = 1;
-      let processing = 0;
-      const rfb_aborted = 42;
-
-      function fillRectBuffer (px, x, y, w, h, color)
-      {
-        for (let yy = 0; yy < h; yy++)
-          {
-            let o = (y + yy) * wScreen + x;
-            for (let xx = 0; xx < w; xx++)
-              px[o++] = color;
-          }
-      }
-
-      function scrollRectBuffer (px, x, y, w, h, dx, dy)
-      {
-        const ww = w - Math.abs (dx);
-        const hh = h - Math.abs (dy);
-        const do0 = dy > 0 ? -wScreen : wScreen;
-        let o10 = (dy > 0 ? y + h - 1 : y) * wScreen + (dx > 0 ? x + w - 1 : x);
-        let o00 = ((dy > 0 ? y + h - 1 : y) - dy) * wScreen + (dx > 0 ? x + w - 1 : x) - dx;
-        for (let i = 0; i < hh; i++)
-          {
-            o1 = o10;
-            o0 = o00;
-            if (dx > 0)
-              for (let j = 0; j < ww; j++)
-                px[o1--] = px[o0--];
-            else
-              for (let j = 0; j < ww; j++)
-                px[o1++] = px[o0++];
-            o10 += do0;
-            o00 += do0;
-          }
-      }
-
-      function sleep (delay)
-      {
-        return new Promise (
-          function (resolve)
-          {
-            setTimeout (resolve, delay)
-          });
-      }
-
-      function canvasToBlob (canvas, type, options)
-      {
-        return new Promise (
-          function (resolve)
-          {
-            canvas.toBlob (resolve, type, options);
-          });
-      }
-
-      function pushRectRaw (x, y, w, h)
-      {
-        const data_length = w * h * 4;
-        const buffer = new ArrayBuffer (data_length);
-        const b = new Uint8Array (buffer);
-        const id1 = ctx1.getImageData (x, y, w, h);
-        const px1 = new Uint8Array (id1.data.buffer);
-        let bo = 0;
-        let po = 0;
-        for (let yy = 0; yy < h; yy++)
-          for (let xx = 0; xx < w; xx++)
-            {
-              b[bo + 0] = px1[po + 2];
-              b[bo + 1] = px1[po + 1];
-              b[bo + 2] = px1[po + 0];
-              b[bo + 3] = rfb_padding;
-              bo += 4;
-              po += 4;
-            }
-        if (debugging)
-          console.log ("storing RawRect (" + data_length.toString () + " pixel bytes)");
-        rects.push (new RawRect (x, y, w, h, buffer));
-      }
-
-      function pushRectScroll (x, y, w, h, dx, dy)
-      {
-        if (debugging)
-          console.log ("storing ScrollRect");
-        rects.push (new ScrollRect (x, y, w, h, dx, dy));
-      }
-
-      function pushRectSolid (x, y, w, h, color)
-      {
-        if (debugging)
-          console.log ("storing SolidRect");
-        rects.push (new SolidRect (x, y, w, h, color));
-      }
-
-      async function pushRectTight (x, y, w, h)
-      {
-        if (debugging)
-          console.log ("pushRectTight: x = " + x.toString () + ", y = " + y.toString () + ", w = " + w.toString () + ", h = " + h.toString ());
-        let canvas = undefined;
-        if (x == 0 && y == 0 && w == wScreen && h == hScreen)
-          canvas = canvas1;
-        else
-          {
-            canvas = document.createElement ('canvas');
-            canvas.width = w;
-            canvas.height = h;
-            canvas.getContext ('2d').drawImage (canvas1, -x, -y);
-          }
-        // if (debugging)
-        //   console.log ("calling canvasToBlob()");
-        const blob = await canvasToBlob (canvas, "image/jpeg");
-        // if (debugging)
-        //   console.log ("calling blob.arrayBuffer()");
-        const jpeg_buffer = await blob.arrayBuffer ();
-        // if (debugging)
-        //   console.log ("storing TightRect (" + jpeg_buffer.byteLength.toString () + " instead of " + (w * h * 4).toString () + " pixel bytes)");
-        rects.push (new TightRect (x, y, w, h, jpeg_buffer));
-      }
-
-      function detectScrolling (px0, px1, x, y, w, h)
-      {
-        if (debugging)
-          console.log ("scrolling: detection started");
-        const pixels = w * h;
-        const points = Math.floor (pixels / scroll_detection_point_divisor);
-        const qxBuffer = new ArrayBuffer (2 * points);
-        const qx = new Uint16Array (qxBuffer);
-        const qyBuffer = new ArrayBuffer (2 * points);
-        const qy = new Uint16Array (qyBuffer);
-        const qc1Buffer = new ArrayBuffer (4 * points);
-        const qc1 = new Uint32Array (qc1Buffer);
-        const qc0Buffer = new ArrayBuffer (4 * points);
-        const qc0 = new Uint32Array (qc0Buffer);
-        for (let i = 0; i < points; i++)
-          {
-            const p = Math.floor (Math.random () * pixels);
-            // I lost a whole day to find out that p / w is a floating point division,
-            // which causes crazy things to happen when we use yy as an array index.
-            // I hate JavaScript. -- PG 20201222
-            const yy = Math.floor (p / w);
-            const xx = p % w;
-            const o = (y + yy) * wScreen + x + xx;
-            qy[i] = yy;
-            qx[i] = xx;
-            qc1[i] = px1[o];
-            qc0[i] = px0[o];
-          }
-        const xDensityBuffer = new ArrayBuffer (2 * w);
-        const xDensity = new Uint16Array (xDensityBuffer);
-        const yDensityBuffer = new ArrayBuffer (2 * h);
-        const yDensity = new Uint16Array (yDensityBuffer);
-        for (let xx = 0; xx < w; xx++)
-          {
-            xDensity[xx] = 0;
-            for (let i = 0; i < points; i++)
-              if (qx[i] < xx && qc1[i] != qc0[i])
-                xDensity[xx]++;
-          }
-        const lx = Math.floor (w / scroll_detection_length_divisor);
-        const halflx = Math.floor (lx / 2);
-        const averageDensity = Math.floor (xDensity[w - 1] / scroll_detection_length_divisor);
-        if (debugging)
-          console.log ("scrolling: averageDensity =", averageDensity);
-        let x0 = 0;
-        while (x0 + lx < w)
-          {
-            while (x0 + lx < w && xDensity[x0 + lx] - xDensity[x0] < averageDensity)
-              x0++;
-            let x1 = x0;
-            while (x1 + lx < w && xDensity[x1 + lx] - xDensity[x1] >= averageDensity)
-              x1++;
-            if (x1 - x0 >= scroll_detection_min_stripe_width)
-              {
-                if (debugging)
-                  console.log ("scrolling: vertical stripe:", x0 + halflx, x1 - x0);
-                for (let yy = 0; yy < h; yy++)
-                  {
-                    yDensity[yy] = 0;
-                    for (let i = 0; i < points; i++)
-                      if (qy[i] < yy && qc1[i] != qc0[i] && qx[i] >= x0 && qx[i] < x1)
-                        yDensity[yy]++;
-
-                  }
-                const ly = Math.floor (h / scroll_detection_length_divisor);
-                const halfly = Math.floor (ly / 2);
-                const averageDensity = Math.floor (yDensity[h - 1] / scroll_detection_length_divisor);
-                if (debugging)
-                  console.log ("scrolling: averageDensity =", averageDensity);
-                let y0 = 0;
-                while (y0 + ly < h)
-                  {
-                    while (y0 + ly < h && yDensity[y0 + ly] - yDensity[y0] < averageDensity)
-                      y0++;
-                    let y1 = y0;
-                    while (y1 + ly < h && yDensity[y1 + ly] - yDensity[y1] >= averageDensity)
-                      y1++;
-                    if (y1 - y0 >= scroll_detection_min_stripe_height)
-                      {
-                        if (debugging)
-                          console.log ("scrolling: horizontal stripe:", y0 + halfly, y1 - y0);
-                        let sx = x0 + halflx;
-                        let sy = y0 + halfly;
-                        let sw = x1 - x0;
-                        let sh = y1 - y0;
-                        if (debugging)
-                          {
-                            console.log ("scrolling: checking area:", sx, sy, sw, sh);
-                            console.log ("scrolling: " + scrollRects.length.toString () + " rects");
-                          }
-                        const redundant = scrollRects.find (
-                          function (r)
-                          {
-                            if (debugging)
-                              console.log ("scrolling: checking rect", sx, sy, sw, sh, "against", r.x, r.y, r.w, r.h, r.dx, r.dy);
-                            if (sx + sw <= r.x || sx >= r.x + r.w)
-                              return 0;
-                            else if (sy + sh <= r.y || sy >= r.y + r.h)
-                              return 0;
-                            else
-                              {
-                                if (debugging)
-                                  console.log ("scrolling: new rect", sx, sy, sw, sh, "is redundant with", r.x, r.y, r.w, r.h, r.dx, r.dy);
-                                return 1;
-                              }
-                          });
-                        if (!redundant)
-                          {
-                            const color = new Array;
-                            for (let i = 0; i < points; i++)
-                              if (qx[i] >= sx && qx[i] < sx + sw && qy[i] >= sy && qy[i] < sy + sh)
-                                color.push (qc1[i]);
-                            const points_inside = color.length;
-                            color.sort (
-                              function (a, b)
-                              {
-                                return a - b;
-                              });
-                            let color_abundance = 1;
-                            let i0 = 0;
-                            let i1 = 1;
-                            while (i1 < points_inside)
-                              {
-                                if (color[i1] != color[i0])
-                                  {
-                                    const a = i1 - i0;
-                                    if (a > color_abundance)
-                                      {
-                                        color_abundance = a;
-                                        i0 = i1;
-                                      }
-                                  }
-                                i1++
-                              }
-                            const a = i1 - i0;
-                            if (a > color_abundance)
-                              color_abundance = a;
-                            if (debugging)
-                              console.log ("scrolling: color_abundance = " + color_abundance.toString () + ", points_inside = " + points_inside.toString ()
-                                           + ", threshold = " + (points_inside * scroll_detection_same_color_threshold).toString ());
-                            if (color_abundance < points_inside * scroll_detection_same_color_threshold)
-                              {
-                                let min_mishits = points_inside;
-                                let sdx = 0;
-                                let sdy = 0;
-                                // We intentionally include the case dx == dy == 0.
-                                // Without this, we get false positives where unchanged content
-                                // is scrolled by 1 pixel because the "repair" after the scrolling
-                                // is minimal.
-                                for (let dy = scroll_detection_y_max; dy >= scroll_detection_y_min && min_mishits > 0; dy--)
-                                  for (let dx = scroll_detection_x_max; dx >= scroll_detection_x_min && min_mishits > 0; dx--)
-                                    if ((dx == 0 || dy == 0 || dx * dx + dy * dy < scroll_detection_r_max * scroll_detection_r_max))
-                                      {
-                                        let i = 0;
-                                        let mishits = 0;
-                                        while (i < points && mishits < min_mishits)
-                                          {
-                                            if (qx[i] >= sx && qx[i] < sx + sw && qy[i] >= sy && qy[i] < sy + sh)
-                                              {
-                                                const o0 = (y + qy[i] - dy) * wScreen + x + qx[i] - dx;
-                                                if (o0 >= 0 && o0 < pixels && qc1[i] != px0[o0])
-                                                  mishits++;
-//                                                if (i < 10)
-//                                                  console.log ("scrolling: point:", qx[i], qy[i], "rect:", sx, sx + sw, sy, sy + sh,
-//                                                               "o0, px:", o0, qc1[i], px0[o0]);
-                                              }
-                                            i++;
-                                          }
-                                        if (mishits < min_mishits)
-                                          {
-                                            min_mishits = mishits;
-                                            sdx = dx;
-                                            sdy = dy;
-                                          }
-                                      if (debugging)
-                                        console.log ("scrolling: dx = " + dx.toString () + ", dy = " + dy.toString ()
-                                                     + ", mishits = " + mishits.toString () + ", points_inside = " + points_inside.toString ());
-                                      }
-                                if (debugging)
-                                  console.log ("scrolling: sdx = " + sdx.toString () + ", sdy = " + sdy.toString ()
-                                               + ", min_mishits = " + min_mishits.toString () + ", points_inside = " + points_inside.toString ());
-                                if (min_mishits < points_inside * (1 - scroll_detection_hit_threshold))
-                                  {
-                                    if (debugging)
-                                      console.log ("scrolling: expanding rect:", sx, sy, sw, sh, sdx, sdy);
-                                    let xx = sx - 1;
-                                    let scrollable = 1;
-                                    while (xx > 0 && scrollable)
-                                      {
-                                        let yy = sy;
-                                        let scrollable_points = 0;
-                                        let o1 = (y + yy) * wScreen + x + xx;
-                                        let o0 = (y + yy - sdy) * wScreen + x + xx - sdx;
-                                        while (yy < sy + sh)
-                                          {
-                                            if (px1[o1] == px0[o0])
-                                              scrollable_points++;
-                                            yy++;
-                                            o1 += wScreen;
-                                            o0 += wScreen;
-                                          }
-                                        if (scrollable_points < sh * scroll_detection_hit_threshold)
-                                          scrollable = 0;
-                                        xx--;
-                                      }
-                                    if (!scrollable)
-                                      sx = xx + 1;
-                                    else
-                                      sx = xx;
-                                    xx = sx + sw;
-                                    scrollable = 1;
-                                    while (xx < w && scrollable)
-                                      {
-                                        let yy = sy;
-                                        let scrollable_points = 0;
-                                        let o1 = (y + yy) * wScreen + x + xx;
-                                        let o0 = (y + yy - sdy) * wScreen + x + xx - sdx;
-                                        while (yy < sy + sh)
-                                          {
-                                            if (px1[o1] == px0[o0])
-                                              scrollable_points++;
-                                            yy++;
-                                            o1 += wScreen;
-                                            o0 += wScreen;
-                                          }
-                                        if (scrollable_points < sh * scroll_detection_hit_threshold)
-                                          scrollable = 0;
-                                        xx++;
-                                      }
-                                    if (!scrollable)
-                                      sw = xx - sx - 1;
-                                    else
-                                      sw = xx - sx;
-                                    let yy = sy - 1;
-                                    scrollable = 1;
-                                    while (yy > 0 && scrollable)
-                                      {
-                                        let xx = sx;
-                                        let scrollable_points = 0;
-                                        let o1 = (y + yy) * wScreen + x + xx;
-                                        let o0 = (y + yy - sdy) * wScreen + x + xx - sdx;
-                                        while (xx < sx + sw)
-                                          {
-                                            if (px1[o1] == px0[o0])
-                                              scrollable_points++;
-                                            xx++;
-                                            o1++;
-                                            o0++;
-                                          }
-                                        if (scrollable_points < sw * scroll_detection_hit_threshold)
-                                          scrollable = 0;
-                                        yy--;
-                                      }
-                                    if (!scrollable)
-                                      sy = yy + 1;
-                                    else
-                                      sy = yy;
-                                    yy = sy + sh;
-                                    scrollable = 1;
-                                    while (yy < h && scrollable)
-                                      {
-                                        let xx = sx;
-                                        let scrollable_points = 0;
-                                        let o1 = (y + yy) * wScreen + x + xx;
-                                        let o0 = (y + yy - sdy) * wScreen + x + xx - sdx;
-                                        while (xx < sx + sw)
-                                          {
-                                            if (px1[o1] == px0[o0])
-                                              scrollable_points++;
-                                            xx++;
-                                            o1++;
-                                            o0++;
-                                          }
-                                        if (scrollable_points < sw * scroll_detection_hit_threshold)
-                                          scrollable = 0;
-                                        yy++;
-                                      }
-                                    if (!scrollable)
-                                      sh = yy - sy - 1;
-                                    else
-                                      sh = yy - sy;
-//                                    if (debugging)
-                                      console.log ("scrolling: pushing rect:", sx, sy, sw, sh, sdx, sdy);
-                                    scrollRects.forEach (
-                                      function (r)
-                                      {
-                                        if (!(sx + sw <= r.x || sx >= r.x + r.w || sy + sh <= r.y || sy >= r.y + r.h))
-                                          {
-                                            if (debugging)
-                                              console.log ("scrolling: neutralizing redundant rect:", r.x, r.y, r.w, r.h, r.dx, r.dy);
-                                            r.dx = 0;
-                                            r.dy = 0;
-                                          }
-                                      });
-                                    scrollRects.push (new ScrollParams (sx, sy, sw, sh, sdx, sdy));
-                                  }
-                              }
-                          }
-                      }
-                    y0 = y1;
-                  }
-              }
-            x0 = x1;
-          }
-        scrollRects.forEach (
-          function (r)
-          {
-            if (r.dx != 0 || r.dy != 0)
-              {
-                const adx = Math.abs (r.dx);
-                const ady = Math.abs (r.dy);
-                if (r.w > adx && r.h > ady)
-                  {
-//                    pushRectSolid (r.x, r.y, r.w, r.h, 0xff0000);
-//                    fillRectBuffer (px0, r.x, r.y, r.w, r.h, 0xffff0000);
-                    const xx = r.dx > 0 ? r.x + r.dx : r.x;
-                    const yy = r.dy > 0 ? r.y + r.dy : r.y;
-                    pushRectScroll (xx, yy, r.w - adx, r.h - ady, xx - r.dx, yy - r.dy);
-                    scrollRectBuffer (px0, r.x, r.y, r.w, r.h, r.dx, r.dy);
-                  }
-              }
-          });
-        if (debugging)
-          console.log ("scrolling: " + scrollRects.length.toString ()
-                       + " rectangle" + (scrollRects.length == 1 ? "" : "s") + " detected");
-        scrollRects.length = 0;
-      }
-
-      function determineBackgroundColor (px, x, y, w, h)
-      {
-        const pixels = w * h;
-        const max_points = Math.floor (pixels / 16);
-        const points = max_points > 256 ? 256 : max_points;
-        const color = new Array (points);
-        for (let i = 0; i < points; i++)
-          {
-            const p = Math.floor (Math.random () * pixels);
-            const yy = Math.floor (p / w);
-            const xx = p % w;
-            const o = yy * wScreen + x;
-            color[i] = px[o];
-          }
-        color.sort (
-          function (a, b)
-          {
-            return a - b;
-          });
-        let background_index = 0;
-        let background_abundance = 1;
-        let i0 = 0;
-        let i1 = 1;
-        while (i1 < points)
-          {
-            if (color[i1] != color[i0])
-              {
-                const a = i1 - i0;
-                if (a > background_abundance)
-                  {
-                    background_index = i0;
-                    background_abundance = a;
-                    i0 = i1;
-                  }
-              }
-            i1++
-          }
-        const a = i1 - i0;
-        if (a > background_abundance)
-          background_index = i0;
-        return color[background_index];
-      }
-
-      async function updateFullRectangle (x, y, w, h)
-      {
-        if (w * h * 4 > 1024)
-          await pushRectTight (x, y, w, h);
-        else
-          pushRectRaw (x, y, w, h);
-      }
-
-      async function updateInnerStructureHorizontal (px0, px1, x, y, w, h, final)
-      {
-        // if (debugging)
-        //   console.log ("updateInnerStructureHorizontal: x = " + x.toString () + ", y = " + y.toString ()
-        //                + ", w = " + w.toString () + ", h = " + h.toString () + ", final = ", final.toString ());
-        const empty = new Array (w);
-        const pixel_unchanged = 0x01000000;
-        const same_color = 0x2000000;
-        let xx = 0;
-        while (xx < w)
-          {
-            let yy = 0;
-            let o = y * wScreen + x + xx;
-            const start_color = px1[o];
-            empty[xx] = (start_color & 0x00ffffff) | (pixel_unchanged | same_color);
-            while (yy < h && empty[xx] & (pixel_unchanged | same_color))
-              {
-                if (px1[o] != px0[o])
-                  empty[xx] &= ~pixel_unchanged;
-                if (px1[o] != start_color)
-                  empty[xx] &= ~same_color;
-                o += wScreen;
-                yy++;
-              }
-            xx++;
-          }
-        let x0 = 0;
-        while (x0 < w && empty[x0] & (pixel_unchanged | same_color))
-          x0++;
-        while (x0 < w)
-          {
-            while (x0 < w && !(empty[x0] & (pixel_unchanged | same_color)))
-              x0++;
-            let x1 = x0;
-            while (x1 < w && empty[x1] & (pixel_unchanged | same_color))
-              x1++;
-            if (x1 < w && x1 - x0 < combine_rects_x_min_distance)
-              for (let xx = x0; xx < x1; xx++)
-                empty[xx] &= ~(pixel_unchanged | same_color);
-            x0 = x1;
-          }
-        let nothing_empty = 1;
-        for (let xx = 0; xx < w; xx++)
-          if (empty[xx] & (pixel_unchanged | same_color))
-            nothing_empty = 0;
-        // if (debugging)
-        //   console.log ("nothing_empty = " + nothing_empty.toString () + ", empty =", empty);
-        x0 = 0;
-        while (x0 < w)
-          {
-            let x1 = x0;
-            if (empty[x0] & pixel_unchanged)
-              {
-                while (x1 < w && empty[x1] & pixel_unchanged)
-                  x1++;
-              }
-            else if (empty[x0] & same_color)
-              {
-                while (x1 < w && empty[x1] & same_color && (empty[x1] & 0x00ffffff) == (empty[x0] & 0x00ffffff))
-                  x1++;
-                x1--;
-                while (x1 > x0 && empty[x1] & pixel_unchanged)
-                  x1--;
-                x1++;
-                const start_color = empty[x0] | 0xff000000;
-                pushRectSolid (x + x0, y, x1 - x0, h, debugging ? start_color | 0x00ffff : start_color);
-                fillRectBuffer (px0, x + x0, y, x1 - x0, h, start_color);
-              }
-            else
-              {
-                while (x1 < w && !(empty[x1] & (pixel_unchanged | same_color)))
-                  x1++;
-                if (final)
-                  await updateFullRectangle (x + x0, y, x1 - x0, h);
-                else
-                  await updateInnerStructureVertical (px0, px1, x + x0, y, x1 - x0, h, nothing_empty);
-              }
-            x0 = x1;
-          }
-      }
-
-      async function updateInnerStructureVertical (px0, px1, x, y, w, h, final)
-      {
-        // if (debugging)
-        //   console.log ("updateInnerStructureVertical: x = " + x.toString () + ", y = " + y.toString ()
-        //                + ", w = " + w.toString () + ", h = " + h.toString () + ", final = ", final.toString ());
-        const empty = new Array (h);
-        const pixel_unchanged = 1;
-        const same_color = 2;
-        let yy = 0;
-        while (yy < h)
-          {
-            let xx = 0;
-            let o = (y + yy) * wScreen + x;
-            const start_color = px1[o];
-            empty[yy] = (start_color & 0x00ffffff) | (pixel_unchanged | same_color);
-            while (xx < w && empty[yy] & (pixel_unchanged | same_color))
-              {
-                if (px1[o] != px0[o])
-                  empty[yy] &= ~pixel_unchanged;
-                if (px1[o] != start_color)
-                  empty[yy] &= ~same_color;
-                o++;
-                xx++;
-              }
-            yy++;
-          }
-        let y0 = 0;
-        while (y0 < h && empty[y0] & (pixel_unchanged | same_color))
-          y0++;
-        while (y0 < h)
-          {
-            while (y0 < h && !(empty[y0] & (pixel_unchanged | same_color)))
-              y0++;
-            let y1 = y0;
-            while (y1 < h && empty[y1] & (pixel_unchanged | same_color))
-              y1++;
-            if (y1 < h && y1 - y0 < combine_rects_y_min_distance)
-              for (let yy = y0; yy < y1; yy++)
-                empty[yy] &= ~(pixel_unchanged | same_color);
-            y0 = y1;
-          }
-        let nothing_empty = 1;
-        for (let yy = 0; yy < h; yy++)
-          if (empty[yy] & (pixel_unchanged | same_color))
-            nothing_empty = 0;
-        // if (debugging)
-        //   console.log ("nothing_empty = " + nothing_empty.toString () + ", empty =", empty);
-        y0 = 0;
-        while (y0 < h)
-          {
-            let y1 = y0;
-            if (empty[y0] & pixel_unchanged)
-              {
-                while (y1 < h && empty[y1] & pixel_unchanged)
-                  y1++;
-              }
-            else if (empty[y0] & same_color)
-              {
-                while (y1 < h && empty[y1] & same_color && (empty[y1] & 0x00ffffff) == (empty[y0] & 0x00ffffff)) 
-                  y1++;
-                y1--;
-                while (y1 > y0 && empty[y1] & pixel_unchanged)
-                  y1--;
-                y1++;
-                const start_color = empty[y0] | 0xff000000;
-                pushRectSolid (x, y + y0, w, y1 - y0, debugging ? start_color | 0xffff00 : start_color);
-                fillRectBuffer (px0, x, y + y0, w, y1 - y0, start_color);
-              }
-            else
-              {
-                while (y1 < h && !(empty[y1] & (pixel_unchanged | same_color)))
-                  y1++;
-                if (final)
-                  await updateFullRectangle (x, y + y0, w, y1 - y0);
-                else
-                  await updateInnerStructureHorizontal (px0, px1, x, y + y0, w, y1 - y0, nothing_empty);
-              }
-            y0 = y1;
-          }
-      }
-
-      async function decomposeRect (px0, px1, x, y, w, h)
-      {
-        await updateInnerStructureVertical (px0, px1, x, y, w, h, 0);
-      }
-
-      async function rfbFramebufferUpdate (isIncremental, x, y, w, h)
-      {
-        if (debugging)
-          console.log ("rfbFramebufferUpdate: isIncremental = " + isIncremental.toString ()
-                       + ", x = " + x.toString () + ", y = " + h.toString ()
-                       + ", w = " + w.toString () + ", h = " + h.toString ());
-        let id1 = ctx1.getImageData (x, y, w, h);
-        ctx0.putImageData (id1, x, y, x, y, w, h);
-        const id0 = ctx0.getImageData (0, 0, wScreen, hScreen);
-        const px0 = new Uint32Array (id0.data.buffer);
-        ctx1.drawImage (video, 0, 0, wScreen, hScreen);
-        id1 = ctx1.getImageData (0, 0, wScreen, hScreen);
-        let px1 = new Uint32Array (id1.data.buffer);
-        if (!isIncremental)
-          {
-            const color = determineBackgroundColor (px1, x, y, w, h);
-            if (debugging)
-              console.log ("background color = " + color.toString ());
-            pushRectSolid (x, y, w, h, debugging ? color | 0x7f00ff : color);
-            fillRectBuffer (px0, x, y, w, h, color);
-          }
-        do
-          {
-            const length = px0.length;
-            let o = 0;
-            while (o < length && px0[o] == px1[o])
-              o++;
-            if (o < length)
-              {
-//                if (isIncremental && w >= scroll_detection_min_width && h >= scroll_detection_min_height)
-//                  detectScrolling (px0, px1, x, y, w, h);
-                await decomposeRect (px0, px1, x, y, w, h);
-              }
-            if (rects.length == 0)
-              {
-                await sleep (100);
-                ctx1.drawImage (video, 0, 0, wScreen, hScreen);
-                id1 = ctx1.getImageData (x, y, w, h);
-                px1 = new Uint32Array (id1.data.buffer);
-              }
-          }
-        while (rects.length == 0);
-      }
-
-      function rfbReceivePixelFormat (buffer, offset)
-      {
-        if (debugging)
-          console.log ("received: SetPixelFormat");
-        const b = new Uint8Array (buffer);
-        rfb_bits_per_pixel = b[4];
-        rfb_depth = b[5];
-        rfb_big_endian_flag = b[6];
-        rfb_true_color_flag = b[7];
-        rfb_red_maximum = b[8] << 8 + b[9];
-        rfb_green_maximum = b[10] << 8 + b[11];
-        rfb_blue_maximum = b[12] << 8 + b[13];
-        rfb_red_shift = b[14];
-        rfb_green_shift = b[15];
-        rfb_blue_shift = b[16];
-        return 20;
-      }
-
-      function rfbReceiveEncodings (buffer, offset)
-      {
-        if (debugging)
-          console.log ("received: SetEncodings");
-        const b = new Uint8Array (buffer);
-        const encodings = b[offset + 2] << 8 + b[offset + 3];
-        return 4 + 4 * encodings;
-      }
-
-      function rfbAbort ()
-      {
-        if (debugging)
-          console.log ("Aborting RFB transmission ...");
-        processing += rfb_aborted;
-      }
-
-      async function rfbFramebufferUpdateRequest (buffer, offset)
-      {
-        if (debugging)
-          console.log ("received: FramebufferUpdateRequest");
-        if (processing)
-          {
-//            if (debugging)
-              if (processing >= rfb_aborted)
-                console.log ("aborted");
-              else
-                console.log ("already being processed");
-          }
-        else
-          {
-            processing++;
-            let b = new Uint8Array (buffer);
-            let isIncremental = b[1];
-            const x = b[2] * 256 + b[3];
-            const y = b[4] * 256 + b[5];
-            const w = b[6] * 256 + b[7];
-            const h = b[8] * 256 + b[9];
-            if (debugging)
-              {
-                console.log ("FramebufferUpdateRequest: Initiating processing ...");
-                console.log ("wScreen = ", wScreen, ", hScreen = ", hScreen + ", w = ", w, ", h = ", h);
-              }
-            rects.length = 0;
-            if (processing < rfb_aborted)
-              {
-                if (isFirstFrame)
-                  {
-                    await rfbFramebufferUpdate (0, 0, 0, wScreen, hScreen);
-                    isFirstFrame = 0;
-                  }
-                else if (isIncremental)
-                  await rfbFramebufferUpdate (1, x, y, w, h);
-                else
-                  await rfbFramebufferUpdate (0, x, y, w, h);
-                if (debugging)
-                  console.log ("FramebufferUpdateRequest: Processing completed. Sending data ... ("
-                               + rects.length.toString ()
-                               + " rectangle" + (rects.length != 1 ? "s" : "") + ")");
-                const header_buffer = new ArrayBuffer (4);
-                b = new Uint8Array (header_buffer);
-                const num_rects = rects.length;
-                b[0] = 0;
-                b[1] = rfb_padding;
-                b[2] = num_rects >>> 8;
-                b[3] = num_rects & 0xff;
-                if (debugging)
-                  console.log ("sending rfbFramebufferUpdate header: " + buf2hex (header_buffer));
-                socket.send (header_buffer);
-                rects.forEach (
-                  function sendIt (r)
-                  {
-                    r.send ();
-                  });
-              }
-            processing--;
-          }
-        return 10;
-      }
-
-      function rfbReceiveKeyEvent (buffer, offset)
-      {
-        if (debugging)
-          console.log ("received: KeyEvent");
-        return 8;
-      }
-
-      function rfbReceivePointerEvent (buffer, offset)
-      {
-        if (debugging)
-          console.log ("received: PointerEvent");
-        return 6;
-      }
-
-      function rfbReceiveCutText (buffer, offset)
-      {
-        if (debugging)
-          console.log ("received: ClientCutText");
-        const b = new Uint8Array (buffer);
-        const length = b[offset + 4] << 24 + b[offset + 5] << 16 + b[offset + 6] << 8 + b[offset + 7];
-        return 8 + length;
-      }
-
-      function rfbServer (event)
-      {
-        if (debugging)
-          console.log ("received: " + buf2hex (event.data));
-        const b = new Uint8Array (event.data);
-        let offset = 0;
-        while (offset < event.data.byteLength)
-          {
-            if (debugging)
-              console.log ("received RFB packet type " + b[offset].toString ());
-            if (b[offset] == 0)
-              offset += rfbReceivePixelFormat (event.data, offset);
-            else if (b[offset] == 2)
-              offset += rfbReceiveEncodings (event.data, offset);
-            else if (b[offset] == 3)
-              offset += rfbFramebufferUpdateRequest (event.data, offset);
-            else if (b[offset] == 4)
-              offset += rfbReceiveKeyEvent (event.data, offset);
-            else if (b[offset] == 5)
-              offset += rfbReceivePointerEvent (event.data, offset);
-            else if (b[offset] == 6)
-              offset += rfbReceiveCutText (event.data, offset);
-            else
-              {
-                if (debugging)
-                  console.log ("unknown RFB packet");
-                offset = event.data.byteLength;
-              }
-          }
-      }
-
-      function rfbFramebufferHandshake (event)
-      {
-        if (debugging)
-          console.log ("received: " + buf2hex (event.data));
-        socket.removeEventListener ("message", rfbFramebufferHandshake);
-        socket.addEventListener ("message", rfbServer);
-        const buffer = new ArrayBuffer (24 + rfb_name_length);
-        const b = new Uint8Array (buffer);
-        b[0] = wScreen >>> 8;
-        b[1] = wScreen & 0xff;
-        b[2] = hScreen >>> 8;
-        b[3] = hScreen & 0xff;
-        b[4] = rfb_bits_per_pixel;
-        b[5] = rfb_depth;
-        b[6] = rfb_big_endian_flag;
-        b[7] = rfb_true_color_flag;
-        b[8] = rfb_red_maximum >>> 8;
-        b[9] = rfb_red_maximum & 0xff;
-        b[10] = rfb_green_maximum >>> 8;
-        b[11] = rfb_green_maximum & 0xff;
-        b[12] = rfb_blue_maximum >>> 8;
-        b[13] = rfb_blue_maximum & 0xff;
-        b[14] = rfb_red_shift;
-        b[15] = rfb_green_shift;
-        b[16] = rfb_blue_shift;
-        b[17] = rfb_padding;
-        b[18] = rfb_padding;
-        b[19] = rfb_padding;
-        b[20] = rfb_name_length >>> 24;
-        b[21] = rfb_name_length >>> 16;
-        b[22] = rfb_name_length >>> 8;
-        b[23] = rfb_name_length & 0xff;
-        for (let i = 0; i < rfb_name_length; i++)
-          b[24 + i] = rfb_name[i];
-        if (debugging)
-          console.log ("sending framebuffer parameters: " + buf2hex (buffer));
-        socket.send (buffer);
-      }
-
-      function rfbAuthenticate (event)
-      {
-        if (debugging)
-          console.log ("received: " + buf2hex (event.data));
-        socket.removeEventListener ("message", rfbAuthenticate);
-        socket.addEventListener ("message", rfbFramebufferHandshake);
-        if (debugging)
-          console.log ("sending: 00 00 00 00");
-        const buffer = new ArrayBuffer (4);
-        const b = new Uint8Array (buffer);
-        b[0] = 0;
-        b[1] = 0;
-        b[2] = 0;
-        b[3] = 0;
-        socket.send (buffer);
-      }
-
-      function rfbSecurityHandshake (event)
-      {
-        if (debugging)
-          console.log ("received: " + buf2hex (event.data));
-        socket.removeEventListener ("message", rfbSecurityHandshake);
-        socket.addEventListener ("message", rfbAuthenticate);
-        if (debugging)
-          console.log ("sending: 01 01");
-        const buffer = new ArrayBuffer (2);
-        const b = new Uint8Array (buffer);
-        b[0] = 1;
-        b[1] = 1;
-        socket.send (buffer);
-      }
-
-      function rfbConnect (event)
-      {
-        socket.addEventListener ("message", rfbSecurityHandshake);
-        if (debugging)
-          console.log ("sending: RFB 003.008\\n");
-        socket.send ("RFB 003.008\n");
-      }
-
-      document.addEventListener ("DOMContentLoaded",
-        function ()
-        {
-          video.addEventListener ("play",
-            function ()
-            {
-              wScreen = video.videoWidth;
-              hScreen = video.videoHeight;
-              canvas1.width = wScreen;
-              canvas1.height = hScreen;
-              ctx1 = canvas1.getContext ("2d");
-              canvas0.width = wScreen;
-              canvas0.height = hScreen;
-              ctx0 = canvas0.getContext ("2d");
-              ctx0.beginPath ();
-              ctx0.rect (0, 0, wScreen, hScreen);
-              ctx0.fillStyle = "black";
-              ctx0.fill ();
-              if (debugging)
-                console.log ("Opening WebSocket ...");
-              socket = new WebSocket ("wss://streaming.cvh-server.de/websock/wc-6/", ['binary', 'base64']);
-              socket.binaryType = "arraybuffer";
-              socket.addEventListener ("open", rfbConnect);
-            },
-            false);
-          video.addEventListener ("abort", rfbAbort, false);
-          video.addEventListener ("emptied", rfbAbort, false);
-          video.addEventListener ("ended", rfbAbort, false);
-          video.addEventListener ("error", rfbAbort, false);
-          video.addEventListener ("pause", rfbAbort, false);
-          video.addEventListener ("stalled", rfbAbort, false);
-//          video.addEventListener ("suspend", rfbAbort, false);
-        });
-
-    </script>
-  </body>
-</html>
diff --git a/20211111/I2C_data_transfer.pdf b/20211111/I2C_data_transfer.pdf
deleted file mode 120000
index 73e7ce07770a0599ae1a2aa11e97899767a1f9b0..0000000000000000000000000000000000000000
--- a/20211111/I2C_data_transfer.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/I2C_data_transfer.pdf
\ No newline at end of file
diff --git a/20211111/SPI_single_slave.pdf b/20211111/SPI_single_slave.pdf
deleted file mode 120000
index b51d59e51fffb101086bfaa811370f66436127e7..0000000000000000000000000000000000000000
--- a/20211111/SPI_single_slave.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_single_slave.pdf
\ No newline at end of file
diff --git a/20211111/SPI_three_slaves.pdf b/20211111/SPI_three_slaves.pdf
deleted file mode 120000
index b2e27257652bbefd9e1c9194ac1f518a43c8aa15..0000000000000000000000000000000000000000
--- a/20211111/SPI_three_slaves.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_three_slaves.pdf
\ No newline at end of file
diff --git a/20211111/SPI_three_slaves_daisy_chained.pdf b/20211111/SPI_three_slaves_daisy_chained.pdf
deleted file mode 120000
index 967389aeed788b2fed87b2a6b25a5ebd8256978f..0000000000000000000000000000000000000000
--- a/20211111/SPI_three_slaves_daisy_chained.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_three_slaves_daisy_chained.pdf
\ No newline at end of file
diff --git a/20211111/es-20211111.pdf b/20211111/es-20211111.pdf
deleted file mode 100644
index 168658df09c56105788b010e03d54395ce3157dc..0000000000000000000000000000000000000000
Binary files a/20211111/es-20211111.pdf and /dev/null differ
diff --git a/20211111/es-20211111.tex b/20211111/es-20211111.tex
deleted file mode 100644
index 1217908cb9f81bb7861a1a680ac5a72fd9318fc4..0000000000000000000000000000000000000000
--- a/20211111/es-20211111.tex
+++ /dev/null
@@ -1,541 +0,0 @@
-% es-20211111.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{tikz}
-
-\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{11.\ November 2021}
-
-\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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-      \begin{itemize}
-        \item[3.0] Vorbereitungen
-        \item[3.1] IP-Adressen
-        \item[3.2] MAC-Adressen
-        \item[3.3] TCP- und UDP-Ports
-        \item[3.4] TCP-Protokolle
-        \item[3.5] Routing
-        \color{medgreen}
-        \item[3.6] Netzwerkanalyse
-        \color{black}
-        \item[3.7] SSH
-        \color{medgreen}
-        \item[3.8] X11 und VNC
-        \item[3.9] Programmierung
-      \end{itemize}
-    \item[\textbf{4}] \textbf{Bus-Systeme}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{2}
-\section{TCP/IP in der Praxis}
-\setcounter{subsection}{5}
-\subsection{Netzwerkanalyse}
-
-\begin{frame}
-
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      \lstinline[style=cmd]{tcpdump}
-    \item
-      \lstinline[style=cmd]{wireshark}
-    \item
-      \lstinline[style=cmd]{ettercap}
-  \end{itemize}
-
-\end{frame}
-
-\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}
-
-\subsection{X11 und VNC}
-
-\begin{frame}
-
-  \showsection
-  \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
-    \pause
-    \bigskip
-    \item
-      VNC = Virtual Network Computing
-    \item
-      VNC-Server stellt Bildschirminhalt zur Verfügung
-      \begin{itemize}
-        \item entweder: eigener, virtueller X11-Server
-        \item oder: ruft Inhalt von anderem (X11-) Bildschirm ab
-      \end{itemize}
-    \item
-      VNC-Client ruft Bildschirminhalt ab und stellt ihn dar
-      \begin{itemize}
-        \item z.\,B.\ per X11
-        \item z.\,B.\ per Web-Interface: noVNC
-      \end{itemize}
-  \end{itemize}
-
-\end{frame}
-
-\subsection{Programmierung}
-
-\begin{frame}
-
-  \showsection
-  \showsubsection
-
-  \begin{itemize}
-    \item
-      Shell-Skripte: \file{nc} (\file{traditional} oder \file{OpenBSD})
-    \item
-      C: Sockets, \lstinline{select()}
-    \item
-      C++: Callbacks
-  \end{itemize}
-
-  \pause
-  \bigskip
-
-  Aktuelles Beispiel: Programmierung eines VNC-Servers per Web-Interface
-
-  \begin{itemize}
-    \item
-      Grundlagen: RFC~6143
-    \item
-      Praxis: Untersuchung mit Wireshark
-    \item
-      Implementation: JavaScript, WebSockets, \file{websockify}, Callbacks
-  \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}}}%
-    \item[\textbf{2}] \textbf{Einführung in Unix}
-    \item[\textbf{3}] \textbf{TCP/IP in der Praxis}
-      \begin{itemize}
-        \vspace*{-\medskipamount}
-        \item[\textbf{\dots}]
-        \color{medgreen}
-        \item[3.6] Netzwerkanalyse
-        \color{black}
-        \item[3.7] SSH
-        \color{medgreen}
-        \item[3.8] X11 und VNC
-        \item[3.9] Programmierung
-      \end{itemize}
-    \item[\textbf{5}] \textbf{Bus-Systeme}
-      \begin{itemize}
-        \color{red}
-        \item[5.1]Was sind Bus-Systeme?
-        \item[5.2]RS-232
-        \item[5.3]\ItwoC\ (TWI)
-        \item[5.4]SPI
-        \vspace*{-\smallskipamount}
-        \item[\textbf{\dots}]
-      \end{itemize}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \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-Personal-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
-
-  \begin{visibleenv}<2->
-    Minimal-Hardware:
-    \begin{itemize}
-      \item
-        RS-232
-      \item
-        \ItwoC\ (TWI)
-      \item
-        SPI
-    \end{itemize}
-  \end{visibleenv}
-
-  \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}
-
-  \pause
-  \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}
-
-\end{document}
diff --git a/20211111/kompassmodul-an-roboter.jpg b/20211111/kompassmodul-an-roboter.jpg
deleted file mode 120000
index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000
--- a/20211111/kompassmodul-an-roboter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul-an-roboter.jpg
\ No newline at end of file
diff --git a/20211111/kompassmodul.jpg b/20211111/kompassmodul.jpg
deleted file mode 120000
index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000
--- a/20211111/kompassmodul.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul.jpg
\ No newline at end of file
diff --git a/20211111/logo-hochschule-bochum-cvh-text-v2.pdf b/20211111/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211111/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211111/logo-hochschule-bochum.pdf b/20211111/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211111/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211111/matrix-1-tasten.png b/20211111/matrix-1-tasten.png
deleted file mode 100644
index 2899a1b4643723b578e0e8a7399755e00d31aff9..0000000000000000000000000000000000000000
Binary files a/20211111/matrix-1-tasten.png and /dev/null differ
diff --git a/20211111/matrix-2-leds.png b/20211111/matrix-2-leds.png
deleted file mode 100644
index 2aeeb0c5295ebed9b0f45744b842d1d526b22320..0000000000000000000000000000000000000000
Binary files a/20211111/matrix-2-leds.png and /dev/null differ
diff --git a/20211111/matrix-3-gluehlampen.png b/20211111/matrix-3-gluehlampen.png
deleted file mode 100644
index 6ecb8864decc5a88ef77c89cfd05a607ed41eab7..0000000000000000000000000000000000000000
Binary files a/20211111/matrix-3-gluehlampen.png and /dev/null differ
diff --git a/20211111/matrix.xcf.gz b/20211111/matrix.xcf.gz
deleted file mode 100644
index b5c30586903fd4bbac51024b13aeadccf30f70b7..0000000000000000000000000000000000000000
Binary files a/20211111/matrix.xcf.gz and /dev/null differ
diff --git a/20211111/motherboard-anschluesse.jpg b/20211111/motherboard-anschluesse.jpg
deleted file mode 120000
index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000
--- a/20211111/motherboard-anschluesse.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/motherboard-anschluesse.jpg
\ No newline at end of file
diff --git a/20211111/pgslides.sty b/20211111/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211111/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211111/pwm-1-50-prozent.png b/20211111/pwm-1-50-prozent.png
deleted file mode 100644
index c1e631f9f37a0c6619b5c214357e7c3c47d0dd8b..0000000000000000000000000000000000000000
Binary files a/20211111/pwm-1-50-prozent.png and /dev/null differ
diff --git a/20211111/pwm-2-50-prozent-geglaettet.png b/20211111/pwm-2-50-prozent-geglaettet.png
deleted file mode 100644
index 889a22da0af52e670d2b04301b5f5b0878be6a7d..0000000000000000000000000000000000000000
Binary files a/20211111/pwm-2-50-prozent-geglaettet.png and /dev/null differ
diff --git a/20211111/pwm-3-50-prozent-geglaettet.png b/20211111/pwm-3-50-prozent-geglaettet.png
deleted file mode 100644
index d09a99a11fc0900c498cfa1db5a13715107247f8..0000000000000000000000000000000000000000
Binary files a/20211111/pwm-3-50-prozent-geglaettet.png and /dev/null differ
diff --git a/20211111/pwm-4-75-prozent-geglaettet.png b/20211111/pwm-4-75-prozent-geglaettet.png
deleted file mode 100644
index bd07bd2174320220d7e84d766c96e6b518e78582..0000000000000000000000000000000000000000
Binary files a/20211111/pwm-4-75-prozent-geglaettet.png and /dev/null differ
diff --git a/20211111/pwm.xcf.gz b/20211111/pwm.xcf.gz
deleted file mode 100644
index 7ec32313de0854162ee7d26fa7ebcd83c0bcb5b0..0000000000000000000000000000000000000000
Binary files a/20211111/pwm.xcf.gz and /dev/null differ
diff --git a/20211111/rs-232.pdf b/20211111/rs-232.pdf
deleted file mode 120000
index 67016059af4a0ca0db871b9dd784bcacc0eecf7a..0000000000000000000000000000000000000000
--- a/20211111/rs-232.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/rs-232.pdf
\ No newline at end of file
diff --git a/20211111/serial-G.ino b/20211111/serial-G.ino
deleted file mode 100644
index 7fe49df377b7a3f4ee8b852e83fcc72c9235de29..0000000000000000000000000000000000000000
--- a/20211111/serial-G.ino
+++ /dev/null
@@ -1,10 +0,0 @@
-void setup() {
-  // put your setup code here, to run once:
-  Serial.begin(960, SERIAL_8O1);
-}
-
-void loop() {
-  // put your main code here, to run repeatedly:
-  // delay (1);
-  Serial.print ('G');
-}
diff --git a/20211111/tcpip-server-2.cpp b/20211111/tcpip-server-2.cpp
deleted file mode 100644
index 39e9faa75df110c4d0a78d3d1409ae4843d7d278..0000000000000000000000000000000000000000
--- a/20211111/tcpip-server-2.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <boost/asio/io_service.hpp>
-#include <boost/asio/write.hpp>
-#include <boost/asio/buffer.hpp>
-#include <boost/asio/ip/tcp.hpp>
-#include <iostream>
-#include <string>
-
-using namespace boost::asio;
-using namespace boost::asio::ip;
-
-io_service ioservice;
-tcp::endpoint tcp_endpoint{tcp::v4(), 1234};
-tcp::acceptor tcp_acceptor{ioservice, tcp_endpoint};
-tcp::socket tcp_socket{ioservice};
-std::string data;
-
-void write_handler(const boost::system::error_code &ec,
-  std::size_t bytes_transferred)
-{
-  if (!ec)
-    tcp_socket.shutdown(tcp::socket::shutdown_send);
-}
-
-void accept_handler(const boost::system::error_code &ec)
-{
-  if (!ec)
-  {
-    std::string data = "Hello, world!\n";
-    async_write(tcp_socket, buffer(data), write_handler);
-  }
-}
-
-int main()
-{
-  tcp_acceptor.listen();
-  std::cout << "Nach listen()" << std::endl;
-  tcp_acceptor.async_accept(tcp_socket, accept_handler);
-  ioservice.run();
-}
diff --git a/20211111/widerstandsnetzwerk-1.png b/20211111/widerstandsnetzwerk-1.png
deleted file mode 100644
index 639a2d8a7f2ae212771755c560488ee44506a98a..0000000000000000000000000000000000000000
Binary files a/20211111/widerstandsnetzwerk-1.png and /dev/null differ
diff --git a/20211111/widerstandsnetzwerk-2.png b/20211111/widerstandsnetzwerk-2.png
deleted file mode 100644
index 40afd2246487439946b672b728b0433fc4bd91dc..0000000000000000000000000000000000000000
Binary files a/20211111/widerstandsnetzwerk-2.png and /dev/null differ
diff --git a/20211111/widerstandsnetzwerk-3.png b/20211111/widerstandsnetzwerk-3.png
deleted file mode 100644
index 637e988acfaa8bf9f45c056259cf2719b8c824b8..0000000000000000000000000000000000000000
Binary files a/20211111/widerstandsnetzwerk-3.png and /dev/null differ
diff --git a/20211111/widerstandsnetzwerk.xcf.gz b/20211111/widerstandsnetzwerk.xcf.gz
deleted file mode 100644
index e94ce445a8ae92f67a4b0de47e2c2e903ceb5a39..0000000000000000000000000000000000000000
Binary files a/20211111/widerstandsnetzwerk.xcf.gz and /dev/null differ
diff --git a/20211118/I2C_data_transfer.pdf b/20211118/I2C_data_transfer.pdf
deleted file mode 120000
index 73e7ce07770a0599ae1a2aa11e97899767a1f9b0..0000000000000000000000000000000000000000
--- a/20211118/I2C_data_transfer.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/I2C_data_transfer.pdf
\ No newline at end of file
diff --git a/20211118/Retribution_Engine_Screenshot_120807.jpg b/20211118/Retribution_Engine_Screenshot_120807.jpg
deleted file mode 120000
index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000
--- a/20211118/Retribution_Engine_Screenshot_120807.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20211118/SPI_single_slave.pdf b/20211118/SPI_single_slave.pdf
deleted file mode 120000
index b51d59e51fffb101086bfaa811370f66436127e7..0000000000000000000000000000000000000000
--- a/20211118/SPI_single_slave.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_single_slave.pdf
\ No newline at end of file
diff --git a/20211118/SPI_three_slaves.pdf b/20211118/SPI_three_slaves.pdf
deleted file mode 120000
index b2e27257652bbefd9e1c9194ac1f518a43c8aa15..0000000000000000000000000000000000000000
--- a/20211118/SPI_three_slaves.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_three_slaves.pdf
\ No newline at end of file
diff --git a/20211118/SPI_three_slaves_daisy_chained.pdf b/20211118/SPI_three_slaves_daisy_chained.pdf
deleted file mode 120000
index 967389aeed788b2fed87b2a6b25a5ebd8256978f..0000000000000000000000000000000000000000
--- a/20211118/SPI_three_slaves_daisy_chained.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/SPI_three_slaves_daisy_chained.pdf
\ No newline at end of file
diff --git a/20211118/Telefon_t-sinus-700.jpg b/20211118/Telefon_t-sinus-700.jpg
deleted file mode 120000
index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000
--- a/20211118/Telefon_t-sinus-700.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20211118/a380.jpg b/20211118/a380.jpg
deleted file mode 120000
index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000
--- a/20211118/a380.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/a380.jpg
\ No newline at end of file
diff --git a/20211118/curiosity.jpg b/20211118/curiosity.jpg
deleted file mode 120000
index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000
--- a/20211118/curiosity.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/curiosity.jpg
\ No newline at end of file
diff --git a/20211118/dsc_8208.jpg b/20211118/dsc_8208.jpg
deleted file mode 120000
index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000
--- a/20211118/dsc_8208.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20211118/es-20211118.pdf b/20211118/es-20211118.pdf
deleted file mode 100644
index 9e4dd6867c8876ea9f98e164db50e97e690a5284..0000000000000000000000000000000000000000
Binary files a/20211118/es-20211118.pdf and /dev/null differ
diff --git a/20211118/es-20211118.tex b/20211118/es-20211118.tex
deleted file mode 100644
index e6358d3e07ec297a7624fb5779d743fdac679cbf..0000000000000000000000000000000000000000
--- a/20211118/es-20211118.tex
+++ /dev/null
@@ -1,783 +0,0 @@
-% es-20211111.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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: Echtzeit: Definition, Echtzeitprogrammierung
-
-\documentclass[10pt,t]{beamer}
-
-\usepackage{pgslides}
-\usepackage{rotating}
-\usepackage{tikz}
-\usepackage[obeyfamily=false,mathrm=mathsf,textrm=sffamily]{siunitx}
-
-\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{18.\ November 2021}
-
-\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}}}%
-    \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]PWM
-        \item[5.6]Sonstiges
-      \end{itemize}
-    \item[\textbf{6}] \textbf{Echtzeit}
-      \begin{itemize}
-        \color{red}
-        \item[6.1] Was ist Echtzeit?
-        \item[6.2] Echtzeitprogrammierung
-        \color{black}
-        \item[6.3] Multitasking
-        \item[6.4] Ressourcen
-        \item[6.5] Prioritäten
-      \end{itemize}
-    \vspace*{-\smallskipamount}
-    \item[\textbf{\dots}]
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{3}
-\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-Personal-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
-
-  \begin{visibleenv}<2->
-    Minimal-Hardware:
-    \begin{itemize}
-      \item
-        RS-232
-      \item
-        \ItwoC\ (TWI)
-      \item
-        SPI
-    \end{itemize}
-  \end{visibleenv}
-
-  \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
-      \begin{picture}(0,0)
-        \only<1>{\put(3.2,1.2){\makebox(0,0){%
-          \begin{minipage}{3.3cm}
-            \begin{tabular}{lcl}
-              \multicolumn{3}{l}{Neue Bezeichnungen:}\\[\smallskipamount]
-              Master & \textarrow & Primary   \\
-              Slave  & \textarrow & Secondary \\
-              MISO   & \textarrow & PISO      \\
-              MOSI   & \textarrow & POSI
-            \end{tabular}
-          \end{minipage}}}}
-      \end{picture}
-    \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}
-
-  \pause
-  \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}
-
-\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)
-    \pause
-    \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}
-
-%  \pause
-%
-%  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}
-
-\end{document}
diff --git a/20211118/herzschrittmacher.jpg b/20211118/herzschrittmacher.jpg
deleted file mode 120000
index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000
--- a/20211118/herzschrittmacher.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20211118/kompassmodul-an-roboter.jpg b/20211118/kompassmodul-an-roboter.jpg
deleted file mode 120000
index dab8b38c1a92bf8072d42dc3abcc07be54a58c7b..0000000000000000000000000000000000000000
--- a/20211118/kompassmodul-an-roboter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul-an-roboter.jpg
\ No newline at end of file
diff --git a/20211118/kompassmodul.jpg b/20211118/kompassmodul.jpg
deleted file mode 120000
index be108a5341df13a693959dbe69b7b9541b36fc4c..0000000000000000000000000000000000000000
--- a/20211118/kompassmodul.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/kompassmodul.jpg
\ No newline at end of file
diff --git a/20211118/logo-hochschule-bochum-cvh-text-v2.pdf b/20211118/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211118/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211118/logo-hochschule-bochum.pdf b/20211118/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211118/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211118/loop-time.cpp b/20211118/loop-time.cpp
deleted file mode 100644
index bb4fb00de597c740ab097e6eacc955d4d65da117..0000000000000000000000000000000000000000
--- a/20211118/loop-time.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-  while(1) {
-    currentTime = micros();
-    cycleTime = currentTime - previousTime;
-    #if defined(LOOP_TIME)
-      if (cycleTime >= LOOP_TIME) break;
-    #else
-      break;  
-    #endif
-  }
-  previousTime = currentTime;
-
-
-
-  currentTime = micros();
-  #if defined(LOOP_TIME)
-    cycleTime = currentTime - previousTime;
-    while (cycleTime < LOOP_TIME)
-      {
-        currentTime = micros();
-        cycleTime = currentTime - previousTime;
-      }
-  #endif
-  previousTime = currentTime;
-
-
-
-  #if defined(LOOP_TIME)
-    while ((currentTime = micros()) - previousTime < LOOP_TIME)
-      ; /* do nothing */
-    previousTime = currentTime;
-  #else
-    currentTime = micros();
-  #endif
diff --git a/20211118/motherboard-anschluesse.jpg b/20211118/motherboard-anschluesse.jpg
deleted file mode 120000
index 07335d7dff65c71a683588d2ed108485c4653fb7..0000000000000000000000000000000000000000
--- a/20211118/motherboard-anschluesse.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/motherboard-anschluesse.jpg
\ No newline at end of file
diff --git a/20211118/pgslides.sty b/20211118/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211118/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211118/quadrocopter.jpg b/20211118/quadrocopter.jpg
deleted file mode 120000
index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000
--- a/20211118/quadrocopter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20211118/rp6.jpg b/20211118/rp6.jpg
deleted file mode 120000
index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000
--- a/20211118/rp6.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/rp6.jpg
\ No newline at end of file
diff --git a/20211118/rs-232.pdf b/20211118/rs-232.pdf
deleted file mode 120000
index 67016059af4a0ca0db871b9dd784bcacc0eecf7a..0000000000000000000000000000000000000000
--- a/20211118/rs-232.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/rs-232.pdf
\ No newline at end of file
diff --git a/20211118/xbee.jpg b/20211118/xbee.jpg
deleted file mode 120000
index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000
--- a/20211118/xbee.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/xbee.jpg
\ No newline at end of file
diff --git a/20211125/Retribution_Engine_Screenshot_120807.jpg b/20211125/Retribution_Engine_Screenshot_120807.jpg
deleted file mode 120000
index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000
--- a/20211125/Retribution_Engine_Screenshot_120807.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20211125/Telefon_t-sinus-700.jpg b/20211125/Telefon_t-sinus-700.jpg
deleted file mode 120000
index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000
--- a/20211125/Telefon_t-sinus-700.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20211125/a380.jpg b/20211125/a380.jpg
deleted file mode 120000
index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000
--- a/20211125/a380.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/a380.jpg
\ No newline at end of file
diff --git a/20211125/curiosity.jpg b/20211125/curiosity.jpg
deleted file mode 120000
index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000
--- a/20211125/curiosity.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/curiosity.jpg
\ No newline at end of file
diff --git a/20211125/dsc_8208.jpg b/20211125/dsc_8208.jpg
deleted file mode 120000
index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000
--- a/20211125/dsc_8208.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20211125/es-20211125.pdf b/20211125/es-20211125.pdf
deleted file mode 100644
index 2d4a180ee8ab9a990ad1dae98a225369b0b06abb..0000000000000000000000000000000000000000
Binary files a/20211125/es-20211125.pdf and /dev/null differ
diff --git a/20211125/es-20211125.tex b/20211125/es-20211125.tex
deleted file mode 100644
index dd721d798306cbe194bad584f3e7fcb8007cba50..0000000000000000000000000000000000000000
--- a/20211125/es-20211125.tex
+++ /dev/null
@@ -1,1715 +0,0 @@
-% es-20211125.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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: Echtzeit: Multitasking, Ressourcen
-
-\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{25.\ November 2021}
-
-\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}}}%
-    \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{5}] \textbf{Echtzeit}
-      \begin{itemize}
-        \color{medgreen}
-        \item[5.1] Was ist Echtzeit?
-        \color{orange}
-        \item[5.2] Echtzeitprogrammierung
-        \color{red}
-        \item[5.3] Multitasking
-        \item[5.4] Ressourcen
-        \item[5.5] Prioritäten
-      \end{itemize}
-%    \item[\textbf{???}]
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{4}
-\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}<1>
-        \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}<3>
-        \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)
-    \pause
-    \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}
-
-%  \pause
-%
-%  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}
-
-\iffalse
-
-\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}
-
-\fi
-
-\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}
-
-\iffalse
-
-\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}
-
-\fi
-
-\end{document}
diff --git a/20211125/function-pointer.txt b/20211125/function-pointer.txt
deleted file mode 100644
index cad7e7b3abfc759c728c98f43aacba152cea8c09..0000000000000000000000000000000000000000
--- a/20211125/function-pointer.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-static void (*BUMPERS_stateChangedHandler)(void) = BUMPERS_stateChanged_DUMMY;
-             ^
-             Das, worauf BUMPERS_stateChangedHandler zeigt, ist eine Funktion.
-
-=> BUMPERS_stateChangedHandler ist ein Zeiger auf eine Funktion.
diff --git a/20211125/herzschrittmacher.jpg b/20211125/herzschrittmacher.jpg
deleted file mode 120000
index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000
--- a/20211125/herzschrittmacher.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20211125/if-operator.txt b/20211125/if-operator.txt
deleted file mode 100644
index 84935fb33cab3f65b1a2f7ac5f5d06ceb48d32e7..0000000000000000000000000000000000000000
--- a/20211125/if-operator.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-  if (bed)
-    a = 1;
-  else
-    a = 2;
-
-ist äquivalent zu:
-
-  a = bed ? 1 : 2;
diff --git a/20211125/logo-hochschule-bochum-cvh-text-v2.pdf b/20211125/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211125/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211125/logo-hochschule-bochum.pdf b/20211125/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211125/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211125/pathfinder.jpg b/20211125/pathfinder.jpg
deleted file mode 120000
index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000
--- a/20211125/pathfinder.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20211125/pgslides.sty b/20211125/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211125/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211125/philosophenproblem.jpg b/20211125/philosophenproblem.jpg
deleted file mode 120000
index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000
--- a/20211125/philosophenproblem.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20211125/quadrocopter.jpg b/20211125/quadrocopter.jpg
deleted file mode 120000
index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000
--- a/20211125/quadrocopter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20211125/rp6.jpg b/20211125/rp6.jpg
deleted file mode 120000
index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000
--- a/20211125/rp6.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/rp6.jpg
\ No newline at end of file
diff --git a/20211125/xbee.jpg b/20211125/xbee.jpg
deleted file mode 120000
index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000
--- a/20211125/xbee.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/xbee.jpg
\ No newline at end of file
diff --git a/20211202/Retribution_Engine_Screenshot_120807.jpg b/20211202/Retribution_Engine_Screenshot_120807.jpg
deleted file mode 120000
index 19f4cb3e4aae1e24c3466a25b2c0e5ad90ee49e7..0000000000000000000000000000000000000000
--- a/20211202/Retribution_Engine_Screenshot_120807.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Retribution_Engine_Screenshot_120807.jpg
\ No newline at end of file
diff --git a/20211202/Telefon_t-sinus-700.jpg b/20211202/Telefon_t-sinus-700.jpg
deleted file mode 120000
index 27c322c50b0f05edc8b07cfb0cc99b1876eb506d..0000000000000000000000000000000000000000
--- a/20211202/Telefon_t-sinus-700.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/Telefon_t-sinus-700.jpg
\ No newline at end of file
diff --git a/20211202/a380.jpg b/20211202/a380.jpg
deleted file mode 120000
index 33a5d1fd18843bf7385e5a6d90f69af9fd8720da..0000000000000000000000000000000000000000
--- a/20211202/a380.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/a380.jpg
\ No newline at end of file
diff --git a/20211202/curiosity.jpg b/20211202/curiosity.jpg
deleted file mode 120000
index 4452844da537414b751c5283ca8468b3ced9afb3..0000000000000000000000000000000000000000
--- a/20211202/curiosity.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/curiosity.jpg
\ No newline at end of file
diff --git a/20211202/dsc_8208.jpg b/20211202/dsc_8208.jpg
deleted file mode 120000
index 5796341ebc774aa09965a3a29854c65ce1144fb8..0000000000000000000000000000000000000000
--- a/20211202/dsc_8208.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/dsc_8208.jpg
\ No newline at end of file
diff --git a/20211202/es-20211202.pdf b/20211202/es-20211202.pdf
deleted file mode 100644
index ba420eb35191fb7479bcfb05f3ae86df96e6b935..0000000000000000000000000000000000000000
Binary files a/20211202/es-20211202.pdf and /dev/null differ
diff --git a/20211202/es-20211202.tex b/20211202/es-20211202.tex
deleted file mode 100644
index d01a46f463c381ac8dc0f28a72d5bfa0a58ed6ee..0000000000000000000000000000000000000000
--- a/20211202/es-20211202.tex
+++ /dev/null
@@ -1,1709 +0,0 @@
-% es-20211202.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  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: Echtzeit: Scheduler, Semaphor, Mutex, Spinlock,Verklemmungen
-
-\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{2.\ Dezember 2021}
-
-\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}}}%
-    \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{5}] \textbf{Echtzeit}
-      \begin{itemize}
-        \color{medgreen}
-        \item[5.1] Was ist Echtzeit?
-        \item[5.2] Echtzeitprogrammierung
-        \item[5.3] Multitasking
-        \color{orange}
-        \item[5.4] Ressourcen
-        \color{red}
-        \item[5.5] Prioritäten
-      \end{itemize}
-%    \item[\textbf{???}]
-  \end{itemize}
-
-\end{frame}
-
-\setcounter{section}{4}
-\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}<1>
-        \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}<3>
-        \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:}
-  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<1->{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)
-%    \pause
-    \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}
-
-  \pause
-
-  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}{49cm}
-
-\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}{45cm}
-
-\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}
-
-
-\end{document}
diff --git a/20211202/herzschrittmacher.jpg b/20211202/herzschrittmacher.jpg
deleted file mode 120000
index 92d8f0053003cc555aec83f5d088f1cec822ad81..0000000000000000000000000000000000000000
--- a/20211202/herzschrittmacher.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/herzschrittmacher.jpg
\ No newline at end of file
diff --git a/20211202/linux-scheduler-0.c b/20211202/linux-scheduler-0.c
deleted file mode 100644
index e97d32bf1d7845caca253f67242f4c042b9f7616..0000000000000000000000000000000000000000
--- a/20211202/linux-scheduler-0.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  'schedule()' is the scheduler function. This is GOOD CODE! There
- * probably won't be any reason to change this, as it should work well
- * in all circumstances (ie gives IO-bound processes good response etc).
- * The one thing you might take a look at is the signal-handler code here.
- *
- *   NOTE!!  Task 0 is the 'idle' task, which gets called when no other
- * tasks can run. It can not be killed, and it cannot sleep. The 'state'
- * information in task[0] is never used.
- */
-void schedule(void)
-{
-	int i,next,c;
-	struct task_struct ** p;
-
-/* check alarm, wake up any interruptible tasks that have got a signal */
-
-	for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-		if (*p) {
-			if ((*p)->alarm && (*p)->alarm < jiffies) {
-					(*p)->signal |= (1<<(SIGALRM-1));
-					(*p)->alarm = 0;
-				}
-			if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE)
-				(*p)->state=TASK_RUNNING;
-		}
-
-/* this is the scheduler proper: */
-
-	while (1) {
-		c = -1;
-		next = 0;
-		i = NR_TASKS;
-		p = &task[NR_TASKS];
-		while (--i) {
-			if (!*--p)
-				continue;
-			if ((*p)->state == TASK_RUNNING && (*p)->counter > c)
-				c = (*p)->counter, next = i;
-		}
-		if (c) break;
-		for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-			if (*p)
-				(*p)->counter = ((*p)->counter >> 1) +
-						(*p)->priority;
-	}
-	switch_to(next);
-}
diff --git a/20211202/linux-scheduler-1.c b/20211202/linux-scheduler-1.c
deleted file mode 100644
index 0b365643eb3e9f245997c0e5cb331cbfb39fbacf..0000000000000000000000000000000000000000
--- a/20211202/linux-scheduler-1.c
+++ /dev/null
@@ -1,40 +0,0 @@
-void schedule(void)
-{
-	int i,next,c;
-	struct task_struct ** p;
-
-/* check alarm, wake up any interruptible tasks that have got a signal */
-
-	for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-		if (*p) {
-			if ((*p)->alarm && (*p)->alarm < jiffies) {
-					(*p)->signal |= (1<<(SIGALRM-1));
-					(*p)->alarm = 0;
-				}
-			if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE)
-				(*p)->state=TASK_RUNNING;
-		}
-
-/* this is the scheduler proper: */
-
-	while (1) {
-		c = -1;
-		next = 0;
-		i = NR_TASKS - 1;
-		p = &task[NR_TASKS - 1];
-		while (i) {
-			if (*p) {
-                                if ((*p)->state == TASK_RUNNING && (*p)->counter > c)
-			        	c = (*p)->counter, next = i;
-                        }
-                        i--;
-                        p--;
-		}
-		if (c) break;
-		for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-			if (*p)
-				(*p)->counter = ((*p)->counter >> 1) +
-						(*p)->priority;
-	}
-	switch_to(next);
-}
diff --git a/20211202/linux-scheduler-2.c b/20211202/linux-scheduler-2.c
deleted file mode 100644
index 1ccce7fdcc73ff02c9f67b4f9c2d4ae995fb88c1..0000000000000000000000000000000000000000
--- a/20211202/linux-scheduler-2.c
+++ /dev/null
@@ -1,42 +0,0 @@
-void schedule(void)
-{
-	int i,next,c;
-	struct task_struct ** p;
-
-/* check alarm, wake up any interruptible tasks that have got a signal */
-
-	for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-		if (*p) {
-			if ((*p)->alarm && (*p)->alarm < jiffies) {
-					(*p)->signal |= (1<<(SIGALRM-1));
-					(*p)->alarm = 0;
-				}
-			if ((*p)->signal && (*p)->state==TASK_INTERRUPTIBLE)
-				(*p)->state=TASK_RUNNING;
-		}
-
-/* this is the scheduler proper: */
-
-	while (1) {
-		c = -1;
-		next = 0;
-		i = NR_TASKS - 1;
-		p = &task[NR_TASKS - 1];
-		while (i) {
-			if (*p) {
-                                if ((*p)->state == TASK_RUNNING && (*p)->counter > c) {
-			        	c = (*p)->counter;
-                                        next = i;
-                                }
-                        }
-                        i--;
-                        p--;
-		}
-		if (c) break;
-		for(p = &LAST_TASK ; p > &FIRST_TASK ; --p)
-			if (*p)
-				(*p)->counter = ((*p)->counter >> 1) +
-						(*p)->priority;
-	}
-	switch_to(next);
-}
diff --git a/20211202/logo-hochschule-bochum-cvh-text-v2.pdf b/20211202/logo-hochschule-bochum-cvh-text-v2.pdf
deleted file mode 120000
index 4aa99b8f81061aca6dcaf43eed2d9efef40555f8..0000000000000000000000000000000000000000
--- a/20211202/logo-hochschule-bochum-cvh-text-v2.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum-cvh-text-v2.pdf
\ No newline at end of file
diff --git a/20211202/logo-hochschule-bochum.pdf b/20211202/logo-hochschule-bochum.pdf
deleted file mode 120000
index b6b9491e370e499c9276918182cdb82cb311bcd1..0000000000000000000000000000000000000000
--- a/20211202/logo-hochschule-bochum.pdf
+++ /dev/null
@@ -1 +0,0 @@
-../common/logo-hochschule-bochum.pdf
\ No newline at end of file
diff --git a/20211202/make-zombies-1.c b/20211202/make-zombies-1.c
deleted file mode 100644
index f7b2604f147e5efca9e2adcca5f50b8d134ccaab..0000000000000000000000000000000000000000
--- a/20211202/make-zombies-1.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.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.
-            sleep(10-i);
-            printf ("%d BRAINS! ", 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/20211202/make-zombies-2.c b/20211202/make-zombies-2.c
deleted file mode 100644
index 737940e90a5057377c5a8a95d49afccedf703a28..0000000000000000000000000000000000000000
--- a/20211202/make-zombies-2.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.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.
-            sleep(10-i);
-            printf ("%d BRAINS! ", 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/20211202/make-zombies-3.c b/20211202/make-zombies-3.c
deleted file mode 100644
index 196e0a4f93def95ac693571b03c8f66bc198ff54..0000000000000000000000000000000000000000
--- a/20211202/make-zombies-3.c
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <stdio.h>
-#include <sys/wait.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.
-            sleep(10-i);
-            printf ("%d BRAINS! ", 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/20211202/pathfinder.jpg b/20211202/pathfinder.jpg
deleted file mode 120000
index 23c6444fee26e0cf0dd2f8639484b00aa5021b59..0000000000000000000000000000000000000000
--- a/20211202/pathfinder.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/pathfinder.jpg
\ No newline at end of file
diff --git a/20211202/pgslides.sty b/20211202/pgslides.sty
deleted file mode 120000
index 5be1416f4216f076aa268901f52a15d775e43f64..0000000000000000000000000000000000000000
--- a/20211202/pgslides.sty
+++ /dev/null
@@ -1 +0,0 @@
-../common/pgslides.sty
\ No newline at end of file
diff --git a/20211202/philosophenproblem.jpg b/20211202/philosophenproblem.jpg
deleted file mode 120000
index 26591b2ac2dddfd4786814baf3f19ecb67f1f5ee..0000000000000000000000000000000000000000
--- a/20211202/philosophenproblem.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/philosophenproblem.jpg
\ No newline at end of file
diff --git a/20211202/preprocessor-1.c b/20211202/preprocessor-1.c
deleted file mode 100644
index 91a99c5cead1969500264c33b346ab6e3737c719..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-1.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-#define VIER 4
-
-int main (void)
-{
-  printf ("Die Antwort lautet: %d\n", VIER);
-  return 0;
-}
diff --git a/20211202/preprocessor-10.c b/20211202/preprocessor-10.c
deleted file mode 100644
index e01204d4301ccb6e30455749c4606bd3c1243fff..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-10.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-#define hello(x) { printf ("Hello!\n"); printf ("World!\n"); }
-#define hallo(x) { printf ("Hallo!\n"); printf ("Welt!\n"); }
-
-#define english 1
-
-int main (void)
-{
-  if (english)
-    hello ()
-  else
-    hallo ()
-  return 0;
-}
diff --git a/20211202/preprocessor-11.c b/20211202/preprocessor-11.c
deleted file mode 100644
index 0778e33d67abaf3d04bb52fe701c0592b8d72f5d..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-11.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-#define hello(x) do { printf ("Hello!\n"); printf ("World!\n"); } while (0)
-#define hallo(x) do { printf ("Hallo!\n"); printf ("Welt!\n"); } while (0)
-
-#define english 1
-
-int main (void)
-{
-  if (english)
-    hello ();
-  else
-    hallo ();
-  return 0;
-}
diff --git a/20211202/preprocessor-12.c b/20211202/preprocessor-12.c
deleted file mode 100644
index 6f5432ffa656b7308025babce6ae17b17d1cace7..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-12.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <stdio.h>
-
-#define hello(x) \
-  do \
-    { \
-      printf ("Hello!\n"); \
-      printf ("World!\n"); \
-    } \
-  while (0)
-
-#define hallo(x) \
-  do \
-    { \
-      printf ("Hallo!\n"); \
-      printf ("Welt!\n"); \
-    } \
-  while (0)
-
-#define english 1
-
-int main (void)
-{
-  if (english)
-    hello ();
-  else
-    hallo ();
-  return 0;
-}
diff --git a/20211202/preprocessor-13.c b/20211202/preprocessor-13.c
deleted file mode 100644
index 1c0a27bc4399ad7cb5be4eef22cdc0ada6d4fd49..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-13.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-#define set_answer(a,v) \
-  do \
-    a = v; \
-  while (0)
-
-int main (void)
-{
-  int answer = 0;
-  set_answer (answer, 42);
-  printf ("Die Antwort lautet: %d\n", answer);
-  return 0;
-}
diff --git a/20211202/preprocessor-13.s b/20211202/preprocessor-13.s
deleted file mode 100644
index 2b29389c7116ade1fd8474c72c03d818019009c5..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-13.s
+++ /dev/null
@@ -1,26 +0,0 @@
-	.file	"preprocessor-13.c"
-	.text
-	.section	.rodata.str1.1,"aMS",@progbits,1
-.LC0:
-	.string	"Die Antwort lautet: %d\n"
-	.text
-	.globl	main
-	.type	main, @function
-main:
-.LFB11:
-	.cfi_startproc
-	subq	$8, %rsp
-	.cfi_def_cfa_offset 16
-	movl	$42, %esi
-	leaq	.LC0(%rip), %rdi
-	movl	$0, %eax
-	call	printf@PLT
-	movl	$0, %eax
-	addq	$8, %rsp
-	.cfi_def_cfa_offset 8
-	ret
-	.cfi_endproc
-.LFE11:
-	.size	main, .-main
-	.ident	"GCC: (Debian 8.3.0-6) 8.3.0"
-	.section	.note.GNU-stack,"",@progbits
diff --git a/20211202/preprocessor-14.c b/20211202/preprocessor-14.c
deleted file mode 100644
index b1558f58a621c73abbb056296bc13a332a554e68..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-14.c
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-void set_answer (int *a, int v)
-{
-  *a = v;
-}
-
-int main (void)
-{
-  int answer = 0;
-  set_answer (&answer, 42);
-  printf ("Die Antwort lautet: %d\n", answer);
-  return 0;
-}
diff --git a/20211202/preprocessor-14.s b/20211202/preprocessor-14.s
deleted file mode 100644
index ee84b203efd614679f58360601e4cf65ffde2e37..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-14.s
+++ /dev/null
@@ -1,36 +0,0 @@
-	.file	"preprocessor-14.c"
-	.text
-	.globl	set_answer
-	.type	set_answer, @function
-set_answer:
-.LFB11:
-	.cfi_startproc
-	movl	%esi, (%rdi)
-	ret
-	.cfi_endproc
-.LFE11:
-	.size	set_answer, .-set_answer
-	.section	.rodata.str1.1,"aMS",@progbits,1
-.LC0:
-	.string	"Die Antwort lautet: %d\n"
-	.text
-	.globl	main
-	.type	main, @function
-main:
-.LFB12:
-	.cfi_startproc
-	subq	$8, %rsp
-	.cfi_def_cfa_offset 16
-	movl	$42, %esi
-	leaq	.LC0(%rip), %rdi
-	movl	$0, %eax
-	call	printf@PLT
-	movl	$0, %eax
-	addq	$8, %rsp
-	.cfi_def_cfa_offset 8
-	ret
-	.cfi_endproc
-.LFE12:
-	.size	main, .-main
-	.ident	"GCC: (Debian 8.3.0-6) 8.3.0"
-	.section	.note.GNU-stack,"",@progbits
diff --git a/20211202/preprocessor-2.c b/20211202/preprocessor-2.c
deleted file mode 100644
index c876b5935fa297b351efb2424d4b374df6c789df..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-2.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-#define VIER 4);
-
-int main (void)
-{
-  printf ("Die Antwort lautet: %d\n", VIER
-  return 0;
-}
diff --git a/20211202/preprocessor-3.c b/20211202/preprocessor-3.c
deleted file mode 100644
index 17d6f174c8c837ad514ea04a825c45d8b8a816cb..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-3.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-#define ZWEIMAL(X) 2 * X
-
-int main (void)
-{
-  printf ("Die Antwort lautet: %d\n", ZWEIMAL (23));
-  return 0;
-}
diff --git a/20211202/preprocessor-4.c b/20211202/preprocessor-4.c
deleted file mode 100644
index 2fa584c9e9de7d9aa14152d223cd2f9cb9f7363a..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-4.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#define SECHS 1 + 5
-#define NEUN 8 + 1
-
-int main (void)
-{
-  printf ("Die Antwort lautet: %d\n", SECHS * NEUN);
-  return 0;
-}
diff --git a/20211202/preprocessor-5.c b/20211202/preprocessor-5.c
deleted file mode 100644
index f5bd2e52509346c794fbd051801caf03ff2d26a1..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-5.c
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <stdio.h>
-
-#define SECHS (1 + 5)
-#define NEUN (8 + 1)
-
-int main (void)
-{
-  printf ("Die Antwort lautet: %d\n", SECHS * NEUN);
-  return 0;
-}
diff --git a/20211202/preprocessor-6.c b/20211202/preprocessor-6.c
deleted file mode 100644
index e2b5e155366db5d304822c8ec3c2e53e5bfe34d8..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-6.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-#define hello printf ("Hello!\n")
-#define hallo printf ("Hallo!\n")
-
-#define english 1
-
-int main (void)
-{
-  if (english)
-    hello;
-  else
-    hallo;
-  return 0;
-}
diff --git a/20211202/preprocessor-7.c b/20211202/preprocessor-7.c
deleted file mode 100644
index 673d2a3da8dc0427f6b2729f57e3f4840bd7afde..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-7.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-#define hello(x) printf ("Hello!\n")
-#define hallo(x) printf ("Hallo!\n")
-
-#define english 1
-
-int main (void)
-{
-  if (english)
-    hello ();
-  else
-    hallo ();
-  return 0;
-}
diff --git a/20211202/preprocessor-8.c b/20211202/preprocessor-8.c
deleted file mode 100644
index ab6f6599c53a607155e3954d21d353aa37664a8a..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-8.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-#define hello(x) printf ("Hello!\n"); printf ("World!\n");
-#define hallo(x) printf ("Hallo!\n"); printf ("Welt!\n");
-
-#define english 1
-
-int main (void)
-{
-  if (english)
-    hello ();
-  else
-    hallo ();
-  return 0;
-}
diff --git a/20211202/preprocessor-9.c b/20211202/preprocessor-9.c
deleted file mode 100644
index 5258c1a54ebef882dd7eae3abdeee46eb0cfed09..0000000000000000000000000000000000000000
--- a/20211202/preprocessor-9.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include <stdio.h>
-
-#define hello(x) { printf ("Hello!\n"); printf ("World!\n"); }
-#define hallo(x) { printf ("Hallo!\n"); printf ("Welt!\n"); }
-
-#define english 1
-
-int main (void)
-{
-  if (english)
-    hello ();
-  else
-    hallo ();
-  return 0;
-}
diff --git a/20211202/quadrocopter.jpg b/20211202/quadrocopter.jpg
deleted file mode 120000
index 7eaf0c024b63b7bc1dd3df2c17c8ab93f67fc15c..0000000000000000000000000000000000000000
--- a/20211202/quadrocopter.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/quadrocopter.jpg
\ No newline at end of file
diff --git a/20211202/rp6.jpg b/20211202/rp6.jpg
deleted file mode 120000
index 2a0ecff23845770c3a98178eca6dce3ec73aca58..0000000000000000000000000000000000000000
--- a/20211202/rp6.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/rp6.jpg
\ No newline at end of file
diff --git a/20211202/task-modes.h b/20211202/task-modes.h
deleted file mode 100644
index 47f5cbac5dd2676cfbc961da0234617e32cb7a00..0000000000000000000000000000000000000000
--- a/20211202/task-modes.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#define TASK_RUNNING		0
-#define TASK_INTERRUPTIBLE	1
-#define TASK_UNINTERRUPTIBLE	2
-#define TASK_ZOMBIE		3
-#define TASK_STOPPED		4
diff --git a/20211202/xbee.jpg b/20211202/xbee.jpg
deleted file mode 120000
index ff0adff2eadf3d9b775d03cea8cf1f118534e2b9..0000000000000000000000000000000000000000
--- a/20211202/xbee.jpg
+++ /dev/null
@@ -1 +0,0 @@
-../common/xbee.jpg
\ No newline at end of file
diff --git a/20211209/crash-0.c b/20211209/crash-0.c
deleted file mode 100644
index 62d224512d44d55d34a532eb9fcc9ea14e443368..0000000000000000000000000000000000000000
--- a/20211209/crash-0.c
+++ /dev/null
@@ -1 +0,0 @@
-main(){puts(0);}
diff --git a/20211209/crash-1.c b/20211209/crash-1.c
deleted file mode 100644
index d4f8b191d6d4491df2661046ce99c21ec2045a60..0000000000000000000000000000000000000000
--- a/20211209/crash-1.c
+++ /dev/null
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf (42);
-  return 0;
-}
diff --git a/20211209/crash-2.c b/20211209/crash-2.c
deleted file mode 100644
index c0d5c0f5670234c45fa925a5b1d56e97b9de7a11..0000000000000000000000000000000000000000
--- a/20211209/crash-2.c
+++ /dev/null
@@ -1,9 +0,0 @@
-#include <stdio.h>
-
-int main (void)
-{
-  printf ("Vor printf()\n");
-  printf (42);
-  printf ("Nach printf()\n");
-  return 0;
-}
diff --git a/20211209/crash-3.c b/20211209/crash-3.c
deleted file mode 100644
index 570685e33b61ac0ffdf4a38b8630b42759f325b1..0000000000000000000000000000000000000000
--- a/20211209/crash-3.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <stdio.h>
-
-void print_answer (int answer)
-{
-  printf ("Die Antwort lautet: ");
-  printf (answer);
-}
-
-int main (void)
-{
-  print_answer (42);
-  return 0;
-}
diff --git a/20211209/crash-4.c b/20211209/crash-4.c
deleted file mode 100644
index 76ed93c6d097343be8c2f7f5591f8ec76892efd9..0000000000000000000000000000000000000000
--- a/20211209/crash-4.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#include <stdio.h>
-
-void print_answer (int answer)
-{
-  if (answer < 256)
-    {
-      printf ("Die Antwort lautet: ");
-      printf (answer);
-    }
-  else
-    printf ("Die Antwort ist zu kompliziert.");
-}
-
-int main (void)
-{
-  print_answer (42);
-  return 0;
-}
diff --git a/20211209/crash-5.c b/20211209/crash-5.c
deleted file mode 100644
index 00e06ed3dbaaabb4ca5c935b3b1f4740354700ea..0000000000000000000000000000000000000000
--- a/20211209/crash-5.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include <stdio.h>
-
-void print_answer (int answer)
-{
-  if (answer == 42)
-    {
-      printf ("Die Antwort lautet: ");
-      printf (answer);
-    }
-  else
-    printf ("Die Antwort ist zu kompliziert.\n");
-}
-
-int main (void)
-{
-  for (int a = 0; a < 1000; a++)
-    print_answer (a);
-  return 0;
-}
diff --git a/20211209/crash-6.c b/20211209/crash-6.c
deleted file mode 100644
index 5f14383fe67e482aee32bb7d8f3f0345a894fef9..0000000000000000000000000000000000000000
--- a/20211209/crash-6.c
+++ /dev/null
@@ -1,23 +0,0 @@
-#include <stdio.h>
-
-int s = 0;
-
-void print_answer (int answer)
-{
-  s += answer;
-  if (answer == 42)
-    {
-      printf ("Die Antwort lautet: ");
-      printf (answer);
-    }
-  else
-    printf ("Die Antwort ist zu kompliziert.\n");
-}
-
-int main (void)
-{
-  for (int a = 0; a < 1000; a++)
-    print_answer (a);
-  printf ("Die Summe der Antworten lautet: %d\n", s);
-  return 0;
-}
diff --git a/20211209/es-20211209.txt b/20211209/es-20211209.txt
deleted file mode 100644
index 9971aaf4ae6c29d300f478ad75390a30ad8b8eb0..0000000000000000000000000000000000000000
--- a/20211209/es-20211209.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-GNU-Debugger, 09.12.2021, 15:45:26
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- - Original-Dokumentation:
-   https://www.sourceware.org/gdb/documentation/
- 
- - Tutorial:
-   https://www.tutorialspoint.com/gnu_debugger/
-   oder: Web-Suche nach: "gdb" "tutorial"
diff --git a/20211216/c b/20211216/c
deleted file mode 100755
index d67edecd3df1bf6abb6b9a0d927d172d984f2646..0000000000000000000000000000000000000000
--- a/20211216/c
+++ /dev/null
@@ -1,14 +0,0 @@
-case "$1" in
-  p) v4l2-ctl -d /dev/video0 --set-ctrl=zoom_absolute=800
-     v4l2-ctl -d /dev/video0 --set-ctrl=pan_absolute=84500
-     v4l2-ctl -d /dev/video0 --set-ctrl=tilt_absolute=46000
-     ;;
-  s) v4l2-ctl -d /dev/video0 --set-ctrl=zoom_absolute=800
-     v4l2-ctl -d /dev/video0 --set-ctrl=pan_absolute=84500
-     v4l2-ctl -d /dev/video0 --set-ctrl=tilt_absolute=31000
-     ;;
-  t) v4l2-ctl -d /dev/video0 --set-ctrl=zoom_absolute=0
-     v4l2-ctl -d /dev/video0 --set-ctrl=pan_absolute=-8000
-     v4l2-ctl -d /dev/video0 --set-ctrl=tilt_absolute=40000
-     ;;
-esac
diff --git a/20211007/csa2.jpg b/20220928/csa2.jpg
similarity index 100%
rename from 20211007/csa2.jpg
rename to 20220928/csa2.jpg
diff --git a/20211007/es-20211007.pdf b/20220928/es-20220928.pdf
similarity index 99%
rename from 20211007/es-20211007.pdf
rename to 20220928/es-20220928.pdf
index 0e14f013014ba2247cd3feb6c6b8335e283294f5..a8252993542e2dbbf1c8f39e15d999c341851d94 100644
Binary files a/20211007/es-20211007.pdf and b/20220928/es-20220928.pdf differ
diff --git a/20211007/es-20211007.tex b/20220928/es-20220928.tex
similarity index 98%
rename from 20211007/es-20211007.tex
rename to 20220928/es-20220928.tex
index 8aae189276ee1dc31c839d7a93257f6e55fa2ba4..2c077746ecd01b687c5710718850c15938883f77 100644
--- a/20211007/es-20211007.tex
+++ b/20220928/es-20220928.tex
@@ -1,5 +1,5 @@
-% es-20211007.pdf - Lecture Slides on Embedded Systems
-% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021  Peter Gerwinski
+% es-20220928.pdf - Lecture Slides on Embedded Systems
+% Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Peter Gerwinski
 %
 % This document is free software: you can redistribute it and/or
 % modify it either under the terms of the Creative Commons
@@ -36,7 +36,7 @@
 
 \title{Eingebettete Systeme}
 \author{Prof.\ Dr.\ rer.\ nat.\ Peter Gerwinski}
-\date{7.\ Oktober 2021}
+\date{28.\ September 2022}
 
 \newcommand{\greyurl}[1]{\href{#1}{\color{gray}\nolinkurl{#1}}}
 \newcommand{\ItwoC}{I\raisebox{0.5ex}{\footnotesize 2}C}
@@ -49,7 +49,7 @@
 
 \else
 
-\begin{frame}[plain]
+\begin{frame}[plain,fragile]
 
   \vspace*{8cm}
   \begin{picture}(0,0)
@@ -75,6 +75,9 @@
   \begin{picture}(0,0)
     \put(0.2,-1.1){\makebox(0,0)[bl]{\bf\color{gray}\shortstack[l]{\insertauthor\\[\smallskipamount]\insertdate}}}
     \put(12.4,-1.1){\makebox(0,0)[r]{\greyurl{https://www.peter.gerwinski.de/}}}
+    \put(4.35,-0.9){\only<2->{\makebox(0,0)[br]{\tikz{\draw[-latex,red](0,0)--(-1.55,0.3);}}}}
+    \put(4.0,-0.8){\only<2->{\makebox(0,0)[tl]{\footnotesize\color{red}\shortstack{%
+      \emph{rerum naturalium}\\der Naturwissenschaften}}}}
   \end{picture}
 
 \end{frame}
diff --git a/20211007/floppys.jpg b/20220928/floppys.jpg
similarity index 100%
rename from 20211007/floppys.jpg
rename to 20220928/floppys.jpg
diff --git a/20211007/logo-hochschule-bochum-cvh-text-v2.pdf b/20220928/logo-hochschule-bochum-cvh-text-v2.pdf
similarity index 100%
rename from 20211007/logo-hochschule-bochum-cvh-text-v2.pdf
rename to 20220928/logo-hochschule-bochum-cvh-text-v2.pdf
diff --git a/20211007/logo-hochschule-bochum.pdf b/20220928/logo-hochschule-bochum.pdf
similarity index 100%
rename from 20211007/logo-hochschule-bochum.pdf
rename to 20220928/logo-hochschule-bochum.pdf
diff --git a/20211007/pgslides.sty b/20220928/pgslides.sty
similarity index 100%
rename from 20211007/pgslides.sty
rename to 20220928/pgslides.sty
diff --git a/20211007/wetterstation.jpg b/20220928/wetterstation.jpg
similarity index 100%
rename from 20211007/wetterstation.jpg
rename to 20220928/wetterstation.jpg
diff --git a/README.md b/README.md
index ff8ffcf4aa66ed6341ffd4fdd9d7b17816dff463..4e857f2b3aacfa2fe4d137c57206b659d8453bfa 100644
--- a/README.md
+++ b/README.md
@@ -1,58 +1,50 @@
 Eingebettete Systeme
 ====================
 
-Lehrveranstaltung im Wintersemester 2021/22  
+Lehrveranstaltung im Wintersemester 2022/23  
 Hochschule Bochum, Campus Velbert/Heiligenhaus  
 Prof. Dr. rer. nat. Peter Gerwinski
 
-Copyright © 2012–2021  Peter Gerwinski
+Copyright © 2012–2022  Peter Gerwinski
 
 **Diese Lehrmaterialien sind freie Software.**  
 Sie dürfen diese gemäß den jeweils angegebenen Lizenzen  
-([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/CC-BY-SA-3.0),
-[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/GNU-GPL-3),
-[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/BSD-MODIFIED))  
+([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/CC-BY-SA-3.0),
+[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/GNU-GPL-3),
+[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/BSD-MODIFIED))  
 studieren, kopieren, modifizieren und/oder weitergeben.  
-Für Details siehe [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/README).
+Für Details siehe [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/README).
 
 Vortragsfolien:
 ---------------
- * [07.10.2021: Einführung: eingebettete Systeme, Unix-Kommandozeile](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211007/es-20211007.pdf)
- * [14.10.2021: Unix-Kommandozeile: Links, Ein- und Ausgabeströme, Pipes](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211014/es-20211014.pdf)
- * [21.10.2021: GNU Screen](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211021/es-20211021.pdf)
- * [28.10.2021: TCP/IP in der Praxis](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211028/es-20211028.pdf)
- * [04.11.2021: Netzwerkanalyse, VNC, Netzwerk-Programmierung](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211104/es-20211104.pdf)
- * [11.11.2021: Bus-Systeme](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211111/es-20211111.pdf)
- * [18.11.2021: Echtzeit: Definition, Echtzeitprogrammierung](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211118/es-20211118.pdf)
- * [25.11.2021: Echtzeit: Multitasking, Ressourcen](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211125/es-20211125.pdf)
- * [02.12.2021: Echtzeit: Scheduler, Semaphor, Mutex, Spinlock,Verklemmungen](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/20211202/es-20211202.pdf)
- * [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/es-slides-2021ws.pdf)
+ * [28.09.2022: Einführung: eingebettete Systeme, Unix-Kommandozeile](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/20220928/es-20220928.pdf)
+ * [alle in 1 Datei](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/es-slides-2022ws.pdf)
 
 Original-Materialien einschließlich Beispiel-Programme und LaTeX-Quelltexte:
 ----------------------------------------------------------------------------
- * [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws/common)
- * [202????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws)
- * [branch 2020ws – vollständige Lehrmaterialien vom Wintersemester 2020/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
+ * [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws/common)
+ * [202????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws)
+ * [branch 2021ws – vollständige Lehrmaterialien vom Wintersemester 2021/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
 
 
 Embedded Systems
 ================
 
-Course in winter semester 2021-22  
+Course in winter semester 2022-23  
 Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus  
 Prof. Dr. rer. nat. Peter Gerwinski
 
-Copyright © 2012–2021  Peter Gerwinski
+Copyright © 2012–2022  Peter Gerwinski
 
 **These teaching materials are Free Software.**  
 You may study, copy, modify, and/or distribute them  
 according to their respective licences  
-([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/CC-BY-SA-3.0),
-[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/GNU-GPL-3),
-[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/BSD-MODIFIED)).  
-See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/common/README) for details.
-
- * [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws/common)
- * [202????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/es/tree/2021ws)
- * [es-slides-2021ws.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/es/raw/2021ws/es-slides-2021ws.pdf)
- * [branch 2020ws – complete teaching materials from winter semester 2020–21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
+([CC-BY-SA 3.0](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/CC-BY-SA-3.0),
+[GNU GPL 3+](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/GNU-GPL-3),
+[modified BSD License](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/BSD-MODIFIED)).  
+See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/common/README) for details.
+
+ * [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws/common)
+ * [202????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/es/tree/2022ws)
+ * [es-slides-2022ws.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/es/raw/2022ws/es-slides-2022ws.pdf)
+ * [branch 2021ws – complete teaching materials from winter semester 2021–22](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
diff --git a/es-slides-2021ws.pdf b/es-slides-2021ws.pdf
deleted file mode 100644
index a0dbde3642ce737aa54d2fcff50c3825a6defc72..0000000000000000000000000000000000000000
Binary files a/es-slides-2021ws.pdf and /dev/null differ
diff --git a/es-slides-2022ws.pdf b/es-slides-2022ws.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..ac83168c3aca051ad83fd91763fa4cf884acf594
Binary files /dev/null and b/es-slides-2022ws.pdf differ
diff --git a/update b/update
index 1af9f59870c95fb6616ba82af2ed3c7ec261992f..d20ebcc85e54a75bb10033ed7eabdbfee3885eea 100755
--- a/update
+++ b/update
@@ -1,9 +1,9 @@
 #!/bin/bash
 
-sem=2021ws
+sem=2022ws
 course=es
 
-date_mask="202[01][01][0-9][0-3][0-9]"
+date_mask="202[23][01][0-9][0-3][0-9]"
 time_mask="[0-2][0-9][0-5][0-9][0-5][0-9]"
 base_url="https://gitlab.cvh-server.de/pgerwinski/$course/raw/$sem/"
 pattern="README:"
@@ -54,11 +54,11 @@ cat > $readme << EOF
 Eingebettete Systeme
 ====================
 
-Lehrveranstaltung im Wintersemester 2021/22  
+Lehrveranstaltung im Wintersemester 2022/23  
 Hochschule Bochum, Campus Velbert/Heiligenhaus  
 Prof. Dr. rer. nat. Peter Gerwinski
 
-Copyright © 2012–2021  Peter Gerwinski
+Copyright © 2012–2022  Peter Gerwinski
 
 **Diese Lehrmaterialien sind freie Software.**  
 Sie dürfen diese gemäß den jeweils angegebenen Lizenzen  
@@ -93,17 +93,17 @@ Original-Materialien einschließlich Beispiel-Programme und LaTeX-Quelltexte:
 ----------------------------------------------------------------------------
  * [common – gemeinsame Dateien für Skript und Vortragsfolien](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem/common)
  * [202????? – Vortragsfolien und Beispiele](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem)
- * [branch 2020ws – vollständige Lehrmaterialien vom Wintersemester 2020/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
+ * [branch 2021ws – vollständige Lehrmaterialien vom Wintersemester 2021/21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
 
 
 Embedded Systems
 ================
 
-Course in winter semester 2021-22  
+Course in winter semester 2022-23  
 Bochum University of Applied Sciences, Campus Velbert/Heiligenhaus  
 Prof. Dr. rer. nat. Peter Gerwinski
 
-Copyright © 2012–2021  Peter Gerwinski
+Copyright © 2012–2022  Peter Gerwinski
 
 **These teaching materials are Free Software.**  
 You may study, copy, modify, and/or distribute them  
@@ -116,7 +116,7 @@ See the file [common/README](https://gitlab.cvh-server.de/pgerwinski/es/raw/$sem
  * [common – common files for lecture notes and slides](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem/common)
  * [202????? – slides and examples](https://gitlab.cvh-server.de/pgerwinski/es/tree/$sem)
  * [es-slides-$sem.pdf – all slides in 1 file](https://gitlab.cvh-server.de/pgerwinski/es/raw/$sem/es-slides-$sem.pdf)
- * [branch 2020ws – complete teaching materials from winter semester 2020–21](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
+ * [branch 2021ws – complete teaching materials from winter semester 2021–22](https://gitlab.cvh-server.de/pgerwinski/es/tree/2019ws)
 EOF
 
 if diff -wu $readme_old $readme; then