223015b: container-vs-codec eigene demo + CJK-fonts + daten-grundlagen rename + reword punkt-platzhalter

user-feedback issues:
1. container-codec-diagram.png war stock-asset (vermutlich aus lehrbuch übernommen) — user: 'das kannst du nicht wiederverwenden, bau deine eigene grafik'
   → neue demo container-vs-codec.html mit zwei .mp4-containern side-by-side, je 4 spuren (video lila, audio orange, untertitel grün, meta grau): datei A älterer stand (H.264/AAC/TTML), datei B modern (AV1/Opus/WebVTT+HDR). verdict 'gleiche endung, anderes innenleben + mediainfo zeigt beides'. dashed-border-container + farbige spur-rahmen. eigener stil

2. CJK-zeichen (中, こんにちは) pixelig (unifont bitmap) statt sauberer fonts
   → google-fonts @import (Noto Sans JP + SC) + font-family in body + code-tags

3. 'Datenfundamentale' kein deutsches wort (nicht im duden)
   → git mv 01-datenfundamentale.md → 01-daten-grundlagen.md (+bogen-doc), Makefile aktualisiert, text-replace in 4 docs

4. 'Hex-Editoren zeigen \`.\` als Platzhalter' kleiner punkt schwer lesbar
   → 'zeigen einen Punkt oder ein anderes Ersatzzeichen'

klausurfolien regeneriert (27 slides)
This commit is contained in:
2026-05-14 18:46:54 +02:00
parent 4053185e74
commit 7e8190d0a8
9 changed files with 190 additions and 24 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ DEPLOY_HOST = tengo@tuttle.uberspace.de
# Per-course settings: NAME, KAPITEL, DEPLOY, PORT, KLAUSUR (1 or empty)
223015b_NAME = Dateiformate, Schnittstellen, Speichermedien
223015b_KAPITEL = 00-intro 01-datenfundamentale 02-kompression 03-inhalte-bild-audio-video 04-speicher-schnittstellen 05-distribution-metadaten klausurfolien klausurfragen
223015b_KAPITEL = 00-intro 01-daten-grundlagen 02-kompression 03-inhalte-bild-audio-video 04-speicher-schnittstellen 05-distribution-metadaten klausurfolien klausurfragen
223015b_DEPLOY = /home/tengo/html/hdm/223015b
223015b_KLAUSUR = 1
+3 -3
View File
@@ -18,7 +18,7 @@ Die Lernziele sind als **Vorschläge** formuliert — der Dozent setzt die endg
## Hinweis zur Begriffsverwendung „Block"
Ein **Klausur-Block** in diesem Dokument ist ein **thematischer Lernziel-Cluster** — z.B. „Block 1: Datenfundamentale" fasst alle Lernziele rund um Bit/Byte/Hex/Encoding/Magic Numbers zusammen. Das entspricht der bestehenden Konvention in `klausurfragen.md` (BLOCK J, K, L, …).
Ein **Klausur-Block** in diesem Dokument ist ein **thematischer Lernziel-Cluster** — z.B. „Block 1: Daten-Grundlagen" fasst alle Lernziele rund um Bit/Byte/Hex/Encoding/Magic Numbers zusammen. Das entspricht der bestehenden Konvention in `klausurfragen.md` (BLOCK J, K, L, …).
**Wichtig:** Die einzelnen klausur-markierten Folien (`<!-- _class: klausur -->`) bleiben über den Vorlesungs-Fluss **verstreut** — sie werden im pädagogischen Kontext erlebt, nicht als physischer Klausur-Abschnitt am Kapitelende gesammelt. Die Auto-Extraktion via `make klausur-223015b` fasst sie für die Prüfungs-Repetition zusammen, ohne die Vorlesungs-Reihenfolge zu verändern.
@@ -26,7 +26,7 @@ Ein **Klausur-Block** in diesem Dokument ist ein **thematischer Lernziel-Cluster
## Operative Lernziele pro Klausur-Block
### Block 1 — Datenfundamentale
### Block 1 — Daten-Grundlagen
- Studierende können den Wert einer Byte-Zahl in Binär, Dezimal und Hex erkennen und zuordnen, in welcher Schreibweise sie ihnen typischerweise begegnet (CSS-Farbcodes, Hex-Editor, Programmcode).
- Studierende können die Beziehung zwischen Bit, Byte, Nibble und Hex-Ziffer erklären.
@@ -95,7 +95,7 @@ Ein **Klausur-Block** in diesem Dokument ist ein **thematischer Lernziel-Cluster
| Kap | Titel | bedient Blöcke | Kern-Bogenkonzept |
|-----|-------|----------------|--------------------|
| **01** | Datenfundamentale + Signal zum Byte | Block 1 + 2 | Zahlen, Notation, Encoding, Sampling — die Atome |
| **01** | Daten-Grundlagen + Signal zum Byte | Block 1 + 2 | Zahlen, Notation, Encoding, Sampling — die Atome |
| **02** | Kompression: Prinzipien und Pipelines | Block 3 | Redundanz vs Irrelevanz, RLE und Psycho-* |
| **03** | Inhalte: Bild, Audio, Video | Block 4 + 5 + 6 | Pipelines + Format-Wahl |
| **04** | Speicher und Schnittstellen | Block 7 + 8 | Wie Bytes physikalisch existieren und reisen |
@@ -1,6 +1,6 @@
# Kapitel 1 — Datenfundamentale + Signal zum Byte
# Kapitel 1 — Daten-Grundlagen + Signal zum Byte
**Bedient Klausur-Blöcke:** 1 (Datenfundamentale) + 2 (Vom Signal zum Byte)
**Bedient Klausur-Blöcke:** 1 (Daten-Grundlagen) + 2 (Vom Signal zum Byte)
**Slide-Budget:** ~40 (90-min-Termin)
## Bogen
@@ -38,7 +38,7 @@ Aussage: dieses Kapitel überbrückt zwei Richtungen — *rein* (analog → digi
| # | Typ | Titel/Kern | Lernziel | Berührungspunkt | Visualisierung |
|---|-----|-----------|---------|-----------------|----------------|
| 1 | Cover | Kapitel 1 — Datenfundamentale | — | — | reuse cover |
| 1 | Cover | Kapitel 1 — Daten-Grundlagen | — | — | reuse cover |
| 2 | Lead | Was steckt in einer Datei? | Kapitel-Hook | Foto · Sprachnachricht · PDF | NEU collage |
| 3 | Inhalt | Drei Dateien — dasselbe Innenleben | Hook | derselbe Trio | NEU mit Hex-Preview |
| 4 | Advance Organizer | Welt → Datei → Bedeutung | Roter Faden | — | **NEU kap01-advance-organizer** |
@@ -88,7 +88,7 @@ Aussage: dieses Kapitel überbrückt zwei Richtungen — *rein* (analog → digi
Aus dem aktuellen `01-grundlagen-text-audio.md` (~120 Slides) werden in der neuen Version Folgendes gestrichen oder verlagert:
- **Datenwachstum der Menschheit / Zettabyte** — gehört konzeptuell in Kap 0 (Intro/Motivation), nicht in Datenfundamentale
- **Datenwachstum der Menschheit / Zettabyte** — gehört konzeptuell in Kap 0 (Intro/Motivation), nicht in Daten-Grundlagen
- **Bandbreite-Mathematik-Slides** (3 Stück) — gehört in Speicher/Schnittstellen-Kapitel, nicht hier
- **Upload Flaschenhals** — gehört in Speicher-/Schnittstellen-Kapitel
- **Kompressionsraten Tabelle** + **Album-MB-Größe** + **Artemis-Slide** — gehört in Kapitel 2 (Kompression), nicht in Fundamentale
+1 -1
View File
@@ -17,7 +17,7 @@ Maßstab: Die drei Meta-Lernziele aus `CLAUDE.md` (gelernte Hilflosigkeit ablege
| # | Block | Kern | Was reinkommt | Berührungspunkt |
|---|---|---|---|---|
| 1 | **Datenfundamentale** | Daten als Zahlen begreifen | Bit/Byte/Hex, Dateneinheiten (KB vs KiB), Encoding (ASCII/Unicode/UTF-8), Magic Numbers | „warum spielt mein USB-Stick mit 32 GB nur 29 GB an" |
| 1 | **Daten-Grundlagen** | Daten als Zahlen begreifen | Bit/Byte/Hex, Dateneinheiten (KB vs KiB), Encoding (ASCII/Unicode/UTF-8), Magic Numbers | „warum spielt mein USB-Stick mit 32 GB nur 29 GB an" |
| 2 | **Vom Signal zum Byte** | Analog → Digital | Sampling, Quantisierung, Bittiefe, Abtastrate, Nyquist | „warum klingen alte MP3s blechern" |
| 3 | **Kompression: Prinzipien** | Redundanz vs Irrelevanz | Lossless vs Lossy, RLE/Huffman/LZ77 konzeptuell, Psychoakustik, Psychovisualität | WhatsApp-Bilder vs Original |
| 4 | **Bilder: Raster und Vektor** | Wann welches Bildformat | Raster vs Vektor, JPEG-Pipeline (6 Schritte), PNG/GIF/WebP/AVIF/SVG-Vergleich, Wann-Welches-Format | Instagram-Story-Qualitätsverlust, Logo skalieren |
@@ -9,6 +9,7 @@ title: Dateiformate, Schnittstellen, Speichermedien & Distributionswege
---
<style>
@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700&family=Noto+Sans+SC:wght@400;700&display=swap');
:root {
--color-foreground: #1a1a2e;
--color-highlight: #1e5f8a;
@@ -19,6 +20,7 @@ section.invert {
}
section {
font-size: 1.7rem;
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Noto Sans JP", "Noto Sans SC", "Apple Color Emoji", "Segoe UI Emoji", sans-serif;
}
h1 {
color: #1e5f8a;
@@ -43,7 +45,7 @@ code {
background: #0f0f23;
padding: 0.15em 0.4em;
border-radius: 4px;
font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
font-family: ui-monospace, "SF Mono", Menlo, Consolas, "Noto Sans JP", "Noto Sans SC", "Apple Color Emoji", "Segoe UI Emoji", monospace;
}
section code:not(.hljs) { color: #5fb3e4 !important; }
section code.hljs { color: #f8f8f8 !important; }
@@ -117,7 +119,7 @@ Hochschule der Medien Stuttgart
<!-- _class: lead -->
# Kapitel 1
## Datenfundamentale + Vom Signal zum Byte
## Daten-Grundlagen + Vom Signal zum Byte
<!--
Eine Stunde, eine Frage: *Was steckt in einer Datei — und wie kommt es da rein?*
@@ -501,7 +503,7 @@ Auflösung kommt mit Magic-Numbers-Folie.
| PDF | `25 50 44 46` | % P D F |
| ZIP | `50 4B 03 04` | P K — — |
**Achtung:** Werte > 127 sind nicht ASCII-druckbar. *Hex-Editoren zeigen `.` als Platzhalter.*
**Achtung:** Werte > 127 sind nicht ASCII-druckbar. *Hex-Editoren zeigen einen Punkt oder ein anderes Ersatzzeichen als Platzhalter.*
<!--
- PNG nutzt absichtlich `89` (= 137 dezimal): markiert Datei eindeutig als Binär. Erkennt kaputte Übertragungen (alte Systeme schnitten Bit 7 ab).
+3 -11
View File
@@ -670,18 +670,10 @@ Die Kompression ist hier nicht „nice to have" — sie ist die Voraussetzung, d
---
<!-- _class: klausur -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Container ≠ Codec
![bg right:40% contain](./assets/container-codec-diagram.png)
**Container** = die *Verpackung*: hält Video-Spur, Audio-Spur, Untertitel, Metadaten zusammen.
*Beispiele:* MP4, MKV, WebM, AVI
**Codec** = der *Komprimierer*: wie wird Bild/Audio gespeichert?
*Beispiele:* H.264, H.265, AV1, VP9 (Video) · AAC, MP3, Opus (Audio)
**Eine `.mp4`-Datei kann verschiedene Codecs enthalten.**
![bg fit](./assets/demos/container-vs-codec.png)
<!--
Das ist DER zentrale Missverständnis-Punkt bei Video. Studis denken oft, „MP4" oder „MKV" sei das Format des Videos. Stimmt nicht. Es ist nur die Hülle.
@@ -0,0 +1,172 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Container ≠ Codec</title>
<style>
:root {
--dark: #1a1a2e;
--muted: #6b7280;
--soft: #f8fafc;
--border: #cbd5e1;
--hl: #d63384;
--container: #2563eb;
--video: #7c3aed;
--audio: #ea580c;
--subs: #16a34a;
--meta: #94a3b8;
}
html, body { margin: 0; padding: 0; background: #fff; font-family: system-ui, -apple-system, sans-serif; color: var(--dark); }
body { padding: 28px 40px; }
h1 { text-align: center; margin: 0 0 6px; font-size: 1.75rem; }
.sub { text-align: center; color: var(--muted); margin-bottom: 22px; font-size: 1.05rem; }
.sub strong { color: var(--dark); }
.scene {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 22px;
max-width: 1200px;
margin: 0 auto;
}
.container-box {
border: 3px dashed var(--container);
border-radius: 14px;
padding: 14px 16px 18px;
background: #fff;
position: relative;
}
.container-tag {
position: absolute;
top: -12px;
left: 18px;
background: #fff;
padding: 0 10px;
font-family: ui-monospace, monospace;
font-size: 0.78rem;
font-weight: 700;
color: var(--container);
}
.container-label {
text-align: center;
font-size: 0.7rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--muted);
margin-bottom: 10px;
}
.track {
display: grid;
grid-template-columns: 90px 1fr;
gap: 12px;
align-items: center;
background: var(--soft);
border-left: 4px solid;
border-radius: 6px;
padding: 9px 14px;
margin-bottom: 6px;
}
.track.video { border-left-color: var(--video); }
.track.audio { border-left-color: var(--audio); }
.track.subs { border-left-color: var(--subs); }
.track.meta { border-left-color: var(--meta); }
.track-label {
font-size: 0.78rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.08em;
}
.track.video .track-label { color: var(--video); }
.track.audio .track-label { color: var(--audio); }
.track.subs .track-label { color: var(--subs); }
.track.meta .track-label { color: var(--meta); }
.codec-pill {
display: inline-block;
font-family: ui-monospace, monospace;
font-size: 0.82rem;
background: #fff;
border: 1px solid var(--border);
padding: 2px 9px;
border-radius: 4px;
color: var(--dark);
}
.verdict {
margin-top: 22px;
max-width: 1200px;
margin-left: auto;
margin-right: auto;
text-align: center;
border: 2px solid var(--hl);
border-radius: 12px;
padding: 14px 22px;
}
.verdict-q { font-size: 1.1rem; font-weight: 700; color: var(--hl); }
.verdict-a { font-size: 0.93rem; color: var(--dark); margin-top: 4px; }
.verdict-a strong { color: var(--hl); }
.verdict-a code { font-family: ui-monospace, monospace; background: var(--soft); padding: 1px 5px; border-radius: 4px; }
</style>
</head>
<body>
<h1>Container ≠ Codec</h1>
<div class="sub">Die <strong>Hülle</strong> sagt nichts darüber, <strong>wie</strong> der Inhalt komprimiert wurde.</div>
<div class="scene">
<div class="container-box">
<span class="container-tag">.mp4</span>
<div class="container-label">Datei A — älterer Stand</div>
<div class="track video">
<span class="track-label">Video</span>
<span><span class="codec-pill">H.264 / AVC</span> · 1080p · 8 Mbit/s</span>
</div>
<div class="track audio">
<span class="track-label">Audio</span>
<span><span class="codec-pill">AAC</span> · 192 kbit/s · Stereo</span>
</div>
<div class="track subs">
<span class="track-label">Untertitel</span>
<span><span class="codec-pill">TTML</span> · de + en</span>
</div>
<div class="track meta">
<span class="track-label">Metadaten</span>
<span>Titel · Dauer · Datum · Bitrate</span>
</div>
</div>
<div class="container-box">
<span class="container-tag">.mp4</span>
<div class="container-label">Datei B — modern</div>
<div class="track video">
<span class="track-label">Video</span>
<span><span class="codec-pill">AV1</span> · 4K · 25 Mbit/s</span>
</div>
<div class="track audio">
<span class="track-label">Audio</span>
<span><span class="codec-pill">Opus</span> · 128 kbit/s · 5.1 Surround</span>
</div>
<div class="track subs">
<span class="track-label">Untertitel</span>
<span><span class="codec-pill">WebVTT</span> · de + en + ja</span>
</div>
<div class="track meta">
<span class="track-label">Metadaten</span>
<span>Titel · Dauer · Datum · HDR-Info</span>
</div>
</div>
</div>
<div class="verdict">
<div class="verdict-q">Gleiche Endung. Anderes Innenleben.</div>
<div class="verdict-a"><strong>Container</strong> = Verpackung (<code>.mp4</code>, <code>.mkv</code>, <code>.webm</code>). <strong>Codec</strong> = Komprimierer (H.264 / AV1 / AAC / Opus). <strong>Tool:</strong> <code>mediainfo &lt;datei&gt;</code> zeigt beides.</div>
</div>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

+1 -1
View File
@@ -176,7 +176,7 @@ Pointe: 29 sichtbare Zeichen, 42 Byte. Zeichen ≠ Byte sobald Unicode > 127.
| PDF | `25 50 44 46` | % P D F |
| ZIP | `50 4B 03 04` | P K — — |
**Achtung:** Werte > 127 sind nicht ASCII-druckbar. *Hex-Editoren zeigen `.` als Platzhalter.*
**Achtung:** Werte > 127 sind nicht ASCII-druckbar. *Hex-Editoren zeigen einen Punkt oder ein anderes Ersatzzeichen als Platzhalter.*
<!--
- PNG nutzt absichtlich `89` (= 137 dezimal): markiert Datei eindeutig als Binär. Erkennt kaputte Übertragungen (alte Systeme schnitten Bit 7 ab).