diff --git a/20240502/ad-20240502.txt b/20240502/ad-20240502.txt
index 5aa8b807983eaca0db0aa2f0cdb3711e7aa531e5..3c8a1b0339b647e575ffcb8355800cf86899d4d6 100644
--- a/20240502/ad-20240502.txt
+++ b/20240502/ad-20240502.txt
@@ -14,8 +14,271 @@
 
 02.05.2024
 ~~~~~~~~~~
- - yesVNC (Fortsetzung)
- - Skripte zur allgemeinen Nutzung von Online-Plattformen
-   (s, mic, Weiterentwicklung: VNC Vollbild)
- - weitere Anwendungen diskreter Mathematik:
+:) Skripte zur allgemeinen Nutzung von Online-Plattformen (s, mic)
+:) Weiterentwicklung dieser Skripte: BBB Mute/Unmute
+ - Weiterentwicklung dieser Skripte: VNC Vollbild)
+   --> DISPLAY=:0 xvkbd -no-jump-pointer -window 29360133 -text "\[F8]\[Down]\[Down] "
+ o weitere Anwendungen diskreter Mathematik:
    elliptische Kurven, AES, Fehlererkennung und -korrektur
+ - yesVNC (Fortsetzung)
+
+Sicherheitsanforderungen des BSI zu Individual-Software, 02.05.2024, 13:32:29
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ - Vor Beginn der Entwicklung: Sicherheitskonzept
+ - Installationsanleitung
+ - Installation durch die Campus-IT
+
+
+Hallo zusammen,
+
+ich habe mir vorhin eine kleine Individual-Software programmiert,
+mit der ich per Tastatur zuverlässig das Mikrofon ein- und
+ausschalten kann. Im Anhang zwei Shell-Skripte und die davon
+benötigten Audio- und Grafikdateien.
+
+Sicherheitskonzept: Ich nutze ganz normal auf meinem
+Notebook dbus-send, amixer, aplay und xteddy. Solange diese
+Nicht-Individual-Programme keine Sicherheitslücken enthalten,
+wird daher auch meine Individual-Software sicher sein.
+
+Lizenzen: Das Mikrofon-Icon von GNOME steht unter GNU GPL v2,
+alles von mir selbst unter CC0 ("public domain").
+
+Installationsanleitung: Alle Dateien irgendwo ablegen, nötigenfalls
+in den Shell-Skripten die Pfade anpassen. Bei mir hat es sich
+bewährt, die Programme mittels xbindkeys aufzurufen, z.B. durch
+die folgende Konfiguration in ~/.xbindkeysrc:
+
+  "$HOME/usr/bin/s"
+    Print
+
+  "$HOME/usr/bin/s i"
+    Control+Print
+
+  "$HOME/usr/bin/mic toggle"
+    Pause
+
+Bedienungsanleitung: "s --help" bzw. "mic --help" eingeben.
+
+Das Programm "mic" schaltet das Mikrofon per amixer an und aus und
+stellt ggf. auch mumble per DBUS auf "stumm", damit Mumble-Nutzende
+von außen sehen, daß mein Mikrofon an- bzw. ausgeschaltet ist.
+Darüberhinaus zeigt es mittels xteddy auf meinem exportierten
+Bildschirm ein Icon, das Personen im Raum anzeigt, ob das Mikrofon
+aktuell an- oder ausgeschaltet ist.
+
+Ich habe leider keine Möglichkeit gefunden, BBB per Skript
+abzufragen, ob ich gerade stumm geschaltet bin oder nicht.
+Daher halte ich es aktuell für zu riskant, das BBB-Mikro per
+Skript umzuschalten, selbst wenn wir einen zuverlässigen Weg
+finden, dies zu tun (z.B. mittels xdotool). Bzgl. BBB beschränke
+ich mich also aktuell darauf, das Mikrofon per amixer an- bzw.
+auszuschalten und den aktuellen Status über meinen exportierten
+Bildschirm mitzuteilen.
+
+Statstik: Um die Software zu schreiben und zu debuggen, habe ich
+heute genau 90 Minuten investiert. Um die Lizenzen zu prüfen und
+die Dokumentation in dieser E-Mail zu schreiben, weitere 41 Minuten,
+also weniger als die Hälfte der Zeit für die Software-Entwicklung.
+Immerhin. :-]
+
+Schöne Grüße
+
+    Peter
+-- 
+Prof. Dr. Peter Gerwinski - Hardwarenahe IT-Systeme
+embedded systems - microcontrollers - device drivers
+Hochschule Bochum - Bochum University of Applied Sciences
+Campus Velbert/Heiligenhaus - https://www.hs-bochum.de/cvh/
+
+Elliptische Kurven, 02.05.2024, 15:51:17
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Elliptische Kurve = Lösung einer Gleichung 3. Grades mit 2 Variablen
+--> Funktionsgraph = glatte Kurve
+
+Körper: Anstelle der reellen Zahlen nehmen wir einen endlichen Körper.
+--> Funktionsgraph = Schneegestöber
+
+Auf diesem Funktionsgraphen identifizieren wir eine Gruppe (G,·),
+auf der die Multiplikation einfach ist, aber die Division schwierig.
+--> Grundlage für ein asymmetrisches Kryptosystem
+
+--> :-)
+
+Symmetrische und Asymmetrische Verschlüsselung, 02.05.2024, 15:54:13
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Symmetrische Verschlüsselung:
+
+ - Ver- und Entschlüsseln mit demselben (geheimen!) Schlüssel
+ - sicher ab einer Schlüssellänge von ~128 Bit
+ - schnell
+   (Z.B. 128-Bit-Operationen auf 64-Bit-Prozessoren:
+   https://de.wikipedia.org/wiki/Advanced_Vector_Extensions)
+
+ - Problem: Schlüsselaustausch
+ - Lösung: Schlüsselaustausch vorab ("pre-shared key" - PSK)
+ - Lösung: Diffie-Hellman
+ - Lösung: Asymmetrische Verschlüsselung
+
+Asymmetrische Verschlüsselung:
+
+ - Verschlüsseln mit öffentlichem Schlüssel,
+   Entschlüsseln mit geheimem Schlüssel
+ - sicher ab einer Schlüssellänge von ~2048 Bit
+ - langsam
+
+ - Anwendung: einen symmetrischen (geheimen) Schlüssel asymmetrisch verschlüsseln
+   --> hybride Verschlüsselung
+
+ - Problem: Schlüsselaustausch
+ - Lösung: Schlüssel auf mehreren Wegen austauschen.
+   Diese brauchen nicht abhörsicher zu sein, sondern nur manipulationssicher.
+
+AES und endliche Körper, 02.05.2024, 16:04:30
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+AES arbeitet in einem Körper mit 256 Elementen.
+
+Zur Veranschaulichung: Körper mit 4 Elementen
+
+ - Elemente: 0, 1, x, x+1
+
+ - Addition: modulo 2, ähnlich der Addition von komplexen Zahlen als "Vektor"
+
+ - Multiplikation: x · x = x+1, x+1 · x+1 = x
+   Veranschaulichung: (x + 1) · (x + 1) = x² + 2x + 1 = x+1 + 0 + 1 = x --> :-)
+ 
+ - Ist dies wirklich ein Körper? --> Inverse Elemente für Multiplikation prüfen
+   z.B.: Das multiplikative Inverse von x+1 ist x, da x+1 · x = 1.
+
+Zur Veranschaulichung: Körper mit 25 Elementen
+
+ - Elemente: { 0, 1, 2, 3, 4 } mit Adjunktion von \sqrt{2}
+   --> z.B.: 3 · \sqrt{2}
+   Ähnlich gehen die komplexen Zahlen aus den reellen Zahlen hervor:
+   Adjunktion von i mit i² = -1
+
+Zur Veranschaulichung: Körper mit 49 Elementen
+
+ - Elemente: { 0, 1, 2, 3, 4, 5, 6 } mit Adjunktion von \sqrt{6} = \sqrt{-1} = i
+
+Fehlererkennung, 02.05.2024, 16:35:51
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Fehlererkennung durch Parität:
+ - binäre Nachricht: 10110100
+ - Parität: Wir zählen die Einsen.
+ - zusätzliches Bit: War es eine gerade oder ungerade Anzahl von Einsen?
+ - ungerade Parität: Zusammen mit dem Zusatzbit muß es eine ungerade Anzahl sein.
+   Hier: Zusatzbit 1, also senden wir insgesamt: 101101001
+ - gerade Parität: Zusammen mit dem Zusatzbit muß es eine gerade Anzahl sein.
+   Hier: Zusatzbit 0, also senden wir insgesamt: 101101000
+--> kann 1 umgedrehtes Bit erkennen, versagt bei 2 umgedrehten Bits
+ - Mathematische Operation: modulo 2, Untersuchung des Restes
+
+Fehlererkennung durch CRC (cyclic redundancy check):
+ - Mathematische Operation: modulo ein Polynom (in einem Ring), Untersuchung des Restes
+--> http://www.peter.gerwinski.de/download/net-2013ss.tar.gz, Seite 31
+ - Polynomdivision über dem Körper ( { 0, 1 }, +, · )
+ - Wir versenden die Nachricht mit angehängten Bits und interpretieren sie
+   als Polynom über diesem Körper. Wenn die Divison durch ein vorher vereinbartes
+   Polynom funktioniert, war die Datenübertragung erfolgreich.
+--> Die Wahrscheinlichkeit, daß die Division zufällig funktioniert,
+    ist für ein 4-Bit-Polynom 1 : 2^4. --> CRC4
+    In der Praxis: CRC32, CRC64, ...
+
+Ausfallsicherheit: RAID 5, 02.05.2024, 17:16:34
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Netzwerk-Skript, S. 27
+
+Mindestens 3 Platten: A B C
+
+  A speichert Daten
+  B speichert weitere Daten
+  C speichert A-Daten xor B-Daten ("Paritäts-Platte")
+
+--> Wenn eine Platte ausfällt, kann ich sie durch ein xor der beiden
+    verbliebenen Platten rekonstruieren.
+
+RAID 5: Die Platten wechseln sich für verschiedene Datenblöcke in ihren Rollen ab:
+Mal ist C die Paritäts-Platte, mal A, mal B.
+--> Gleichmäßige Auslastung aller Platten
+    Päritätsplatte wird immer doppelt belastet.
+    --> höherer Verschleiß, "Flaschenhals" für die Performanz
+
+Bei 4 Platten: A B C D
+
+  A speichert Daten
+  B speichert weitere Daten
+  C speichert weitere Daten
+  D speichert A-Daten xor B-Daten xor C-Daten ("Paritäts-Platte")
+
+Fehlerkorrektur: Reed-Solomon-Code, 02.05.2024, 17:23:59
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Wir übertragen die Informationen als die Koeffizienten eines Polynoms,
+indem wir Stützpunkte übertragen, z.B. 3 Punkte für eine Parabel.
+Wenn wir mindestens 2 Punkte zusätzlich übertragen, kann das Polonom
+auch dann rekonstruiert werden, wenn ein Punkt falsch übertragen wurde.
+
+--> reed-solomon-*.png
+
+"Überschriften" in vi(m), 02.05.2024, 17:48:44
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Text markieren, dann durch das untenstehende Shell-Skript "hh" pipen:
+
+#!/bin/bash
+
+IFS='' read TXT
+
+if echo "$TXT" | file - | grep -q UTF-8; then
+  RTXT="$TXT"
+  unrecode="cat"
+else
+  RTXT=$(echo "$TXT" | recode latin1..utf8)
+  unrecode="recode utf8..latin1"
+fi
+
+if [ -z "$RTXT" ]; then
+  SUFFIX=""
+elif echo "$RTXT" | grep -q "[?.!]$"; then
+  SUFFIX=" "
+else
+  SUFFIX=", "
+fi
+
+PREFIX=$(echo "$RTXT" | sed -e 's/^\([^0-9A-Za-zÄÖÜäöüß]*\).*/\1/')
+DATE=$($HOME/usr/bin/hd)
+FULLTXT="$(echo "$RTXT" | sed -e 's/^[^0-9A-Za-zÄÖÜäöüß]*//')$SUFFIX$DATE"
+UNDERLINE=$(echo "$FULLTXT" | sed -e 's/./~/g')
+INDENT=$(echo "$PREFIX" | sed -e 's/./ /g')
+#echo "|$TXT|"
+#echo "|$RTXT|"
+#echo "|$PREFIX|"
+#echo "|$FULLTXT|"
+echo -e "$PREFIX$FULLTXT\n$INDENT$UNDERLINE" | $unrecode
+
+BBB-Betriebsmodi für Lehrveranstaltungen, 02.05.2024, 16:55:47
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * Wie PULT:
+   Kamerabild unten rechts in der Bildschirmpräsentation
+
+--> Die Anordnung, bei der die Bildschirmpräsentation nicht verkleinert wird
+    und trotzdem die Kamera zu sehen ist, ist ein Vorteil.
+
+ * BBB mit geteilter Präsentation:
+   Kamerabild oben, darunter jeweils ein geteiltes Fenster (z.B. Folien)
+
+ * BBB mit geteiltem Bildschirm:
+   Kamerabild z.B. unter dem Chat, daneben der geteilte Bildschirm
+
+--> Die Möglichkeit, das Kamerabild separat anordnen und wegschalten zu können,
+    ist ein Vorteil.
+
+ * BBB mit geteiltem Bildschirm und "Bild im Bild":
+   Es ist möglich, den geteilten Bildschirm im Vollbildmodus zu betrachten
+   und das Kamerabild an eine beliebige Stelle zu schieben.
+
+--> Die PULT-Anordnung als Startbildschirm wäre eine perfekte Lösung.
+    --> Funktioniert nicht, weil "Bild im Bild" vom Browser aktiviert wird
+        und an BBB komplett vorbeigeht.
+
+==> Das Vorhaben, die PULT-Anordnung als Startbildschirm in BBB zu realisieren,
+    ist sinnvoll.
diff --git a/20240502/bbb-test-01.sh b/20240502/bbb-test-01.sh
new file mode 100755
index 0000000000000000000000000000000000000000..88e6066d73112c2dfaf292a63548d5501ce22fe2
--- /dev/null
+++ b/20240502/bbb-test-01.sh
@@ -0,0 +1,10 @@
+export DISPLAY=:0.0
+
+winid=$(xwininfo -root -tree | grep BigBlueButton | awk '{print $1}')
+
+if [ -n "$winid" ]; then
+  focus=$(xdotool getwindowfocus)
+  xvkbd -no-jump-pointer -window $winid -text 'x'
+  sleep 0.1
+  xdotool windowfocus $focus
+fi
diff --git a/20240502/bbb-test-02.sh b/20240502/bbb-test-02.sh
new file mode 100755
index 0000000000000000000000000000000000000000..81a331d3111ea18347edf921b1118c82b31df79a
--- /dev/null
+++ b/20240502/bbb-test-02.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+export DISPLAY=:0.0
+
+debug=true
+
+winid=$(xdotool search --name BigBlueButton)
+
+$debug && echo $winid
+
+if [ -n "$winid" ]; then
+  focus=$(xdotool getwindowfocus)
+  xdotool windowactivate --window $winid
+  xdotool key --window $winid "x"
+  sleep 0.1
+  xdotool windowfocus $focus
+fi
diff --git a/20240502/bbb-test-03.sh b/20240502/bbb-test-03.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5a0309edb2ad46b94ae0cb8c6d6d532d0b300ad4
--- /dev/null
+++ b/20240502/bbb-test-03.sh
@@ -0,0 +1,10 @@
+export DISPLAY=:0.0
+
+winid=$(xdotool search --name BigBlueButton)
+
+if [ -n "$winid" ]; then
+  focus=$(xdotool getwindowfocus)
+  xvkbd -no-jump-pointer -window $winid -text '\Am'
+  sleep 0.1
+  xdotool windowfocus $focus
+fi
diff --git a/20240502/reed-solomon-01-parabel.png b/20240502/reed-solomon-01-parabel.png
new file mode 100644
index 0000000000000000000000000000000000000000..70b832ef2802d1fe1f071805f77829a68d42f102
Binary files /dev/null and b/20240502/reed-solomon-01-parabel.png differ
diff --git a/20240502/reed-solomon-02-4-punkte.png b/20240502/reed-solomon-02-4-punkte.png
new file mode 100644
index 0000000000000000000000000000000000000000..e12e1417f033d4c2cae3abff748ed3265f54a2cb
Binary files /dev/null and b/20240502/reed-solomon-02-4-punkte.png differ
diff --git a/20240502/reed-solomon-03-5-punkte.png b/20240502/reed-solomon-03-5-punkte.png
new file mode 100644
index 0000000000000000000000000000000000000000..a1f5d4e8ef04b61172c81918e851188a7809077d
Binary files /dev/null and b/20240502/reed-solomon-03-5-punkte.png differ
diff --git a/20240502/reed-solomon-04-fehlerkorrektur.png b/20240502/reed-solomon-04-fehlerkorrektur.png
new file mode 100644
index 0000000000000000000000000000000000000000..80b567181dada456d1f8973a685b8535500fb296
Binary files /dev/null and b/20240502/reed-solomon-04-fehlerkorrektur.png differ
diff --git a/20240502/reed-solomon.xcf.gz b/20240502/reed-solomon.xcf.gz
new file mode 100644
index 0000000000000000000000000000000000000000..9933b5ba18ccd87b4bf41742dd3aab4cd82d79a4
Binary files /dev/null and b/20240502/reed-solomon.xcf.gz differ