From a8343c99370fd10fc98129979f656e7a3028be57 Mon Sep 17 00:00:00 2001 From: Michael Czechowski Date: Sun, 25 Jan 2026 11:26:15 +0100 Subject: [PATCH] restructure: rename termin to kapitel, flatten folder structure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - rename slide files: YYYY-MM-DD-termin-N-topic.md → NN-topic.md - flatten folders: courses/X/slides/ → slides/X/ - replace "Termin" with "Kapitel" in all content - add klausur extraction script (make klausur) - update Makefile, generate-index.sh, dev-server.sh - add README.md with full documentation --- CLAUDE.md | 23 +- Makefile | 59 +- README.md | 203 +- courses/223015b/slides/01-grundlagen.md | 2220 ----------------- courses/223015b/slides/02-bild-audio-video.md | 1027 -------- scripts/dev-server.sh | 6 +- scripts/extract-klausur.sh | 112 + scripts/generate-index.sh | 55 +- .../223015b/00-intro.md | 0 .../223015b/01-grundlagen-text-audio.md | 0 .../223015b/02-bild-audio-video.md | 0 .../03-speichermedien-schnittstellen.md | 2 +- .../223015b/04-distribution-apis-zukunft.md | 2 +- .../223015b/05-vertiefung-offene-fragen.md | 2 +- .../223015b}/assets/2011-hilbert.png | Bin .../223015b}/assets/8bit-P-character.png | Bin .../slides => slides/223015b}/assets/AV1.png | Bin .../assets/Asterisk_with_jpg-artefacts.png | Bin .../223015b}/assets/Barn-yuv.png | Bin ...subsampling_ratios_YCbCr_CORRECTED.svg.png | Bin ...decrease_of_quality_-_JPEG_compression.jpg | Bin .../223015b}/assets/Posterization_example.jpg | Bin .../assets/addaptive-substractive-colors.jpg | Bin .../223015b}/assets/ascii-table-colored.png | Bin .../223015b}/assets/ascii-table.png | Bin .../223015b}/assets/audio-spectrogram.png | Bin .../223015b}/assets/av1-grammy-crop.png | Bin .../223015b}/assets/av1-grammy.png | Bin .../223015b}/assets/av1-logo.png | Bin .../223015b}/assets/bittorrent.png | Bin .../223015b}/assets/cassette-ipod.png | Bin .../223015b}/assets/compression-types.png | Bin .../assets/container-codec-diagram.png | Bin .../223015b}/assets/digital-landscape.png | Bin .../223015b}/assets/gif-animation.png | Bin .../223015b}/assets/grayscale-gradient.png | Bin .../223015b}/assets/growth of big data.png | Bin .../223015b}/assets/hex-binary-table.png | Bin .../223015b}/assets/hex-code-hidden.png | Bin .../223015b}/assets/hex-code.png | Bin .../223015b}/assets/hex-dec-lookup-table.png | Bin .../223015b}/assets/hexeditor-screenshot.png | Bin .../223015b}/assets/hollerith-machine-2.jpg | Bin .../223015b}/assets/iframe-pframe-diagram.png | Bin .../assets/instagram-quality-loss.png | Bin .../223015b}/assets/ipb-compression-canon.jpg | Bin .../223015b}/assets/jpeg-artifacts.png | Bin .../223015b}/assets/jung-naiv.png | Bin .../223015b}/assets/karlheinz-brandenburg.jpg | Bin .../223015b}/assets/klausur-pattern.svg | 0 .../223015b}/assets/lightbulb-onoff.png | Bin .../223015b}/assets/matrix-code.png | Bin .../223015b}/assets/moores-law.png | Bin .../223015b}/assets/napster-2001.png | Bin .../223015b}/assets/napster-interface.png | Bin .../223015b}/assets/netflix-4k.png | Bin .../223015b}/assets/original-ascii-table.png | Bin .../223015b}/assets/photo-comparison.png | Bin .../223015b}/assets/qr/asciitable.png | Bin .../assets/qr/audacity-spectrogram.png | Bin .../223015b}/assets/qr/hexed-it.png | Bin .../223015b}/assets/qr/mediainfo.png | Bin .../223015b}/assets/qr/repo-223015b.png | Bin .../223015b}/assets/qr/slides-223015b.png | Bin .../223015b}/assets/qr/squoosh.png | Bin .../223015b}/assets/qrcode-0.svg | 0 .../223015b}/assets/qrcode-1.svg | 0 .../assets/quantized-image-8-colors.jpg | Bin .../radek-grzybowski-eBRTYyjwpRY-unsplash.jpg | Bin .../assets/rgb-color-model-with-title.png | Bin .../223015b}/assets/rgb-color-model.png | Bin .../223015b}/assets/spectogram-chet-baker.png | Bin .../assets/streaming-quality-switch.png | Bin .../223015b}/assets/suzanne-vega.jpg | Bin .../223015b}/assets/ybcbr.webp | Bin .../223015b}/assets/youtube-vp9.png | Bin slides/223015b/klausur.md | 563 +++++ .../slides => slides/223015b}/materials/wtf1 | 0 .../slides => slides/223015b}/materials/wtf2 | Bin .../slides => slides/223015b}/materials/wtf3 | Bin .../223015c/01-geschichte-grundlagen-html.md | 0 .../223015c/02-netzwerke-protokolle-css.md | 20 +- .../223015c/03-interaktivitaet-javascript.md | 4 +- .../223015c}/assets/8bit-P-character.png | Bin .../223015c}/assets/Ada_Lovelace.jpg | Bin ...type_by_Antoine_Claudet_1843_-_cropped.png | Bin .../assets/Bletchley_Park_Mansion.jpg | Bin .../assets/First_Computer_Bug,_1947.jpg | Bin ...emini_Generated_Image_9an75b9an75b9an7.png | Bin .../223015c}/assets/Grace_Hopper.jpg | Bin .../223015c}/assets/Hollerith.jpg | Bin .../IBM_Front_Cover_2021_from_Amazon.jpg | Bin .../223015c}/assets/alan-turing.jpg | Bin .../223015c}/assets/arpanet-1969.png | Bin .../223015c}/assets/arpanet.jpg | Bin .../223015c}/assets/background-termin-1.png | Bin .../223015c}/assets/background-termin-2.png | Bin .../223015c}/assets/background-termin-3.png | Bin .../223015c}/assets/dehomag-hollerith.webp | Bin .../223015c}/assets/eniac.avif | Bin .../223015c}/assets/hammilton-portrait.jpg | Bin .../223015c}/assets/hammilton.jpg | Bin .../223015c}/assets/hex-dec-lookup-table.png | Bin .../223015c}/assets/hollerith-machine-2.jpg | Bin .../223015c}/assets/hollerith-machine-3.jpg | Bin .../223015c}/assets/hollerith-machine.jpg | Bin .../223015c}/assets/hollerith-machine.tif | Bin .../223015c}/assets/john-von-neumann.png | Bin .../223015c}/assets/klausur-pattern.svg | 0 .../223015c}/assets/lightbulb-onoff.png | Bin .../223015c}/assets/oppenheimer.png | Bin .../223015c}/assets/qr/codepen.png | Bin .../223015c}/assets/qr/codescripsi.png | Bin .../223015c}/assets/qr/cssgridgarden.png | Bin .../223015c}/assets/qr/flexboxfroggy.png | Bin .../223015c}/assets/qr/freecodecamp.png | Bin .../223015c}/assets/qr/html-over-js.png | Bin .../223015c}/assets/qr/mandala.png | Bin .../223015c}/assets/qr/mdn-button.png | Bin .../223015c}/assets/qr/mdn-details.png | Bin .../223015c}/assets/qr/mdn-dialog.png | Bin .../223015c}/assets/qr/mdn-input.png | Bin .../223015c}/assets/qr/mdn.png | Bin .../223015c}/assets/qr/odinproject.png | Bin .../223015c}/assets/qr/repo-223015c.png | Bin .../223015c}/assets/qr/slides-223015c.png | Bin .../223015c}/assets/qr/vscode.png | Bin slides/223015c/klausur.md | 650 +++++ 128 files changed, 1464 insertions(+), 3484 deletions(-) delete mode 100644 courses/223015b/slides/01-grundlagen.md delete mode 100644 courses/223015b/slides/02-bild-audio-video.md create mode 100755 scripts/extract-klausur.sh rename courses/223015b/slides/2025-12-19-termin-0-intro.md => slides/223015b/00-intro.md (100%) rename courses/223015b/slides/2025-12-19-termin-1-grundlagen-text-audio.md => slides/223015b/01-grundlagen-text-audio.md (100%) rename courses/223015b/slides/2026-01-09-termin-2-bild-audio-video.md => slides/223015b/02-bild-audio-video.md (100%) rename courses/223015b/slides/2026-01-23-termin-3-speichermedien-schnittstellen.md => slides/223015b/03-speichermedien-schnittstellen.md (99%) rename courses/223015b/slides/2026-01-30-termin-4-distribution-apis-zukunft.md => slides/223015b/04-distribution-apis-zukunft.md (99%) rename courses/223015b/slides/2026-xx-xx-termin-5-vertiefung-offene-fragen.md => slides/223015b/05-vertiefung-offene-fragen.md (99%) rename {courses/223015b/slides => slides/223015b}/assets/2011-hilbert.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/8bit-P-character.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/AV1.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/Asterisk_with_jpg-artefacts.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/Barn-yuv.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/Common_chroma_subsampling_ratios_YCbCr_CORRECTED.svg.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/Felis_silvestris_silvestris_small_gradual_decrease_of_quality_-_JPEG_compression.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/Posterization_example.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/addaptive-substractive-colors.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/ascii-table-colored.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/ascii-table.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/audio-spectrogram.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/av1-grammy-crop.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/av1-grammy.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/av1-logo.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/bittorrent.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/cassette-ipod.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/compression-types.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/container-codec-diagram.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/digital-landscape.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/gif-animation.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/grayscale-gradient.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/growth of big data.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/hex-binary-table.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/hex-code-hidden.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/hex-code.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/hex-dec-lookup-table.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/hexeditor-screenshot.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/hollerith-machine-2.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/iframe-pframe-diagram.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/instagram-quality-loss.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/ipb-compression-canon.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/jpeg-artifacts.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/jung-naiv.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/karlheinz-brandenburg.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/klausur-pattern.svg (100%) rename {courses/223015b/slides => slides/223015b}/assets/lightbulb-onoff.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/matrix-code.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/moores-law.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/napster-2001.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/napster-interface.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/netflix-4k.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/original-ascii-table.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/photo-comparison.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qr/asciitable.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qr/audacity-spectrogram.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qr/hexed-it.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qr/mediainfo.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qr/repo-223015b.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qr/slides-223015b.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qr/squoosh.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/qrcode-0.svg (100%) rename {courses/223015b/slides => slides/223015b}/assets/qrcode-1.svg (100%) rename {courses/223015b/slides => slides/223015b}/assets/quantized-image-8-colors.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/rgb-color-model-with-title.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/rgb-color-model.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/spectogram-chet-baker.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/streaming-quality-switch.png (100%) rename {courses/223015b/slides => slides/223015b}/assets/suzanne-vega.jpg (100%) rename {courses/223015b/slides => slides/223015b}/assets/ybcbr.webp (100%) rename {courses/223015b/slides => slides/223015b}/assets/youtube-vp9.png (100%) create mode 100644 slides/223015b/klausur.md rename {courses/223015b/slides => slides/223015b}/materials/wtf1 (100%) rename {courses/223015b/slides => slides/223015b}/materials/wtf2 (100%) rename {courses/223015b/slides => slides/223015b}/materials/wtf3 (100%) rename courses/223015c/slides/2025-12-20-termin-1-geschichte-grundlagen-html.md => slides/223015c/01-geschichte-grundlagen-html.md (100%) rename courses/223015c/slides/2026-01-10-termin-2-netzwerke-protokolle-css.md => slides/223015c/02-netzwerke-protokolle-css.md (99%) rename courses/223015c/slides/2026-01-24-termin-3-interaktivitaet-javascript.md => slides/223015c/03-interaktivitaet-javascript.md (99%) rename {courses/223015c/slides => slides/223015c}/assets/8bit-P-character.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/Ada_Lovelace.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/Ada_Lovelace_daguerreotype_by_Antoine_Claudet_1843_-_cropped.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/Bletchley_Park_Mansion.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/First_Computer_Bug,_1947.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/Gemini_Generated_Image_9an75b9an75b9an7.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/Grace_Hopper.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/Hollerith.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/IBM_Front_Cover_2021_from_Amazon.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/alan-turing.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/arpanet-1969.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/arpanet.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/background-termin-1.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/background-termin-2.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/background-termin-3.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/dehomag-hollerith.webp (100%) rename {courses/223015c/slides => slides/223015c}/assets/eniac.avif (100%) rename {courses/223015c/slides => slides/223015c}/assets/hammilton-portrait.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/hammilton.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/hex-dec-lookup-table.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/hollerith-machine-2.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/hollerith-machine-3.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/hollerith-machine.jpg (100%) rename {courses/223015c/slides => slides/223015c}/assets/hollerith-machine.tif (100%) rename {courses/223015c/slides => slides/223015c}/assets/john-von-neumann.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/klausur-pattern.svg (100%) rename {courses/223015c/slides => slides/223015c}/assets/lightbulb-onoff.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/oppenheimer.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/codepen.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/codescripsi.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/cssgridgarden.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/flexboxfroggy.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/freecodecamp.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/html-over-js.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/mandala.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/mdn-button.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/mdn-details.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/mdn-dialog.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/mdn-input.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/mdn.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/odinproject.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/repo-223015c.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/slides-223015c.png (100%) rename {courses/223015c/slides => slides/223015c}/assets/qr/vscode.png (100%) create mode 100644 slides/223015c/klausur.md diff --git a/CLAUDE.md b/CLAUDE.md index a61e2bc..4a110b5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,8 +4,8 @@ This project builds presentation decks for Marp, supporting multiple courses. ## Courses -- **223015b** - Dateiformate, Schnittstellen, Speichermedien (6 Termine) -- **223015c** - Internettechnologien (3 Termine) +- **223015b** - Dateiformate, Schnittstellen, Speichermedien (6 Kapitel) +- **223015c** - Internettechnologien (3 Kapitel) ## Agent Restrictions @@ -15,7 +15,7 @@ This project builds presentation decks for Marp, supporting multiple courses. ## Critical File Protection -Slide files in `courses/*/slides/*.md` are main content files: +Slide files in `slides/*/*.md` are main content files: - ALLOWED: Adding slides, adjusting content, fixing typos, enhancing sections - FORBIDDEN (without permission): Deleting slides, removing sections, bulk deletions - Before ANY deletion: ALWAYS ask user for confirmation @@ -23,9 +23,9 @@ Slide files in `courses/*/slides/*.md` are main content files: ## Project Structure ``` -courses/ -├── 223015b/slides/ # Dateiformate course -└── 223015c/slides/ # Internettechnik course +slides/ +├── 223015b/ # Dateiformate course +└── 223015c/ # Internettechnik course scripts/ # Shared scripts themes/ # Custom Marp themes build/ # Generated output (gitignored) @@ -34,13 +34,14 @@ build/ # Generated output (gitignored) ## Build Commands ```bash -make dev-b # Dev server 223015b (port 1312) -make dev-c # Dev server 223015c (port 1313) +make dev-b # Dev server 223015b (port 1311) +make dev-c # Dev server 223015c (port 1312) make build # Build all courses make build-b # Build 223015b only make build-c # Build 223015c only make html # HTML only make pdf # PDF only +make klausur # Extract klausur slides → slides/*/klausur.md make deploy # Deploy all (ASK FIRST!) ``` @@ -56,12 +57,12 @@ nix run .#optimize-img -- # Optimize images ## Code Style Guidelines ### File Structure -- Slides in `courses//slides/` -- Assets in `courses//slides/assets/` +- Slides in `slides//` +- Assets in `slides//assets/` - Always reference images as `./assets/filename.png` ### Naming Conventions -- Slide files: `YYYY-MM-DD-termin-N-topic.md` +- Slide files: `NN-topic.md` (e.g., `01-grundlagen.md`) - Images: `snake_case.jpg` or `kebab-case.jpg` ### Markdown Style diff --git a/Makefile b/Makefile index 37c3bd0..9aecbfc 100644 --- a/Makefile +++ b/Makefile @@ -1,11 +1,11 @@ # HdM Slides - Unified Makefile # Supports multiple courses: 223015b (Dateiformate) and 223015c (Internettechnik) -.PHONY: help dev dev-b dev-c build build-b build-c pdf html clean install deploy qr optimize-images +.PHONY: help dev dev-b dev-c build build-b build-c pdf html klausur clean install deploy qr optimize-images # Course configuration COURSES = 223015b 223015c -COURSE_DIR = courses +SLIDES_DIR = slides # Port configuration (index starts at BASE_PORT, courses increment from there) BASE_PORT = 1310 @@ -14,12 +14,12 @@ INDEX_PORT = $(BASE_PORT) # Course-specific settings 223015b_NAME = Dateiformate, Schnittstellen, Speichermedien 223015b_PORT = 1311 -223015b_TERMINS = 2025-12-19-termin-0-intro 2025-12-19-termin-1-grundlagen-text-audio 2026-01-09-termin-2-bild-audio-video 2026-01-23-termin-3-speichermedien-schnittstellen 2026-01-30-termin-4-distribution-apis-zukunft 2026-xx-xx-termin-5-vertiefung-offene-fragen +223015b_KAPITEL = 00-intro 01-grundlagen-text-audio 02-bild-audio-video 03-speichermedien-schnittstellen 04-distribution-apis-zukunft 05-vertiefung-offene-fragen 223015b_DEPLOY_PATH = /home/tengo/html/hdm/223015b 223015c_NAME = Internettechnologien 223015c_PORT = 1312 -223015c_TERMINS = 2025-12-20-termin-1-geschichte-grundlagen-html 2026-01-10-termin-2-netzwerke-protokolle-css 2026-01-24-termin-3-interaktivitaet-javascript +223015c_KAPITEL = 01-geschichte-grundlagen-html 02-netzwerke-protokolle-css 03-interaktivitaet-javascript 223015c_DEPLOY_PATH = /home/tengo/html/hdm/223015c DEPLOY_HOST = tengo@tuttle.uberspace.de @@ -43,6 +43,7 @@ help: @echo " make build-c - Build 223015c only" @echo " make pdf - Export all to PDF" @echo " make html - Export all to HTML" + @echo " make klausur - Extract klausur slides" @echo "" @echo "Tools:" @echo " make qr URL=... - Generate QR code for URL" @@ -74,24 +75,24 @@ dev-kill: dev-b: @echo "Starting 223015b dev server on port $(223015b_PORT)..." @echo "Open: http://localhost:$(223015b_PORT)" - PORT=$(223015b_PORT) npx @marp-team/marp-cli --server $(COURSE_DIR)/223015b/slides/ + PORT=$(223015b_PORT) npx @marp-team/marp-cli --server $(SLIDES_DIR)/223015b/ dev-c: @echo "Starting 223015c dev server on port $(223015c_PORT)..." @echo "Open: http://localhost:$(223015c_PORT)" - PORT=$(223015c_PORT) npx @marp-team/marp-cli --server $(COURSE_DIR)/223015c/slides/ + PORT=$(223015c_PORT) npx @marp-team/marp-cli --server $(SLIDES_DIR)/223015c/ # Build functions define build_course @echo "Building $(1)..." @mkdir -p build/$(1) - @cp -r $(COURSE_DIR)/$(1)/slides/assets build/$(1)/ 2>/dev/null || true - @cp -r $(COURSE_DIR)/$(1)/slides/materials build/$(1)/ 2>/dev/null || true - @for f in $($(1)_TERMINS); do \ - if [ -f "$(COURSE_DIR)/$(1)/slides/$$f.md" ]; then \ + @cp -r $(SLIDES_DIR)/$(1)/assets build/$(1)/ 2>/dev/null || true + @cp -r $(SLIDES_DIR)/$(1)/materials build/$(1)/ 2>/dev/null || true + @for f in $($(1)_KAPITEL); do \ + if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \ echo " Building $$f..."; \ - npx @marp-team/marp-cli $(COURSE_DIR)/$(1)/slides/$$f.md -o build/$(1)/$$f.html; \ - npx @marp-team/marp-cli $(COURSE_DIR)/$(1)/slides/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \ + npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md -o build/$(1)/$$f.html; \ + npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \ fi \ done @./scripts/generate-index.sh $(1) build/$(1) @@ -110,12 +111,12 @@ build: build-b build-c define html_course @echo "Building HTML for $(1)..." @mkdir -p build/$(1) - @cp -r $(COURSE_DIR)/$(1)/slides/assets build/$(1)/ 2>/dev/null || true - @cp -r $(COURSE_DIR)/$(1)/slides/materials build/$(1)/ 2>/dev/null || true - @for f in $($(1)_TERMINS); do \ - if [ -f "$(COURSE_DIR)/$(1)/slides/$$f.md" ]; then \ + @cp -r $(SLIDES_DIR)/$(1)/assets build/$(1)/ 2>/dev/null || true + @cp -r $(SLIDES_DIR)/$(1)/materials build/$(1)/ 2>/dev/null || true + @for f in $($(1)_KAPITEL); do \ + if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \ echo " $$f.html"; \ - npx @marp-team/marp-cli $(COURSE_DIR)/$(1)/slides/$$f.md -o build/$(1)/$$f.html; \ + npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md -o build/$(1)/$$f.html; \ fi \ done @./scripts/generate-index.sh $(1) build/$(1) @@ -133,10 +134,10 @@ html: html-b html-c define pdf_course @echo "Building PDFs for $(1)..." @mkdir -p build/$(1) - @for f in $($(1)_TERMINS); do \ - if [ -f "$(COURSE_DIR)/$(1)/slides/$$f.md" ]; then \ + @for f in $($(1)_KAPITEL); do \ + if [ -f "$(SLIDES_DIR)/$(1)/$$f.md" ]; then \ echo " $$f.pdf"; \ - npx @marp-team/marp-cli $(COURSE_DIR)/$(1)/slides/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \ + npx @marp-team/marp-cli $(SLIDES_DIR)/$(1)/$$f.md --pdf --allow-local-files -o build/$(1)/$$f.pdf; \ fi \ done endef @@ -149,6 +150,16 @@ pdf-c: build/.exists pdf: pdf-b pdf-c +# Klausur slide extraction +klausur-b: + @./scripts/extract-klausur.sh 223015b + +klausur-c: + @./scripts/extract-klausur.sh 223015c + +klausur: klausur-b klausur-c + @echo "Klausur slides extracted for all courses!" + # QR Code generation (uses nix-shell) qr: ifndef URL @@ -174,9 +185,9 @@ ifndef COURSE @echo "Usage: make optimize-images COURSE=223015b" else @echo "Optimizing images for $(COURSE)..." - @mkdir -p $(COURSE_DIR)/$(COURSE)/slides/assets-original - @nix-shell -p imagemagick --run 'for img in $(COURSE_DIR)/$(COURSE)/slides/assets/*.png $(COURSE_DIR)/$(COURSE)/slides/assets/*.jpg 2>/dev/null; do \ - [ -f "$$img" ] && cp "$$img" $(COURSE_DIR)/$(COURSE)/slides/assets-original/ && \ + @mkdir -p $(SLIDES_DIR)/$(COURSE)/assets-original + @nix-shell -p imagemagick --run 'for img in $(SLIDES_DIR)/$(COURSE)/assets/*.png $(SLIDES_DIR)/$(COURSE)/assets/*.jpg 2>/dev/null; do \ + [ -f "$$img" ] && cp "$$img" $(SLIDES_DIR)/$(COURSE)/assets-original/ && \ magick "$$img" -resize "1920x>" -quality 85 "$$img" && echo " Optimized: $$(basename $$img)"; \ done || true' @echo "Done! Originals in assets-original/" @@ -187,7 +198,7 @@ HDM_DEPLOY_PATH = /home/tengo/html/hdm build-index: build/.exists @echo "Building root index..." - @echo 'HdM Vorlesungen

HdM Vorlesungen

Wintersemester 2025/26 · Michael Czechowski

Referenzen

QR Code

https://librete.ch/hdm/

' > build/index.html + @echo 'HdM Vorlesungen

HdM Vorlesungen

Wintersemester 2025/26 · Michael Czechowski

Referenzen

QR Code

https://librete.ch/hdm/

' > build/index.html # Deploy define deploy_course diff --git a/README.md b/README.md index 95902cd..21f410c 100644 --- a/README.md +++ b/README.md @@ -1,182 +1,95 @@ # HdM Slides -**Modul "Technik 1"** - 1. Semester - Digital- und Medienwirtschaft -Hochschule der Medien Stuttgart - Wintersemester 2025/26 +Presentation slides for HdM Stuttgart courses, built with [Marp](https://marp.app/). ---- +## Courses -## Kurse +| Code | Title | Kapitel | +|------|-------|---------| +| 223015b | Dateiformate, Schnittstellen, Speichermedien | 6 | +| 223015c | Internettechnologien | 3 | -### 223015b - Dateiformate, Schnittstellen, Speichermedien & Distributionswege +## Project Structure -| # | Datum | Thema | -|---|-------|-------| -| 0 | 19.12.2025 | Intro | -| 1 | 19.12.2025 | Grundlagen, Text & Audio | -| 2 | 09.01.2026 | Bild- & Videoformate | -| 3 | 23.01.2026 | Speichermedien & Schnittstellen | -| 4 | 30.01.2026 | Distribution, APIs & Zukunft | -| 5 | TBA | Vertiefung & offene Fragen | - -### 223015c - Internettechnologien - -| # | Datum | Thema | -|---|-------|-------| -| 1 | 20.12.2025 | Geschichte, Grundlagen & HTML | -| 2 | 10.01.2026 | Netzwerke, Protokolle & CSS | -| 3 | 24.01.2026 | Interaktivitat & JavaScript | - -**Dozent:** Michael Czechowski - mail@librete.ch - ---- - -## Quick Start - -### Mit Nix (empfohlen) - -```bash -# Development shell mit allen Tools -nix develop - -# Oder direkt QR-Code generieren -nix run .#qr -- "https://example.com" -nix run .#qr-slides -- 223015b ``` - -### Ohne Nix - -```bash -npm install -make dev-b # 223015b auf Port 1312 -make dev-c # 223015c auf Port 1313 +slides/ +├── 223015b/ # Dateiformate course +│ ├── 00-intro.md +│ ├── 01-grundlagen-text-audio.md +│ └── ... +└── 223015c/ # Internettechnik course + ├── 01-geschichte-grundlagen-html.md + └── ... +scripts/ # Build scripts +build/ # Generated output (gitignored) ``` ---- - ## Development -### Dev Server starten - ```bash -make dev-b # 223015b (Dateiformate) - http://localhost:1312 -make dev-c # 223015c (Internettechnik) - http://localhost:1313 +# Start dev servers (hot reload) +make dev # All courses + index +make dev-b # 223015b only (port 1311) +make dev-c # 223015c only (port 1312) ``` -### Build +## Build ```bash -make build # Alle Kurse (HTML + PDF) -make build-b # Nur 223015b -make build-c # Nur 223015c -make html # Nur HTML -make pdf # Nur PDF +make build # Build all (HTML + PDF) +make build-b # Build 223015b only +make build-c # Build 223015c only +make html # HTML only +make pdf # PDF only ``` -### Deploy +## Klausur Slides + +Extract exam-relevant slides (marked with ``) into a single file: ```bash -make deploy # Alle Kurse -make deploy-b # Nur 223015b -make deploy-c # Nur 223015c +make klausur # Extract all courses +make klausur-b # 223015b only +make klausur-c # 223015c only ``` ---- +Output: `slides//klausur.md` + +The generated file includes: +- A title slide per kapitel for orientation +- All slides marked with `` ## Tools -### QR-Code Generator +```bash +make qr URL=https://example.com # Generate QR code +make qr-slides COURSE=223015b # QR for course URL +make optimize-images COURSE=223015b # Resize images +``` + +## Deploy ```bash -# Mit Nix -nix run .#qr -- "https://librete.ch/hdm/223015b/" -nix run .#qr -- "https://example.com" output.png - -# Mit Make -make qr URL=https://example.com -make qr URL=https://example.com OUTPUT=my-qr.png - -# Fur Kurse -make qr-slides COURSE=223015b +make deploy # Deploy all courses +make deploy-b # Deploy 223015b only +make deploy-c # Deploy 223015c only ``` -### Bilder optimieren +## Marking Slides as Klausur-Relevant -```bash -# Mit Nix -nix run .#optimize-img -- courses/223015b/slides/assets/ - -# Mit Make -make optimize-images COURSE=223015b -``` - ---- - -## Projektstruktur - -``` -hdm/ -├── courses/ -│ ├── 223015b/ -│ │ └── slides/ -│ │ ├── 2025-12-19-termin-1-grundlagen-text-audio.md -│ │ ├── assets/ -│ │ └── materials/ -│ └── 223015c/ -│ └── slides/ -│ ├── 2025-12-20-termin-1-geschichte-grundlagen-html.md -│ └── assets/ -├── scripts/ -│ └── generate-index.sh -├── themes/ -│ └── custom-theme.css -├── build/ # Generated output -├── flake.nix # Nix flake with tools -├── Makefile -└── package.json -``` - ---- - -## Slides erstellen - -### Frontmatter - -```yaml ---- -marp: true -theme: uncover -paginate: true -backgroundColor: #fff ---- -``` - -### Slide-Trennung +Add this comment block after the slide separator: ```markdown -# Slide 1 - -Content - --- -# Slide 2 + + + + -More content +# Your Slide Title + +Content here... ``` -### Bilder - -```markdown -![Alt text](./assets/image.jpg) -``` - -### Themes - -Built-in: `default`, `gaia`, `uncover` -Custom: in `themes/` Verzeichnis - ---- - -## License - -[CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/) +The `klausur` class adds a visual indicator (diagonal stripes) during presentation. diff --git a/courses/223015b/slides/01-grundlagen.md b/courses/223015b/slides/01-grundlagen.md deleted file mode 100644 index 40da4dc..0000000 --- a/courses/223015b/slides/01-grundlagen.md +++ /dev/null @@ -1,2220 +0,0 @@ ---- -marp: true -theme: gaia -paginate: true -backgroundColor: #fff -header: "Dateiformate, Schnittstellen, Speichermedien & Distributionswege (223015b)" -footer: "Michael Czechowski – HdM Stuttgart" -title: Dateiformate, Schnittstellen, Speichermedien & Distributionswege ---- - - - - - - - -![bg cover opacity:0.2](./assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg) - -# Dateiformate, Schnittstellen, Speichermedien & Distributionswege - -**223015b** · Modul "Technik 1" · 1. Semester -Digital- und Medienwirtschaft -Hochschule der Medien Stuttgart - -[https://librete.ch/hdm/223015b/](https://librete.ch/hdm/223015b/) - - - ---- - -![bg fit](./assets/qrcode-1.svg) - - - ---- - - - -# Teil 1: Einführung -## Grundlagen, Text & Audio - - - ---- - - - -# I. Einführung: Warum diese Vorlesung? - - - ---- - -# Verortung im Modul - -**Modul "Technik 1":** -- Computer & IT-Systeme -- Netzwerke & Protokolle -- **→ Unsere Vorlesung: Daten auf dem Computer** - -**Unser Fokus:** -- Von-Neumann-Architektur: **Speicher** (Memory) -- Wie werden Daten repräsentiert? -- Wie werden Daten gespeichert? -- Wie werden Daten übertragen? - - - ---- - -# Das menschliche Bedürfnis zu speichern - -**Geschichte der Informationsspeicherung:** - -- **40.000 v. Chr.**: Höhlenmalereien (Lascaux, Altamira) -- **3.200 v. Chr.**: Keilschrift auf Tontafeln (Mesopotamien) -- **1450**: Gutenberg-Druckpresse (Buchdruck revolutioniert) -- **1877**: Edison-Phonograph (erstmals Audio gespeichert) -- **1950er**: Magnetbänder, Lochkarten -- **1980er**: Festplatten, CDs -- **2000er**: Flash-Speicher, Cloud - -→ Das Bedürfnis ist **anthropologisch konstant** -→ Die Technologie entwickelt sich **exponentiell** - - - ---- - -# Der Paradigmenwechsel: Analog → Digital - -**Analog (vor ~1980):** -- Information als **kontinuierliche physikalische Größe** -- Beispiel: Schallplatte (Rille formt Schallwelle nach) -- Problem: **Degradation** bei jedem Kopiervorgang - -**Digital (ab ~1980):** -- Information als **diskrete Zahlenfolge** (0 und 1) -- Beispiel: CD (Pits & Lands = Bits) -- Vorteil: **Perfekte Kopien** möglich - -→ Nicht besser oder schlechter, sondern **fundamental anders** - - - ---- - - - -# II. Von der Welt zu den Bits -## Die drei Ebenen des Signals - - - ---- - -# Die drei Ebenen des Signals - -**1. Physisches Signal** – Die Realität -**2. Analoges Signal** – Kontinuierliche Repräsentation -**3. Digitales Signal** – Diskrete Repräsentation - -→ Jeder Übergang ist ein **Übersetzungsakt** mit **Konsequenzen** - -**Zentrale Frage:** -Was gewinnen wir? Was verlieren wir? - - - ---- - -# 1. Physisches Signal: Die Realität - -**Die Welt, wie sie ist** - -- Schallwellen in der Luft (Luftdruckschwankungen) -- Lichtwellen (elektromagnetische Strahlung) -- Temperatur, Bewegung, chemische Prozesse - -**Eigenschaften:** -- ✓ Kontinuierlich in **Raum und Zeit** -- ✓ Unendlich detailliert (theoretisch) -- ✗ Direkt **nicht speicherbar** - - - ---- - -# 2. Analoges Signal: Kontinuierliche Repräsentation - -**Physische Realität → Kontinuierliche Abbildung** - -**Beispiele:** -- **Schallplatte**: Rille formt Schwingungen nach (räumliche Analogie) -- **Magnetband**: Magnetisierung entspricht Schallstärke -- **Thermometer**: Quecksilbersäule entspricht Temperatur -- **Mikrofon**: Luftdruck → elektrische Spannung - -**Eigenschaften:** -- ✓ **Analogie** zur Realität (daher "analog") -- ✓ Immer noch **kontinuierlich**, aber in anderem Medium -- ✗ **Verlustbehaftet** (Rauschen, Verzerrung, Abnutzung) - - - ---- - -# 3. Digitales Signal: Diskrete Repräsentation - -**Kontinuierlich → Diskret (Sampling & Quantisierung)** - -**Zwei fundamentale Schritte:** -1. **Sampling** (zeitlich): Messe nur zu bestimmten Zeitpunkten -2. **Quantisierung** (Amplitude): Runde auf nächsten erlaubten Wert - -**Resultat:** Endliche Menge an Zahlen - -**Eigenschaften:** -- ✓ **Speicherbar** als Bits -- ✓ **Perfekte Kopien** möglich -- ✓ **Rechenbar** (Filter, Effekte, Kompression) -- ✗ **Informationsverlust** (Approximation der Realität) - - - ---- - -# Die drei Ebenen im Vergleich - -| Ebene | Form | Speicherbar? | Kopierbar? | Rechenbar? | Beispiel | -|-------|------|-------------|-----------|-----------|----------| -| **Physisch** | Kontinuierlich | ❌ | ❌ | ❌ | Schallwelle in Luft | -| **Analog** | Kontinuierlich | ✅ | ⚠️ Mit Verlust | ⚠️ Analog-Schaltungen | Schallplatte, Kassette | -| **Digital** | Diskret | ✅ | ✅ Perfekt | ✅ Algorithmen | MP3, WAV, CD | - -→ Jeder Übergang hat **Trade-offs** -→ Digital opfert **Kontinuität** für **Robustheit** - - - ---- - -# Visualisierung: Von Physisch zu Digital - -![bg right:50% fit](./assets/signal-levels-comparison.png) - -**1. Physisch** (Realität) -Glatte Sinuswelle -kontinuierlich in Zeit und Amplitude - -**2. Analog** (Repräsentation) -Leicht verrauschte Kurve -immer noch kontinuierlich - -**3. Digital** (Diskret) -Treppenstufen-Approximation -diskrete Zeitpunkte, diskrete Werte - - - ---- - -# Warum ist diese Unterscheidung wichtig? - -**Verstehen, was passiert, wenn wir:** - -1. **Alte Schallplatten digitalisieren** - → Analog (mit Rauschen) → Digital - → **Rauschen wird "eingefroren"** (bleibt für immer) - -2. **Mit einer Digitalkamera filmen** - → Physisch (Licht) → Digital (Sensor) - → **Kein analoger Zwischenschritt!** (moderne Kameras) - -3. **Audiokassetten kopieren** - → Analog → Analog (Rauschen addiert sich, Generation für Generation) - → Digital → Digital (perfekt, unendlich kopierbar) - -4. **Kompression anwenden** - → Nur bei digitalen Signalen möglich! - → Algorithmen brauchen Zahlen, keine Wellen - - - ---- - -# Praktische Konsequenzen - -**Digitalisierung ist irreversibel** - -Was zwischen Samples passiert: **für immer verloren** -Was bei Quantisierung gerundet wurde: **für immer verloren** - -**Aber:** -- Wenn Sampling-Rate hoch genug (Nyquist erfüllt): kein hörbarer Verlust -- Wenn Bit-Tiefe hoch genug (16-bit+): Quantisierungsrauschen unhörbar - -**Daher die Praxis:** -- **Archivierung**: Höchste Qualität digitalisieren (96 kHz, 24-bit) -- **Distribution**: Dann komprimieren für Streaming/Download (AAC, Opus) - -→ "**You can always go down, but never up**" - - - ---- - - - -# III. Das Problem der Knappheit -## Warum Kompression notwendig ist - - - ---- - -# Ein konkretes Beispiel: 1 Minute Musik - -**Eine Minute Musik in CD-Qualität:** - -44.100 Samples/Sekunde -× 16 Bit pro Sample -× 2 Kanäle (Stereo) -× 60 Sekunden - -= **10,584,000 Bytes** ≈ **10,6 MB pro Minute** - - - ---- - -# Konkrete Beispiele: Audio, Video, Bilder - -**Unkomprimierte Größen:** - -| Medium | Parameter | Größe | -|--------|-----------|-------| -| **Audio** | 44,1 kHz, 16-bit, Stereo | **10,6 MB/min** | -| **Bild** | 4000×3000 px, RGB, 8-bit/Kanal | **34,5 MB** | -| **Video** | 4K (3840×2160), 30 fps, 8-bit | **~45 GB/min** | - -**Problem:** Diese Größen sind unpraktikabel für Speicherung und Übertragung. - ---- - -# Skalierung: Von einem Song zu 10.000 Songs - -**Szenario:** Musiksammlung - -| Format | Größe/Song | 10.000 Songs | Speicher nötig | -|--------|-----------|--------------|----------------| -| **WAV (CD)** | 35 MB (3:30 min) | 350 GB | 1× 512 GB SSD | -| **FLAC** | 18 MB (~50% Kompr.) | 180 GB | 1× 256 GB SSD | -| **MP3 320** | 8 MB | 80 GB | 1× 128 GB SSD | -| **MP3 128** | 3,3 MB | 33 GB | 1× 64 GB SSD | - -**Implikation:** -- Ohne Kompression: 350 GB -- Mit MP3 128: 33 GB (Faktor **10:1**) -- **Ermöglicht** iPod (2001: 5–10 GB), Smartphone-Sammlungen - ---- - -# Historischer Kontext: Speicherkapazität 1990–2025 - -| Jahr | Typische Festplatte | Preis/GB | Alben (WAV) | Alben (MP3 128) | -|------|---------------------|----------|-------------|-----------------| -| **1990** | 100 MB | $100 | 0,1 | 1,6 | -| **1995** | 1 GB | $20 | 1,5 | 16 | -| **2000** | 20 GB | $5 | 31 | 330 | -| **2005** | 200 GB | $1 | 314 | 3.300 | -| **2010** | 1 TB | $0,10 | 1.600 | 16.500 | -| **2015** | 2 TB | $0,04 | 3.100 | 33.000 | -| **2020** | 4 TB | $0,025 | 6.200 | 66.000 | -| **2025** | 8+ TB | $0,015 | 12.500 | 132.000 | - -**Faktor (1990 → 2025):** 80.000× Kapazität, 6.667× billiger pro GB - ---- - -# Der digitale Wendepunkt: Zettabyte-Ära - -**Datenmenge der Menschheit:** -- 2010: **2 Zettabyte** (ZB) -- 2015: 15 ZB -- 2020: 64 ZB -- **2025: 181 ZB** (geschätzt) - -**Was ist ein Zettabyte?** -1 ZB = 1.000 Exabyte = 1.000.000 Petabyte = 1.000.000.000 Terabyte - -**Kontext:** 181 ZB = ~18 Milliarden 10-TB-Festplatten - ---- - -# Zwei Philosophien der Kompression - -## **Lossless (Verlustfrei)** -- **Prinzip**: Redundanz entfernen -- **Resultat**: Original perfekt rekonstruierbar -- **Kompression**: 2:1 bis 4:1 (typisch) -- **Beispiele**: ZIP, FLAC, PNG, FFV1 - -## **Lossy (Verlustbehaftet)** -- **Prinzip**: Wahrnehmung austricksen (Psychoakustik/-visuell) -- **Resultat**: Approximation, Original nicht rekonstruierbar -- **Kompression**: 10:1 bis 100:1+ (typisch) -- **Beispiele**: MP3, JPEG, H.264 - ---- - -# Wann welche Strategie? - -| Anwendungsfall | Lossless | Lossy | Begründung | -|----------------|----------|-------|------------| -| **Archivierung** | ✅ | ❌ | Zukunftssicher, keine Degradation | -| **Medizin (Röntgen, MRT)** | ✅ | ❌ | Rechtlich/ethisch: kein Informationsverlust erlaubt | -| **Text, Code** | ✅ | ❌ | Jedes Bit wichtig | -| **Musik-Streaming** | ❌ | ✅ | Bandbreite wichtiger als Perfektion | -| **Social Media (Fotos)** | ❌ | ✅ | Speicher/Bandbreite, „gut genug" reicht | -| **Video-Streaming** | ❌ | ✅ | Anders unpraktikabel (45 GB/min!) | -| **Professionelle Fotografie** | ✅ | ❌* | RAW für Editing, JPEG für Delivery | - -*Hybrid: Bearbeiten in RAW (lossless), exportieren als JPEG (lossy) - ---- - - - -# IV. Fundamentale Konzepte -## Bits, Bytes & Kodierung - ---- - -# Das Bit: 0 oder 1 - -**Die kleinste Informationseinheit** - -- **Bit** = Binary Digit -- Zwei Zustände: 0 oder 1 (aus oder an, falsch oder wahr) -- Physikalisch: Spannung (niedrig/hoch), Magnetisierung (N/S), Licht (aus/an) - -**Beispiele:** -- 1 Bit: Ja/Nein-Frage -- 2 Bits: 4 Zustände (00, 01, 10, 11) -- n Bits: 2^n Zustände - -**Formel:** n Bits können 2^n verschiedene Werte darstellen - ---- - -# Das Byte: 8 Bits = 256 Zustände - -**Standard-Einheit der Informatik** - -- 1 Byte = 8 Bits -- 2^8 = 256 verschiedene Werte (0–255) -- Kann darstellen: Zahlen 0–255, Zeichen (ASCII), Graustufen - -**Warum 8 Bits?** -- Historisch: IBM System/360 (1964) standardisierte 8-bit Byte -- Praktisch: 256 Werte genug für Buchstaben + Sonderzeichen - -**Größere Einheiten:** -- Kilobyte (KB): 1.000 Bytes (dezimal) oder 1.024 Bytes (binär, KiB) -- Megabyte (MB), Gigabyte (GB), Terabyte (TB), ... - ---- - -# Anwendung: RGB-Farben - -**24-bit Farbtiefe (True Color)** - -Jeder Pixel: 3 Kanäle × 8 Bit = 24 Bit = 3 Bytes - -- **Rot**: 8 Bit (0–255) -- **Grün**: 8 Bit (0–255) -- **Blau**: 8 Bit (0–255) - -**Anzahl Farben:** 256 × 256 × 256 = **16.777.216 Farben** - -**Beispiele:** -- Schwarz: (0, 0, 0) -- Weiß: (255, 255, 255) -- Rot: (255, 0, 0) -- Cyan: (0, 255, 255) - ---- - -# Zeichenkodierung: ASCII – Der erste Standard - -**ASCII (American Standard Code for Information Interchange, 1963)** - -- 7 Bit → 128 Zeichen -- Enthält: Buchstaben (A-Z, a-z), Ziffern (0-9), Sonderzeichen, Steuerzeichen - -**Beispiele:** -- 'A' = 65 (dezimal) = 0100 0001 (binär) -- 'a' = 97 -- '0' = 48 -- Leerzeichen = 32 - -**Problem:** Nur für Englisch! Keine Umlaute, kein Kyrillisch, kein Chinesisch. - ---- - -# Das Problem: Sprachen außerhalb des Englischen - -**Extended ASCII (8-bit, 256 Zeichen)** -- ISO-8859-1 (Latin-1): Westeuropäische Sprachen (äöüß) -- ISO-8859-5: Kyrillisch -- Windows-1252: Microsoft-Variante - -**Probleme:** -- Inkompatibel zwischen Sprachen -- Kann nicht Deutsch + Russisch in selber Datei -- Chinesisch, Japanisch: 10.000+ Zeichen → unmöglich mit 8-bit - -**Lösung:** Unicode - ---- - -# Unicode: Ein Standard für alle Schriften - -**Unicode 16.0 (2024): 154.998 Zeichen** - -Umfasst: -- Latein, Kyrillisch, Griechisch, Arabisch, Hebräisch -- CJK (Chinesisch, Japanisch, Koreanisch): ~90.000 Zeichen -- Emoji: ~3.600 -- Historische Schriften (Hieroglyphen, Keilschrift) - -**Struktur:** -- Jedes Zeichen hat einen **Code Point**: U+0041 = 'A' -- Code Points 0–1.114.111 (21 Bit theoretisch) - -**Verschiedene Encodings:** UTF-8, UTF-16, UTF-32 - ---- - -# UTF-8, UTF-16, UTF-32: Encoding-Varianten - -**UTF-8 (variable Länge, 1–4 Bytes):** -- ASCII-kompatibel (A = 1 Byte) -- Umlaute: 2 Bytes (ä = C3 A4) -- Chinesisch: 3–4 Bytes -- **Vorteil**: Effizient für Text mit viel ASCII -- **Standard** im Web (>98% aller Webseiten) - -**UTF-16 (2 oder 4 Bytes):** -- Meiste Zeichen: 2 Bytes -- Seltene: 4 Bytes (Surrogate Pairs) -- **Verwendet**: Windows intern, Java - -**UTF-32 (immer 4 Bytes):** -- Jedes Zeichen: 4 Bytes (verschwenderisch, aber einfach) -- **Vorteil**: Direkter Zugriff (Zeichen N = Byte 4N) - ---- - -# Praxis: Bytes zählen, Dateigrößen verstehen - -**Beispiel: "Hello World!" in verschiedenen Encodings** - -| Encoding | Bytes | Hex | -|----------|-------|-----| -| **ASCII** | 12 | 48 65 6C 6C 6F 20 57 6F 72 6C 64 21 | -| **UTF-8** | 12 | (identisch mit ASCII) | -| **UTF-16** | 26 | FF FE 48 00 65 00 ... (BOM + 2 Bytes/Zeichen) | -| **UTF-32** | 52 | (BOM + 4 Bytes/Zeichen) | - -**Beispiel: "Äpfel" in UTF-8** -- 'Ä' = C3 84 (2 Bytes) -- 'p' = 70 (1 Byte) -- 'f' = 66 -- 'e' = 65 -- 'l' = 6C -- **Total**: 6 Bytes (nicht 5!) - ---- - -# Hexadezimal: Die Sprache der Datei-Analyse - -**Warum Hex?** -- Binär (0/1) ist zu lang: 11111111 = FF (kürzer) -- Dezimal passt nicht zu Bytes: 255 ≠ klare Byte-Grenze -- Hex: 1 Byte = 2 Hex-Ziffern (00–FF) - -**Hexadezimal (Base 16):** -``` -0 1 2 3 4 5 6 7 8 9 A B C D E F -0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -``` - -**Beispiele:** -- 0xFF = 255 (dezimal) = 1111 1111 (binär) -- 0x10 = 16 (dezimal) -- 0xA0 = 160 (dezimal) - ---- - -# Magic Numbers: Dateitypen erkennen - -**Jede Datei beginnt mit "Magic Bytes"** - -Erste Bytes identifizieren Dateityp (unabhängig von Extension) - -**Beispiele:** - -| Format | Magic Bytes (Hex) | ASCII | -|--------|-------------------|-------| -| **PNG** | 89 50 4E 47 0D 0A 1A 0A | .PNG.... | -| **JPEG** | FF D8 FF | ÿØÿ | -| **GIF** | 47 49 46 38 | GIF8 | -| **PDF** | 25 50 44 46 | %PDF | -| **ZIP** | 50 4B 03 04 | PK.. | -| **MP3** | FF FB (oder FF F3) | ÿû | -| **WAV** | 52 49 46 46 | RIFF | - -**Tool:** `hexdump -C filename | head` (Linux/Mac) - ---- - -# Praxis: "What the HEX-Code" - -**Live-Demo: Datei analysieren** - -```bash -$ hexdump -C image.png | head -n 5 - -00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| -00000010 00 00 05 00 00 00 03 84 08 02 00 00 00 8c d9 c0 |................| -00000020 ea 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b |.....pHYs.......| -``` - -**Interpretation:** -- `89 50 4E 47` = PNG Magic Number ✓ -- `49 48 44 52` = "IHDR" (Image Header Chunk) -- Nächste Bytes: Breite, Höhe, Bit-Tiefe - -**Anwendung:** -- Datei-Validierung (ist das wirklich ein PNG?) -- Forensik (versteckte Daten?) -- Debugging (warum öffnet Datei nicht?) - ---- - -# Dateneinheiten: KB, MB, GB, TB, PB, ZB - -**Präfixe (SI dezimal vs. Binär):** - -| Einheit | Dezimal (SI) | Binär (IEC) | Faktor | -|---------|--------------|-------------|--------| -| **Kilobyte** | 1 KB = 1.000 Bytes | 1 KiB = 1.024 Bytes | 2^10 | -| **Megabyte** | 1 MB = 1.000 KB | 1 MiB = 1.024 KiB | 2^20 | -| **Gigabyte** | 1 GB = 1.000 MB | 1 GiB = 1.024 MiB | 2^30 | -| **Terabyte** | 1 TB = 1.000 GB | 1 TiB = 1.024 GiB | 2^40 | -| **Petabyte** | 1 PB = 1.000 TB | 1 PiB = 1.024 TiB | 2^50 | -| **Exabyte** | 1 EB = 1.000 PB | | 2^60 | -| **Zettabyte** | 1 ZB = 1.000 EB | | 2^70 | - -**Unterschied:** 1 TB (dezimal) = 0,909 TiB (binär) -→ "1 TB Festplatte" zeigt 931 GB in Windows (weil Windows GiB nutzt) - ---- - -# Binär vs. Dezimal: Der Marketing-Trick - -**Warum zwei Standards?** - -**Dezimal (1000-basiert):** -- Hersteller nutzen: "1 TB = 1.000 GB" -- Größere Zahlen → besser klingt - -**Binär (1024-basiert):** -- Computer-intern: Potenzen von 2 (2^10 = 1024) -- OS (Windows, Mac, Linux) zeigt oft GiB - -**Beispiel:** -Festplatte gekauft: "2 TB" -- Hersteller: 2.000.000.000.000 Bytes -- Windows zeigt: 1.862 GB (eigentlich GiB) -- **Differenz:** ~138 GB "verschwunden" - -**Warum?** -2.000.000.000.000 / 1024^3 = 1.862,6 GiB - ---- - -# Datenwachstum der Menschheit - -**Exponentielles Wachstum:** - -| Meilenstein | Jahr | Datenmenge | -|-------------|------|------------| -| Gesamte Menschheitsgeschichte bis | 2003 | 5 Exabyte | -| Alle 2 Tage (2013) | 2013 | 5 Exabyte | -| Pro Tag (2025) | 2025 | ~500 Exabyte | - -**Treiber:** -- Video (80% des Traffics) -- IoT-Sensoren (Autos, Smart Cities) -- AI-Training Datasets -- Social Media - -**Konsequenz:** Speicherkapazität wächst, aber Daten wachsen schneller -→ Kompression bleibt essentiell - ---- - -# Der digitale Wendepunkt: 181 Zettabyte (2025) - -**Vergleich:** -- 181 ZB = 181.000.000.000.000.000.000.000 Bytes -- = 181 Milliarden Terabyte -- = Alle Worte der Menschheit × 36.000 - -**AI-generierte Inhalte:** -- 2030 (Prognose): 90% aller Daten AI-generiert/augmentiert -- Text (ChatGPT), Bilder (Midjourney, DALL-E), Video (Sora) -- Explosion synthetischer Daten - -**Ökologisch:** -- Rechenzentren: ~1–2% globaler Energieverbrauch -- Kompression reduziert Energie (kleinere Dateien = weniger Übertragung/Speicher) - ---- - - - -# V. Audio -## Von Analog zu Digital - ---- - -# Schall als physisches Phänomen - -**Was ist Schall?** -- Mechanische Welle (Druckschwankung) in Medium (Luft, Wasser, Festkörper) -- Geschwindigkeit: ~340 m/s in Luft (20°C) -- Frequenz: Anzahl Schwingungen/Sekunde (Hz) -- Amplitude: Stärke der Druckschwankung (Lautstärke) - -**Hörbarer Bereich (Mensch):** -- Frequenz: 20 Hz – 20.000 Hz (20 kHz) -- Lautstärke: 0 dB SPL (Hörschwelle) – 120 dB SPL (Schmerzgrenze) - -**Musik:** -- Grundfrequenzen: 27,5 Hz (tiefste Klaviertaste) – 4.186 Hz (höchste) -- Obertöne: bis 15–20 kHz - ---- - -# Analoge Audiowiedergabe: Schallplatte, Magnetband - -**Schallplatte (Vinyl):** -- Rille formt Schallwelle physisch nach -- Nadel tastet ab → mechanische Vibration → elektrisch → Lautsprecher -- **SNR**: ~60–70 dB -- **Frequenzgang**: 20 Hz – 20 kHz (theoretisch, praktisch schlechter) - -**Magnetband (Kassette):** -- Eisenoxid-Partikel magnetisiert entsprechend Signal -- **SNR**: ~50–60 dB (mit Dolby B/C besser) -- **Frequenzgang**: 30 Hz – 15 kHz (Typ II/Metal besser) - -**Vorteile:** Direktheit, keine Digitalisierung, historisch billig -**Nachteile:** Degradation, Generationsverlust, Rauschen - ---- - -# Vor- und Nachteile analoger Medien - -| Aspekt | Vorteil | Nachteil | -|--------|---------|----------| -| **Qualität** | Theoretisch unbegrenzte Auflösung | Praktisch durch Rauschen limitiert | -| **Kopie** | — | Generationsverlust (Rauschen akkumuliert) | -| **Haltbarkeit** | Jahrzehnte (wenn gut gelagert) | Degradiert (Abnutzung, Chemie) | -| **Kosten** | Historisch billig | Heute teuer (Vinyl-Pressung) | -| **Manipulation** | Schwierig, Hardware-basiert | Tape-Speed, Splicing möglich | - -**Fazit:** Für Massenmarkt überholt, für Audiophile/Sammler kulturell relevant. - ---- - -# Der Übergang: Warum Digital? - -**Motivationen (1970er–1980er):** - -1. **Perfekte Kopien**: Keine Generationsverluste (wichtig für Produktion) -2. **Kein Rauschen**: Quantisierungsrauschen kontrolliert, nicht akkumulativ -3. **Manipulation**: Filter, Effekte in Software → flexibel, günstig -4. **Speicher**: Compact Disc (1982) → robust, kompakt, lange Spielzeit - -**Hindernisse:** -- Technologie: ADCs/DACs teuer, langsam -- Skepsis: "Digital klingt kalt/steril" (subjektiv, kulturell) -- Patente: Dolby, Sony/Philips kontrollieren Standards - -**Durchbruch:** CD (1982), DAT (1987), dann 1990er: Digital dominiert Produktion - ---- - -# Digitalisierung: Sampling (zeitlich) - -**Sampling = zeitliche Diskretisierung** - -- Kontinuierliches Signal → nur bestimmte Zeitpunkte messen -- **Sample Rate** (SR): Anzahl Messungen/Sekunde (Hz) - -**Beispiele:** -- CD: 44.100 Hz (44,1 kHz) -- DVD-Audio: 96.000 Hz -- Pro-Audio: 48 kHz, 96 kHz, 192 kHz - -**Nyquist-Theorem:** -SR ≥ 2 × höchste Frequenz → perfekte Rekonstruktion -- Mensch hört bis ~20 kHz → brauchen ≥40 kHz -- CD: 44,1 kHz ✓ - -**Aliasing:** -Wenn SR zu niedrig → hohe Frequenzen "spiegeln" als niedrige (Verzerrung) -→ Anti-Aliasing-Filter vor ADC nötig - ---- - -# Digitalisierung: Quantisierung (Amplitude) - -**Quantisierung = Amplituden-Diskretisierung** - -- Kontinuierliche Spannungswerte → diskrete Stufen -- **Bit Depth**: Anzahl Bits pro Sample - -**Beispiele:** -- CD: 16-bit → 2^16 = 65.536 Stufen -- Pro-Audio: 24-bit → 2^24 = 16.777.216 Stufen - -**SQNR (Signal-to-Quantization-Noise Ratio):** -SQNR ≈ 6 dB × Bits -- 16-bit: ~96 dB (reicht für Hören) -- 24-bit: ~144 dB (Headroom für Produktion) - -**Dithering:** Kleines Rauschen vor Quantisierung → verhindert Verzerrung bei leisen Signalen - ---- - -# Berechnung: Sample Rate × Bit Depth × Kanäle - -**Formel:** -``` -Bitrate (bit/s) = Sample Rate × Bit Depth × Kanäle -Dateigröße = Bitrate × Zeit -``` - -**Beispiel: CD-Audio (Stereo)** -- SR: 44.100 Hz -- Bit Depth: 16-bit -- Kanäle: 2 (Stereo) - -**Bitrate:** -44.100 × 16 × 2 = 1.411.200 bit/s = **1.411 kbit/s** - -**1 Minute:** -1.411 kbit/s × 60 s / 8 (bits → bytes) / 1024 (kB) = **10,6 MB/min** - -**1 Album (60 min):** -10,6 MB × 60 = **636 MB** - ---- - -# Das Speicherproblem der Digitalisierung - -**Historischer Kontext:** - -**1990: Festplatten 100–500 MB** -- 1 Album (636 MB) = gesamte Festplatte! -- Lösung: Kompression (MP3, 1993) - -**1995: Festplatten 1–2 GB** -- 2–3 Alben → immer noch knapp - -**2000: Festplatten 20–40 GB** -- ~30–60 Alben → akzeptabel, aber MP3 = 10× mehr Musik - -**2025: Festplatten 4+ TB** -- ~6.000 Alben (WAV) → Speicher kein Problem mehr -- **Aber:** Streaming dominiert (Bandbreite wichtiger als lokaler Speicher) - -**Fazit:** Ohne MP3 wäre digitale Musik-Revolution der 1990er unmöglich gewesen. - ---- - - - -# V-b. MP3-Revolution -## Psychoakustik als Lösung - ---- - -# Psychoakustik: Der MP3-Trick - -**Grundidee:** Entferne, was Menschen nicht hören - -**Menschliches Gehör ist nicht perfekt:** -1. **Maskierungseffekte**: Laute Töne übertönen leise -2. **Frequenzgrenzen**: <20 Hz, >20 kHz unhörbar -3. **Kritische Bänder**: Frequenzauflösung limitiert - -**Psychoakustisches Modell:** -- Analysiere Signal: Was wird maskiert? -- Quantisiere maskierte Komponenten grob (oder entferne) -- Resultat: Kleinere Datei, kaum hörbarer Unterschied - ---- - -# Maskierungseffekte: Laute Töne übertönen leise - -**Simultane Maskierung:** -- 1 kHz Ton bei 60 dB SPL -- 1,1 kHz Ton bei 40 dB SPL gleichzeitig -- → 1,1 kHz **unhörbar** (vom 1 kHz maskiert) - -**Temporale Maskierung:** -- Lauter Ton → kurz danach sind leise Töne unhörbar (~5–10 ms) -- Pre-Masking: Auch kurz **vor** lautem Ton (auditorische Verarbeitung) - -**Anwendung:** -MP3-Encoder berechnet Masking-Kurve → entfernt/reduziert maskierte Frequenzen - ---- - -# Frequenzbereiche: Was Menschen nicht hören - -**Hörbarer Bereich: 20 Hz – 20 kHz** -- <20 Hz: Infraschall (spürbar, nicht hörbar) -- >20 kHz: Ultraschall (unhörbar, außer für Tiere) - -**Mit Alter sinkt Obergrenze:** -- Kind: ~20 kHz -- 30 Jahre: ~16 kHz -- 50 Jahre: ~12 kHz -- 70 Jahre: ~8 kHz - -**MP3-Strategie:** -- Frequenzen >16 kHz: Entfernen oder stark reduzieren (bei niedrigen Bitraten) -- <30 Hz: Ebenfalls reduzieren (wenig musikalischer Inhalt) - -**Savings:** ~20–30% der Daten in diesen Bereichen - ---- - -# Wahrnehmung ≠ Realität - -**Das Ohr ist kein Mikrofon** - -Mikrofon: Lineare Aufnahme aller Frequenzen (idealisiert) -Ohr: Nichtlinear, frequenzabhängig empfindlich, kontextabhängig - -**Beispiel: Fletcher-Munson-Kurven** -- Gleichlaute Kurven: Wie laut muss Frequenz X sein, damit sie gleich laut wie 1 kHz klingt? -- Bei 100 Hz: Muss ~20 dB lauter sein als 1 kHz (bei leisen Pegeln) -- → Ohr ist weniger empfindlich bei tiefen/hohen Frequenzen - -**MP3 nutzt das:** -- Weniger Bits für Frequenzen, wo Ohr unempfindlich -- Mehr Bits für 2–5 kHz (Sprachbereich, höchste Empfindlichkeit) - ---- - -# Die Geburt der MP3 - -**Geschichte:** -- 1982: IIS Fraunhofer (Erlangen) startet Forschung -- 1987: Patent eingereicht (DE 3740215) -- 1992: MPEG-1 Audio Layer 3 (MP3) standardisiert -- 1995: Erste Software-Player (Winamp, 1997) -- 1998: Erste portable Player (Diamond Rio) -- 1999: Napster → Massenadoption - -**Kernentwickler:** -- Karlheinz Brandenburg (Fraunhofer IIS) -- Dieter Seitzer (Universität Erlangen) - -**Ziel:** Audio über ISDN übertragen (64 kbit/s) mit akzeptabler Qualität - ---- - -# Suzanne Vega: "Tom's Diner" – Die Referenz - -**Warum dieses Lied?** - -Brandenburg testete MP3-Prototypen jahrelang mit Suzanne Vega's "Tom's Diner" (a cappella Version). - -**Eigenschaften:** -- Klare Stimme (testet Vocal-Encoding) -- Minimal begleitet (keine Maskierung durch Instrumente) -- Dynamikreich (leise/laute Passagen) -- Sibilanten (S-Laute, schwierig zu kodieren) - -**Resultat:** -- Codec-Entwicklung optimiert, bis "Tom's Diner" perfekt klang -- → Andere Musik profitierte - -**Kulturelle Bedeutung:** -"Tom's Diner" = "Mona Lisa der digitalen Audio-Ära" (weil so oft genutzt als Referenz) - ---- - -# Wie funktioniert MP3? (Vereinfacht) - -**7 Schritte:** - -1. **Filterbank** (Polyphase + MDCT): Teile Signal in 32/576 Frequenzbänder -2. **Psychoakustisches Modell**: Berechne Masking-Threshold -3. **Quantisierung**: Quantisiere jedes Band entsprechend Threshold (grob wenn maskiert, fein wenn kritisch) -4. **Huffman-Coding**: Verlustfreie Kompression der quantisierten Werte -5. **Bitstream-Formatierung**: Packe in MP3-Frame-Struktur -6. **Optional: Bit Reservoir**: Nutze ungenutzte Bits von einfachen Frames für komplexe - -**Dekodierung:** Umkehrung (Huffman → De-Quantisierung → IMDCT → Synthese-Filterbank → Audio) - ---- - -# Bitrate: Der Qualitäts-Knopf - -**Bitrate = Anzahl Bits pro Sekunde** - -**Gängige MP3-Bitraten:** - -| Bitrate | Qualität | Anwendung | Dateigröße/min | -|---------|----------|-----------|----------------| -| **64 kbit/s** | Niedrig (Telefon) | Sprache, Podcasts | 0,5 MB | -| **128 kbit/s** | Mittel (Radio) | Historisch populär | 1 MB | -| **192 kbit/s** | Gut | Guter Kompromiss | 1,4 MB | -| **256 kbit/s** | Sehr gut | iTunes Standard | 1,9 MB | -| **320 kbit/s** | Höchste (MP3) | "Transparent" (für die meisten) | 2,4 MB | - -**CBR vs. VBR:** -- **CBR** (Constant Bitrate): Gleiche Bitrate durchgehend (einfach, verschwenderisch) -- **VBR** (Variable Bitrate): Bitrate variiert (komplexe Passagen → höher, einfache → niedriger) → effizienter - ---- - -# Variable Bitrate (VBR) vs. Constant (CBR) - -**CBR (Constant Bitrate):** -- Feste Bitrate (z.B. 192 kbit/s) für gesamte Datei -- **Vorteil**: Einfach, Dateigröße vorhersagbar, Streaming-freundlich -- **Nachteil**: Verschwendet Bits bei einfachen Passagen, zu wenig bei komplexen - -**VBR (Variable Bitrate):** -- Bitrate variiert: 128–320 kbit/s je nach Komplexität -- **Vorteil**: Bessere Qualität bei gleicher durchschnittlicher Bitrate -- **Nachteil**: Dateigröße schwankt, manche alte Player hatten Probleme - -**Beispiel:** -- Stille: VBR nutzt ~32 kbit/s (genug) -- Orchester-Crescendo: VBR nutzt 320 kbit/s (nötig) -- Durchschnitt: 192 kbit/s → gleiche Dateigröße wie CBR 192, aber besser klingt - -**Empfehlung (heute):** VBR (alle modernen Player unterstützen) - ---- - - - -# VI. Verlustfreie vs. Verlustbehaftete Audio-Codecs - ---- - -# Lossy-Codecs: MP3, AAC, Ogg Vorbis, Opus - -| Codec | Jahr | Entwickler | Typische Bitrate | Effizienz | Status | -|-------|------|-----------|------------------|-----------|--------| -| **MP3** | 1993 | Fraunhofer/Thomson | 128–320 kbit/s | Baseline | Patent-frei seit 2017 | -| **AAC** | 1997 | MPEG | 96–256 kbit/s | ~30% besser als MP3 | Apple Standard, weit verbreitet | -| **Ogg Vorbis** | 2000 | Xiph.Org | 96–256 kbit/s | Ähnlich AAC | Open Source, Spiele/Software | -| **Opus** | 2012 | IETF | 16–256 kbit/s | Bester Lossy-Codec | WebRTC, Streaming, wächst | - -**Opus:** Hybrid-Codec (SILK für Sprache, CELT für Musik), sehr niedrige Latenz, patent-frei -**AAC:** Apple Music, YouTube (Audio), bessere Qualität als MP3 bei gleicher Bitrate - ---- - -# Lossless-Codecs: FLAC, ALAC, APE, WAV - -| Codec | Jahr | Entwickler | Kompression | Plattform | Open Source | -|-------|------|-----------|-------------|-----------|-------------| -| **WAV** | 1991 | Microsoft/IBM | Keine (unkomprimiert) | Universal | Ja (Format) | -| **FLAC** | 2001 | Josh Coalson (Xiph) | ~50% | Alle (via FFmpeg) | Ja | -| **ALAC** | 2004 | Apple | ~40–60% | Apple, FFmpeg | Ja (seit 2011) | -| **APE** | 2000 | Matthew T. Ashland | ~50–60% | Windows (primär) | Nein (Freeware) | - -**FLAC:** Standard für Lossless (unterstützt von fast allem) -**ALAC:** Apple-Ökosystem (iTunes, iPhone), aber FFmpeg unterstützt auch -**WAV:** Unkomprimiert, riesig, aber universell kompatibel - ---- - -# Vergleichstabelle: Kompressionsrate, Qualität, Anwendung - -| Kriterium | Lossy (MP3 320) | Lossless (FLAC) | Unkomprimiert (WAV) | -|-----------|-----------------|-----------------|---------------------| -| **Dateigröße** | 2,4 MB/min | ~5 MB/min | 10,6 MB/min | -| **Qualität** | "Transparent" (für die meisten) | Perfekt (bitgenau) | Perfekt | -| **Kompression** | ~4:1 | ~2:1 | 1:1 (keine) | -| **Editing** | Vermeiden (Generationsverlust) | Gut (verlustfrei) | Perfekt | -| **Streaming** | Ideal (klein) | Möglich (WLAN) | Unpraktikabel | -| **Archivierung** | ❌ (irreversibel) | ✅ | ✅ (aber groß) | - -**Empfehlung:** -- Archiv: FLAC -- Mobil/Streaming: AAC 256 oder Opus 128 -- Produktion: WAV oder FLAC (24-bit) - ---- - -# Wann welches Format? - -| Anwendungsfall | Empfohlenes Format | Begründung | -|----------------|-------------------|------------| -| **Spotify/Streaming** | Opus 128–192 kbit/s | Effizient, niedrige Latenz | -| **iTunes/Apple Music** | AAC 256 kbit/s | Apple-Standard, gute Qualität | -| **Podcast** | MP3 64–96 kbit/s (Mono) | Sprache braucht weniger | -| **Musik-Archiv** | FLAC 16-bit/44,1 kHz | Verlustfrei, zukunftssicher | -| **Studio-Aufnahme** | WAV 24-bit/96 kHz | Maximale Qualität | -| **Hi-Res Musik** | FLAC 24-bit/96 kHz | Verlustfrei, hohe Auflösung | -| **Gaming (Voicechat)** | Opus 16–32 kbit/s | Niedrige Latenz | -| **Vinyl-Digitalisierung** | FLAC 24-bit/96 kHz | Bewahrt analoge Bandbreite | - ---- - -# Audio-Container: MP3 vs. MP4 vs. OGG - -**Container ≠ Codec** - -**Container** = "Wrapper" (enthält Audio + Metadaten + optional Video/Untertitel) -**Codec** = Kompressionsalgorithmus (wie Daten kodiert sind) - -**Beispiele:** - -| Container | Typische Codecs | Extension | Anwendung | -|-----------|----------------|-----------|-----------| -| **MP3** | MP3 | .mp3 | Musik (historisch) | -| **MP4** | AAC, MP3, ALAC | .m4a, .mp4 | iTunes, Streaming | -| **OGG** | Vorbis, Opus | .ogg, .opus | Open Source, Spiele | -| **FLAC** | FLAC | .flac | Lossless Musik | -| **Matroska** | Alles | .mka | Flexibel, wenig genutzt | - -**Verwirrendes Beispiel:** -- `.mp4` Datei kann AAC (häufig), MP3 (selten), oder ALAC (Apple) enthalten -- Nur Codec-Info gibt Qualität an, nicht Extension! - ---- - -# Metadaten: ID3-Tags, Vorbis Comments - -**Metadaten = Information über die Datei** - -Beispiele: Artist, Album, Track Number, Cover Art, Genre, Year - -**ID3-Tags (MP3):** -- ID3v1: 128 Bytes am Ende, limitiert (30 Zeichen Artist, etc.) -- ID3v2: Variable Länge am Anfang, umfangreich (Unicode, Bilder, Lyrics) - -**Vorbis Comments (FLAC, OGG):** -- Text-basiert (key=value) -- Flexibler als ID3 (keine Feldlängen-Limits) -- Beispiel: `ARTIST=Suzanne Vega`, `ALBUM=Solitude Standing` - -**Cover Art:** -- ID3v2: APIC-Frame (Attached Picture) -- Vorbis: METADATA_BLOCK_PICTURE (Base64-kodiert) - -**Tools:** `ffmpeg -i file.mp3` (zeigt Metadaten), `id3v2`, `metaflac` - ---- - -# Streaming-Formate: Adaptive Bitrate - -**Problem:** Netzwerk-Bandbreite variiert (4G → Wi-Fi → 5G) - -**Lösung: Adaptive Bitrate Streaming (ABS)** - -**Prinzip:** -1. Server kodiert Audio in mehreren Bitraten (64, 128, 256 kbit/s) -2. Client misst Bandbreite -3. Client wählt passende Bitrate -4. Wechsel on-the-fly (bei Bandbreiten-Änderung) - -**Protokolle:** -- **HLS** (HTTP Live Streaming, Apple): .m3u8 Playlist -- **DASH** (Dynamic Adaptive Streaming over HTTP, MPEG): .mpd Manifest - -**Spotify:** -- Nutzt Ogg Vorbis mit ABS (96, 160, 320 kbit/s) -- Offline: Höchste Bitrate wird gespeichert - ---- - -# Audio-Archivierung: Best Practices - -**Ziel:** Langfristige Erhaltung (>50 Jahre) - -**Format:** -- **FLAC** (16-bit/44,1 kHz minimum, besser 24-bit/96 kHz) -- **Alternativ:** WAV (aber größer, keine Metadaten) - -**Speichermedium:** -- Lokal: HDD (extern, offline) + SSD (aktiv) -- Cloud: Backblaze, AWS Glacier (redundant, geografisch verteilt) -- Tape: LTO-9 (professionell, 18 TB, lange Haltbarkeit) - -**3-2-1-Regel:** -- **3** Kopien (Original + 2 Backups) -- **2** verschiedene Medien (z.B. HDD + Cloud) -- **1** offsite (extern, Feuer/Diebstahl-schutz) - -**Migration:** -- Alle 5–10 Jahre: Kopiere auf neue Medien (HDDs degradieren) -- Prüfe Checksums (MD5, SHA-256) → Datenintegrität - ---- - - - -# VII. Kritische Perspektive -## Standards & Macht - ---- - -# Der Patentkrieg: Fraunhofer Lizenzgebühren - -**MP3-Patente (1987–2017):** -- Fraunhofer IIS + Thomson hielten Patente -- Lizenzgebühren: ~$2 pro MP3-fähiges Gerät, $0,01 pro verkauftem Song -- Einnahmen: >$1 Milliarde (geschätzt) - -**Konsequenz:** -- Open-Source-Software (Linux, VLC) musste zahlen oder umgehen -- → Vorbis/Opus als patent-freie Alternative - -**2017: Patente ausgelaufen** -- Alle MP3-Patente weltweit abgelaufen -- MP3 jetzt komplett frei nutzbar -- Aber: AAC/H.264/H.265 haben eigene Patente (MPEG LA) - -**Kritik:** -Patente auf mathematische Algorithmen umstritten (sollte Wissen frei sein?) - ---- - -# Warum Open-Source Ogg Vorbis nutzte - -**Problem:** MP3-Patente - -**Lösung:** Xiph.Org Foundation entwickelt **Ogg Vorbis** (2000) -- Patent-frei (nach bestem Wissen) -- Open Source (BSD-lizenziert) -- Bessere Qualität als MP3 (bei gleicher Bitrate) - -**Adoption:** -- **Wikipedia** (Vorbis für Audio) -- **Spotify** (Vorbis für Streaming) -- **Gaming** (Unreal Engine, Unity unterstützen Vorbis) -- **Mozilla/Firefox** (frühe Unterstützung) - -**Warum nicht dominanter?** -- MP3-Player-Hardware schon weit verbreitet (2000) -- Apple/Microsoft unterstützten nicht nativ (AAC/WMA stattdessen) -- Network-Effekt: "Alle nutzen MP3" - -**Opus (2012):** Nachfolger, noch besser, IETF-Standard, patent-frei - ---- - -# H.264 vs. AV1: Kampf um Video-Standards - -**H.264 (2003):** -- MPEG LA Patent Pool (~1.000 Patente) -- Lizenzgebühren: Komplex (Encoder/Decoder/Distribution) -- **Dominiert** (YouTube, Blu-ray, Streaming bis ~2020) - -**H.265/HEVC (2013):** -- 2× effizienter als H.264 -- **Problem:** 3 Patent Pools (MPEG LA, HEVC Advance, Velos Media) -- Lizenzgebühren unklar, hoch -- → Adoption langsam - -**AV1 (2018):** -- **Alliance for Open Media** (Google, Mozilla, Cisco, Amazon, Netflix, Intel, Microsoft, Apple) -- **Patent-frei** (Mitglieder gewähren royalty-free Lizenzen) -- ~30% effizienter als H.265 -- **Adoption wächst:** YouTube (2021), Netflix (2021), Meta, TikTok - -**Bedeutung:** -Open Standards verhindern Patent-Monopole, senken Kosten, fördern Innovation - ---- - -# Napster: Kulturelle Revolution durch MP3 - -**Napster (1999–2001):** -- P2P File-Sharing (Shawn Fanning, 19 Jahre alt) -- 80 Millionen Nutzer (Peak, 2001) -- Teilen von MP3s → Urheberrechtsverletzung (massiv) - -**Warum möglich?** -- MP3: Klein genug für 56k Modem (1 Song in ~10 Minuten) -- P2P: Dezentral (kein zentraler Server mit Musik) - -**Musikindustrie-Reaktion:** -- Klagen (Metallica, Dr. Dre, RIAA) -- 2001: Napster geschlossen (Gerichtsbeschluss) - -**Langfristige Auswirkung:** -- Zeigte: Menschen wollen digitale Musik, on-demand -- → iTunes Store (2003), Spotify (2008) -- Geschäftsmodell shift: Verkauf → Streaming - -**Zitat (Steve Jobs, 2003):** -> "Napster showed us what people wanted. We just had to make it legal." - ---- - - - -# VIII. Abschluss - ---- - -# Zusammenfassung: Die Kernkonzepte - -**Drei Ebenen des Signals:** -- Physisch (Realität) → Analog (kontinuierlich) → Digital (diskret) - -**Digitalisierung:** -- Sampling (zeitlich) + Quantisierung (Amplitude) = Zahlen -- Nyquist-Theorem: Kein Verlust wenn SR ≥ 2× f_max - -**Kompression:** -- Lossless (Redundanz) vs. Lossy (Psychoakustik) -- MP3: Psychoakustisches Modell → 10:1 Kompression - -**Formate:** -- Lossy: MP3, AAC, Opus (Streaming) -- Lossless: FLAC, ALAC (Archiv) - -**Kritische Perspektive:** -- Patente beeinflussen Standards (MP3, H.264) -- Open Standards (AV1, Opus) demokratisieren Zugang - ---- - -# Fragen & Diskussion - -**Offene Fragen?** - -**Diskussionsthemen:** -- Vinyl vs. Digital: Subjektive Präferenz vs. objektive Messung? -- Streaming vs. Ownership: Was verlieren wir kulturell? -- AI-generierte Musik: Brauchen wir noch menschliche Künstler? - -**Kontakt:** -[Ihre Kontaktinformationen] - ---- - -# Selbstlernen: Audio-Spektrogramm, HEX-Files - -**Aufgabe 1: Audio-Spektrogramm analysieren** -- Tool: Audacity (kostenlos) -- Laden Sie eine MP3 (128 kbit/s) und FLAC -- Vergleichen Sie Spektrogramm (Analyze → Plot Spectrum) -- Frage: Wo sehen Sie Unterschiede? (Hohe Frequenzen fehlen bei MP3?) - -**Aufgabe 2: HEX-File untersuchen** -- Tool: `hexdump -C file.mp3 | head` (Linux/Mac) oder HxD (Windows) -- Finden Sie Magic Bytes (FF FB oder FF F3) -- Identifizieren Sie ID3-Tag (49 44 33 = "ID3") - -**Aufgabe 3: Encodierung vergleichen** -- Enkodieren Sie WAV → MP3 (128, 192, 320 kbit/s) -- Blind-Test: Können Sie Unterschied hören? -- Tool: `ffmpeg -i input.wav -b:a 128k output.mp3` - ---- - -# Lizenz & Attribution - -**Vorlesungsinhalte:** -© 2025 [Ihr Name], Hochschule der Medien Stuttgart -Lizenz: CC BY-SA 4.0 (sofern nicht anders angegeben) - -**Verwendete Quellen:** -- Shannon, C. E. (1948). "A Mathematical Theory of Communication" -- Pohlmann, K. C. (2010). *Principles of Digital Audio* -- Sterne, J. (2012). *MP3: The Meaning of a Format* - -**Abbildungen:** -- Signal-Transformation: Eigene Darstellung -- Weitere Grafiken: Attributiert in jeweiligen Slides - -**Danksagung:** -Fraunhofer IIS (MP3-Geschichte), Xiph.Org (Opus/Vorbis-Dokumentation) - ---- - - - -# Bis zum nächsten Termin! - -**Termin 2: Bild- & Videoformate** -- JPEG, PNG, WebP -- H.264, H.265, AV1 -- Streaming-Technologien - -**Vorbereitung:** -Lesen Sie: Watkinson, J. (2004). *The MPEG Handbook* (Kapitel 1–3) diff --git a/courses/223015b/slides/02-bild-audio-video.md b/courses/223015b/slides/02-bild-audio-video.md deleted file mode 100644 index 7c04eaf..0000000 --- a/courses/223015b/slides/02-bild-audio-video.md +++ /dev/null @@ -1,1027 +0,0 @@ ---- -marp: true -theme: gaia -paginate: true -backgroundColor: #fff -header: "Dateiformate, Schnittstellen, Speichermedien & Distributionswege (223015b)" -footer: "Michael Czechowski – HdM Stuttgart" -title: Dateiformate, Schnittstellen, Speichermedien & Distributionswege - Teil 2 ---- - - - - - - - -![bg cover opacity:0.2](./assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg) - -# Dateiformate, Schnittstellen, Speichermedien & Distributionswege - -**223015b** · Modul "Technik 1" · 1. Semester -Digital- und Medienwirtschaft -Hochschule der Medien Stuttgart - -[https://librete.ch/hdm/223015b/](https://librete.ch/hdm/223015b/) - - - ---- - -![bg fit](./assets/qr/slides-223015b.png) - ---- - - - -# Teil 2: Bild- & Videoformate - - - ---- - -# Rückblick: Physisch → Analog → Digital - -**Bei Bildern:** - -- **Physisch**: Lichtwellen (elektromagnetisches Spektrum, 380-750 nm) -- **Analog**: Film (Silberhalogenide reagieren auf Licht, kontinuierlich) -- **Digital**: Kamera-Sensor (Photodioden → A/D-Wandler, diskret) - -→ **Moderne Kameras überspringen analog komplett!** - - - ---- - - - -# I. Grundlagen Digitaler Bilder - ---- - -# Was ist ein digitales Bild? - -**Rastergrafik (Bitmap):** Matrix aus Pixeln - -Jedes Pixel = 1 Farbwert (z.B. RGB) - -**Beispiel 4×4 Pixel Bild:** -``` -R G B W -G B W R -B W R G -W R G B -``` - -**Auflösung:** Pixel-Anzahl bestimmt Detailgrad -**1920×1080 (Full HD):** 2.073.600 Pixel -**3840×2160 (4K):** 8.294.400 Pixel (4× mehr!) - - - ---- - -# Rastergrafiken: Das Problem der Skalierung - -**Problem:** Pixelbilder verlieren Qualität beim Vergrößern - -**Beispiel:** 100×100 Pixel Logo - -- Anzeige in 100×100: perfekt -- Anzeige in 1000×1000: **verpixelt** (Interpolation kann nicht Details erfinden) - -→ **Lösung:** Für verschiedene Größen verschiedene Versionen speichern -Oder: Vektorgrafiken nutzen - - - ---- - -# Vektorgrafiken - -**Prinzip:** Mathematische Beschreibung statt Pixel - -**Beispiel Kreis:** -Raster: 1000×1000 Pixel gespeichert -Vektor: "Kreis bei (500,500), Radius 200, Farbe Rot" - -**Vorteile:** -- Unbegrenzt skalierbar (verlustfrei) -- Kleine Dateigröße (nur Gleichungen) - -**Nachteile:** -- Nur für geometrische Formen geeignet -- Fotos unmöglich als Vektor - - - ---- - -# Raster- und Vektorgrafiken: Vergleich - -| Eigenschaft | Rastergrafik | Vektorgrafik | -|-------------|--------------|--------------| -| **Speicherung** | Pixel-Matrix | Mathematische Formeln | -| **Skalierung** | Verlustbehaftet (Interpolation) | Verlustfrei (neu berechnet) | -| **Dateigröße** | Groß (abhängig von Auflösung) | Klein (nur Gleichungen) | -| **Anwendung** | Fotos, Screenshots | Logos, Icons, Illustrationen | -| **Formate** | PNG, JPEG, GIF | SVG, AI, EPS, PDF (Vektor-Modus) | - - - ---- - - - -# II. Psychovisuelle Kompression -## Die Schwächen des Auges nutzen - ---- - -# Die Schwächen des Auges - -**Menschliches Sehen ist nicht gleichmäßig:** - -1. **Helligkeitsempfindlichkeit > Farbempfindlichkeit** - Wir sehen Graustufen schärfer als Farbnuancen - -2. **Räumliche Frequenzen:** - Grobe Strukturen wichtiger als feine Details - -3. **Foveales Sehen:** - Nur Zentrum des Blickfelds ist scharf (peripher unscharf) - -→ **Chroma Subsampling, DCT, Quantisierung** nutzen das aus - - - ---- - -# Chroma Subsampling - -**Prinzip:** Farbe mit niedrigerer Auflösung speichern als Helligkeit - -**Notation:** 4:2:0, 4:2:2, 4:4:4 - -**4:4:4** – Volle Auflösung (keine Subsampling) -**4:2:2** – Horizontale Halbierung der Chroma -**4:2:0** – Horizontale **und** vertikale Halbierung - -**Beispiel 4:2:0:** -4 Pixel Helligkeit → 1 Pixel Farbe -= **75% weniger Farbdaten, kaum sichtbar!** - - - ---- - - - -# III. JPEG: Der Bildkompressionsstandard - ---- - -# JPEG: Sechs Schritte der Kompression - -**JPEG = Joint Photographic Experts Group (1992)** - -**Verlustbehaftete Kompression in 6 Schritten:** - -1. **Farbraum-Konvertierung** (RGB → YCbCr) -2. **Chroma Subsampling** (4:2:0) -3. **DCT** (Discrete Cosine Transform) -4. **Quantisierung** (Hier entsteht Verlust!) -5. **Zigzag-Scan & RLE** -6. **Huffman-Coding** - - - ---- - -# JPEG: Schritt 1 – Farbraum wechseln - -**RGB → YCbCr** - -- **Y** = Luma (Helligkeit) -- **Cb** = Blau-Differenz -- **Cr** = Rot-Differenz - -**Warum?** -Erlaubt Chroma Subsampling (Farbe weniger auflösen) - - - ---- - -# JPEG: Schritt 2 – Chroma Subsampling - -**4:2:0 Standard:** - -Aus 4 Pixeln wird: -- 4 Luma-Werte (Y) -- 1 Cb-Wert -- 1 Cr-Wert - -**Resultat:** 50% Datenreduktion, kaum sichtbar - - - ---- - -# JPEG: Schritt 3 – DCT - -**Discrete Cosine Transform:** -Bild in 8×8 Pixel Blöcke teilen -Jeder Block → Frequenzbereich transformieren - -**Ergebnis:** -Niedrige Frequenzen (große Flächen) → hohe Werte -Hohe Frequenzen (feine Details) → niedrige Werte - -→ **Vorbereitung für Quantisierung** - - - ---- - -# JPEG: Schritt 4 – Quantisierung - -**Hier entsteht der Verlust!** - -**Prinzip:** Hohe Frequenzen stark reduzieren - -Quantisierungstabelle teilt DCT-Koeffizienten: -- Niedrige Frequenzen: Division durch kleine Zahl (wenig Verlust) -- Hohe Frequenzen: Division durch große Zahl (starker Verlust) - -**JPEG-Qualität (0-100):** -100 = sanfte Quantisierung (große Datei, hohe Qualität) -10 = aggressive Quantisierung (kleine Datei, Artefakte) - - - ---- - -# JPEG: Schritt 5 – Zigzag & RLE - -**Zigzag-Scan:** -8×8 Block in 1D-Array umwandeln (niedrige Frequenzen zuerst) - -**Run-Length Encoding (RLE):** -Viele Nullen (hohe Frequenzen wurden stark quantisiert) -→ `0 0 0 0 0 0 0 5` wird zu `7×0, 5` - - - ---- - -# JPEG: Schritt 6 – Huffman-Coding - -**Verlustfreie Kompression** (wie ZIP) - -H�ufige Werte → kurze Codes -Seltene Werte → lange Codes - -**Beispiel:** -`0` (sehr häufig) → `1` (1 Bit) -`127` (selten) → `11001111` (8 Bit) - - - ---- - -# Grenzen der Kompression: JPEG-Artefakte - -**Bei zu hoher Kompression (niedrige Qualität):** - -1. **Blocking:** 8×8 Pixel Blöcke sichtbar -2. **Color Bleeding:** Farbränder verschwimmen -3. **Ringing:** Halos um scharfe Kanten -4. **Mosquito Noise:** Flimmern um Kanten in Video - -**Faustregel:** -JPEG-Qualität < 70: Artefakte sichtbar -JPEG-Qualität 85-95: Sweet Spot (kaum Verlust, gute Kompression) - - - ---- - - - -# IV. Andere Bildformate - ---- - -# PNG: Verlustfrei mit Transparenz - -**PNG = Portable Network Graphics (1996)** - -**Eigenschaften:** -- Verlustfreie Kompression (Deflate-Algorithmus, wie ZIP) -- **Alpha-Kanal:** Transparenz (0 = durchsichtig, 255 = undurchsichtig) -- Paletten-Modus (8-bit, 256 Farben) oder True Color (24/32-bit) - -**Anwendung:** -Logos, Screenshots, Grafiken mit Text, Transparenz - -**Nachteil:** -Größer als JPEG für Fotos (keine Psychovisuelle Kompression) - - - ---- - -# GIF: Der Meme-Veteran - -**GIF = Graphics Interchange Format (1987)** - -**Eigenschaften:** -- **256 Farben** (8-bit Palette) -- **Animation** (Frame-basiert) -- LZW-Kompression (verlustfrei) - -**Anwendung:** -Memes, einfache Animationen - -**Nachteil:** -Nur 256 Farben → Fotos sehen schlecht aus -Ineffizient für Video (besser: MP4, WebM) - - - ---- - -# WebP & AVIF: Moderne Alternativen - -**WebP (Google, 2010):** -- Verlustfrei **und** verlustbehaftet -- ~30% kleiner als JPEG bei gleicher Qualität -- Transparenz + Animation - -**AVIF (AOMedia, 2019):** -- Basiert auf AV1-Video-Codec -- ~50% kleiner als JPEG -- Bessere Qualität, aber langsamer zu encodieren - -**Problem:** Browser-Support -WebP: >95% (gut) -AVIF: ~85% (wachsend) - - - ---- - -# Formatwahl in der Praxis - -| Anwendung | Format | Warum? | -|-----------|--------|--------| -| **Foto (Web)** | JPEG/WebP | Verlustbehaftet OK, kleine Datei | -| **Logo** | SVG/PNG | Vektor (SVG) oder Transparenz (PNG) | -| **Screenshot** | PNG | Verlustfrei, Text lesbar | -| **Meme/Animation** | GIF/MP4 | GIF für Kompatibilität, MP4 für Effizienz | -| **Druck (CMYK)** | TIFF/PDF | Verlustfrei, CMYK-Farbraum | -| **Archivierung** | TIFF/DNG | Unkomprimiert oder verlustfrei | - - - ---- - - - -# V. Warum Instagram eure Fotos "ruiniert" - ---- - -# Social Media & Re-Kompression - -**Problem:** -Instagram, Facebook, Twitter re-encodieren **alle** Uploads - -**Warum?** -- Speicherkosten (Milliarden Bilder) -- Bandbreite (schnellere Ladezeiten) -- Einheitlichkeit (verschiedene Geräte) - -**Konsequenz:** -Upload PNG/JPEG → Instagram konvertiert zu JPEG (Qualität ~85%) -→ **Generationsverlust** bei mehrfachem Re-Upload - - - ---- - - - -# VI. Video: Bilder + Zeit + Audio - ---- - -# Das Größenproblem bei Video - -**Recap: 1 Min 4K = ~45 GB unkomprimiert** - -Ein 2-Stunden-Film: **5,4 Terabyte** - -**Streaming unmöglich ohne Kompression:** -- Netflix 4K: ~15 Mbit/s (~7 GB/Stunde) -- YouTube 4K: ~20-40 Mbit/s (~10-20 GB/Stunde) - -→ **Faktor 100-200× Kompression nötig!** - - - ---- - -# Container und Codec - -**Wichtige Unterscheidung:** - -**Container (Wrapper):** -Datei-Format, das Video, Audio, Untertitel, Metadaten enthält -Beispiele: MP4, MKV, AVI, MOV, WebM - -**Codec (Compressor/Decompressor):** -Algorithmus zur Kompression/Dekompression -Beispiele: H.264, H.265, VP9, AV1 - -**Container ≠ Codec!** -MP4 kann H.264, H.265, AV1, oder andere Codecs enthalten - - - ---- - -# Gängige Container - -| Container | Endung | Codecs | Anwendung | -|-----------|--------|--------|-----------| -| **MP4** | .mp4, .m4v | H.264, H.265, AV1 | Web, Smartphones, universal | -| **MKV** | .mkv | Alle | Flexibel, Open-Source, Filme | -| **WebM** | .webm | VP8, VP9, AV1 | Web (HTML5), YouTube | -| **AVI** | .avi | Viele (alt) | Legacy (90er), veraltet | -| **MOV** | .mov | H.264, ProRes | Apple-Ökosystem, Editing | - - - ---- - -# Video-Codecs - -| Codec | Jahr | Effizienz | Status | -|-------|------|-----------|--------| -| **H.264 (AVC)** | 2003 | Basis | Standard, universell kompatibel | -| **H.265 (HEVC)** | 2013 | ~50% besser | Patente, teuer, langsame Adoption | -| **VP9** | 2013 | ~H.265 | Google, YouTube, patent-frei | -| **AV1** | 2018 | ~30% besser als H.265 | Zukunft, Netflix/YouTube, patent-frei | - - - ---- - - - -# VII. Video-Kompression im Detail - ---- - -# Drei Kompressionsprinzipien - -**1. Spatial Compression (Intra-Frame):** -Kompression **innerhalb** eines Frames (wie JPEG) - -**2. Temporal Compression (Inter-Frame):** -Differenzen **zwischen** Frames (nur Änderungen speichern) - -**3. Motion Compensation:** -Bewegungsvektoren statt volle Frames - -→ **Kombination ermöglicht Faktor 100-200× Kompression** - - - ---- - -# 1. Spatial Compression (Intra-Frame) - -**Prinzip:** Wie JPEG für Video-Frames - -**I-Frames (Intra-coded):** -Vollständige Bilder, unabhängig von anderen Frames -→ Größer, aber notwendig für Schnitte, Wiedereinstiegspunkte - -**Anwendung:** -Jedes N-te Frame ist I-Frame (z.B. alle 2 Sekunden) - - - ---- - -# 2. Temporal Compression (Inter-Frame) - -**Prinzip:** Speichere nur Änderungen zum vorherigen Frame - -**P-Frames (Predicted):** -Referenzieren vorheriges Frame, speichern nur Differenzen -→ Viel kleiner als I-Frames - -**B-Frames (Bi-directional):** -Referenzieren vorheriges **und** nächstes Frame -→ Noch kleiner, aber komplexer zu dekodieren - - - ---- - -# 3. Motion Compensation - -**Prinzip:** Bewegungsvektoren statt volle Blöcke - -**Beispiel:** -Ball bewegt sich von (100,100) zu (150,100) -→ Statt neuen Ball speichern: "Kopiere Block von (100,100), verschiebe um (50,0)" - -**Resultat:** -Bewegung wird mit wenigen Bytes kodiert statt komplettem Block - - - ---- - -# H.264 / AVC - -**H.264 = MPEG-4 Part 10 / AVC (Advanced Video Coding)** - -**Status:** De-facto Standard (seit 2003) - -**Vorteile:** -- Universelle Hardware-Unterstützung (jedes Gerät kann dekodieren) -- Gute Qualität bei moderaten Bitraten -- Mature, stable - -**Nachteile:** -- Patente (MPEG LA) → Lizenzgebühren -- Nicht so effizient wie H.265/AV1 - - - ---- - -# Das Patent-Problem - -**H.264 Patente:** -MPEG LA Pool (viele Unternehmen) -Lizenzgebühren für Encoder/Decoder -→ Bremste Open-Source-Adoption - -**H.265 noch schlimmer:** -Mehrere Patent-Pools, unklar wer zahlen muss -→ Viele Firmen verweigerten Adoption - -**Reaktion:** -AOMedia (Google, Netflix, Amazon, Apple) → AV1 (patent-frei) - - - ---- - -# VP9: Googles Antwort - -**VP9 (2013):** Googles patent-freie Alternative zu H.265 - -**Status:** -- YouTube Standard (>90% der Videos) -- Android, Chrome unterstützen -- Ähnliche Effizienz wie H.265 - -**Problem:** -Wenig Hardware-Support (Software-Dekodierung → Batterie) - - - ---- - -# AV1: Die offene Zukunft - -**AV1 (2018):** AOMedia Video Codec 1 - -**Vorteile:** -- ~30% effizienter als H.265 -- Patent-frei (Royalty-free) -- Netflix, YouTube nutzen es - -**Nachteile:** -- Langsam zu encodieren (CPU-intensiv) -- Hardware-Support wächst erst jetzt - -**Ausblick:** -Wird H.265 langfristig ersetzen - - - ---- - -# Adaptive Bitrate Streaming - -**Problem:** Nutzer haben verschiedene Bandbreiten - -**Lösung:** Video in mehreren Qualitätsstufen encodieren - -**Beispiel:** -- 360p @ 1 Mbit/s -- 720p @ 3 Mbit/s -- 1080p @ 6 Mbit/s -- 4K @ 15 Mbit/s - -**Client wählt dynamisch** je nach Bandbreite - -**Technologien:** -MPEG-DASH (Standard), HLS (Apple) - - - ---- - - - -# VIII. Kritische Perspektive: Deepfakes & Manipulation - ---- - -# Wenn Codecs lügen - -**Deepfakes nutzen Codec-Schwächen:** - -Moderne ML-Modelle (GANs) erzeugen synthetische Videos -→ Müssen nur "gut genug für H.264" sein, nicht pixel-perfekt - -**Compression Artifacts als Forensik:** - -Echte Kamera-Footage hat charakteristische Muster -Synthetische Videos zeigen andere Artefakte -→ Forensische Tools nutzen das zur Erkennung - -**Ethische Dimension:** - -Als Medienschaffende: Verantwortung, nicht zu täuschen -Technisches Wissen befähigt, Manipulationen zu erkennen - - - ---- - - - -# IX. Abschluss - ---- - -# Fragen & Diskussion - -**Was wir heute gelernt haben:** - -1. **Digitale Bilder:** Raster vs. Vektor, Skalierungsprobleme -2. **Psychovisuell:** Chroma Subsampling, Schwächen des Auges -3. **JPEG:** 6-Schritte-Kompression, Artefakte -4. **Formate:** PNG, GIF, WebP, AVIF -5. **Instagram-Problem:** Re-Kompression, Generationsverlust -6. **Video:** Container vs. Codec, Spatial/Temporal Compression -7. **Codecs:** H.264, H.265, VP9, AV1, Patent-Probleme -8. **Deepfakes:** Ethische Verantwortung - -**Fragen?** - ---- - -# Selbstlernen: Bildkompression experimentieren - -**Aufgabe:** Exportiert ein Foto in verschiedenen JPEG-Qualitätsstufen - -**Tools:** -- GIMP (kostenlos, Open-Source) -- Photopea (Browser-basiert, kostenlos) - -**Experiment:** -1. Exportiere mit Qualität 100, 85, 70, 50, 10 -2. Vergleiche Dateigröße und visuelle Qualität -3. Wo werden Artefakte sichtbar? - -**Link:** [https://www.photopea.com/](https://www.photopea.com/) - ---- - -# Selbstlernen: Video analysieren - -**Aufgabe:** Analysiert eine Video-Datei mit MediaInfo - -**Tool:** MediaInfo (kostenlos) -[https://mediaarea.net/en/MediaInfo](https://mediaarea.net/en/MediaInfo) - -**Fragen:** -- Welcher Container? -- Welcher Video-Codec? -- Welche Bitrate? -- I-Frame-Abstand? - -**Bonus:** Vergleicht YouTube-Video (Download mit yt-dlp) vs. eigene Aufnahme - ---- - -# Lizenz & Attribution - -**Dieses Foliendeck:** -© 2025 Michael Czechowski -Lizenz: CC BY-SA 4.0 - -**Quellen:** -- Wallace, G. K. (1992). "The JPEG Still Picture Compression Standard." *IEEE Transactions on Consumer Electronics*. -- Sullivan, G. J., et al. (2012). "Overview of the High Efficiency Video Coding (HEVC) Standard." *IEEE Transactions on Circuits and Systems for Video Technology*. -- AOMedia (2018). AV1 Bitstream & Decoding Process Specification. - -**Kontakt:** [https://librete.ch/hdm/223015b/](https://librete.ch/hdm/223015b/) diff --git a/scripts/dev-server.sh b/scripts/dev-server.sh index 7e11104..0660023 100755 --- a/scripts/dev-server.sh +++ b/scripts/dev-server.sh @@ -8,7 +8,7 @@ set -e INDEX_PORT=1310 COURSE_B_PORT=1311 COURSE_C_PORT=1312 -COURSE_DIR="courses" +SLIDES_DIR="slides" DEV_INDEX_DIR=".dev-index" # Colors @@ -94,12 +94,12 @@ echo "" python3 -m http.server $INDEX_PORT --directory "$DEV_INDEX_DIR" & PID_INDEX=$! -PORT=$COURSE_B_PORT npx @marp-team/marp-cli --server "$COURSE_DIR/223015b/slides/" & +PORT=$COURSE_B_PORT npx @marp-team/marp-cli --server "$SLIDES_DIR/223015b/" & PID_B=$! sleep 3 # Stagger starts to avoid WebSocket port collision -PORT=$COURSE_C_PORT npx @marp-team/marp-cli --server "$COURSE_DIR/223015c/slides/" & +PORT=$COURSE_C_PORT npx @marp-team/marp-cli --server "$SLIDES_DIR/223015c/" & PID_C=$! # Wait for any process to exit diff --git a/scripts/extract-klausur.sh b/scripts/extract-klausur.sh new file mode 100755 index 0000000..c9c2a5d --- /dev/null +++ b/scripts/extract-klausur.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash +# Extract klausur-relevant slides from all kapitel +# Usage: ./extract-klausur.sh +# Output: slides//klausur.md + +set -e + +COURSE="${1:-223015b}" +SLIDES_DIR="slides/$COURSE" +OUTPUT_FILE="$SLIDES_DIR/klausur.md" + +# Find the first kapitel file (01-*.md) to copy styles from +FIRST_KAPITEL=$(ls "$SLIDES_DIR"/01-*.md 2>/dev/null | head -1) + +if [[ -z "$FIRST_KAPITEL" ]]; then + echo "Error: No 01-*.md file found in $SLIDES_DIR" + exit 1 +fi + +echo "Extracting klausur slides for $COURSE..." + +# Extract frontmatter and styles (everything up to first + +EOF + +# Extract and copy the cover slide (first slide after frontmatter/styles, up to first ---) +awk ' + BEGIN { past_style = 0; in_cover = 0; printed = 0 } + /<\/style>/ { past_style = 1; next } + past_style && !in_cover && /^[^[:space:]]/ { in_cover = 1 } + in_cover && /^---$/ { print "---\n"; exit } + in_cover { print } +' "$FIRST_KAPITEL" >> "$OUTPUT_FILE" + +# Process each kapitel file in order - extract klausur slides only +for md_file in $(ls "$SLIDES_DIR"/[0-9][0-9]-*.md 2>/dev/null | grep -v klausur | sort); do + filename=$(basename "$md_file") + kapitel_num=$(echo "$filename" | grep -oE '^[0-9]+' | sed 's/^0*//') + + # Skip intro (kapitel 0) + if [[ "$kapitel_num" == "0" ]] || [[ -z "$kapitel_num" ]]; then + continue + fi + + # Check if file has any klausur slides + if ! grep -q '' "$md_file"; then + continue + fi + + echo " Processing Kapitel $kapitel_num..." + + # Extract klausur slides, hide header/footer, convert * to - bullets + awk ' + // { + in_klausur = 1 + # Add header/footer hiding + print "" + print "" + print "" + next + } + in_klausur && /^---$/ { + print "\n---\n" + in_klausur = 0 + next + } + in_klausur { + # Skip marp directives (we add our own) + if (/ -# Termin 3 – 23.01.2026 +# Kapitel 3 – 23.01.2026 ## Speichermedien & Schnittstellen --- diff --git a/courses/223015b/slides/2026-01-30-termin-4-distribution-apis-zukunft.md b/slides/223015b/04-distribution-apis-zukunft.md similarity index 99% rename from courses/223015b/slides/2026-01-30-termin-4-distribution-apis-zukunft.md rename to slides/223015b/04-distribution-apis-zukunft.md index b95e53e..336bdfd 100644 --- a/courses/223015b/slides/2026-01-30-termin-4-distribution-apis-zukunft.md +++ b/slides/223015b/04-distribution-apis-zukunft.md @@ -98,7 +98,7 @@ Hochschule der Medien Stuttgart -# Termin 4 – 30.01.2026 +# Kapitel 4 – 30.01.2026 ## Distribution, APIs & Zukunft --- diff --git a/courses/223015b/slides/2026-xx-xx-termin-5-vertiefung-offene-fragen.md b/slides/223015b/05-vertiefung-offene-fragen.md similarity index 99% rename from courses/223015b/slides/2026-xx-xx-termin-5-vertiefung-offene-fragen.md rename to slides/223015b/05-vertiefung-offene-fragen.md index f2a3869..a3c1508 100644 --- a/courses/223015b/slides/2026-xx-xx-termin-5-vertiefung-offene-fragen.md +++ b/slides/223015b/05-vertiefung-offene-fragen.md @@ -98,7 +98,7 @@ Hochschule der Medien Stuttgart -# Termin 5 – TBA +# Kapitel 5 – TBA ## Vertiefung & Offene Fragen --- diff --git a/courses/223015b/slides/assets/2011-hilbert.png b/slides/223015b/assets/2011-hilbert.png similarity index 100% rename from courses/223015b/slides/assets/2011-hilbert.png rename to slides/223015b/assets/2011-hilbert.png diff --git a/courses/223015b/slides/assets/8bit-P-character.png b/slides/223015b/assets/8bit-P-character.png similarity index 100% rename from courses/223015b/slides/assets/8bit-P-character.png rename to slides/223015b/assets/8bit-P-character.png diff --git a/courses/223015b/slides/assets/AV1.png b/slides/223015b/assets/AV1.png similarity index 100% rename from courses/223015b/slides/assets/AV1.png rename to slides/223015b/assets/AV1.png diff --git a/courses/223015b/slides/assets/Asterisk_with_jpg-artefacts.png b/slides/223015b/assets/Asterisk_with_jpg-artefacts.png similarity index 100% rename from courses/223015b/slides/assets/Asterisk_with_jpg-artefacts.png rename to slides/223015b/assets/Asterisk_with_jpg-artefacts.png diff --git a/courses/223015b/slides/assets/Barn-yuv.png b/slides/223015b/assets/Barn-yuv.png similarity index 100% rename from courses/223015b/slides/assets/Barn-yuv.png rename to slides/223015b/assets/Barn-yuv.png diff --git a/courses/223015b/slides/assets/Common_chroma_subsampling_ratios_YCbCr_CORRECTED.svg.png b/slides/223015b/assets/Common_chroma_subsampling_ratios_YCbCr_CORRECTED.svg.png similarity index 100% rename from courses/223015b/slides/assets/Common_chroma_subsampling_ratios_YCbCr_CORRECTED.svg.png rename to slides/223015b/assets/Common_chroma_subsampling_ratios_YCbCr_CORRECTED.svg.png diff --git a/courses/223015b/slides/assets/Felis_silvestris_silvestris_small_gradual_decrease_of_quality_-_JPEG_compression.jpg b/slides/223015b/assets/Felis_silvestris_silvestris_small_gradual_decrease_of_quality_-_JPEG_compression.jpg similarity index 100% rename from courses/223015b/slides/assets/Felis_silvestris_silvestris_small_gradual_decrease_of_quality_-_JPEG_compression.jpg rename to slides/223015b/assets/Felis_silvestris_silvestris_small_gradual_decrease_of_quality_-_JPEG_compression.jpg diff --git a/courses/223015b/slides/assets/Posterization_example.jpg b/slides/223015b/assets/Posterization_example.jpg similarity index 100% rename from courses/223015b/slides/assets/Posterization_example.jpg rename to slides/223015b/assets/Posterization_example.jpg diff --git a/courses/223015b/slides/assets/addaptive-substractive-colors.jpg b/slides/223015b/assets/addaptive-substractive-colors.jpg similarity index 100% rename from courses/223015b/slides/assets/addaptive-substractive-colors.jpg rename to slides/223015b/assets/addaptive-substractive-colors.jpg diff --git a/courses/223015b/slides/assets/ascii-table-colored.png b/slides/223015b/assets/ascii-table-colored.png similarity index 100% rename from courses/223015b/slides/assets/ascii-table-colored.png rename to slides/223015b/assets/ascii-table-colored.png diff --git a/courses/223015b/slides/assets/ascii-table.png b/slides/223015b/assets/ascii-table.png similarity index 100% rename from courses/223015b/slides/assets/ascii-table.png rename to slides/223015b/assets/ascii-table.png diff --git a/courses/223015b/slides/assets/audio-spectrogram.png b/slides/223015b/assets/audio-spectrogram.png similarity index 100% rename from courses/223015b/slides/assets/audio-spectrogram.png rename to slides/223015b/assets/audio-spectrogram.png diff --git a/courses/223015b/slides/assets/av1-grammy-crop.png b/slides/223015b/assets/av1-grammy-crop.png similarity index 100% rename from courses/223015b/slides/assets/av1-grammy-crop.png rename to slides/223015b/assets/av1-grammy-crop.png diff --git a/courses/223015b/slides/assets/av1-grammy.png b/slides/223015b/assets/av1-grammy.png similarity index 100% rename from courses/223015b/slides/assets/av1-grammy.png rename to slides/223015b/assets/av1-grammy.png diff --git a/courses/223015b/slides/assets/av1-logo.png b/slides/223015b/assets/av1-logo.png similarity index 100% rename from courses/223015b/slides/assets/av1-logo.png rename to slides/223015b/assets/av1-logo.png diff --git a/courses/223015b/slides/assets/bittorrent.png b/slides/223015b/assets/bittorrent.png similarity index 100% rename from courses/223015b/slides/assets/bittorrent.png rename to slides/223015b/assets/bittorrent.png diff --git a/courses/223015b/slides/assets/cassette-ipod.png b/slides/223015b/assets/cassette-ipod.png similarity index 100% rename from courses/223015b/slides/assets/cassette-ipod.png rename to slides/223015b/assets/cassette-ipod.png diff --git a/courses/223015b/slides/assets/compression-types.png b/slides/223015b/assets/compression-types.png similarity index 100% rename from courses/223015b/slides/assets/compression-types.png rename to slides/223015b/assets/compression-types.png diff --git a/courses/223015b/slides/assets/container-codec-diagram.png b/slides/223015b/assets/container-codec-diagram.png similarity index 100% rename from courses/223015b/slides/assets/container-codec-diagram.png rename to slides/223015b/assets/container-codec-diagram.png diff --git a/courses/223015b/slides/assets/digital-landscape.png b/slides/223015b/assets/digital-landscape.png similarity index 100% rename from courses/223015b/slides/assets/digital-landscape.png rename to slides/223015b/assets/digital-landscape.png diff --git a/courses/223015b/slides/assets/gif-animation.png b/slides/223015b/assets/gif-animation.png similarity index 100% rename from courses/223015b/slides/assets/gif-animation.png rename to slides/223015b/assets/gif-animation.png diff --git a/courses/223015b/slides/assets/grayscale-gradient.png b/slides/223015b/assets/grayscale-gradient.png similarity index 100% rename from courses/223015b/slides/assets/grayscale-gradient.png rename to slides/223015b/assets/grayscale-gradient.png diff --git a/courses/223015b/slides/assets/growth of big data.png b/slides/223015b/assets/growth of big data.png similarity index 100% rename from courses/223015b/slides/assets/growth of big data.png rename to slides/223015b/assets/growth of big data.png diff --git a/courses/223015b/slides/assets/hex-binary-table.png b/slides/223015b/assets/hex-binary-table.png similarity index 100% rename from courses/223015b/slides/assets/hex-binary-table.png rename to slides/223015b/assets/hex-binary-table.png diff --git a/courses/223015b/slides/assets/hex-code-hidden.png b/slides/223015b/assets/hex-code-hidden.png similarity index 100% rename from courses/223015b/slides/assets/hex-code-hidden.png rename to slides/223015b/assets/hex-code-hidden.png diff --git a/courses/223015b/slides/assets/hex-code.png b/slides/223015b/assets/hex-code.png similarity index 100% rename from courses/223015b/slides/assets/hex-code.png rename to slides/223015b/assets/hex-code.png diff --git a/courses/223015b/slides/assets/hex-dec-lookup-table.png b/slides/223015b/assets/hex-dec-lookup-table.png similarity index 100% rename from courses/223015b/slides/assets/hex-dec-lookup-table.png rename to slides/223015b/assets/hex-dec-lookup-table.png diff --git a/courses/223015b/slides/assets/hexeditor-screenshot.png b/slides/223015b/assets/hexeditor-screenshot.png similarity index 100% rename from courses/223015b/slides/assets/hexeditor-screenshot.png rename to slides/223015b/assets/hexeditor-screenshot.png diff --git a/courses/223015b/slides/assets/hollerith-machine-2.jpg b/slides/223015b/assets/hollerith-machine-2.jpg similarity index 100% rename from courses/223015b/slides/assets/hollerith-machine-2.jpg rename to slides/223015b/assets/hollerith-machine-2.jpg diff --git a/courses/223015b/slides/assets/iframe-pframe-diagram.png b/slides/223015b/assets/iframe-pframe-diagram.png similarity index 100% rename from courses/223015b/slides/assets/iframe-pframe-diagram.png rename to slides/223015b/assets/iframe-pframe-diagram.png diff --git a/courses/223015b/slides/assets/instagram-quality-loss.png b/slides/223015b/assets/instagram-quality-loss.png similarity index 100% rename from courses/223015b/slides/assets/instagram-quality-loss.png rename to slides/223015b/assets/instagram-quality-loss.png diff --git a/courses/223015b/slides/assets/ipb-compression-canon.jpg b/slides/223015b/assets/ipb-compression-canon.jpg similarity index 100% rename from courses/223015b/slides/assets/ipb-compression-canon.jpg rename to slides/223015b/assets/ipb-compression-canon.jpg diff --git a/courses/223015b/slides/assets/jpeg-artifacts.png b/slides/223015b/assets/jpeg-artifacts.png similarity index 100% rename from courses/223015b/slides/assets/jpeg-artifacts.png rename to slides/223015b/assets/jpeg-artifacts.png diff --git a/courses/223015b/slides/assets/jung-naiv.png b/slides/223015b/assets/jung-naiv.png similarity index 100% rename from courses/223015b/slides/assets/jung-naiv.png rename to slides/223015b/assets/jung-naiv.png diff --git a/courses/223015b/slides/assets/karlheinz-brandenburg.jpg b/slides/223015b/assets/karlheinz-brandenburg.jpg similarity index 100% rename from courses/223015b/slides/assets/karlheinz-brandenburg.jpg rename to slides/223015b/assets/karlheinz-brandenburg.jpg diff --git a/courses/223015b/slides/assets/klausur-pattern.svg b/slides/223015b/assets/klausur-pattern.svg similarity index 100% rename from courses/223015b/slides/assets/klausur-pattern.svg rename to slides/223015b/assets/klausur-pattern.svg diff --git a/courses/223015b/slides/assets/lightbulb-onoff.png b/slides/223015b/assets/lightbulb-onoff.png similarity index 100% rename from courses/223015b/slides/assets/lightbulb-onoff.png rename to slides/223015b/assets/lightbulb-onoff.png diff --git a/courses/223015b/slides/assets/matrix-code.png b/slides/223015b/assets/matrix-code.png similarity index 100% rename from courses/223015b/slides/assets/matrix-code.png rename to slides/223015b/assets/matrix-code.png diff --git a/courses/223015b/slides/assets/moores-law.png b/slides/223015b/assets/moores-law.png similarity index 100% rename from courses/223015b/slides/assets/moores-law.png rename to slides/223015b/assets/moores-law.png diff --git a/courses/223015b/slides/assets/napster-2001.png b/slides/223015b/assets/napster-2001.png similarity index 100% rename from courses/223015b/slides/assets/napster-2001.png rename to slides/223015b/assets/napster-2001.png diff --git a/courses/223015b/slides/assets/napster-interface.png b/slides/223015b/assets/napster-interface.png similarity index 100% rename from courses/223015b/slides/assets/napster-interface.png rename to slides/223015b/assets/napster-interface.png diff --git a/courses/223015b/slides/assets/netflix-4k.png b/slides/223015b/assets/netflix-4k.png similarity index 100% rename from courses/223015b/slides/assets/netflix-4k.png rename to slides/223015b/assets/netflix-4k.png diff --git a/courses/223015b/slides/assets/original-ascii-table.png b/slides/223015b/assets/original-ascii-table.png similarity index 100% rename from courses/223015b/slides/assets/original-ascii-table.png rename to slides/223015b/assets/original-ascii-table.png diff --git a/courses/223015b/slides/assets/photo-comparison.png b/slides/223015b/assets/photo-comparison.png similarity index 100% rename from courses/223015b/slides/assets/photo-comparison.png rename to slides/223015b/assets/photo-comparison.png diff --git a/courses/223015b/slides/assets/qr/asciitable.png b/slides/223015b/assets/qr/asciitable.png similarity index 100% rename from courses/223015b/slides/assets/qr/asciitable.png rename to slides/223015b/assets/qr/asciitable.png diff --git a/courses/223015b/slides/assets/qr/audacity-spectrogram.png b/slides/223015b/assets/qr/audacity-spectrogram.png similarity index 100% rename from courses/223015b/slides/assets/qr/audacity-spectrogram.png rename to slides/223015b/assets/qr/audacity-spectrogram.png diff --git a/courses/223015b/slides/assets/qr/hexed-it.png b/slides/223015b/assets/qr/hexed-it.png similarity index 100% rename from courses/223015b/slides/assets/qr/hexed-it.png rename to slides/223015b/assets/qr/hexed-it.png diff --git a/courses/223015b/slides/assets/qr/mediainfo.png b/slides/223015b/assets/qr/mediainfo.png similarity index 100% rename from courses/223015b/slides/assets/qr/mediainfo.png rename to slides/223015b/assets/qr/mediainfo.png diff --git a/courses/223015b/slides/assets/qr/repo-223015b.png b/slides/223015b/assets/qr/repo-223015b.png similarity index 100% rename from courses/223015b/slides/assets/qr/repo-223015b.png rename to slides/223015b/assets/qr/repo-223015b.png diff --git a/courses/223015b/slides/assets/qr/slides-223015b.png b/slides/223015b/assets/qr/slides-223015b.png similarity index 100% rename from courses/223015b/slides/assets/qr/slides-223015b.png rename to slides/223015b/assets/qr/slides-223015b.png diff --git a/courses/223015b/slides/assets/qr/squoosh.png b/slides/223015b/assets/qr/squoosh.png similarity index 100% rename from courses/223015b/slides/assets/qr/squoosh.png rename to slides/223015b/assets/qr/squoosh.png diff --git a/courses/223015b/slides/assets/qrcode-0.svg b/slides/223015b/assets/qrcode-0.svg similarity index 100% rename from courses/223015b/slides/assets/qrcode-0.svg rename to slides/223015b/assets/qrcode-0.svg diff --git a/courses/223015b/slides/assets/qrcode-1.svg b/slides/223015b/assets/qrcode-1.svg similarity index 100% rename from courses/223015b/slides/assets/qrcode-1.svg rename to slides/223015b/assets/qrcode-1.svg diff --git a/courses/223015b/slides/assets/quantized-image-8-colors.jpg b/slides/223015b/assets/quantized-image-8-colors.jpg similarity index 100% rename from courses/223015b/slides/assets/quantized-image-8-colors.jpg rename to slides/223015b/assets/quantized-image-8-colors.jpg diff --git a/courses/223015b/slides/assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg b/slides/223015b/assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg similarity index 100% rename from courses/223015b/slides/assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg rename to slides/223015b/assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg diff --git a/courses/223015b/slides/assets/rgb-color-model-with-title.png b/slides/223015b/assets/rgb-color-model-with-title.png similarity index 100% rename from courses/223015b/slides/assets/rgb-color-model-with-title.png rename to slides/223015b/assets/rgb-color-model-with-title.png diff --git a/courses/223015b/slides/assets/rgb-color-model.png b/slides/223015b/assets/rgb-color-model.png similarity index 100% rename from courses/223015b/slides/assets/rgb-color-model.png rename to slides/223015b/assets/rgb-color-model.png diff --git a/courses/223015b/slides/assets/spectogram-chet-baker.png b/slides/223015b/assets/spectogram-chet-baker.png similarity index 100% rename from courses/223015b/slides/assets/spectogram-chet-baker.png rename to slides/223015b/assets/spectogram-chet-baker.png diff --git a/courses/223015b/slides/assets/streaming-quality-switch.png b/slides/223015b/assets/streaming-quality-switch.png similarity index 100% rename from courses/223015b/slides/assets/streaming-quality-switch.png rename to slides/223015b/assets/streaming-quality-switch.png diff --git a/courses/223015b/slides/assets/suzanne-vega.jpg b/slides/223015b/assets/suzanne-vega.jpg similarity index 100% rename from courses/223015b/slides/assets/suzanne-vega.jpg rename to slides/223015b/assets/suzanne-vega.jpg diff --git a/courses/223015b/slides/assets/ybcbr.webp b/slides/223015b/assets/ybcbr.webp similarity index 100% rename from courses/223015b/slides/assets/ybcbr.webp rename to slides/223015b/assets/ybcbr.webp diff --git a/courses/223015b/slides/assets/youtube-vp9.png b/slides/223015b/assets/youtube-vp9.png similarity index 100% rename from courses/223015b/slides/assets/youtube-vp9.png rename to slides/223015b/assets/youtube-vp9.png diff --git a/slides/223015b/klausur.md b/slides/223015b/klausur.md new file mode 100644 index 0000000..9485231 --- /dev/null +++ b/slides/223015b/klausur.md @@ -0,0 +1,563 @@ +--- +marp: true +theme: gaia +paginate: true +backgroundColor: #fff +header: "Dateiformate, Schnittstellen, Speichermedien & Distributionswege (223015b)" +footer: "Michael Czechowski – HdM Stuttgart" +title: Dateiformate, Schnittstellen, Speichermedien & Distributionswege +--- + + + + + + + + +![bg cover opacity:0.2](./assets/radek-grzybowski-eBRTYyjwpRY-unsplash.jpg) + +# Dateiformate, Schnittstellen, Speichermedien & Distributionswege + +**223015b** · Modul "Technik 1" · 1. Semester +Digital- und Medienwirtschaft +Hochschule der Medien Stuttgart + +[https://librete.ch/hdm/223015b/](https://librete.ch/hdm/223015b/) + +--- + + + + + +# Verlustfrei vs. Verlustbehaftet + +| | Verlustfrei (Lossless) | Verlustbehaftet (Lossy) | +|---|---|---| +| **Prinzip** | **Redundanz** entfernen | **Irrelevanz** entfernen | +| **Reversibel** | Ja (Original wiederherstellbar) | Nein (Information unwiederbringlich weg) | +| **Reduktion** | 30-50% | 80-99% | +| **Formate** | ZIP, PNG, FLAC, GIF | JPEG, MP3, H.264/H.265 | + +**Faustregel:** +- Medien für Endnutzer → Lossy oft akzeptabel +- Quellmaterial, Code, Archive → Lossless nötig + + + + +--- + + + + + +# Dateneinheiten + +| Einheit | Bytes | Potenz | Beispiel | +|---------|------:|:------:|----------| +| **Byte** | 1 | 10⁰ | Farbwerte eines Pixels | +| **Kilobyte (KB)** | 1.000 | 10³ | Kleiner Programmcode | +| **Megabyte (MB)** | 1 Million | 10⁶ | Textdokument | +| **Gigabyte (GB)** | 1 Milliarde | 10⁹ | Kinofilm in FullHD | +| **Terabyte (TB)** | 1 Billion | 10¹² | ~12h Video in 4K | +| **Petabyte (PB)** | 1 Billiarde | 10¹⁵ | Netflix-Gesamtarchiv | +| **Exabyte (EB)** | 1 Trillion | 10¹⁸ | Alle E-Mails weltweit/Tag | +| **Zettabyte (ZB)** | 1 Trilliarde | 10²¹ | Internet-Traffic 2016 | + + + + +--- + + + + + +# Der digitale Wendepunkt + +| Jahr | Analog | Digital | Digital-Anteil | +|------|--------|---------|----------------| +| **1986** | 2,6 EB | 0,02 EB | **1%** | +| **2002** | — | — | **50%** (Wendepunkt) | +| **2007** | 18 EB | 277 EB | **94%** | + +**Perspektive:** +- 1986: "Petabyte" war ein theoretisches Konzept +- 2025: ~181 Zettabyte jährlich produziert + +**Magnetband lebt:** LTO-Tapes bleiben günstigstes Archivmedium +(AWS Glacier, Film-Archive, Rechenzentren) + + + + +--- + + + + + +# Analoge Medien +### Distribution: physisch (Kauf, Verleih, Kopie) + +- **Text** + - Bücher, Zeitungen, Zeitschriften, Lochkarten +- **Bild** + - Fotografie (Negativ, Dia, Polaroid), Mikrofilm +- **Audio:** + - Schallplatte (Vinyl, Schellack), Tonband, Musikkassette +- **Video:** + - Film (35mm, Super 8), VHS, Betamax + + +--- + + + + + +# Digitale Medien +### Distribution: Datenträger (CD, USB), Download, Streaming, P2P + +- **Text** + - E-Book (PDF, EPUB), Dokumente (TXT, DOCX) +- **Bild** + - Digitalfoto (JPEG, PNG, RAW, WebP, GIF) +- **Audio** + - Audiodatei (MP3, FLAC, WAV, AAC, OGG) +- **Video** + - Videodatei (MP4, MKV, AVI, WebM) + + +--- + + + + + +# Digitale Speichermedien + +- **Optische Speicher** + - CD, DVD, Blu-ray +- **Magnetische Speicher** + - Festplatte (HDD), Magnetband (LTO) +- **Flash-Speicher** + - SSD, USB-Stick, SD-Karte +- **Cloud-Speicher** + - Dropbox, Google Drive, iCloud, AWS S3 + + +--- + + + + + +# Rastergrafiken + +**Aufbau:** Liste von Pixeln mit Farbwerten (2D-Array) + +**Speicherbedarf (unkomprimiert):** +Breite × Höhe × Farbtiefe (in Bytes) + +**Beispiele:** JPEG, PNG, WebP + +| Bits (Farbtiefe) | Farben | Anwendung | +|-----:|-------:|-----------| +| 1 | 2 | Schwarz/Weiß (Fax) | +| 8 | 256 | Graustufen, GIF | +| 24 | 16,7 Mio. | True Color (Standard) | +| 32 | 16,7 Mio. + Alpha | Transparenz | + + + + +--- + + + + + +# Vektorgrafiken + +**Speicherung als geometrische Primitive:** +- Pfade (Bézierkurven mit Kontrollpunkten) +- Grundformen (Rechteck, Ellipse, Polygon) +- Text (Glyphen als Outlines) + +**SVG-Beispiel:** +```xml + +``` + +SVG beschreibt nicht jeden einzelnen Pixel im Raster, sondern deklariert wie Farben und Formen gesetzt werden. + + + + +--- + + + + + +# Die Schwächen des Auges + +**Menschen sehen:** +- Helligkeit besser als Farbe +- Große Flächen besser als feine Details +- Niedrige Frequenzen besser als hohe + +**JPEG nutzt das aus:** +- Farbauflösung reduzieren (aber Helligkeit behalten) +- Glatte Flächen effizient speichern +- Hohe Frequenzen (Details) verwerfen + + + + +--- + + + + + +![bg right:20%](./assets/Barn-yuv.png) + +# JPEG: Schritt 1 – Farbraumkonversion + +**RGB → Y'CbCr** (seltener Y'UV) + +- **Y** = Helligkeit (Luminanz) – Was das Auge am besten sieht +- **Cb** = Blau-Gelb-Anteil (Chrominanz) +- **Cr** = Rot-Grün-Anteil (Chrominanz) + +**Warum diese Trennung?** +Y (Helligkeit) behält volle Auflösung. +Cb/Cr (Farbe) kann reduziert werden – Auge merkt es kaum. + + + + +--- + + + + + +# JPEG: Schritt 6 – Huffman-Coding + +**Verlustfreie Kompression der Restwerte** + +**Idee:** Statt fester 8 Bit pro Wert → variable Bitlänge +Häufige Werte bekommen kurze Bit-Sequenzen. + +| Zeichen | Häufigkeit | Code (Bit-Sequenz) | +|---------|------------|------| +| e | 40% | `0` (1 Bit) | +| a | 25% | `10` (2 Bit) | +| i | 20% | `110` (3 Bit) | +| o | 10% | `1110` (4 Bit) | +| u | 5% | `1111` (4 Bit) | + + + + +--- + + + + + +# Container und Codec + +**Container = Das Dateiformat (Beispiel: MP4)** +Die "Box", die verschiedene Streams zusammenpackt: +- Video-Stream +- Audio-Stream(s) +- Untertitel +- Metadaten + +**Codec = Der Kompressionsalgorithmus (Beispiel: AV1)** +Entscheidet, WIE komprimiert wird. + + + + + +--- + + + + + +# H.264 / AVC + +**Advanced Video Coding (2003)** + +**Warum dominant?** +- Exzellente Kompression (~100:1 möglich) +- Hardware-Support in jedem Gerät seit ~2010 +- YouTube, Netflix, Blu-ray – alles H.264 + +**Features:** +- Variable Block-Größen (16×16 bis 4×4) +- Deblocking-Filter (reduziert Block-Artefakte) + + + + +--- + + + + + +# AV1: Die offene Zukunft + +**AV1 (2018)** + +**Alliance for Open Media:** +Google, Netflix, Amazon, Microsoft, Apple, Mozilla... + +**Eigenschaften:** +- 30% besser als H.265 +- Royalty-free, Open Source +- 8K, HDR, hohe Frame-Rates + +**Stand 2025:** +YouTube und Netflix nutzen AV1 für 4K/8K +Hardware-Encoder in aktuellen GPUs + + + + +--- + + + + + +# Wann HDD, wann SSD? + +| Anwendung | Empfehlung | +|-----------|------------| +| Betriebssystem | SSD (NVMe) | +| Anwendungen, Spiele | SSD | +| Video-Editing (Projekte) | SSD | +| Foto-Archiv | HDD oder SSD | +| Backup | HDD | +| NAS / Server | HDD (oder Mix) | +| Cold Storage | HDD oder Band | + + + + +--- + + + + + +# Die 3-2-1-Regel + +**3** Kopien eurer Daten +(Original + 2 Backups) + +**2** verschiedene Medientypen +(z.B. SSD + HDD, oder lokal + Cloud) + +**1** Kopie an anderem Ort +(Offsite: Cloud, anderes Gebäude) + + diff --git a/courses/223015b/slides/materials/wtf1 b/slides/223015b/materials/wtf1 similarity index 100% rename from courses/223015b/slides/materials/wtf1 rename to slides/223015b/materials/wtf1 diff --git a/courses/223015b/slides/materials/wtf2 b/slides/223015b/materials/wtf2 similarity index 100% rename from courses/223015b/slides/materials/wtf2 rename to slides/223015b/materials/wtf2 diff --git a/courses/223015b/slides/materials/wtf3 b/slides/223015b/materials/wtf3 similarity index 100% rename from courses/223015b/slides/materials/wtf3 rename to slides/223015b/materials/wtf3 diff --git a/courses/223015c/slides/2025-12-20-termin-1-geschichte-grundlagen-html.md b/slides/223015c/01-geschichte-grundlagen-html.md similarity index 100% rename from courses/223015c/slides/2025-12-20-termin-1-geschichte-grundlagen-html.md rename to slides/223015c/01-geschichte-grundlagen-html.md diff --git a/courses/223015c/slides/2026-01-10-termin-2-netzwerke-protokolle-css.md b/slides/223015c/02-netzwerke-protokolle-css.md similarity index 99% rename from courses/223015c/slides/2026-01-10-termin-2-netzwerke-protokolle-css.md rename to slides/223015c/02-netzwerke-protokolle-css.md index 6f88f61..434e9fd 100644 --- a/courses/223015c/slides/2026-01-10-termin-2-netzwerke-protokolle-css.md +++ b/slides/223015c/02-netzwerke-protokolle-css.md @@ -1610,21 +1610,6 @@ Das sind die Werkzeuge, mit denen Profis Netzwerk-Probleme debuggen. -# Pause -## Danach: CSS - - - ---- - - - # Teil 2: CSS ## Webseiten gestalten @@ -2099,20 +2084,21 @@ Doppelpunkt zur Unterscheidung von Pseudo-Klassen – aber einfacher Doppelpunkt /* Mobile First: Basis-Styles */ .container { padding: 1rem; + background: white; } /* Ab 768px (Tablet): Anpassungen */ @media (min-width: 768px) { .container { padding: 2rem; - max-width: 720px; + background: red; } } /* Ab 1024px (Desktop): Weitere Anpassungen */ @media (min-width: 1024px) { .container { - max-width: 960px; + background: green; } } ``` diff --git a/courses/223015c/slides/2026-01-24-termin-3-interaktivitaet-javascript.md b/slides/223015c/03-interaktivitaet-javascript.md similarity index 99% rename from courses/223015c/slides/2026-01-24-termin-3-interaktivitaet-javascript.md rename to slides/223015c/03-interaktivitaet-javascript.md index 6cba149..204de7f 100644 --- a/courses/223015c/slides/2026-01-24-termin-3-interaktivitaet-javascript.md +++ b/slides/223015c/03-interaktivitaet-javascript.md @@ -5,7 +5,7 @@ paginate: true backgroundColor: #fff header: "Grundlagen IT- und Internettechnik (223015c)" footer: "Michael Czechowski – HdM Stuttgart – WS 2025/26" -title: "Termin 3: Interaktivität & JavaScript" +title: "Kapitel 3: Interaktivität & JavaScript" --- + + + + + + + + +![bg fit opacity:0.2](./assets/background-termin-2.png) + +# Grundlagen IT- und Internettechnik + +**223015c** · Modul "Technik 1" · 1. Semester +Digital- und Medienwirtschaft +Hochschule der Medien Stuttgart + +**Wintersemester 2025/26** + +[https://librete.ch/hdm/223015c/](https://librete.ch/hdm/223015c/) + +--- + + + + + +# Die 5 Komponenten + +| Komponente | Funktion | +|------------|----------| +| **Rechenwerk (ALU)** | Führt Berechnungen durch | +| **Steuerwerk** | Interpretiert Befehle, steuert Ablauf | +| **Speicherwerk** | Speichert Programme UND Daten | +| **Ein-/Ausgabe** | Tastatur, Bildschirm, Netzwerk | +| **Bus-System** | Verbindet alle Komponenten | + +**Wichtig:** Programme und Daten **gemeinsam** im Speicher! + + + + +--- + + + + + +# Von-Neumann-Architektur: Bedeutung + +**Ohne Von-Neumann-Architektur:** +- Kein Betriebssystem +- Keine Apps +- Kein Multitasking +- Keine Updates bzw. Veränderungen am Computer System + +**Die meisten Computer** basieren auf diesem Prinzip: +Laptop, Smartphone, Server, Spielkonsole... + +**Ausnahme:** Mikrocontroller & DSPs nutzen oft die **Harvard-Architektur** +(separate Speicher für Code und Daten → schneller für Echtzeitanwendungen) + + + + +--- + + + + + +# HTML Metadaten + +```html + + + Im Browsertab als Überschrift sichtbar + + + + + + + ... + + +``` + +- *Webseiten werden nicht nur von Menschen besucht, sondern auch von Suchmaschinen, Programmen, Bots etc.* +- *Metadaten helfen bspw. auch Screen-Readern beim "Verstehen" der Inhalte* + + + + +--- + + + + + +# Wie nutzen Menschen das Web? + +| Eingabe | Nutzungsweise | +|---------|---------------| +| **Maus** | Klicken, Scrollen | +| **Tastatur** | Tab-Navigation, Enter, Pfeiltasten | +| **Screenreader** | Vorlesen von Inhalten (NVDA, VoiceOver, JAWS) | +| **Sprachsteuerung** | "Klicke auf Anmelden" | +| **Augensteuerung** | Eye-Tracking | +| **Switch-Geräte** | Ein-/Aus-Schalter | + +→ **Nicht alle nutzen Maus + Bildschirm!** + + + + +--- + + + + + +# Warum "Barrierefreiheit"? + +**Rechtlich:** +- EU: European Accessibility Act (seit Juni 2025 in Kraft!) +- DE: BITV 2.0 (Behörden), Privatwirtschaft betroffen + +**Ethisch:** +- Teilhabe für alle Menschen +- Digitale Inklusion + +**Praktisch:** +- Bessere UX für **alle** (SEO, Mobile, ältere Menschen) +- Größerer Markt (~15% der Bevölkerung) + + + + +--- + + + + + +# Barrieren im Netz vermeiden (a11y) + +**Tastatur-Test:** +- Alle Funktionen nur mit Tab + Enter nutzbar? +- Fokus immer sichtbar? +- Logische Tab-Reihenfolge? + +**Screenreader-Test:** +- VoiceOver (Mac): `Cmd + F5` +- NVDA (Windows): Gratis-Download + +**Tools:** +- axe DevTools, WAVE (Browser-Extensions) +- Lighthouse (in Chrome DevTools) + + + + +--- + + + + + +# Das TCP/IP-Modell + +| Schicht | Name | Aufgabe | Protokolle | +|---------|------|---------|------------| +| **4** | Anwendung | Was? Welcher Dienst? | HTTP, DNS, SMTP | +| **3** | Transport | Zuverlässigkeit, Ports | TCP, UDP | +| **2** | Internet | Routing, globale Adressen | IP | +| **1** | Netzzugang | Lokale Übertragung | Ethernet, WLAN | + +**4 Schichten. Das reicht, um das Internet zu verstehen.** + + + + +--- + + + + + +# Dateneinheiten pro Schicht + +| Schicht | Name | Dateneinheit | Was kommt hinzu? | +|---------|------|--------------|------------------| +| Anwendung | HTTP, DNS | **Daten** | – | +| Transport | TCP, UDP | **Segment** | Ports, Sequenznummern | +| Internet | IP | **Paket** | IP-Adressen | +| Netzzugang | Ethernet | **Frame** | MAC-Adressen, Prüfsumme | + +Merkhilfe: **D**aten → **S**egment → **P**aket → **F**rame +(„**D**er **S**ache **P**raktischer **F**olgen") + + + + +--- + + + + + +# IP vs. MAC vs. Port + +| | IP-Adresse | MAC-Adresse | Port | +|---|-----------|-------------|------| +| **Frage** | Welcher Rechner? | Welches Gerät nebenan? | Welches Programm? | +| **Reichweite** | Global | Lokal (1 Hop) | Auf einem Rechner | +| **Ändert sich?** | Nein | Ja, bei jedem Hop | Nein | +| **Schicht** | Internet (IP) | Netzzugang (Ethernet) | Transport (TCP/UDP) | +| **Beispiel** | 212.132.79.37 | aa:bb:cc:dd:ee | 443 | + + + + +--- + + + + + +# Der 3-Way-Handshake + +``` +Client (dein Laptop) Server + | | + |-------- SYN (Seq=1000) --------------->| + | "Ich will reden" | + | | + |<--- SYN-ACK (Seq=5000, Ack=1001) ------| + | "OK, ich auch. Ich starte bei 5000"| + | | + |-------- ACK (Ack=5001) --------------->| + | "Verstanden, los geht's" | + | | + | [ Verbindung steht ] | +``` + +**SYN** = Synchronize · **ACK** = Acknowledge + + + + +--- + + + + + +# TCP vs. UDP + +| | TCP | UDP | +|---|-----|-----| +| **Verbindung** | Ja (Handshake) | Nein | +| **Reihenfolge** | Garantiert | Nicht garantiert | +| **Verlorene Pakete** | Werden nachgefordert | Gehen verloren | +| **Overhead** | Höher | Niedriger | +| **Use Cases** | Web, Email, Downloads | Video-Calls, Gaming, DNS | + + + + +--- + + + + + +# HTTP-Methoden + +| Methode | Bedeutung | Beispiel | +|---------|-----------|----------| +| **GET** | Daten abrufen | Seite laden | +| **POST** | Daten senden | Formular absenden | +| **PUT** | Daten ersetzen | Profil aktualisieren | +| **DELETE** | Daten löschen | Account löschen | + +```http +GET /index.html HTTP/1.1 +POST /login HTTP/1.1 +``` + + + + +--- + + + + + +# HTTP Status-Codes + +```http +HTTP/1.1 200 OK +HTTP/1.1 404 Not Found +HTTP/1.1 500 Internal Server Error +``` + +| Code-Bereich | Bedeutung | +|--------------|-----------| +| **2xx** | Erfolg (200 OK, 201 Created) | +| **3xx** | Umleitung (301 Moved, 304 Not Modified) | +| **4xx** | Client-Fehler (400 Bad Request, 404 Not Found) | +| **5xx** | Server-Fehler (500 Internal Error, 503 Unavailable) | + + + + +--- + + + + + +# Zusammenfassung Teil 1 + +**Der Ablauf:** +1. DNS (UDP:53) → Name zu IP +2. TCP-Handshake (SYN → SYN-ACK → ACK) +3. HTTP-Request (GET /...) +4. HTTP-Response (200 OK + HTML) + +**Die Konzepte:** +- 4 Schichten: Anwendung → Transport → Internet → Netzzugang +- IP bleibt gleich, MAC ändert sich pro Hop +- Ports identifizieren Programme +- Encapsulation: Jede Schicht verpackt die darüberliegende + + + + +--- + + + + + +# Spezifität: Welche Regel gewinnt? + +| Selektor | Spezifität | +|----------|------------| +| Element (`p`) | 0,0,0,1 | +| Klasse (`.wichtig`) | 0,0,1,0 | +| ID (`#header`) | 0,1,0,0 | +| Inline (`style="..."`) | 1,0,0,0 | + +```css +p { color: blue; } /* 0,0,0,1 */ +.text { color: green; } /* 0,0,1,0 → gewinnt */ +#intro { color: red; } /* 0,1,0,0 → gewinnt über beide */ +``` + + + + +--- + + + + + +# Responsive Design + +```css +/* Mobile First: Basis-Styles */ +.container { + padding: 1rem; + background: white; +} + +/* Ab 768px (Tablet): Anpassungen */ +@media (min-width: 768px) { + .container { + padding: 2rem; + background: red; + } +} + +/* Ab 1024px (Desktop): Weitere Anpassungen */ +@media (min-width: 1024px) { + .container { + background: green; + } +} +``` + +