Compare commits

...
Author SHA1 Message Date
libretech ea7e905c61 split klausurfragen into per-course files and add erklaerung slides to 223015c
- split slides/klausurfragen.md into course-specific files:
  - slides/223015b/klausurfragen.md (blocks J-O: dateiformate)
  - slides/223015c/klausurfragen.md (blocks A-I: it-grundlagen)
- add erklaerung slides to 223015c (16 new vertiefung slides)
- update erklaerung slides in 223015b with deeper content
- update makefile to build klausurfragen per-course
- remove global klausurfragen from root index
2026-02-02 19:06:37 +01:00
libretech 512fbd9d3d add erklaerung slides to 223015b course files
- add erklaerung css class and 6 explanation slides to 01-grundlagen-text-audio.md
- add erklaerung css class and 9 explanation slides to 02-bild-audio-video.md
- add erklaerung css class and 2 explanation slides to 03-speichermedien-schnittstellen.md
- regenerate klausurfolien.md with updated content
2026-02-02 14:25:04 +01:00
libretech f9185d25e0 add functionality to disable topics in course index and improve layout 2026-02-02 02:28:06 +01:00
libretech 4f3b680951 add build and deploy targets for klausurfragen 2026-02-02 01:20:33 +01:00
libretech a2b1c0484a update klausurfragen.md to improve visibility and clarify title 2026-02-02 01:13:31 +01:00
libretech 1480d31a54 refactor klausurfragen.md to use gender-neutral language and improve clarity 2026-02-01 22:38:14 +01:00
libretech 514896db33 update flake.nix to allow unfree packages and add claude-code dependency 2026-02-01 22:38:02 +01:00
libretech b21e2394d5 fix layout and add disabled state for slides 2026-02-01 22:27:26 +01:00
libretech 7da018d92c add klausurfragen for 223015c 2026-02-01 18:21:01 +01:00
libretech 9e12447528 rebuild dev and build system with single marp server
- simplify development: single marp server on port 3000 instead of 3 processes
- rename klausur to klausurfolien for better naming
- update extract script to use 00-intro.md as template when no 01-*.md exists
- update makefile and package.json for new workflow
- add comprehensive AGENTS.md guidelines
2026-02-01 18:17:51 +01:00
17 changed files with 3493 additions and 237 deletions

No files matched your search

+197
View File
@@ -0,0 +1,197 @@
# AGENTS.md - Agent Guidelines for HdM Slides
This file contains comprehensive guidelines for agentic coding agents working on the HdM Slides project.
## Project Overview
This project builds presentation decks for Marp, supporting multiple courses:
- **223015b** - Dateiformate, Schnittstellen, Speichermedien (6 Kapitel)
- **223015c** - Internettechnologien (3 Kapitel)
## Development Workflow
### Build Commands
```bash
# Development
make dev # Start single dev server on port 3000
npm run dev # Alternative command for development server
# Build
make build # Build all courses (HTML + PDF)
make build-b # Build 223015b only
make build-c # Build 223015c only
make html # HTML only builds
make pdf # PDF only builds
# Klausur Folien
make klausur # Extract klausurfolien for all courses
make klausur-b # Extract klausurfolien for 223015b
make klausur-c # Extract klausurfolien for 223015c
# Deployment
make deploy # Deploy all courses (requires explicit permission)
make deploy-b # Deploy 223015b only
make deploy-c # Deploy 223015c only
# Utilities
make qr URL=... # Generate QR code
make optimize-images COURSE=223015b # Resize images
make clean # Remove generated files
```
### Testing
No specific test framework is used. To validate changes:
1. Start dev server: `make dev`
2. Open http://localhost:3000/223015b/ or /223015c/
3. Verify slides render correctly
4. Run `make build` to ensure no build errors
5. Check generated files in `build/` directory
## Code Style Guidelines
### File Structure
- Slides in `slides/<course>/` following naming pattern `NN-topic.md`
- Assets in `slides/<course>/assets/`
- Always reference images as `./assets/filename.png`
- Scripts in `scripts/`
- Themes in `themes/`
- Generated output in `build/` (gitignored)
### Naming Conventions
- Slide files: `NN-topic.md` (e.g., `01-grundlagen.md`, `02-bilder.md`)
- Images: `snake_case.jpg` or `kebab-case.jpg`
- Klausur files: `klausurfolien.md` (auto-generated)
- Function names in scripts: `snake_case`
- Variable names in scripts: `snake_case`
### Markdown Style
- Use ATX-style headers (`# ## ###`)
- YAML frontmatter for slide metadata at top of each file
- Never include a final `---` (creates empty slide)
- Use `<!-- _class: klausur -->` for exam-relevant slides
- Use relative paths for assets: `./assets/image.png`
### Script Style
- Use `#!/usr/bin/env bash` shebang
- Use `set -e` for error handling
- Use `2>/dev/null || true` for optional operations
- Define variables in UPPER_CASE at script top
- Use colors for terminal output: `\033[0;32m` etc.
### Git Workflow
- Commit messages: ALWAYS lowercase
- NEVER add co-authoring lines or generated footers
- Follow semantic naming: "add-...", "fix-...", "update-..."
- Commit changes to scripts, Makefile, documentation separately from slide content
## Agent Restrictions
### Security
- NEVER run commands outside `/home/mwc/Coding/hdm` folder
- NEVER run build/deploy commands without explicit user request
- NEVER run deploy commands (make deploy, scp, etc.) without explicit permission
### File Protection
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
### Klausur Handling
- Klausur files (`klausurfolien.md`) are auto-generated
- NEVER edit klausurfolien.md files directly
- To update klausurfolien: edit source slides with `<!-- _class: klausur -->` markers
- Run `make klausur` to regenerate
## Development Patterns
### Adding New Slides
1. Create new file following `NN-topic.md` pattern
2. Copy frontmatter from existing slides in the same course
3. Update Makefile `_KAPITEL` variable if needed
4. Test with `make dev`
### Modifying Existing Slides
1. Edit the appropriate markdown file in `slides/<course>/`
2. Maintain consistent styling with course theme
3. Preserve image paths as `./assets/...`
4. Test changes with dev server
### Working with Assets
1. Place images in `slides/<course>/assets/`
2. Use descriptive names: `diagram-network.jpg`, `example-code.png`
3. Optimize with `make optimize-images COURSE=223015b`
4. Reference as `./assets/filename.ext`
### Course-Specific Configuration
Each course has specific settings in Makefile:
- Course name and title
- Kapitel list (slide files)
- Deploy path
- Theme colors (in generate-index.sh)
## Common Tasks
### Debugging Build Issues
1. Check Makefile syntax: `make -n build`
2. Verify Marp CLI installation: `npx @marp-team/marp-cli --version`
3. Check file permissions: `ls -la slides/`
4. Validate markdown syntax with dev server
### Updating Course Structure
1. Update `_KAPITEL` variables in Makefile
2. Ensure slide files follow naming convention
3. Update course-specific themes if needed
4. Test both dev and build processes
### Working with Themes
- Custom theme in `themes/custom-theme.css`
- Course themes defined in individual slide frontmatter
- Use consistent color schemes per course
- Test theme changes across all slides
## Deployment Process
Deployment to production server requires explicit permission:
1. Build process: `make build` (HTML + PDF)
2. Index generation: automatically handled
3. Deploy to remote server via SCP
4. Root index deployment
**IMPORTANT**: Never run deployment commands without explicit user permission.
## Tools and Dependencies
### Core Dependencies
- Marp CLI for slide rendering
- Bash scripts for automation
- Make for build orchestration
- Git for version control
### Optional Tools
- qrencode for QR generation (via nix)
- ImageMagick for image optimization
- Python 3 for simple HTTP server (legacy)
## Testing Strategy
Since there's no formal test suite:
1. Manual testing with dev server
2. Build process validation
3. Slide rendering checks
4. Asset path verification
5. Cross-browser compatibility checks (important)
## Troubleshooting
### Common Issues
- **Port conflicts**: Use `make dev-kill` to clean up processes
- **Build failures**: Check file permissions and Marp CLI installation
- **Asset loading**: Verify relative paths and file existence
- **Deploy issues**: Check SSH keys and remote permissions
### Getting Help
1. Check this AGENTS.md file first
2. Review Makefile targets and scripts
3. Test changes incrementally
4. Maintain backup of working configurations
+8 -26
View File
@@ -7,19 +7,13 @@
COURSES = 223015b 223015c
SLIDES_DIR = slides
# Port configuration (index starts at BASE_PORT, courses increment from there)
BASE_PORT = 1310
INDEX_PORT = $(BASE_PORT)
# Course-specific settings
223015b_NAME = Dateiformate, Schnittstellen, Speichermedien
223015b_PORT = 1311
223015b_KAPITEL = 00-intro 01-grundlagen-text-audio 02-bild-audio-video 03-speichermedien-schnittstellen 04-distribution-apis-zukunft 05-vertiefung-offene-fragen klausur
223015b_KAPITEL = 00-intro 01-grundlagen-text-audio 02-bild-audio-video 03-speichermedien-schnittstellen 04-distribution-apis-zukunft 05-vertiefung-offene-fragen klausurfolien klausurfragen
223015b_DEPLOY_PATH = /home/tengo/html/hdm/223015b
223015c_NAME = Internettechnologien
223015c_PORT = 1312
223015c_KAPITEL = 01-geschichte-grundlagen-html 02-netzwerke-protokolle-css 03-interaktivitaet-javascript klausur
223015c_KAPITEL = 01-geschichte-grundlagen-html 02-netzwerke-protokolle-css 03-interaktivitaet-javascript klausurfolien klausurfragen
223015c_DEPLOY_PATH = /home/tengo/html/hdm/223015c
DEPLOY_HOST = tengo@tuttle.uberspace.de
@@ -33,9 +27,7 @@ help:
@echo " 223015c - Internettechnologien"
@echo ""
@echo "Development:"
@echo " make dev - Both servers + index (ports 1311, 1312, 1313)"
@echo " make dev-b - Dev server for 223015b (port 1312)"
@echo " make dev-c - Dev server for 223015c (port 1313)"
@echo " make dev - Start development server (port 3000)"
@echo ""
@echo "Build:"
@echo " make build - Build all courses"
@@ -43,7 +35,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 " make klausur - Extract klausurfolien slides"
@echo ""
@echo "Tools:"
@echo " make qr URL=... - Generate QR code for URL"
@@ -63,25 +55,14 @@ build/.exists:
@mkdir -p build/223015b build/223015c
@touch $@
# Development servers
# Development server
dev:
@./scripts/dev-server.sh
dev-kill:
@-pkill -f "python3 -m http.server" 2>/dev/null || true
@-pkill -f "marp-cli.*--server" 2>/dev/null || true
@sleep 0.5
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 $(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 $(SLIDES_DIR)/223015c/
# Build functions
define build_course
@echo "Building $(1)..."
@@ -158,7 +139,7 @@ klausur-c:
@./scripts/extract-klausur.sh 223015c
klausur: klausur-b klausur-c
@echo "Klausur slides extracted for all courses!"
@echo "Klausurfolien slides extracted for all courses!"
# QR Code generation (uses nix-shell)
qr:
@@ -198,7 +179,8 @@ HDM_DEPLOY_PATH = /home/tengo/html/hdm
build-index: build/.exists
@echo "Building root index..."
@echo '<!DOCTYPE html><html lang="de"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>HdM Vorlesungen</title><style>*{box-sizing:border-box;margin:0;padding:0}body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",Roboto,sans-serif;max-width:720px;margin:0 auto;padding:3rem 1.5rem;background:#fafafa;color:#1d1d1f;line-height:1.5}h1{font-size:2rem;font-weight:600;letter-spacing:-0.02em;margin-bottom:.5rem}.subtitle{color:#86868b;font-size:1rem}.courses{margin-top:2rem;display:flex;flex-direction:column;gap:.75rem}a.course{display:block;background:#fff;border-radius:12px;padding:1.5rem;text-decoration:none;color:inherit;box-shadow:0 1px 3px rgba(0,0,0,0.08);transition:all .2s ease;cursor:pointer}a.course:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.12)}.course-label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}.course-b .course-label{color:#1e5f8a}.course-c .course-label{color:#d63384}.course-title{font-size:1.15rem;font-weight:500;color:#1d1d1f;margin:.25rem 0}.course-info{font-size:.85rem;color:#86868b}.section-title{font-size:1rem;font-weight:600;color:#86868b;margin-top:2.5rem;margin-bottom:.75rem}.references{display:flex;flex-direction:column;gap:.75rem}footer{margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid #e5e5e7;color:#86868b;font-size:.85rem}footer a{color:#1d1d1f;text-decoration:none}footer a:hover{text-decoration:underline}.qr-section{margin-top:2.5rem;padding:1.5rem;background:#fff;border-radius:12px;box-shadow:0 1px 3px rgba(0,0,0,0.08);text-align:center}.qr-code{width:100%;height:auto}.qr-url{margin-top:.75rem;font-size:.85rem;color:#86868b}</style></head><body><h1>HdM Vorlesungen</h1><p class="subtitle">Wintersemester 2025/26 · Michael Czechowski</p><div class="courses"><a class="course course-b" href="223015b/"><span class="course-label">223015b</span><div class="course-title">Dateiformate, Schnittstellen, Speichermedien & Distributionswege</div><span class="course-info">6 Kapitel · Modul "Technik 1"</span></a><a class="course course-c" href="223015c/"><span class="course-label">223015c</span><div class="course-title">Grundlagen IT- und Internettechnik</div><span class="course-info">3 Kapitel · Modul "Technik 1"</span></a></div><h2 class="section-title">Referenzen</h2><div class="references"><a class="course" href="https://codecrispi.es/"><span class="course-label">Plattform</span><div class="course-title">Code Crispies</div><span class="course-info">Selbstlernplattform</span></a></div><div class="qr-section"><img src="qr-root.svg" alt="QR Code" class="qr-code"><p class="qr-url">https://librete.ch/hdm/</p></div><footer><a href="mailto:mail@librete.ch">Kontakt</a></footer></body></html>' > build/index.html
@mkdir -p build
@./scripts/generate-root-index.sh
# Deploy
define deploy_course
+8 -6
View File
@@ -27,10 +27,12 @@ build/ # Generated output (gitignored)
## Development
```bash
# Start dev servers (hot reload)
make dev # All courses + index
make dev-b # 223015b only (port 1311)
make dev-c # 223015c only (port 1312)
# Start development server (hot reload)
make dev # Single server for all courses (port 3000)
# Access individual courses:
# 223015b: http://localhost:3000/223015b/
# 223015c: http://localhost:3000/223015c/
```
## Build
@@ -43,7 +45,7 @@ make html # HTML only
make pdf # PDF only
```
## Klausur Slides
## Klausur Folien
Extract exam-relevant slides (marked with `<!-- _class: klausur -->`) into a single file:
@@ -53,7 +55,7 @@ make klausur-b # 223015b only
make klausur-c # 223015c only
```
Output: `slides/<course>/klausur.md`
Output: `slides/<course>/klausurfolien.md`
The generated file includes:
- A title slide per kapitel for orientation
+3 -1
View File
@@ -9,7 +9,8 @@
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
pkgs = import nixpkgs { inherit system; config.allowUnfree = true; };
# QR code generator script
qr-gen = pkgs.writeShellScriptBin "qr" ''
@@ -77,6 +78,7 @@
qrencode
imagemagick
gnumake
claude-code
];
shellHook = ''
+3 -2
View File
@@ -3,13 +3,14 @@
"version": "1.0.0",
"description": "HdM Stuttgart - Lecture Slides (Marp)",
"scripts": {
"dev:b": "PORT=1312 marp --server --allow-local-files courses/223015b/slides/",
"dev:c": "PORT=1313 marp --server --allow-local-files courses/223015c/slides/",
"dev": "PORT=3000 marp --server --allow-local-files slides/",
"build": "make build",
"build:b": "make build-b",
"build:c": "make build-c",
"pdf": "make pdf",
"html": "make html",
"klausur": "make klausur",
"deploy": "make deploy",
"test": "echo \"No tests specified\" && exit 0"
},
"keywords": ["marp", "slides", "hdm", "lectures"],
+21 -74
View File
@@ -1,106 +1,53 @@
#!/usr/bin/env bash
# Development server script for HdM slides
# Starts index server + marp servers for each course
# Simplified development server for HdM slides
# Starts single Marp server for all courses
set -e
# Configuration
INDEX_PORT=1310
COURSE_B_PORT=1311
COURSE_C_PORT=1312
SLIDES_DIR="slides"
DEV_INDEX_DIR=".dev-index"
DEV_PORT=3000
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m' # No Color
# Cleanup function
cleanup() {
echo -e "\n${RED}Shutting down servers...${NC}"
kill $PID_INDEX $PID_B $PID_C 2>/dev/null || true
echo -e "\n${RED}Shutting down dev server...${NC}"
pkill -f "marp-cli.*--server" 2>/dev/null || true
exit 0
}
# Kill existing processes on our ports
# Kill existing processes on our port
kill_existing() {
echo -e "${BLUE}Cleaning up existing processes...${NC}"
# Kill marp processes first
pkill -9 -f "marp-cli" 2>/dev/null || true
pkill -f "python3 -m http.server" 2>/dev/null || true
# Kill ports including marp's WebSocket ports (37717-37720 range)
fuser -k $INDEX_PORT/tcp $COURSE_B_PORT/tcp $COURSE_C_PORT/tcp 2>/dev/null || true
fuser -k 37717/tcp 37718/tcp 37719/tcp 37720/tcp 2>/dev/null || true
sleep 2
}
# Generate dev index
generate_index() {
mkdir -p "$DEV_INDEX_DIR"
cat > "$DEV_INDEX_DIR/index.html" << 'EOF'
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>HdM Slides - Dev</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",Roboto,sans-serif;max-width:720px;margin:0 auto;padding:3rem 1.5rem;background:#fafafa;color:#1d1d1f;line-height:1.5}
h1{font-size:2rem;font-weight:600;letter-spacing:-0.02em;margin-bottom:.5rem}
.subtitle{color:#86868b;font-size:1rem}
.courses{margin-top:2rem;display:flex;flex-direction:column;gap:.75rem}
a.course{display:block;background:#fff;border-radius:12px;padding:1.5rem;text-decoration:none;color:inherit;box-shadow:0 1px 3px rgba(0,0,0,0.08);transition:all .2s ease;cursor:pointer}
a.course:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.12)}
.course-label{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em}
.course-b .course-label{color:#1e5f8a}
.course-c .course-label{color:#d63384}
.course-title{font-size:1.15rem;font-weight:500;color:#1d1d1f;margin:.25rem 0}
.course-info{font-size:.85rem;color:#86868b}
</style>
</head>
<body>
<h1>HdM Slides</h1>
<p class="subtitle">Development Server</p>
<div class="courses">
EOF
echo " <a class=\"course course-b\" href=\"http://localhost:$COURSE_B_PORT\"><span class=\"course-label\">223015b</span><div class=\"course-title\">Dateiformate, Schnittstellen, Speichermedien & Distributionswege</div><span class=\"course-info\">Port $COURSE_B_PORT</span></a>" >> "$DEV_INDEX_DIR/index.html"
echo " <a class=\"course course-c\" href=\"http://localhost:$COURSE_C_PORT\"><span class=\"course-label\">223015c</span><div class=\"course-title\">Grundlagen IT- und Internettechnik</div><span class=\"course-info\">Port $COURSE_C_PORT</span></a>" >> "$DEV_INDEX_DIR/index.html"
cat >> "$DEV_INDEX_DIR/index.html" << 'EOF'
</div>
</body>
</html>
EOF
fuser -k $DEV_PORT/tcp 2>/dev/null || true
sleep 1
}
# Main
trap cleanup SIGINT SIGTERM
kill_existing
generate_index
echo -e "${GREEN}Starting development servers...${NC}"
echo -e "${GREEN}Starting development server...${NC}"
echo ""
echo -e " Index: ${BLUE}http://localhost:$INDEX_PORT${NC}"
echo -e " 223015b: ${BLUE}http://localhost:$COURSE_B_PORT${NC}"
echo -e " 223015c: ${BLUE}http://localhost:$COURSE_C_PORT${NC}"
echo -e " Server: ${BLUE}http://localhost:$DEV_PORT${NC}"
echo -e " Slides: ${BLUE}$SLIDES_DIR/${NC}"
echo ""
echo -e "Press ${RED}Ctrl+C${NC} to stop all servers"
echo -e "Available courses:"
echo -e " 223015b: ${BLUE}http://localhost:$DEV_PORT/223015b/${NC}"
echo -e " 223015c: ${BLUE}http://localhost:$DEV_PORT/223015c/${NC}"
echo ""
echo -e "Press ${RED}Ctrl+C${NC} to stop the server"
echo ""
# Start servers
python3 -m http.server $INDEX_PORT --directory "$DEV_INDEX_DIR" &
PID_INDEX=$!
# Start single Marp server for all slides
PORT=$DEV_PORT npx @marp-team/marp-cli --server "$SLIDES_DIR/"
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 "$SLIDES_DIR/223015c/" &
PID_C=$!
# Wait for any process to exit
wait
# Wait for process to exit
wait
+6 -6
View File
@@ -1,19 +1,19 @@
#!/usr/bin/env bash
# Extract klausur-relevant slides from all kapitel
# Usage: ./extract-klausur.sh <course_id>
# Output: slides/<course>/klausur.md
# Output: slides/<course>/klausurfolien.md
set -e
COURSE="${1:-223015b}"
SLIDES_DIR="slides/$COURSE"
OUTPUT_FILE="$SLIDES_DIR/klausur.md"
OUTPUT_FILE="$SLIDES_DIR/klausurfolien.md"
# Find the first kapitel file (01-*.md) to copy styles from
FIRST_KAPITEL=$(ls "$SLIDES_DIR"/01-*.md 2>/dev/null | head -1)
# Find the first kapitel file (00-intro.md or 01-*.md) to copy styles from
FIRST_KAPITEL=$(ls "$SLIDES_DIR"/00-intro.md "$SLIDES_DIR"/01-*.md 2>/dev/null | head -1)
if [[ -z "$FIRST_KAPITEL" ]]; then
echo "Error: No 01-*.md file found in $SLIDES_DIR"
echo "Error: No 00-intro.md or 01-*.md file found in $SLIDES_DIR"
exit 1
fi
@@ -57,7 +57,7 @@ awk '
' "$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
for md_file in $(ls "$SLIDES_DIR"/[0-9][0-9]-*.md 2>/dev/null | grep -v klausurfolien | sort); do
filename=$(basename "$md_file")
kapitel_num=$(echo "$filename" | grep -oE '^[0-9]+' | sed 's/^0*//')
+119 -23
View File
@@ -42,6 +42,15 @@ TOPIC_MAP["geschichte-grundlagen-html"]="Geschichte, Grundlagen & HTML"
TOPIC_MAP["netzwerke-protokolle-css"]="Netzwerke, Protokolle & CSS"
TOPIC_MAP["interaktivitaet-javascript"]="Interaktivität & JavaScript"
# Configure which topics should appear disabled per course
# Two modes: fully disabled (non-clickable card) and buttons-disabled (link remains clickable, buttons are disabled)
declare -A DISABLED_FULL
declare -A DISABLED_BUTTONS
# For course B: chapters 3,4,5 should be fully disabled
DISABLED_FULL["223015b"]="speichermedien-schnittstellen distribution-apis-zukunft vertiefung-offene-fragen"
# For course C: chapter 3 should keep link clickable but buttons disabled
DISABLED_BUTTONS["223015c"]="interaktivitaet-javascript"
cat > "$BUILD_DIR/index.html" << HEADER
<!DOCTYPE html>
<html lang="de">
@@ -61,6 +70,15 @@ cat > "$BUILD_DIR/index.html" << HEADER
line-height: 1.5;
}
header { margin-bottom: 2rem; }
.breadcrumb {
margin-bottom: 1rem;
font-size: 0.85rem;
}
.breadcrumb a {
color: #86868b;
text-decoration: none;
}
.breadcrumb a:hover { text-decoration: underline; }
h1 {
font-size: 1.75rem;
font-weight: 600;
@@ -68,6 +86,12 @@ cat > "$BUILD_DIR/index.html" << HEADER
margin-bottom: 0.5rem;
color: $ACCENT_COLOR;
}
.course-heading {
font-size: 1.25rem;
font-weight: 500;
color: #1d1d1f;
margin-bottom: 0.25rem;
}
.subtitle {
color: #86868b;
font-size: 0.95rem;
@@ -77,7 +101,8 @@ cat > "$BUILD_DIR/index.html" << HEADER
font-size: 0.875rem;
margin-top: 0.25rem;
}
.kapitel {
/* Use the .termine wrapper and add a gap between cards */
.termine {
margin-top: 1.5rem;
display: flex;
flex-direction: column;
@@ -93,6 +118,7 @@ cat > "$BUILD_DIR/index.html" << HEADER
grid-template-columns: 1fr auto auto;
align-items: center;
gap: 1rem;
padding: 0; /* inner padding handled by kapitel-link */
}
.kapitel-card:hover {
transform: translateY(-2px);
@@ -105,6 +131,8 @@ cat > "$BUILD_DIR/index.html" << HEADER
color: inherit;
grid-column: 1;
}
/* Disabled look: dim the entire card and prevent pointer events */
.kapitel-card.disabled { opacity: 0.6; pointer-events: none; }
.kapitel-label {
font-size: 0.7rem;
font-weight: 600;
@@ -135,11 +163,11 @@ cat > "$BUILD_DIR/index.html" << HEADER
white-space: nowrap;
position: relative;
z-index: 1;
margin-right: 0.5rem;
}
.btn-slides {
background: $ACCENT_COLOR;
color: #fff;
margin-right: 0.5rem;
}
.btn-slides:hover {
filter: brightness(1.1);
@@ -147,9 +175,9 @@ cat > "$BUILD_DIR/index.html" << HEADER
.btn-pdf {
background: #f5f5f7;
color: #1d1d1f;
margin-right: 1rem;
}
.btn-pdf:hover { background: #e8e8ed; }
.btn-disabled { opacity: 0.6; pointer-events: none; }
/* Make entire card clickable via overlay */
.kapitel-link::after {
content: '';
@@ -198,7 +226,9 @@ cat > "$BUILD_DIR/index.html" << HEADER
</head>
<body>
<header>
<h1>$TITLE</h1>
<p class="breadcrumb"><a href="../">← Kursübersicht</a></p>
<h1>HdM Vorlesungen</h1>
<h2 class="course-heading">$TITLE</h2>
<p class="subtitle">$SUBTITLE</p>
<p class="meta">HdM Stuttgart · Wintersemester 2025/26 · Michael Czechowski</p>
</header>
@@ -216,7 +246,7 @@ for html in $(ls "$BUILD_DIR"/[0-9][0-9]-*.html 2>/dev/null | sort); do
# Look up nice topic name or fallback
topic="${TOPIC_MAP[$topic_raw]}"
if [[ -z "$topic" ]]; then
topic=$(echo "$topic_raw" | sed 's/-/ /g' | sed 's/.*/\u&/')
topic=$(echo "$topic_raw" | sed 's/-/ /g' | sed 's/.*/\\u&/')
fi
# Handle kapitel number
@@ -228,42 +258,108 @@ for html in $(ls "$BUILD_DIR"/[0-9][0-9]-*.html 2>/dev/null | sort); do
pdf_filename="${filename%.html}.pdf"
# Check if PDF exists
pdf_link=""
if [[ -f "$BUILD_DIR/$pdf_filename" ]]; then
pdf_link="<a href=\"$pdf_filename\" class=\"btn btn-pdf\">PDF</a>"
# Determine whether this topic is configured as disabled for this course
disabled_full=false
disabled_buttons=false
for t in ${DISABLED_FULL["$COURSE"]}; do
if [[ "$topic_raw" == "$t" ]]; then
disabled_full=true
break
fi
done
if [[ "$disabled_full" == false ]]; then
for t in ${DISABLED_BUTTONS["$COURSE"]}; do
if [[ "$topic_raw" == "$t" ]]; then
disabled_buttons=true
break
fi
done
fi
# Decide card class
card_class="kapitel-card"
if [[ "$disabled_full" == true ]] || [[ "$disabled_buttons" == true ]]; then
card_class="$card_class disabled"
fi
# Build link/button HTML depending on disabled state
if [[ "$disabled_full" == true ]]; then
# non-interactive card (visually dimmed and not clickable)
link_html="<div class=\"kapitel-link\"><div class=\"kapitel-label\">$kapitel_label</div><div class=\"kapitel-title\">$topic</div></div>"
slides_html="<span class=\"btn btn-slides btn-disabled\">Folien</span>"
pdf_html=""
if [[ -f "$BUILD_DIR/$pdf_filename" ]]; then
pdf_html="<span class=\"btn btn-pdf btn-disabled\">PDF</span>"
fi
elif [[ "$disabled_buttons" == true ]]; then
# link stays clickable, but buttons are disabled; card appears dimmed
link_html="<a href=\"$filename\" class=\"kapitel-link\"><div class=\"kapitel-label\">$kapitel_label</div><div class=\"kapitel-title\">$topic</div></a>"
slides_html="<span class=\"btn btn-slides btn-disabled\">Folien</span>"
pdf_html=""
if [[ -f "$BUILD_DIR/$pdf_filename" ]]; then
pdf_html="<span class=\"btn btn-pdf btn-disabled\">PDF</span>"
fi
else
# normal interactive card
pdf_link=""
if [[ -f "$BUILD_DIR/$pdf_filename" ]]; then
pdf_link="<a href=\"$pdf_filename\" class=\"btn btn-pdf\">PDF</a>"
fi
link_html="<a href=\"$filename\" class=\"kapitel-link\"><div class=\"kapitel-label\">$kapitel_label</div><div class=\"kapitel-title\">$topic</div></a>"
slides_html="<a href=\"$filename\" class=\"btn btn-slides\">Folien</a>"
pdf_html="$pdf_link"
fi
cat >> "$BUILD_DIR/index.html" << LINK
<div class="kapitel-card">
<a href="$filename" class="kapitel-link">
<div class="kapitel-label">$kapitel_label</div>
<div class="kapitel-title">$topic</div>
</a>
<a href="$filename" class="btn btn-slides">Folien</a>
$pdf_link
<div class="$card_class">
$link_html
$slides_html
$pdf_html
</div>
LINK
done
# Add klausur entry if it exists
if [[ -f "$BUILD_DIR/klausur.html" ]]; then
# Add klausurfolien entry if it exists
if [[ -f "$BUILD_DIR/klausurfolien.html" ]]; then
pdf_link=""
if [[ -f "$BUILD_DIR/klausur.pdf" ]]; then
pdf_link="<a href=\"klausur.pdf\" class=\"btn btn-pdf\">PDF</a>"
if [[ -f "$BUILD_DIR/klausurfolien.pdf" ]]; then
pdf_link="<a href=\"klausurfolien.pdf\" class=\"btn btn-pdf\">PDF</a>"
fi
cat >> "$BUILD_DIR/index.html" << KLAUSUR
<div class="kapitel-card" style="border-left: 3px solid $ACCENT_COLOR;">
<a href="klausur.html" class="kapitel-link">
<a href="klausurfolien.html" class="kapitel-link">
<div class="kapitel-label">Prüfung</div>
<div class="kapitel-title">Klausurrelevante Folien</div>
</a>
<a href="klausur.html" class="btn btn-slides">Folien</a>
<a href="klausurfolien.html" class="btn btn-slides">Folien</a>
$pdf_link
</div>
KLAUSUR
fi
# Add klausurfragen entry if it exists (HTML and/or PDF)
if [[ -f "$BUILD_DIR/klausurfragen.html" ]] || [[ -f "$BUILD_DIR/klausurfragen.pdf" ]]; then
pdf_link=""
if [[ -f "$BUILD_DIR/klausurfragen.pdf" ]]; then
pdf_link="<a href=\"klausurfragen.pdf\" class=\"btn btn-pdf\">PDF</a>"
fi
slides_link=""
if [[ -f "$BUILD_DIR/klausurfragen.html" ]]; then
slides_link="<a href=\"klausurfragen.html\" class=\"btn btn-slides\">Folien</a>"
fi
cat >> "$BUILD_DIR/index.html" << KLAUSURFRAGEN
<div class="kapitel-card" style="border-left: 3px solid $ACCENT_COLOR;">
<a href="klausurfragen.html" class="kapitel-link">
<div class="kapitel-label">Prüfung</div>
<div class="kapitel-title">Klausurfragen</div>
</a>
$slides_link
$pdf_link
</div>
KLAUSURFRAGEN
fi
cat >> "$BUILD_DIR/index.html" << FOOTER
</div>
<div class="qr-section">
@@ -272,7 +368,7 @@ cat >> "$BUILD_DIR/index.html" << FOOTER
</div>
<footer>
<a href="mailto:mail@librete.ch">Kontakt</a> ·
<a href="../">Alle Kurse</a>
<a href="../">Kursübersicht</a>
</footer>
</body>
</html>
+189 -12
View File
@@ -68,6 +68,38 @@ section.aufgabe {
section.aufgabe footer {
display: none;
}
section.erklaerung {
font-size: 1.1rem;
background: repeating-linear-gradient(
135deg,
#e3f2fd,
#e3f2fd 40px,
#fff 40px,
#fff 80px
) !important;
}
@media print {
section.erklaerung {
background: #e3f2fd !important;
}
}
section.erklaerung h1 {
font-size: 1.5rem;
color: #1e5f8a;
margin-bottom: 0.3rem;
}
section.erklaerung ul,
section.erklaerung ol {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung p {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung table {
font-size: 0.9rem;
}
</style>
<!-- _class: invert -->
@@ -270,6 +302,30 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Kompression – Vertiefung
Claude Shannon definierte 1948 die **Entropie** als theoretische Untergrenze der Kompression. Ein Text mit gleichmäßiger Zeichenverteilung hat hohe Entropie (schwer komprimierbar); repetitive Texte haben niedrige Entropie.
**Verlustfreie Kompression** erreicht diese Grenze durch:
- **Statistische Kodierung:** Huffman, Arithmetic Coding
- **Wörterbuch-Methoden:** LZ77, LZ78, DEFLATE (ZIP, PNG)
- Originalzustand ist exakt rekonstruierbar
**Verlustbehaftete Kompression** unterschreitet die Grenze, indem sie menschliche Wahrnehmungsgrenzen ausnutzt:
| Sinneskanal | Psychophysisches Modell | Ausnutzung |
|-------------|------------------------|------------|
| Gehör | Maskierungseffekte, Hörschwelle | MP3: Töne unter Maskierungsschwelle weglassen |
| Sehen | Farbauflösung, Kontrastempfindlichkeit | JPEG: Chroma-Subsampling, hohe Frequenzen verwerfen |
**Shannon-Limit:** Verlustfreie Kompression kann nicht unter die Entropie; verlustbehaftete kann beliebig weit gehen – auf Kosten der Qualität.
---
<!-- _header: '' -->
<!-- _footer: '' -->
@@ -837,6 +893,29 @@ Eselsbrücke: "Kilo Mega Giga Tera Peta Exa Zetta Yotta"
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Dateneinheiten – Vertiefung
Zwei konkurrierende Standards existieren seit der IEC-Normierung 1998:
| Präfix | SI (Dezimal) | IEC (Binär) | Differenz |
|--------|--------------|-------------|-----------|
| Kilo | 1.000 (10³) | 1.024 (2¹⁰) KiB | 2,4% |
| Mega | 1.000.000 (10⁶) | 1.048.576 MiB | 4,9% |
| Giga | 10⁹ | 2³⁰ GiB | 7,4% |
| Tera | 10¹² | 2⁴⁰ TiB | 10% |
**Warum der Unterschied wächst:** (2¹⁰)ⁿ ÷ (10³)ⁿ = 1,024ⁿ. Bei Terabyte sind es bereits 10% Abweichung.
**Festplatten-Marketing:** Hersteller nutzen SI (dezimal), Betriebssysteme zeigen IEC (binär). Eine „1 TB"-Festplatte zeigt daher nur 931 GiB an – technisch korrekt, aber verwirrend.
**Historischer Kontext:** RAM wurde immer binär gemessen (2ⁿ Adressen), Festplatten ursprünglich dezimal (physikalische Geometrie). Die IEC führte 1998 KiB/MiB/GiB ein – diese Notation setzt sich langsam durch.
---
# Datenwachstum der Menschheit
| Jahr | Datenmenge | Kontext |
@@ -903,6 +982,32 @@ VERGLEICH: SSD ~$50/TB, HDD ~$15/TB, LTO ~$5/TB
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Digitaler Wendepunkt – Vertiefung
Die Studie von Hilbert & López (Science, 2011) analysierte 60 Speichertechnologien von 1986–2007. Der Wendepunkt 2002 markiert den Moment, ab dem mehr Information digital als analog existierte.
**Was 1986 „analog" bedeutete:**
- Bücher, Zeitungen, Magazine: ~8 EB
- Vinyl-Schallplatten, Musikkassetten: ~12 EB
- VHS-Kassetten, Filmrollen: ~60 EB
**Warum analog stagnierte:** Physische Medien haben Kapazitätsgrenzen. Eine VHS speichert 10 GB; eine Blu-ray (2006) bereits 50 GB auf kleinerer Fläche.
**LTO-Magnetband überlebt** trotz „alter" Technologie:
| Medium | Kosten/TB | Lebensdauer | Energiebedarf |
|--------|-----------|-------------|---------------|
| SSD | ~50 € | 5–10 Jahre | Dauerstrom |
| HDD | ~15 € | 3–5 Jahre aktiv | Dauerstrom |
| LTO-9 | ~5 € | 30+ Jahre | Nur beim Zugriff |
AWS Glacier, Google Coldline und Film-Archive nutzen LTO – langsamer Zugriff, aber unschlagbar günstig und langlebig.
---
<!-- _header: '' -->
<!-- _footer: '' -->
@@ -994,13 +1099,36 @@ Visueller Kontrast: Analog vs. Digital
### Distribution: physisch (Kauf, Verleih, Kopie)
* **Text**
- Bücher, Zeitungen, Zeitschriften, Lochkarten
- Bücher, Zeitungen, Zeitschriften, Lochkarten
* **Bild**
- Fotografie (Negativ, Dia, Polaroid), Mikrofilm
- Fotografie (Negativ, Dia, Polaroid), Mikrofilm
* **Audio:**
- Schallplatte (Vinyl, Schellack), Tonband, Musikkassette
- Schallplatte (Vinyl, Schellack), Tonband, Musikkassette
* **Video:**
- Film (35mm, Super 8), VHS, Betamax
- Film (35mm, Super 8), VHS, Betamax
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Analoge Medien – Vertiefung
Analoge Speicherung codiert Information als **kontinuierliche physikalische Größe**: Rillentiefe (Vinyl), Magnetfeldstärke (Tonband), Silberkorn-Dichte (Film). Es gibt keine diskreten Stufen – theoretisch unendliche Auflösung, praktisch begrenzt durch Rauschen.
**Generationsverlust** entsteht, weil jede Kopie neues Rauschen addiert:
- Schallplatte → Kassette: Frequenzgang leidet, Rauschen steigt
- VHS → VHS: Farbsättigung sinkt, Schärfe nimmt ab
- 3. Generation: oft unbrauchbar
| Medium | Typische Auflösung | Dynamik |
|--------|-------------------|---------|
| Vinyl (audiophil) | ~20–20.000 Hz | ~70 dB |
| Tonband (Studio) | ~30–15.000 Hz | ~55 dB |
| 35mm Film | ~4K-äquivalent | ~13 Blendenstufen |
**Paradox der Analogtechnik:** Das Original ist einzigartig und unersetzlich – aber genau deshalb anfällig. Jedes Abspielen einer Schallplatte trägt mikroskopisch Material ab; jeder Filmdurchlauf riskiert Kratzer.
---
@@ -1061,13 +1189,37 @@ Paradox: Gerade die Perfektion wurde zum "Problem"
### Distribution: Datenträger (CD, USB), Download, Streaming, P2P
* **Text**
- E-Book (PDF, EPUB), Dokumente (TXT, DOCX)
- E-Book (PDF, EPUB), Dokumente (TXT, DOCX)
* **Bild**
- Digitalfoto (JPEG, PNG, RAW, WebP, GIF)
- Digitalfoto (JPEG, PNG, RAW, WebP, GIF)
* **Audio**
- Audiodatei (MP3, FLAC, WAV, AAC, OGG)
- Audiodatei (MP3, FLAC, WAV, AAC, OGG)
* **Video**
- Videodatei (MP4, MKV, AVI, WebM)
- Videodatei (MP4, MKV, AVI, WebM)
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Digitale Medien – Vertiefung
Digitale Speicherung quantisiert kontinuierliche Signale in diskrete Werte. Der **Quantisierungsfehler** (Differenz zum Original) ist der Preis der Digitalisierung – aber einmal digitalisiert, bleibt die Information exakt.
**Bit-identische Kopien** revolutionierten die Medienindustrie:
- Keine Qualitätskette mehr: 1000. Kopie = 1. Kopie = Original
- Kosten pro Kopie: praktisch null (nur Speicherplatz)
- Perfekte Archivierung: Bits altern nicht (nur der Datenträger)
| Aspekt | Analog | Digital |
|--------|--------|---------|
| Kopiervorgang | Physikalischer Prozess | Bit-Kopie |
| Qualität pro Generation | Verschlechtert | Identisch |
| Fehlerkorrektur | Unmöglich | Möglich (ECC, RAID) |
| Formatmigration | Verlust | Verlustfrei möglich |
**Die Kehrseite:** Digitale Obsoleszenz. Ein DOCX von 2025 ist in 50 Jahren womöglich unlesbar – während ein Buch von 1525 heute noch lesbar ist. Offene Formate (PDF/A, FLAC, PNG) mildern dieses Risiko.
---
@@ -1079,13 +1231,38 @@ Paradox: Gerade die Perfektion wurde zum "Problem"
# Digitale Speichermedien
* **Optische Speicher**
- CD, DVD, Blu-ray
- CD, DVD, Blu-ray
* **Magnetische Speicher**
- Festplatte (HDD), Magnetband (LTO)
- Festplatte (HDD), Magnetband (LTO)
* **Flash-Speicher**
- SSD, USB-Stick, SD-Karte
- SSD, USB-Stick, SD-Karte
* **Cloud-Speicher**
- Dropbox, Google Drive, iCloud, AWS S3
- Dropbox, Google Drive, iCloud, AWS S3
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Digitale Speichermedien – Vertiefung
Jede Technologie hat physikalische Vor- und Nachteile:
**Optisch (CD/DVD/Blu-ray):** Laser liest Pits (Vertiefungen) und Lands (Erhöhungen). Robust gegen Magnetfelder, aber empfindlich gegenüber Kratzern und UV-Licht. M-DISC verspricht 1000 Jahre – unter Laborbedingungen.
**Magnetisch (HDD/LTO):** Magnetisierte Bereiche auf rotierenden Platten oder Band. HDDs haben bewegliche Teile (Verschleiß); LTO-Bänder sind passiv und extrem langlebig, aber sequentieller Zugriff.
**Flash (SSD/USB/SD):** Elektronen in Floating Gates speichern Bits. Keine beweglichen Teile, aber begrenzte Schreibzyklen (TLC: ~3.000, SLC: ~100.000). Ohne Strom verlieren Zellen nach Jahren ihre Ladung.
| Szenario | Empfehlung | Grund |
|----------|------------|-------|
| Betriebssystem | NVMe SSD | Geschwindigkeit |
| Videoarchiv | HDD | Kapazität/Preis |
| Langzeitarchiv | LTO + M-DISC | Lebensdauer |
| Austausch | USB/SD | Portabilität |
**Cloud** ist physisch HDD/SSD/LTO in Rechenzentren – kein eigenes Medium, sondern Zugriffsmethode.
---
+249 -1
View File
@@ -68,6 +68,38 @@ section.aufgabe {
section.aufgabe footer {
display: none;
}
section.erklaerung {
font-size: 1.1rem;
background: repeating-linear-gradient(
135deg,
#e3f2fd,
#e3f2fd 40px,
#fff 40px,
#fff 80px
) !important;
}
@media print {
section.erklaerung {
background: #e3f2fd !important;
}
}
section.erklaerung h1 {
font-size: 1.5rem;
color: #1e5f8a;
margin-bottom: 0.3rem;
}
section.erklaerung ul,
section.erklaerung ol {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung p {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung table {
font-size: 0.9rem;
}
</style>
<!-- _class: invert -->
@@ -220,6 +252,26 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Rastergrafik – Vertiefung
Ein Pixel ist die kleinste adressierbare Einheit. Bei 24-Bit-Farbtiefe speichert jeder Pixel drei 8-Bit-Werte (0–255) für Rot, Grün und Blau. Diese additive Farbmischung erzeugt 256³ = 16,7 Millionen mögliche Farbtöne.
**Speicherberechnung:** `Breite × Höhe × Bytes pro Pixel`
| Auflösung | Farbtiefe | Berechnung | Größe |
|-----------|-----------|------------|-------|
| 1920×1080 | 24 Bit (3 B) | 2.073.600 × 3 | 6,2 MB |
| 4K (3840×2160) | 24 Bit | 8.294.400 × 3 | 24,9 MB |
| 4K | 32 Bit (4 B) | 8.294.400 × 4 | 33,2 MB |
Der Alpha-Kanal (32 Bit) speichert Transparenz als Wert von 0 (unsichtbar) bis 255 (vollständig sichtbar). PNG nutzt dies für weiche Kanten; JPEG unterstützt keinen Alpha-Kanal.
---
# Das Problem der Skalierung
**Vergrößern:**
@@ -274,6 +326,30 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Vektorgrafik – Vertiefung
Vektorgrafiken speichern keine Pixel, sondern mathematische Beschreibungen: Koordinaten, Kurvenparameter (Bézier-Kontrollpunkte), Füllfarben, Strichstärken. Der Renderer berechnet die Pixel erst bei der Ausgabe – daher beliebig skalierbar.
**Bézier-Kurven** (Pierre Bézier, 1962, für Renault-Karosserien entwickelt):
- Definiert durch Ankerpunkte und Kontrollpunkte
- Kubische Bézier: 2 Anker + 2 Kontrollpunkte
- Mathematisch exakt reproduzierbar
| Aspekt | Raster | Vektor |
|--------|--------|--------|
| Skalierung 10× | Pixel sichtbar | Perfekt scharf |
| Foto-Realismus | Gut geeignet | Unpraktikabel |
| Dateigröße Logo | Wächst mit Auflösung | Konstant (~5 KB) |
| Editierbarkeit | Destruktiv | Nicht-destruktiv |
**Rasterisierung:** GPU wandelt Vektordaten in Pixel um. Geschieht bei jeder Darstellung neu – deshalb ist ein 4K-Monitor schärfer als ein 1080p-Monitor bei gleichem SVG.
---
# Raster- und Vektorgrafiken
| | Raster | Vektor |
@@ -338,6 +414,28 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Psychovisuelle Wahrnehmung – Vertiefung
Die Netzhaut enthält ~120 Mio. Stäbchen (Helligkeitswahrnehmung) aber nur ~6 Mio. Zapfen (Farbwahrnehmung). Dieses 20:1-Verhältnis erklärt, warum JPEG Farbinformationen stärker reduzieren kann als Helligkeitsinformationen.
**Räumliche Frequenz** beschreibt, wie schnell sich die Helligkeit über eine Bildfläche ändert:
- **Niedrig:** Himmel, Wand – große einheitliche Flächen
- **Hoch:** Haare, Texturen, Schrift – schnelle Wechsel
Das Auge ist ein Tiefpassfilter: Hohe Frequenzen (feine Details) werden schwächer wahrgenommen. JPEG verwirft daher zuerst die hohen Frequenzen – der Qualitätsverlust bleibt meist unsichtbar.
| Biologisches Limit | Ausnutzung in JPEG |
|-------------------|-------------------|
| Farbauflösung ~20× geringer | Chroma Subsampling (4:2:0) |
| Hohe Frequenzen unscharf | DCT + Quantisierung |
| Kontrast-Maskierung | Artefakte in Texturen versteckt |
---
<!-- _header: '' -->
<!-- _footer: '' -->
@@ -442,6 +540,34 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Farbraumkonversion – Vertiefung
RGB→YCbCr nutzt die Biologie des menschlichen Auges: 120 Mio. Stäbchen (Helligkeit) vs. nur 6 Mio. Zapfen (Farbe) – ein 20:1-Verhältnis. Die Transformation erfolgt über eine lineare Matrix:
```
Y = 0.299·R + 0.587·G + 0.114·B
Cb = −0.169·R − 0.331·G + 0.500·B + 128
Cr = 0.500·R − 0.419·G − 0.081·B + 128
```
Die Gewichtung (G dominiert mit 59%) entspricht der spektralen Empfindlichkeit des Auges bei Tageslicht. Y enthält alle Schärfeinformation; Cb/Cr können reduziert werden.
**Chroma Subsampling – Notation J:a:b** (bezogen auf 4×2 Pixel):
| Schema | Farbdaten | Einsatz |
|--------|-----------|---------|
| 4:4:4 | 100% | Postproduktion, Grafik |
| 4:2:2 | 50% | Broadcast, Pro-Video |
| 4:2:0 | 25% | JPEG, H.264, Streaming |
Bei 4:2:0 teilen sich 4 Pixel einen Farbwert, behalten aber individuelle Helligkeit → 50% Dateneinsparung bei kaum sichtbarem Unterschied.
---
# JPEG Schritt 2: Chroma Subsampling
**Notation `J:a:b`** (bezogen auf 4×2 Pixel-Block):
@@ -623,12 +749,36 @@ KLAUSURRELEVANT:
- Präfix-frei: Kein Code ist Anfang eines anderen
- Häufigstes Zeichen = kürzester Code
- Auch in ZIP, PNG, MP3 verwendet
-->
---
-->
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Huffman-Coding – Vertiefung
David Huffman entwickelte 1952 als Student am MIT einen optimalen Algorithmus für präfixfreie Codes – ursprünglich als Hausaufgabe, die zur Veröffentlichung führte.
**Algorithmus (Bottom-Up-Baumkonstruktion):**
1. Alle Symbole nach Häufigkeit sortieren
2. Die zwei seltensten Symbole zu einem Knoten kombinieren
3. Wiederholen bis nur noch die Wurzel übrig ist
4. Codes ablesen: links = 0, rechts = 1
**Präfixfreiheit:** Kein Code ist Anfang eines anderen → sofort dekodierbar ohne Trennzeichen.
| Eigenschaft | Huffman | Arithmetisch |
|-------------|---------|--------------|
| Einheit | Ganze Bits | Fraktionale Bits |
| Optimalität | Optimal für ganze Bits | Näher an Entropie |
| Geschwindigkeit | Schneller | Langsamer |
| JPEG-Einsatz | Standard (Baseline) | Optional (selten) |
JPEG verwendet zwei Huffman-Tabellen: eine für DC-Koeffizienten (Durchschnittswerte), eine für AC-Koeffizienten (Frequenzen). Die Tabellen sind im JPEG-Header gespeichert.
---
<!-- _class: klausur -->
<!-- _header: '' -->
@@ -772,6 +922,28 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# WebP & AVIF – Vertiefung
**WebP** entstand 2010 aus Googles VP8-Videocodec (On2 Technologies, für $133M gekauft). Statt I-Frames für Video werden sie als Einzelbilder verwendet. WebP nutzt Intra-Frame-Prediction, die benachbarte Blöcke zur Vorhersage verwendet – effizienter als JPEGs blockweise DCT.
**AVIF** basiert auf dem AV1-Videocodec, entwickelt 2015–2018 von der Alliance for Open Media (Google, Apple, Netflix, Amazon, Microsoft, Mozilla). Nach dem Patent-Chaos von H.265/HEVC vereinten sich die Konkurrenten für einen lizenzfreien Standard.
| Aspekt | WebP | AVIF |
|--------|------|------|
| Basis-Codec | VP8/VP9 | AV1 |
| Kompression vs. JPEG | 25–35% besser | 50% besser |
| HDR/Wide Gamut | Nein | Ja (10/12 Bit) |
| Encoding-Geschwindigkeit | Schnell | Sehr langsam |
| Browser-Support 2025 | 97%+ | 93%+ |
**Warum JPEG dominiert:** Kameras, Bildbearbeitungssoftware und Content-Management-Systeme sind auf JPEG optimiert. Der Wechsel erfordert Infrastruktur-Updates über die gesamte Pipeline.
---
# Formatwahl in der Praxis
| Anwendung | Format |
@@ -890,6 +1062,33 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Container vs. Codec – Vertiefung
**Container** (Multiplexer-Format) organisiert mehrere Datenströme mit Timing-Informationen. Er enthält keine Kompressionslogik, sondern synchronisiert Video, Audio, Untertitel und Metadaten.
**Codec** (Coder-Decoder) definiert den Kompressionsalgorithmus. Derselbe Container kann verschiedene Codecs enthalten – die Dateiendung verrät den Codec nicht.
| Container | Entwickler | Typische Codecs | Besonderheit |
|-----------|------------|-----------------|--------------|
| MP4 | ISO/MPEG | H.264, H.265, AAC | Web-Standard, DRM-fähig |
| MKV | Matroska | Alle | Beliebig viele Streams, Kapitel |
| WebM | Google | VP9, AV1, Opus | HTML5-optimiert, lizenzfrei |
| MOV | Apple | ProRes, H.264 | Professionelle Produktion |
**Metadaten im Container:**
- Timecodes für Frame-genaue Synchronisation
- Kapitelmarken, Thumbnails
- Sprach-Tags für Audio/Untertitel
- HDR-Metadaten (MaxCLL, MaxFALL)
**Praktisches Problem:** Eine `.mp4`-Datei mit AV1-Codec spielt auf älteren Geräten nicht ab, obwohl sie MP4 „unterstützen" – der Hardware-Decoder fehlt für AV1.
---
# Gängige Container
| Container | Verwendung |
@@ -1115,6 +1314,32 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# H.264/AVC – Vertiefung
H.264 (2003) ermöglichte erst YouTube (2005), Netflix-Streaming (2007) und Blu-ray. Vor H.264 war MPEG-2 Standard – H.264 erreichte bei gleicher Qualität die halbe Bitrate.
**Technische Innovationen:**
- **Variable Blockgrößen:** 16×16 bis 4×4 Macroblocks (MPEG-2: nur 16×16)
- **Intra-Prediction:** Blöcke werden aus Nachbarn vorhergesagt
- **In-Loop Deblocking:** Filter reduziert Blockartefakte vor der Referenzierung
- **CABAC:** Arithmetic Coding ersetzt Huffman (10–15% effizienter)
| Profile | Anwendung | Max. Auflösung |
|---------|-----------|----------------|
| Baseline | Videotelefonie, ältere Geräte | 480p |
| Main | Broadcast, Streaming | 1080p |
| High | Blu-ray, professionell | 4K |
**Hardware-Ubiquität:** Seit 2010 hat jedes Smartphone, jede GPU, jeder Smart-TV einen H.264-Hardware-Decoder. Encoding in Echtzeit braucht keine CPU – das ermöglichte erst mobiles Video-Streaming und Videotelefonie.
**Patent-Pool (MPEG-LA):** ~2.000 Patente von 30+ Unternehmen. Endnutzer-Streaming ist lizenzfrei; Hardware-Hersteller zahlen ~$0,20/Gerät.
---
# Das Patent-Problem
**H.264 ist nicht frei**
@@ -1221,6 +1446,29 @@ KLAUSURRELEVANT:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# AV1 – Vertiefung
Die **Alliance for Open Media** (2015) vereinte Konkurrenten nach dem Patent-Chaos von H.265/HEVC. Drei separate Patent-Pools (MPEG-LA, HEVC Advance, Velos Media) machten H.265-Lizenzierung unberechenbar – die Industrie wollte einen garantiert lizenzfreien Standard.
**Gründungsmitglieder:** Google, Mozilla, Cisco, Netflix, Amazon, Microsoft. Apple trat 2018 bei – historisch, da Apple sonst eigene Standards bevorzugt.
| Technische Innovation | Beschreibung |
|----------------------|--------------|
| Superblocks | Bis 128×128 Pixel (H.264: max 16×16) |
| Prediction Modes | 56 Intra-Modi (H.264: 9) |
| Transform | 10 verschiedene Transformtypen |
| Film Grain Synthesis | Filmkorn wird als Parameter übertragen |
**Encoding-Performance:** Software-Encoding ist 50–200× langsamer als H.264. Erst Hardware-Encoder (Intel ab Gen 12, NVIDIA RTX 40, Apple M3) machen Echtzeit-Encoding praktikabel.
**Adoption 2025:** YouTube und Netflix nutzen AV1 für 4K/8K-Streams. 2024 gewann AV1 einen Emmy für technische Innovation – offene Standards können Industriestandard werden.
---
<!-- _header: '' -->
<!-- _footer: 'https://blog.mozilla.org/en/mozilla/av1-video-codec-wins-emmy/' -->
@@ -68,6 +68,38 @@ section.aufgabe {
section.aufgabe footer {
display: none;
}
section.erklaerung {
font-size: 1.1rem;
background: repeating-linear-gradient(
135deg,
#e3f2fd,
#e3f2fd 40px,
#fff 40px,
#fff 80px
) !important;
}
@media print {
section.erklaerung {
background: #e3f2fd !important;
}
}
section.erklaerung h1 {
font-size: 1.5rem;
color: #1e5f8a;
margin-bottom: 0.3rem;
}
section.erklaerung ul,
section.erklaerung ol {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung p {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung table {
font-size: 0.9rem;
}
</style>
<!-- _class: invert -->
@@ -235,6 +267,29 @@ Kleine SSD für System + große HDD für Archiv.
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# HDD vs. SSD – Vertiefung
**HDD (Hard Disk Drive):** Magnetplatten rotieren mit 5.400–7.200 RPM; ein Schreib-/Lesekopf schwebt nanometerweit über der Oberfläche. Die Zugriffszeit setzt sich zusammen aus Seek Time (Kopf bewegen) + Rotational Latency (warten auf Sektor).
**SSD (Solid State Drive):** NAND-Flash-Zellen speichern Bits als elektrische Ladung. Kein mechanischer Zugriff → konstant schnelle Latenz. Aber: Zellen haben begrenzte Schreibzyklen (P/E Cycles).
| Aspekt | HDD | SATA SSD | NVMe SSD |
|--------|-----|----------|----------|
| Latenz | 5–10 ms | 0,1 ms | 0,02 ms |
| Seq. Lesen | 150 MB/s | 550 MB/s | 7.000 MB/s |
| IOPS (4K random) | 100 | 90.000 | 1.000.000 |
| TBW (1 TB Modell) | ∞ | 600 TBW | 600 TBW |
**Wear Leveling:** SSD-Controller verteilen Schreibvorgänge gleichmäßig, um einzelne Zellen nicht vorzeitig zu erschöpfen. TRIM informiert den Controller über gelöschte Blöcke.
**Praxis:** System-SSD für OS/Anwendungen (Geschwindigkeit), HDD für Medienarchiv (Kapazität/Preis). RAID schützt vor Einzelausfällen bei beiden.
---
<!-- _class: lead -->
# Dateisysteme
@@ -484,6 +539,30 @@ Warum 1 Offsite?
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# 3-2-1-Backup-Regel – Vertiefung
Peter Krogh formulierte die Regel 2005 in „The DAM Book" (Digital Asset Management). Sie schützt gegen unterschiedliche Verlustszenarien:
| Bedrohung | Schutz durch | Beispiel |
|-----------|--------------|----------|
| Hardware-Defekt | 3 Kopien | SSD stirbt → HDD-Backup vorhanden |
| Firmware-Bug/Ransomware | 2 Medientypen | Malware infiziert nur ein System |
| Feuer/Diebstahl/Flut | 1 Offsite | Haus brennt → Cloud-Backup sicher |
**Moderne Erweiterung 3-2-1-1-0:**
- **+1** Air-Gapped (offline, nicht verbunden)
- **+0** Verifizierte Backups (regelmäßig Restore testen)
**Ransomware-Problem:** Vernetzte Backups werden oft mitverschlüsselt. Air-Gapped-Medien (externe HDD im Safe, LTO-Band) bleiben sicher, weil sie physisch getrennt sind.
**Realitäts-Check:** Die meisten Datenverluste entstehen durch menschliche Fehler (versehentliches Löschen), nicht Hardware-Ausfälle. Versionierte Backups (Time Machine, Borg) schützen auch davor – die gelöschte Datei existiert noch in älteren Snapshots.
---
# Backup-Arten
**Vollständig (Full):**
@@ -4,7 +4,7 @@ theme: gaia
paginate: true
backgroundColor: #fff
header: "Dateiformate, Schnittstellen, Speichermedien & Distributionswege (223015b)"
footer: "Michael Czechowski – HdM Stuttgart"
footer: "Michael Czechowski – HdM Stuttgart – WS 2025/26"
title: Dateiformate, Schnittstellen, Speichermedien & Distributionswege
---
<style>
@@ -92,6 +92,8 @@ section.aufgabe footer {
Digital- und Medienwirtschaft
Hochschule der Medien Stuttgart
**Wintersemester 2025/26**
[https://librete.ch/hdm/223015b/](https://librete.ch/hdm/223015b/)
---
@@ -208,13 +210,13 @@ VERGLEICH: SSD ~$50/TB, HDD ~$15/TB, LTO ~$5/TB
### Distribution: physisch (Kauf, Verleih, Kopie)
- **Text**
- Bücher, Zeitungen, Zeitschriften, Lochkarten
- Bücher, Zeitungen, Zeitschriften, Lochkarten
- **Bild**
- Fotografie (Negativ, Dia, Polaroid), Mikrofilm
- Fotografie (Negativ, Dia, Polaroid), Mikrofilm
- **Audio:**
- Schallplatte (Vinyl, Schellack), Tonband, Musikkassette
- Schallplatte (Vinyl, Schellack), Tonband, Musikkassette
- **Video:**
- Film (35mm, Super 8), VHS, Betamax
- Film (35mm, Super 8), VHS, Betamax
---
@@ -227,13 +229,13 @@ VERGLEICH: SSD ~$50/TB, HDD ~$15/TB, LTO ~$5/TB
### Distribution: Datenträger (CD, USB), Download, Streaming, P2P
- **Text**
- E-Book (PDF, EPUB), Dokumente (TXT, DOCX)
- E-Book (PDF, EPUB), Dokumente (TXT, DOCX)
- **Bild**
- Digitalfoto (JPEG, PNG, RAW, WebP, GIF)
- Digitalfoto (JPEG, PNG, RAW, WebP, GIF)
- **Audio**
- Audiodatei (MP3, FLAC, WAV, AAC, OGG)
- Audiodatei (MP3, FLAC, WAV, AAC, OGG)
- **Video**
- Videodatei (MP4, MKV, AVI, WebM)
- Videodatei (MP4, MKV, AVI, WebM)
---
@@ -245,13 +247,13 @@ VERGLEICH: SSD ~$50/TB, HDD ~$15/TB, LTO ~$5/TB
# Digitale Speichermedien
- **Optische Speicher**
- CD, DVD, Blu-ray
- CD, DVD, Blu-ray
- **Magnetische Speicher**
- Festplatte (HDD), Magnetband (LTO)
- Festplatte (HDD), Magnetband (LTO)
- **Flash-Speicher**
- SSD, USB-Stick, SD-Karte
- SSD, USB-Stick, SD-Karte
- **Cloud-Speicher**
- Dropbox, Google Drive, iCloud, AWS S3
- Dropbox, Google Drive, iCloud, AWS S3
---
@@ -277,14 +279,12 @@ Breite × Höhe × Farbtiefe (in Bytes)
| 32 | 16,7 Mio. + Alpha | Transparenz |
<!--
BERECHNUNG: Breite × Höhe × (Farbtiefe / 8)
BEISPIEL: 1920×1080 × 24 Bit = 1920×1080×3 = 6.220.800 Bytes ≈ 6,2 MB
Farbtiefe erklärt:
- 1 Bit: 2^1 = 2 Farben
- 8 Bit: 2^8 = 256 Farben
- 24 Bit: 2^24 = 16.777.216 Farben (je 8 Bit für R, G, B)
- 32 Bit: 24 Bit + 8 Bit Alpha-Kanal
KLAUSURRELEVANT:
- Formel: Breite × Höhe × (Farbtiefe / 8) = Bytes
- Beispielrechnung: 1920 × 1080 × 3 = 6.220.800 Bytes ≈ 6,2 MB
- Farbtiefe: 2^n Farben bei n Bit
- 24 Bit = 8 Bit pro Kanal (R, G, B)
- 32 Bit = 24 Bit + 8 Bit Alpha (Transparenz)
-->
@@ -306,17 +306,15 @@ Farbtiefe erklärt:
<circle cx="50" cy="50" r="40" fill="#ff0000"/>
```
<small>SVG beschreibt nicht jeden einzelnen Pixel im Raster, sondern deklariert wie Farben und Formen gesetzt werden.</small>
<small>SVG beschreibt WAS gezeichnet werden soll, nicht WIE jeder Pixel aussieht.</small>
<!--
Vektorgrafiken beschreiben WAS gezeichnet werden soll.
Rastergrafiken beschreiben WIE jeder Pixel aussieht.
Rendering-Pipeline:
Vektordaten → Rasterisierung → Framebuffer → Display
Beim Skalieren werden einfach die Koordinaten multipliziert.
Keine Information geht verloren.
KLAUSURRELEVANT:
- Vektor = Beschreibung (deklarativ)
- Raster = Pixel für Pixel (imperativ)
- Rendering-Pipeline: Vektordaten → Rasterisierung → Display
- Skalierung = Koordinaten multiplizieren → keine Information geht verloren
- SVG = Scalable Vector Graphics (Web-Standard)
-->
@@ -334,18 +332,17 @@ Keine Information geht verloren.
- Niedrige Frequenzen besser als hohe
**JPEG nutzt das aus:**
- Farbauflösung reduzieren (aber Helligkeit behalten)
- Farbauflösung reduzieren (Helligkeit behalten)
- Glatte Flächen effizient speichern
- Hohe Frequenzen (Details) verwerfen
- Hohe Frequenzen (feine Details) verwerfen
<!--
Das ist die visuelle Entsprechung zur Psychoakustik.
Das Auge hat mehr Rezeptoren für Helligkeit (Stäbchen)
als für Farbe (Zapfen).
Hohe Frequenzen = schnelle Wechsel = feine Details
Niedrige Frequenzen = langsame Wechsel = große Flächen
KLAUSURRELEVANT:
- Mehr Stäbchen (Helligkeit) als Zapfen (Farbe) im Auge
- "Frequenz" = räumliche Frequenz = wie schnell ändert sich Helligkeit?
- Niedrig = langsame Änderung = große gleichmäßige Fläche
- Hoch = schnelle Änderung = feine Details, Kanten
- Analogie zur Psychoakustik bei MP3 (letztes Mal)
-->
@@ -357,24 +354,25 @@ Niedrige Frequenzen = langsame Wechsel = große Flächen
![bg right:20%](./assets/Barn-yuv.png)
# JPEG: Schritt 1 – Farbraumkonversion
# JPEG Schritt 1: Farbraumkonversion
**RGB → Y'CbCr** (seltener Y'UV)
**RGB → Y'CbCr**
- **Y** = Helligkeit (Luminanz) – Was das Auge am besten sieht
- **Y** = Helligkeit (Luminanz)
- **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.
**Warum?**
Y (Helligkeit) behält volle Auflösung
Cb/Cr (Farbe) kann reduziert werden
<!--
YCbCr ist wie RGB ein Tripel aus 3 Werten pro Pixel.
Der Unterschied: Statt Rot-Grün-Blau speichern wir Helligkeit + 2 Farbdifferenzen.
Die Umrechnung ist reversibel (mathematische Transformation).
Der Clou: Jetzt können wir Helligkeit und Farbe getrennt behandeln.
KLAUSURRELEVANT:
- YCbCr = auch 3 Werte pro Pixel, aber anders organisiert
- Statt R-G-B: Helligkeit + 2 Farbdifferenzen
- Umrechnung ist reversibel (mathematische Transformation)
- Vorteil: Helligkeit und Farbe getrennt behandelbar
- Bild zeigt: Y (oben), Cb (Mitte), Cr (unten)
-->
@@ -384,14 +382,14 @@ Der Clou: Jetzt können wir Helligkeit und Farbe getrennt behandeln.
<!-- _footer: "" -->
# JPEG: Schritt 6 – Huffman-Coding
# 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.
**Idee:** Variable Bitlänge statt fester 8 Bit
Häufige Werte → kurze Codes
| Zeichen | Häufigkeit | Code (Bit-Sequenz) |
| Zeichen | Häufigkeit | Code |
|---------|------------|------|
| e | 40% | `0` (1 Bit) |
| a | 25% | `10` (2 Bit) |
@@ -400,9 +398,74 @@ Häufige Werte bekommen kurze Bit-Sequenzen.
| u | 5% | `1111` (4 Bit) |
<!--
Huffman-Coding ist verlustfrei.
Der "Code" ist eine Bit-Sequenz, die das Zeichen eindeutig identifiziert.
Weil "e" am häufigsten vorkommt, bekommt es den kürzesten Code.
KLAUSURRELEVANT:
- Huffman = verlustfrei, optimal für bekannte Häufigkeiten
- Präfix-frei: Kein Code ist Anfang eines anderen
- Häufigstes Zeichen = kürzester Code
- Auch in ZIP, PNG, MP3 verwendet
-->
---
<!-- _header: "" -->
<!-- _footer: "" -->
<!--
# Huffman-Coding: Beispiel
**Originaltext:** `ABRACADABRA` (11 Zeichen × 8 Bit = 88 Bit)
**Häufigkeitsanalyse:**
A=5, B=2, R=2, C=1, D=1
**Huffman-Baum → Codes:**
| Zeichen | Häufigkeit | Code |
|---------|------------|------|
| A | 5 | `0` |
| B | 2 | `10` |
| R | 2 | `110` |
| C | 1 | `1110` |
| D | 1 | `1111` |
**Codiert:** `0 10 110 0 1110 0 1111 0 10 110 0` = **23 Bit**
**Kompression:** 88 → 23 Bit = **74% gespart**
- Beispiel Schritt für Schritt durchrechnen
- Warum funktioniert's? A kommt 5× vor, bekommt kürzesten Code
- Präfix-Eigenschaft: Kein Code ist Anfang eines anderen → eindeutig dekodierbar
- Frage: "Was passiert, wenn alle Zeichen gleich häufig sind?" → Keine Ersparnis
- In JPEG: Nicht Buchstaben, sondern DCT-Koeffizienten werden so codiert
-->
---
<!-- _header: "" -->
<!-- _footer: "" -->
# WebP & AVIF: Moderne Alternativen
**WebP (Google, 2010):**
- Lossy und Lossless
- Transparenz und Animationen
- 25–35% kleiner als JPEG
**AVIF (2019):**
- Basiert auf AV1-Video-Codec
- 50% kleiner als JPEG
- HDR-Unterstützung, patent-frei
**Browser-Support 2025:** WebP universell, AVIF wächst
<!--
KLAUSURRELEVANT:
- WebP: VP8-Kompression (Google Video-Codec)
- AVIF: Alliance for Open Media (Google, Netflix, Amazon, Apple, Mozilla)
- Beide besser als JPEG, aber Kompatibilität bleibt Problem
- JPEG bleibt dominant: alte Kameras, Software, Workflows
-->
@@ -414,28 +477,22 @@ Weil "e" am häufigsten vorkommt, bekommt es den kürzesten Code.
# Container und Codec
**Container = Das Dateiformat (Beispiel: MP4)**
**Container = Dateiformat (z.B. MP4)**
Die "Box", die verschiedene Streams zusammenpackt:
- Video-Stream
- Audio-Stream(s)
- Untertitel
- Metadaten
**Codec = Der Kompressionsalgorithmus (Beispiel: AV1)**
Entscheidet, WIE komprimiert wird.
**Codec = Kompressionsalgorithmus (z.B. H.264)**
Bestimmt, WIE komprimiert wird
<!--
Container ≠ Codec
Das ist ein häufiges Missverständnis.
MP4 ist ein Container, nicht ein Codec.
Ein MP4 kann H.264, H.265 oder AV1 enthalten.
Übrigens: JPEG ist ein Codec (für Bilder), kein Container.
Bei Bildern fallen Container und Codec oft zusammen.
Tools wie MediaInfo zeigen beide Informationen.
KLAUSURRELEVANT:
- Container ≠ Codec (häufiges Missverständnis!)
- MP4 kann H.264, H.265 oder AV1 enthalten
- Gleiche Endung, unterschiedlicher Inhalt
- Tool-Tipp: MediaInfo zeigt beides an
-->
@@ -451,19 +508,19 @@ Tools wie MediaInfo zeigen beide Informationen.
**Warum dominant?**
- Exzellente Kompression (~100:1 möglich)
- Hardware-Support in jedem Gerät seit ~2010
- Hardware-Decoder 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)
- Deblocking-Filter (reduziert Artefakte)
<!--
H.264 revolutionierte Video-Streaming.
Ohne H.264 kein Netflix, kein YouTube in HD.
Hardware-Decoder bedeutet: Kein CPU-Aufwand, kein Akku-Drain.
Selbst billige Smartphones können H.264 abspielen.
KLAUSURRELEVANT:
- H.264 revolutionierte Video-Streaming
- Ohne H.264 kein Netflix, kein YouTube HD
- Hardware-Decoder = kein CPU-Aufwand, kein Akku-Drain
- Selbst billigste Smartphones können H.264 abspielen
-->
@@ -486,17 +543,16 @@ Google, Netflix, Amazon, Microsoft, Apple, Mozilla...
- 8K, HDR, hohe Frame-Rates
**Stand 2025:**
YouTube und Netflix nutzen AV1 für 4K/8K
YouTube, Netflix nutzen AV1 für 4K/8K
Hardware-Encoder in aktuellen GPUs
<!--
AOM = Alliance for Open Media, gegründet 2015.
Historisch: Konkurrierende Tech-Giganten vereint.
Das Ziel: Nie wieder Patent-Chaos wie bei H.265.
Problem: Encoding ist sehr langsam (10-100× vs. H.264).
Hardware-Encoder lösen das zunehmend.
KLAUSURRELEVANT:
- AOM gegründet 2015 – historisch: Konkurrenten vereint
- Ziel: Nie wieder Patent-Chaos wie bei H.265
- Problem: Encoding sehr langsam (10–100× vs. H.264)
- Hardware-Encoder lösen das zunehmend
- AV1 gewann 2024 einen Emmy für technische Innovation
-->
+977
View File
@@ -0,0 +1,977 @@
---
marp: true
theme: gaia
paginate: true
backgroundColor: #fff
header: ""
footer: ""
title: "Fragenkatalog – Dateiformate (223015b)"
---
<style>
:root {
--color-foreground: #1a1a2e;
--color-highlight: #1e5f8a;
--color-dimmed: #4a4a6a;
}
section.invert {
--color-foreground: #fff;
}
section {
font-size: 1.325rem;
}
h1 {
color: #1e5f8a;
}
section.invert h1 {
color: #fff;
}
h2 {
color: #1f2937; /* dark gray, almost black */
}
pre {
background: #0f0f23;
border-radius: 8px;
}
pre code {
background: transparent;
color: inherit;
}
a {
color: var(--color-highlight);
}
section.disable {
opacity: 0.3;
}
</style>
# Klausurfragen – 223015b
**Dateiformate, Schnittstellen, Speichermedien · HdM Stuttgart · M. Czechowski**
<small>Stand: 01.02.2026</small>
---
> **Legende – Moodle XML-Typen:**
> `[MC]` = `multichoice` (einzelne Auswahl)
> `[MM]` = `multichoice` + `<single>false</single>` (Mehrfachauswahl)
> `[MATCH]` = `matching` (Zuordnung)
> `[ORDER]` = `ordering` (Reihenfolge)
> `[ESSAY]` = `essay` (Freitext, manuell bewertet)
> `[SHORTANS]` = `shortanswer` (Stichwort/Satz, automatisch geprüft)
> `[NUMERIC]` = `numerical` (Zahlenwert ± Toleranz)
> `[CLOZE]` = `cloze` (Lückentext, gemischt)`
---
<!-- _class: lead -->
## BLOCK J – Dateiformate: Grundbegriffe
---
<!-- _class: disable -->
### J1 – Was bedeutet „komprimieren"?
**Thema:** Grundbegriffe – Kompression
**Punkte:** 1
**Typ:** `[MC]`
Was bedeutet es, eine Datei zu komprimieren?
- [ ] Die Datei wird auf einem anderen Speichermedium gesichert.
- [x] **Die Dateigröße wird durch Entfernung oder Vereinfachung von Daten reduziert.** ✅
- [ ] Die Datei wird verschlüsselt, damit sie kleiner aussieht.
- [ ] Die Datei wird in ein anderen Format umgewandelt, ohne dass sich die Größe ändert.
> **Feedback:** Kompression = Dateigröße reduzieren. Zwei Familien: verlustfrei (alle Daten bleiben erhalten, z. B. ZIP, PNG) und verlustbehaftet (Daten werden dauerhaft weggeworfen, z. B. JPEG, MP3).
---
### J2 – Verlustfrei vs. verlustbehaftet
**Thema:** Grundbegriffe – Kompressionsprimitiven
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Format zu, ob es verlustfrei oder verlustbehaftet komprimiert.
| Format | Kompressions-Typ |
|---|---|
| JPEG | Verlustbehaftet |
| PNG | Verlustfrei |
| MP3 | Verlustbehaftet |
| ZIP | Verlustfrei |
| FLAC | Verlustfrei |
| WebP (lossy) | Verlustbehaftet |
> **Feedback:** Verlustfrei = Originaldaten perfekt rekonstruierbar (ZIP, PNG, FLAC). Verlustbehaftet = Daten dauerhaft weggeworfen, nicht mehr zurückholbar (JPEG, MP3).
---
### J3 – Verlustfrei vs. verlustbehaftet: Erkläre
**Thema:** Grundbegriffe – Konzept
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre den Unterschied zwischen verlustfreier und verlustbehafteter Kompression. Nenne je ein konkretes Beispiel und erkläre, warum man in unterschiedlichen Situationen unterschiedliche Kompressionstypen wählt.
> **Musterlösung:** Verlustfrei: Alle Originaldaten bleiben erhalten – die Datei kann perfekt rekonstruiert werden (z. B. ZIP, PNG). Verlustbehaftet: Daten werden dauerhaft weggeworfen – die Datei kann nicht mehr perfekt hergestellt werden (z. B. JPEG, MP3). Wahl: Fotos fürs Web → JPEG (verlustbehaftet), weil der Unterschied kaum sichtbar ist und die Datei deutlich kleiner wird. Archivierung oder Grafiken → PNG (verlustfrei), weil Qualitätsverlust inakzeptabel wäre.
---
<!-- _class: disable -->
### J4 – Was bedeutet „skalieren"?
**Thema:** Grundbegriffe – Skalierung
**Punkte:** 1
**Typ:** `[MC]`
Was passiert, wenn ein Rasterbild vergrößert wird?
- [ ] Neue Pixel werden aus dem Dateiformat automatisch geladen.
- [x] **Fehlende Pixel müssen durch Interpolation „erfunden" werden – es entsteht keine neue Information.** ✅
- [ ] Das Bild wird verlustfrei größer, weil Pixel automatisch duplifiziert werden.
- [ ] Die Dateigröße bleibt gleich, nur der Zoom im Betrachter ändert sich.
> **Feedback:** Ein Rasterbild hat eine native Auflösung. Alles darüber hinaus = Schätzung (Interpolation). Deshalb werden vergrößerte Rasterbilder unscharf – es gibt einfach keine Daten für die fehlenden Pixel.
---
<!-- _class: disable -->
### J5 – Was bedeutet „konvertieren"?
**Thema:** Grundbegriffe – Konvertierung
**Punkte:** 1
**Typ:** `[MC]`
Was bedeutet es, eine Datei zu konvertieren?
- [ ] Die Datei wird komprimiert und umbenannt.
- [x] **Die Daten werden von einem Format in ein anderes umgewandelt (z. B. JPEG → PNG, MP4 → WebM).** ✅
- [ ] Die Datei wird verschlüsselt und in ein neues Format gepackt.
- [ ] Die Dateiendung wird umbenannt, ohne dass sich der Inhalt ändert.
> **Feedback:** Konvertierung = Format-Umwandlung. Der Inhalt bleibt inhaltlich gleich, aber die Art der Speicherung (Kompression, Struktur) ändert sich. Wichtig: Eine Dateiendung umzubenennen ist KEINE Konvertierung.
---
<!-- _class: disable -->
### J6 – Was bedeutet „codieren" und „decodieren"?
**Thema:** Grundbegriffe – Codec-Konzept
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre, was „codieren" und „decodieren" bedeuten. Erkläre anschließend, warum der Begriff „Codec" aus beiden Wörtern zusammengesetzt ist, und nenne ein konkretes Beispiel.
> **Musterlösung:** Codieren = Daten in ein bestimmtes Format umwandeln (z. B. Rohvideodaten → H.264-komprimiertes Video). Decodieren = das Gegenteil: komprimierte Daten wieder in abspielbare Form zurückwandeln (z. B. H.264 → Pixeldaten für den Bildschirm). Codec = Co(der) + Dec(oder) – ein Algorithmus, der beides kann. Beispiel: H.264 ist ein Video-Codec: Der Encoder erzeugt die komprimierte Datei, der Decoder im Player spielt sie wieder ab.
---
### J7 – Codec vs. Container
**Thema:** Grundbegriffe – Codec/Container-Unterschied
**Punkte:** 2
**Typ:** `[MC]`
Was ist der Unterschied zwischen einem Container und einem Codec bei Videodateien?
- [ ] Container und Codec sind synonyme Begriffe für das gleiche Konzept.
- [x] **Der Container (z. B. MP4) ist die „Verpackung", die verschiedene Streams zusammenpackt. Der Codec (z. B. H.264) bestimmt, wie der Video-Stream komprimiert wird.** ✅
- [ ] Der Codec ist die Dateiendung, der Container der Kompressionsalgorithmus.
- [ ] Ein Container enthält immer genau einen Codec – es kann keine Kombination geben.
> **Feedback:** Container ≠ Codec. Ein MP4-Container kann H.264, H.265 oder AV1 enthalten. Gleiche Endung `.mp4`, unterschiedlicher Inhalt. Der Container packt zusammen (Video, Audio, Untertitel, Metadaten), der Codec komprimiert.
---
### J8 – Codec vs. Container: Zuordnung
**Thema:** Grundbegriffe – Codec/Container-Zuordnung
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne zu: Container oder Codec?
| Name | Typ |
|---|---|
| MP4 | Container |
| H.264 | Codec |
| WebM | Container |
| AV1 | Codec |
> **Feedback:** Container = Dateiformat, das Streams zusammenpackt (MP4, MKV, WebM). Codec = Kompressionsalgorithmus für einen bestimmten Stream (H.264, AV1, AAC).
---
<!-- _class: disable -->
### J9 – Redundanz vs. Irrelevanz
**Thema:** Grundbegriffe – Kompressionsprinzipien
**Punkte:** 2
**Typ:** `[MATCH]`
Verlustfreie und verlustbehaftete Kompression arbeiten nach unterschiedlichen Prinzipien. Ordne zu.
| Prinzip | Kompressionstyp |
|---|---|
| Redundanz entfernen (wiederholende Muster kompakter darstellen) | Verlustfrei |
| Irrelevanz entfernen (für Menschen nicht wahrnehmbar) | Verlustbehaftet |
> **Feedback:** Der Kernunterschied: Verlustfrei arbeitet mit Redundanz – Wiederholungen werden kompakter gespeichert, aber nichts geht verloren. Verlustbehaftet arbeitet mit Irrelevanz – Daten werden weggeworfen, die Menschen sowieso nicht wahrnehmen können (Psychovisuell bei Bildern, Psychoakustisch bei Audio).
---
### J10 – Dateneinheiten: Größenordnungen
**Thema:** Grundbegriffe – Speichereinheiten
**Punkte:** 2
**Typ:** `[ORDER]`
Sortiere die Dateneinheiten von kleinster zu größter:
1. Byte
2. Kilobyte (KB)
3. Megabyte (MB)
4. Gigabyte (GB)
5. Terabyte (TB)
6. Petabyte (PB)
> **Feedback:** Jede Stufe = Faktor 1.000 (SI-Präfixe). Merkhilfe: „Komm Mit Großem Tee, Peter". Ein einzelnes Foto (12 MP, unkomprimiert) ≈ 36 MB. Ein FullHD-Kinofilm ≈ 1 GB. Ein 4K-Film pro Minute unkomprimiert ≈ 44 GB.
---
<!-- _class: disable -->
### J11 – Bit und Byte: Umrechnung
**Thema:** Grundbegriffe – Bit/Byte-Verhältnis
**Punkte:** 1
**Typ:** `[NUMERIC]`
Ein Bit ist die kleinste Informationseinheit. Ein Byte besteht aus wie vielen Bit?
**Lösung:** **8** (±0)
> **Feedback:** 1 Byte = 8 Bit. Ein Byte kann einen Wert von 0 bis 255 darstellen (2⁸ − 1). Die Unterscheidung Bit/Byte ist fundamental – Bit wird mit kleinem „b" abgekürzt (b), Byte mit großem „B" (B). Deshalb: 1 Mbit/s ≠ 1 MB/s.
---
<!-- _class: disable -->
### J12 – 7-Bit ASCII: Wie viele Zeichen?
**Thema:** Grundbegriffe – ASCII-Zeichenkodierung
**Punkte:** 1
**Typ:** `[NUMERIC]`
Der ASCII-Standard verwendet 7 Bit pro Zeichen. Wie viele verschiedene Zeichen können damit dargestellt werden?
**Lösung:** **128** (±0)
> **Feedback:** Bei n Bit gibt es 2ⁿ mögliche Werte. 7 Bit → 2⁷ = 128 Zeichen. Diese umfassen: Ziffern (0–9), Buchstaben (A–Z, a–z), Sonderzeichen und Steuerzeichen. Achtung: Umlaute (ä, ö, ü) sind nicht im ASCII-Sortiment – dafür braucht man z. B. UTF-8.
---
<!-- _class: disable -->
### J13 – Hexadezimalzahlen: Zwei 4-Bit-Werte
**Thema:** Grundbegriffe – Hexadezimal
**Punkte:** 2
**Typ:** `[NUMERIC]`
Zwei Hexadezimalzahlen werden jeweils durch 4 Bit dargestellt. Wie viele verschiedene Werte kann eine einzelne Hexadezimalziffer annehmen?
**Lösung:** **16** (±0)
> **Feedback:** 4 Bit → 2⁴ = 16 Werte (0–15). Diese werden in Hexadezimal als 0–9 und A–F dargestellt. Zwei Hex-Ziffern zusammen = 8 Bit = 1 Byte → ein Byte lässt sich immer als genau zwei Hex-Ziffern schreiben (z. B. Byte 255 = FF, Byte 10 = 0A).
---
<!-- _class: disable -->
### J14 – Ein Pixel, drei Kanäle, 8 Bit
**Thema:** Grundbegriffe – Speicherbedarf eines Pixels
**Punkte:** 1
**Typ:** `[NUMERIC]`
Ein einzelner Pixel wird durch drei Farbkanäle (R, G, B) mit jeweils 8 Bit Farbtiefe gespeichert. Wie viele Byte Informationen enthalten ein solcher Pixel?
**Lösung:** **3** (±0)
> **Feedback:** 3 Kanäle × 8 Bit = 24 Bit = 3 Byte pro Pixel. Das entspricht einer 24-Bit-Farbtiefe (True Color). Diese 3 Byte pro Pixel bilden die Basis für jede Speicherberechnung von Rasterbildern: Breite × Höhe × 3 Bytes = Gesamtgröße unkomprimiert.
---
<!-- _class: lead -->
## BLOCK K – Bildformate & Raster vs. Vektor
---
### K1 – Was ist ein Pixel?
**Thema:** Digitale Bilder – Grundbegriffe
**Punkte:** 1
**Typ:** `[MC]`
Was ist ein Pixel in einem digitalen Bild?
- [ ] Ein winziges physisches Kameraobjektiv.
- [x] **Ein einzelner Farbpunkt in einem Rasterbild – der kleinste Baustein.** ✅
- [ ] Eine Einheit zur Messung der Dateigröße.
- [ ] Ein Synonym für eine Farbe im RGB-Farbraum.
> **Feedback:** Pixel = Picture Element. Ein digitales Rasterbild ist ein 2D-Array aus Pixeln, jeder mit einem Farbwert (z. B. RGB).
---
### K2 – Speicherbedarf berechnen
**Thema:** Rastergrafiken – Berechnung
**Punkte:** 2
**Typ:** `[NUMERIC]`
Ein Bild ist 1920 × 1080 Pixel groß und nutzt 24-Bit-Farbtiefe (True Color). Wie groß ist das Bild unkomprimiert in Megabyte? (Runde auf eine Dezimalstelle)
**Formel:** Breite × Höhe × (Farbtiefe / 8) = Bytes
**Lösung:** 1920 × 1080 × 3 = 6.220.800 Bytes ≈ **6,2 MB** (±0,1)
> **Feedback:** 24 Bit = 3 Bytes pro Pixel (8 Bit pro Kanal: R, G, B). 1920 × 1080 = 2.073.600 Pixel × 3 Bytes = 6.220.800 Bytes. Durch 1.000.000 ≈ 6,2 MB.
---
### K3 – Farbtiefe: Bedeutung
**Thema:** Rastergrafiken – Farbtiefe
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jeder Farbtiefe ihre Bedeutung zu.
| Farbtiefe | Bedeutung |
|---|---|
| 1 Bit | 2 Farben (Schwarz/Weiß) |
| 8 Bit | 256 Farben (Graustufen, GIF) |
| 24 Bit | 16,7 Millionen Farben (True Color, Standard) |
| 32 Bit | 16,7 Millionen Farben + Alpha (Transparenz) |
> **Feedback:** Bei n Bit gibt es 2ⁿ mögliche Werte. 24 Bit = 8 Bit pro Kanal (R, G, B). 32 Bit = 24 Bit Farbe + 8 Bit Alpha-Kanal für Transparenz.
---
### K4 – Was ist Alpha-Transparenz?
**Thema:** Rastergrafiken – Transparenz
**Punkte:** 1
**Typ:** `[MC]`
Was bedeutet ein 32-Bit-Bild gegenüber einem 24-Bit-Bild?
- [ ] Es hat doppelt so viele Pixel.
- [x] **Es hat einen zusätzlichen Alpha-Kanal (8 Bit), der die Transparenz jedes Pixels speichert.** ✅
- [ ] Es nutzt eine höhere Auflösung.
- [ ] Es kann mehr Dateiformate speichern.
> **Feedback:** 32 Bit = 24 Bit (RGB) + 8 Bit Alpha. Der Alpha-Kanal bestimmt, wie durchsichtig jeder Pixel ist (0 = vollständig transparent, 255 = vollständig undurchsichtig). Wichtig für PNGs mit Hintergrund-Transparenz.
---
### K5 – Raster vs. Vektor: Kern-Unterschied
**Thema:** Raster vs. Vektor – Konzept
**Punkte:** 2
**Typ:** `[MC]`
Was ist der fundamentale Unterschied zwischen Raster- und Vektorgrafiken?
- [ ] Vektorgrafiken sind immer farbiger als Rastergrafiken.
- [x] **Rastergrafiken speichern einzelne Pixel; Vektorgrafiken speichern geometrische Beschreibungen (Pfade, Formen), die beliebig skaliert werden können.** ✅
- [ ] Rastergrafiken können keine Farben darstellen, Vektorgrafiken schon.
- [ ] Der Unterschied liegt nur in der Dateiendung, nicht im Inhalt.
> **Feedback:** Raster = „Malen nach Zahlen" (jeder Pixel einzeln). Vektor = „Bauanleitung" (Formen beschreiben). Diese Unterschied bestimmt alles: Skalierung, Dateigröße, Einsatzbereich.
---
### K6 – Raster vs. Vektor: Vergleich
**Thema:** Raster vs. Vektor – Eigenschaften zuordnen
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jeder Eigenschaft zu: Raster oder Vektor?
| Eigenschaft | Typ |
|---|---|
| Skalierung ohne Qualitätsverlust | Vektor |
| Ideal für Fotos | Raster |
| Dateigröße abhängig von der Auflösung | Raster |
| Ideal für Logos und Icons | Vektor |
| Speicherung als 2D-Array von Pixeln | Raster |
| Dateigröße abhängig von der Komplexität | Vektor |
> **Feedback:** Raster = Pixel-basiert, auflösungsabhängig, ideal für Fotos. Vektor = Beschreibungs-basiert, beliebig skalierbar, ideal für Grafiken/Logos.
---
### K7 – Skalierung: Warum werden Rasterbilder unscharf?
**Thema:** Rastergrafiken – Skalierung Transfer
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre, warum ein Rasterbild beim Vergrößern unscharf wird, während ein Vektorbild bei beliebiger Größe scharf bleibt. Nenne einen konkreten Anwendungsfall, in dem diese Eigenschaft ausschlaggebend ist.
> **Musterlösung:** Ein Rasterbild hat eine feste Auflösung (eine bestimmte Anzahl von Pixeln). Beim Vergrößern müssen neue Pixel „erfunden" werden (Interpolation) – es gibt keine echten Daten für die fehlenden Stellen → Unschärfe. Ein Vektorbild speichert nur Beschreibungen (Pfade, Formen). Beim Vergrößern werden einfach die Koordinaten skaliert – keine Information geht verloren → immer scharf. Anwendungsfall: Ein Logo auf einer Visitenkarte UND auf einem Plakat → SVG nutzen, damit es bei beliebiger Größe scharf bleibt.
---
<!-- _class: disable -->
### K8 – Vektor → Raster: Wie heißt das?
**Thema:** Raster vs. Vektor – Konvertierung
**Punkte:** 1
**Typ:** `[MC]`
Wie heißt der Prozess, bei dem eine Vektorgrafik in eine Rastergrafik umgewandelt wird?
- [ ] Vektorisierung
- [x] **Rasterisierung** ✅
- [ ] Pixelierung
- [ ] Komprimierung
> **Feedback:** Rasterisierung = Vektor → Raster (trivial, immer möglich). Der umgekehrte Prozess (Raster → Vektor) heißt „Tracing" und funktioniert oft nur unbefriedigend.
---
<!-- _class: disable -->
### K9 – Interpolation: Welches Verfahren wofür?
**Thema:** Rastergrafiken – Interpolationsverfahren
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Interpolationsverfahren seine Eigenschaft zu.
| Verfahren | Eigenschaft |
|---|---|
| Nearest Neighbor | Schnell, pixelig – gut für Pixel-Art |
| Bilinear | Glättet, Standard-Verfahren |
| Bicubic | Hohe Qualität, rechenintensiver |
| Lanczos | Beste Qualität, mathematisch komplex |
> **Feedback:** Bei der Wahl: Pixel-Art → Nearest Neighbor (soll pixelig bleiben). Normale Bilder → Bilinear oder Bicubic. Maximale Qualität bei Fotos → Lanczos.
---
<!-- _class: lead -->
## BLOCK L – JPEG: Innenleben
---
<!-- _class: disable -->
### L1 – JPEG: Verlustfrei oder verlustbehaftet?
**Thema:** JPEG – Grundeigenschaft
**Punkte:** 1
**Typ:** `[MC]`
JPEG ist ein …
- [x] **…verlustbehaftetes Bildformat. Beim Speichern werden Daten dauerhaft weggeworfen.** ✅
- [ ] …verlustfreies Bildformat wie PNG.
- [ ] …Videoformat für Streaming.
- [ ] …Vektorgrafik-Format.
> **Feedback:** JPEG = Joint Photographic Experts Group. Verlustbehaftet: Beim Speichern werden Daten dauerhaft weggeworfen – eine gespeicherte JPEG kann nicht perfekt zum Original zurückgeführt werden. Quality 100 ≠ verlustfrei, nur „wenig wegwerfen".
---
### L2 – Psychovisuelle Kompression: Das Auge austricksen
**Thema:** JPEG – Wahrnehmungsprinzip
**Punkte:** 2
**Typ:** `[MC]`
Wie nutzt JPEG die Schwächen des menschlichen Auges aus?
- [ ] Das Auge kann keine Farben wahrnehmen – daher werden Farben komplett entfernt.
- [x] **Das Auge sieht Helligkeit besser als Farbe. JPEG behält die Helligkeit (Y) nahezu vollständig, reduziert aber die Farbauflösung (Cb, Cr) – der Verlust wird kaum wahrgenommen.** ✅
- [ ] Das Auge kann keine Details sehen – daher werden alle Details entfernt.
- [ ] JPEG nutzt keine Wahrnehmungsforschung, komprimiert rein mathematisch.
> **Feedback:** Psychovisuelle Kompression = Schwächen des Auges ausnutzen. Kern: Mehr Stäbchen (Helligkeit) als Zapfen (Farbe) im Auge → Helligkeit sichern, Farbe reduzieren. Der Verlust ist für Menschen kaum sichtbar.
---
### L3 – Farbraumkonversion: RGB → YCbCr
**Thema:** JPEG Schritt 1 – Farbraum
**Punkte:** 2
**Typ:** `[MC]`
Warum wird bei JPEG von RGB in YCbCr konvertiert?
- [ ] YCbCr nutzt weniger Speicher pro Pixel als RGB.
- [x] **In YCbCr sind Helligkeit (Y) und Farbe (Cb, Cr) getrennt – die Farbauflösung kann unabhängig von der Helligkeit reduziert werden.** ✅
- [ ] RGB kann keine Transparenz darstellen, YCbCr schon.
- [ ] Die Konvertierung ist ein verlustfreier Schritt, der die Dateigröße halbiert.
> **Feedback:** Y = Helligkeit (Luminanz), Cb/Cr = Farbdifferenzen (Chrominanz). Diese Trennung ermöglicht Chroma Subsampling: Helligkeit voll behalten, Farbe reduzieren – ohne sichtbaren Verlust.
---
<!-- _class: disable -->
### L4 – Chroma Subsampling: Was ist 4:2:0?
**Thema:** JPEG Schritt 2 – Subsampling
**Punkte:** 2
**Typ:** `[MC]`
Was bedeutet das Subsampling-Schema 4:2:0?
- [ ] 4 Pixel teilen sich eine Helligkeit, aber jeder hat eigene Farbe.
- [x] **4 Pixel teilen sich einen Farbwert (Chrominanz), aber jeder hat eine eigene Helligkeit (Luminanz). Die Farbauflösung wird auf 25% reduziert.** ✅
- [ ] 4:2:0 bedeutet, dass keine Farbe gespeichert wird – nur Graustufen.
- [ ] Die Notation beschreibt die Blockgröße, nicht die Farbauflösung.
> **Feedback:** 4:2:0 = JPEG-Standard. Von 4 Pixeln wird nur 1 Farbwert gespeichert (2×2-Block teilt Farbe), aber jeder Pixel behält seine eigene Helligkeit. Ergebnis: 50% Datenreduktion, kaum sichtbar.
---
<!-- _class: disable -->
### L5 – JPEG-Schritte: Richtige Reihenfolge
**Thema:** JPEG – Kompressionsablauf
**Punkte:** 2
**Typ:** `[ORDER]`
Sortiere die Schritte der JPEG-Kompression in der richtigen Reihenfolge:
1. Farbraumkonversion (RGB → YCbCr)
2. Chroma Subsampling
3. Block-Aufteilung (8×8)
4. DCT (Frequenzanalyse)
5. Quantisierung (hier passiert der Verlust!)
6. Huffman-Coding (verlustfrei)
> **Feedback:** Der einzige verlustbehaftete Schritt ist die Quantisierung (Schritt 5). Alles davor bereitet die Daten vor, alles danach komprimiert die Ergebnisse verlustfrei weiter.
---
<!-- _class: disable -->
### L6 – Welcher Schritt ist verlustbehaftet?
**Thema:** JPEG – Verlust lokalisieren
**Punkte:** 1
**Typ:** `[MC]`
Bei welchem Schritt der JPEG-Kompression werden Daten dauerhaft weggeworfen?
- [ ] Farbraumkonversion (RGB → YCbCr)
- [ ] DCT (Discrete Cosine Transform)
- [x] **Quantisierung – hier werden unwichtige Frequenzkoeffizienten auf Null gesetzt oder vergröbert.** ✅
- [ ] Huffman-Coding
> **Feedback:** DCT selbst ist verlustfrei und reversibel – es sortiert nur die Daten nach Wichtigkeit. Die Quantisierung ist der einzige verlustbehaftete Schritt: Sie wirft hohe Frequenzen (feine Details) weg. Huffman-Coding danach ist wieder verlustfrei.
---
<!-- _class: disable -->
### L7 – DCT: Was macht sie?
**Thema:** JPEG – DCT-Prinzip
**Punkte:** 1
**Typ:** `[MC]`
Was leitet die DCT (Discrete Cosine Transform) bei JPEG?
- [ ] Sie komprimiert die Daten verlustbehaftet.
- [x] **Sie wandelt 64 Pixelwerte eines 8×8-Blocks in 64 Frequenzkoeffizienten um – sortiert die Information nach Wichtigkeit (niedrige Frequenz = wichtig, hohe Frequenz = Details).** ✅
- [ ] Sie verschlüsselt die Daten für sichere Übertragung.
- [ ] Sie reduziert die Farbauflösung des Bildes.
> **Feedback:** DCT = Herzstück von JPEG, aber selbst verlustfrei. Sie sortiert: Der DC-Koeffizient (0,0) = Durchschnittshelligkeit eines Blocks. Die AC-Koeffizienten = Helligkeitsänderungen. 90% der Information steckt in den ersten 10–15 Koeffizienten.
---
### L8 – Huffman-Coding: Prinzip
**Thema:** JPEG – Huffman
**Punkte:** 2
**Typ:** `[MC]`
Wie funktioniert Huffman-Coding?
- [ ] Alle Zeichen bekommen gleich lange Codes – einfach und effizient.
- [x] **Häufige Werte bekommen kurze Codes, selten vorkommende lange Codes – variable Bitlänge statt fester 8 Bit.** ✅
- [ ] Huffman-Coding verschlüsselt die Daten zusätzlich.
- [ ] Es funktioniert nur für Texte, nicht für Bilddaten.
> **Feedback:** Huffman = verlustfrei, optimal für bekannte Häufigkeiten. Präfix-frei: Kein Code ist Anfang eines anderen → eindeutig decodierbar. Auch in ZIP, PNG, MP3 verwendet.
---
<!-- _class: disable -->
### L9 – JPEG-Artefakte: Benennen
**Thema:** JPEG – Artefakte identifizieren
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem JPEG-Artefakt seine Beschreibung zu.
| Artefakt | Beschreibung |
|---|---|
| Blocking | 8×8-Blöcke werden sichtbar als Rechteckmuster |
| Ringing | „Geister" oder Halos an scharfen Kanten |
| Posterization | Farbverläufe werden stufig statt fließend |
> **Feedback:** Alle drei sind Folgen der Quantisierung. Blocking: Weil jeder 8×8-Block unabhängig komprimiert wird. Ringing: DCT hat Probleme mit harten Kanten (Gibbs-Phänomen). Posterization: Zu wenige Bits für feine Farbabstufungen.
---
<!-- _class: lead -->
## BLOCK M – Bildformate: PNG, GIF, WebP, SVG
---
<!-- _class: disable -->
### M1 – PNG: Verlustfrei oder verlustbehaftet?
**Thema:** PNG – Grundeigenschaft
**Punkte:** 1
**Typ:** `[MC]`
Wie komprimiert PNG?
- [ ] Verlustbehaftet – wie JPEG, aber mit besserer Qualität.
- [x] **Verlustfrei – die Originaldaten können perfekt rekonstruiert werden.** ✅
- [ ] Gar nicht – PNG speichert Daten unkomprimiert.
- [ ] PNG nutzt eine Kombination aus verlustfrei und verlustbehaftet.
> **Feedback:** PNG nutzt DEFLATE-Kompression (wie ZIP) – verlustfrei. Deshalb ist PNG ideal für Grafiken, Screenshots und Bilder mit Transparenz, aber größer als JPEG für Fotos.
---
<!-- _class: disable -->
### M2 – PNG vs. JPEG: Wann was?
**Thema:** Bildformate – Formatwahl
**Punkte:** 2
**Typ:** `[ESSAY]`
Erklären Sie, wann Sie PNG und wann JPEG wählen würden. Nenne je zwei konkrete Anwendungsfälle und begründen Sie Ihre Wahl.
> **Musterlösung:** PNG: (1) Screenshots – Texte und Linien bleiben scharf, keine Artefakte. (2) Logos mit Transparenz – PNG unterstützt Alpha-Transparenz, JPEG nicht. JPEG: (1) Fotos fürs Web – deutlich kleiner bei kaum sichtbarem Qualitätsverlust. (2) Social Media – Plattformen re-komprimieren sowieso, PNG würde nur unnötig groß sein.
---
<!-- _class: disable -->
### M3 – GIF: Wie viele Farben?
**Thema:** GIF – Eigenschaften
**Punkte:** 1
**Typ:** `[MC]`
Wie viele Farben kann ein GIF-Bild gleichzeitig anzeigen?
- [ ] 16 Farben
- [ ] 16,7 Millionen Farben
- [x] **256 Farben (8-Bit-Palette)** ✅
- [ ] Unbegrenzt – GIF unterstützt alle Farben.
> **Feedback:** GIF = 8-Bit-Palette = 256 Farben maximal. Deshalb sehen GIF-Bilder bei Fotos oft banding/posterisiert aus. GIF überlebt heute wegen Animationen.
---
### M4 – WebP vs. JPEG: Vorteil?
**Thema:** Bildformate – WebP
**Punkte:** 1
**Typ:** `[MC]`
Was ist der hauptsächliche Vorteil von WebP gegenüber JPEG?
- [ ] WebP unterstützt Videos, JPEG nicht.
- [x] **WebP erzeugt bei gleicher Qualität 25–35% kleinere Dateien als JPEG.** ✅
- [ ] WebP ist verlustfrei, JPEG nicht.
- [ ] WebP kann keine Fotos speichern, nur Grafiken.
> **Feedback:** WebP (Google, 2010) kann sowohl lossy als auch lossless komprimieren, unterstützt Transparenz und Animationen. Bei gleicher visueller Qualität sind WebP-Dateien deutlich kleiner als JPEG.
---
<!-- _class: disable -->
### M5 – SVG: Was ist es?
**Thema:** SVG – Grundbegriff
**Punkte:** 1
**Typ:** `[MC]`
Was ist SVG?
- [ ] Ein verlustbehaftetes Rasterbild-Format wie JPEG.
- [x] **Ein Vektorgrafik-Format, das Bilder als geometrische Beschreibungen (XML) speichert – beliebig skalierbar ohne Qualitätsverlust.** ✅
- [ ] Ein Video-Container wie MP4.
- [ ] Ein komprimiertes Archivformat wie ZIP.
> **Feedback:** SVG = Scalable Vector Graphics. Web-Standard für Vektorgrafiken. Beschreibt WAS gezeichnet werden soll (`<circle>`, `<rect>`, `<path>`), nicht wie jeder Pixel aussieht. Ideal für Logos, Icons, Illustrationen.
---
<!-- _class: disable -->
### M6 – Formatwahl: Szenario zuordnen
**Thema:** Bildformate – Formatwahl Transfer
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Szenario das optimale Bildformat zu.
| Szenario | Format |
|---|---|
| Ein Foto für eine Webseite (klein, OK-Qualität) | JPEG |
| Ein Screenshot einer Benutzeroberfläche | PNG |
| Ein Logo, das auf allen Bildschirmgrößen scharf sein muss | SVG |
| Ein animiertes Reaktionsbild für einen Chat | GIF |
> **Feedback:** JPEG = Fotos (klein, lossy OK). PNG = Screenshots, Grafiken mit Transparenz (verlustfrei). SVG = Logos, Icons (skalierbar). GIF = Animationen (256 Farben, aber Animations-Support).
---
<!-- _class: lead -->
## BLOCK N – Video-Kompression
---
<!-- _class: disable -->
### N1 – Spatial vs. Temporal Compression
**Thema:** Video – Kompressionsprinzipien
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Prinzip seine Beschreibung zu.
| Prinzip | Beschreibung |
|---|---|
| Spatial Compression (Intra-Frame) | Komprimiert jedes einzelne Bild für sich (wie JPEG) |
| Temporal Compression (Inter-Frame) | Speichert nur die Änderungen zwischen aufeinanderfolgenden Bildern |
| Motion Compensation | Beschreibt Bewegung durch Vektoren statt Pixel zu kopieren |
> **Feedback:** Spatial = räumlich (innerhalb eines Frames). Temporal = zeitlich (zwischen Frames). Motion Compensation = Bewegungsvektoren. 90% eines Frames ist oft identisch mit dem vorherigen – deshalb ist Temporal-Kompression so wirksam.
---
<!-- _class: disable -->
### N2 – I-Frame, P-Frame, B-Frame: Was ist was?
**Thema:** Video – Frame-Typen
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Frame-Typ seine Beschreibung zu.
| Frame-Typ | Beschreibung |
|---|---|
| I-Frame (Keyframe) | Vollständiges Bild, unabhängig dekodierbar – keine Referenz auf andere Frames |
| P-Frame | Nur Änderungen gegenüber vorherigen Frames speichern (~30% der Größe eines I-Frames) |
| B-Frame | Änderungen gegenüber vorherigen UND zukünftigen Frames (~15% der Größe eines I-Frames) |
> **Feedback:** I = Intra (innerhalb). P = Predicted (aus Vergangenheit). B = Bi-directional (Vergangenheit + Zukunft). B-Frames sind am kleinsten, aber brauchen mehr Rechenleistung zum Decodieren.
---
<!-- _class: disable -->
### N3 – Was passiert, wenn ein I-Frame beschädigt ist?
**Thema:** Video – I-Frame Bedeutung Transfer
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre, warum ein I-Frame bei der Videokompression so wichtig ist. Was passiert, wenn ein einzelner I-Frame in einem Videostream beschädigt wird?
> **Musterlösung:** Ein I-Frame ist ein vollständiges, unabhängig dekodierbare Bild. Alle nachfolgenden P- und B-Frames referenzieren auf vorherige Frames – letztlich auf das letzte I-Frame. Wenn ein I-Frame beschädigt wird, können alle abhängigen P- und B-Frames bis zum nächsten intakten I-Frame nicht mehr korrekt rekonstruiert werden → Videofehler sichtbar bis zum nächsten Keyframe. Deshalb werden typischerweise alle 1–2 Sekunden neue I-Frames eingefügt.
---
<!-- _class: disable -->
### N4 – Motion Compensation: Prinzip
**Thema:** Video – Motion Compensation
**Punkte:** 1
**Typ:** `[MC]`
Was beschreibt ein Motion Vector bei der Videokompression?
- [ ] Die Helligkeit eines einzelnen Pixels.
- [x] **Die Verschiebung eines Bildblocks zwischen zwei Frames (z. B. „verschiebe um +20 Pixel nach rechts").** ✅
- [ ] Die Kompressionsrate des gesamten Videos.
- [ ] Die Anzahl der Farben in einem Frame.
> **Feedback:** Motion Compensation speichert Bewegung als Vektoren statt Pixel zu kopieren. Wenn sich ein 16×16-Block von (100,200) auf (120,200) bewegt, wird nur „+20, 0" gespeichert – deutlich kleiner als den Block zweimal zu speichern.
---
<!-- _class: disable -->
### N5 – Video-Codecs: Zeitstrahl
**Thema:** Video – Codecs-Übersicht
**Punkte:** 2
**Typ:** `[ORDER]`
Sortiere die Video-Codecs nach Veröffentlichungsjahr (alt → neu):
1. H.264 / AVC (2003)
2. H.265 / HEVC (2013)
3. VP9 (2013)
4. AV1 (2018)
> **Feedback:** H.264 revolutionierte Streaming. H.265 und VP9 kamen gleichzeitig – H.265 technisch besser, aber Patent-Chaos. AV1 vereint die Industrie: patent-frei, 30% besser als H.265.
---
### N6 – AV1: Warum die Zukunft?
**Thema:** Video – AV1 Transfer
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre, warum AV1 als „die Zukunft" der Videokompression gilt. Nenne mindestens zwei konkrete Eigenschaften und erkläre, warum H.265 trotz besserer technischer Kompression nicht die gleiche Dominanz erreicht hat.
> **Musterlösung:** AV1 (2018) ist royalty-free und open source – die Alliance for Open Media vereint Google, Netflix, Amazon, Apple, Mozilla. Es liefert 30% bessere Kompression als H.265 und unterstützt 8K, HDR, hohe Frame-Rates. H.265 scheitert vor allem am Patent-Chaos: Drei konkurrierende Patent-Pools (MPEG-LA, HEVC Advance, Velos Media) erzeugen rechtliche Unsicherheit und unklare Kosten → viele Unternehmen bleiben bei H.264 oder wechseln direkt zu AV1.
---
<!-- _class: lead -->
## BLOCK O – Speichermedien & Schnittstellen
---
<!-- _class: disable -->
### O1 – KB vs. KiB: Was ist der Unterschied?
**Thema:** Speicher – Einheiten
**Punkte:** 2
**Typ:** `[MC]`
Eine Festplatte wird als „1 TB" vermarktet, aber Windows zeigt nur ~931 GB an. Warum?
- [ ] Windows zeigt falsche Werte an – das ist ein Bug.
- [x] **Hersteller nutzen dezimale Einheiten (1 TB = 1.000 GB), Windows nutzt binäre Einheiten (1 TiB = 1.024 GiB). Bei TB-Größen entsteht eine ~7% Diskrepanz.** ✅
- [ ] Die Festplatte verliert beim Formatieren fast 10% ihrer Kapazität.
- [ ] Windows reserviert automatisch 10% als Sicherheitspuffer.
> **Feedback:** SI (Dezimal): 1 KB = 1.000 Bytes, 1 MB = 1.000 KB. IEC (Binär): 1 KiB = 1.024 Bytes, 1 MiB = 1.024 KiB. Bei 1 TB: 1.000⁴ vs. 1.024⁴ Bytes → ~7% Unterschied. Windows zeigt binäre Werte an, aber mit SI-Bezeichnung (GB statt GiB) → Verwirrung.
---
### O2 – HDD vs. SSD: Kern-Unterschied
**Thema:** Speichermedien – HDD vs. SSD
**Punkte:** 1
**Typ:** `[MC]`
Was ist der fundamentale technische Unterschied zwischen HDD und SSD?
- [ ] HDDs sind elektronisch, SSDs mechanisch.
- [x] **HDDs speichern Daten magnetisch auf sich drehenden Plattern (mechanisch). SSDs nutzen Flash-Speicher (elektronisch, keine beweglichen Teile).** ✅
- [ ] Beide Technologien funktionieren identisch, der Unterschied liegt nur im Gehäuse.
- [ ] HDDs nutzen Flash-Speicher, SSDs magnetische Platten.
> **Feedback:** HDD = Hard Disk Drive = mechanisch (Platter, Spindel, Schreib-Lese-Kopf). SSD = Solid State Drive = elektronisch (Flash-Speicher). Diese Unterschied bestimmt alles: Geschwindigkeit, Latenz, Geräusche, Haltbarkeit.
---
### O3 – HDD vs. SSD: Eigenschaften zuordnen
**Thema:** Speichermedien – Vergleich
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jeder Eigenschaft zu: HDD oder SSD?
| Eigenschaft | Typ |
|---|---|
| Sequentielle Lesgeschwindigkeit ~150 MB/s | HDD |
| Sequentielle Lesgeschwindigkeit ~3.500 MB/s | SSD (NVMe) |
| Latenz ~10 ms | HDD |
| Latenz ~0,02 ms | SSD |
| Günstig pro TB (~15€/TB) | HDD |
| Ideal für Betriebssystem | SSD |
> **Feedback:** Der dramatische Unterschied liegt bei Random Access: SSD ~500× schneller. Deshalb: Betriebssystem auf SSD, Archiv auf HDD. Viele nutzen beides: Kleine SSD für System + große HDD für Daten.
---
<!-- _class: disable -->
### O4 – USB-C: Stecker oder Protokoll?
**Thema:** Schnittstellen – USB-C
**Punkte:** 2
**Typ:** `[MC]`
Ein USB-C-Kabel kann langsam sein, obwohl es wie ein „modernes" Kabel aussieht. Warum?
- [ ] USB-C-Kabel sind immer gleich schnell – die Geschwindigkeit liegt am Gerät.
- [x] **USB-C ist nur ein Steckertyp, kein Protokoll. Ein USB-C-Kabel kann USB 2.0 (480 Mbit/s) bis USB4 (40 Gbit/s) sein – am Stecker nicht erkennbar.** ✅
- [ ] USB-C-Kabel werden nach einem Jahr automatisch langsamer.
- [ ] Die Geschwindigkeit hängt nur vom Betriebssystem ab.
> **Feedback:** USB-C = Steckerform. Das Protokoll dahinter kann USB 2.0, 3.2 oder USB4 sein. Ein billiges USB-C-Kabel ist oft nur USB 2.0 mit neuem Stecker. Kabel-Spezifikation prüfen!
---
<!-- _class: disable -->
### O5 – Dateisysteme: Zuordnung
**Thema:** Dateisysteme – Überblick
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Dateisystem seine ideale Anwendung zu.
| Dateisystem | Ideal für |
|---|---|
| FAT32 | USB-Sticks, SD-Karten (maximale Kompatibilität) |
| NTFS | Windows-Systeme (Journaling, Rechte) |
| APFS | macOS, iOS (Snapshots, CoW) |
| ext4 | Linux-Systeme (Journaling, stabil) |
| exFAT | Große Dateien auf portablen Medien |
> **Feedback:** FAT32 = kleinster gemeinsamer Nenner, aber max. 4 GB pro Datei. exFAT = FAT32 ohne Größenlimits. NTFS/APFS/ext4 = moderne Systeme mit Journaling. Journaling = bei Absturz werden Änderungen nicht verloren.
---
<!-- _class: disable -->
### O6 – FAT32: Warum nicht für große Dateien?
**Thema:** Dateisysteme – FAT32 Limitation
**Punkte:** 1
**Typ:** `[MC]`
Sie versuchen, eine 5-GB-Videodatei auf einen FAT32-formatierten USB-Stick zu kopieren. Was passiert?
- [ ] Die Datei wird automatisch aufgeteilt in kleinere Teile.
- [x] **Der Vorgang fehlschlägt – FAT32 unterstützt keine einzelnen Dateien größer als 4 GB.** ✅
- [ ] Die Datei wird automatisch komprimiert, bis sie unter 4 GB ist.
- [ ] FAT32 hat keine Dateigrößenbeschränkung.
> **Feedback:** FAT32-Limit: max. 4 GB pro Datei. Ein 4K-Video oder ISO-Image passt oft nicht. Lösung: USB-Stick mit exFAT oder NTFS formatieren.
---
### O7 – Die 3-2-1-Regel
**Thema:** Backup – Prinzip
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre die 3-2-1-Regel für Backups. Begründe, warum jede der drei Ziffern wichtig ist.
> **Musterlösung:** 3 Kopien: Original + 2 Backups. Warum? Das Original kann kaputt gehen, das erste Backup auch – das zweite ist der Sicherheitspuffer. 2 verschiedene Medientypen (z. B. SSD + HDD, oder lokal + Cloud). Warum? Gleiche Medien haben gleiche Schwachstellen (z. B. Batch-Fehler bei HDDs derselben Charge). 1 Kopie an einem anderen Ort (Cloud, anderes Gebäude). Warum? Brand oder Wasserschaden zerstört alles vor Ort; Ransomware verschlüsselt alle angeschlossenen Laufwerke gleichzeitig.
---
<!-- _class: disable -->
### O8 – Backup-Arten: Unterschiede
**Thema:** Backup – Typen
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Backup-Typ seine Beschreibung zu.
| Backup-Typ | Beschreibung |
|---|---|
| Full (Vollständig) | Kompletter Datenbestand jedes Mal – einfach, aber langsam und platzhungrig |
| Inkrementell | Nur Änderungen seit dem letzten Backup (egal welcher Art) – schnell, aber Wiederherstellung komplex |
| Differenziell | Änderungen seit dem letzten Voll-Backup – Mittelweg zwischen beiden |
> **Feedback:** Typisches Schema: Sonntag Full, Mo–Sa Inkrementell oder Differenziell. Inkrementell = schnellstes Backup, langsamste Wiederherstellung (Kette aufbauen). Full = langsamstes Backup, schnellste Wiederherstellung.
@@ -68,6 +68,38 @@ section.aufgabe {
section.aufgabe footer {
display: none;
}
section.erklaerung {
font-size: 1.1rem;
background: repeating-linear-gradient(
135deg,
#fce4ec,
#fce4ec 40px,
#fff 40px,
#fff 80px
) !important;
}
@media print {
section.erklaerung {
background: #fce4ec !important;
}
}
section.erklaerung h1 {
font-size: 1.5rem;
color: #a02060;
margin-bottom: 0.3rem;
}
section.erklaerung ul,
section.erklaerung ol {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung p {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung table {
font-size: 0.9rem;
}
</style>
<!-- _class: invert -->
@@ -652,6 +684,28 @@ PRÜFUNGSRELEVANT: 5 Komponenten benennen und erklären können, Stored Program
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Von-Neumann-Architektur – Vertiefung
John von Neumann beschrieb 1945 im „First Draft of a Report on the EDVAC" das Prinzip des **Stored Program Computer**: Programme und Daten teilen sich denselben Speicher und sind damit austauschbar, ohne Hardware-Änderungen.
**Die 5 Komponenten im Detail:**
| Komponente | Moderne Entsprechung | Funktion |
|------------|---------------------|----------|
| Rechenwerk (ALU) | CPU-Kern | Addition, Subtraktion, Logik (AND, OR, NOT) |
| Steuerwerk | CPU-Kern | Fetch-Decode-Execute-Zyklus |
| Speicherwerk | RAM + ROM | Einheitlicher Adressraum für Code + Daten |
| Ein-/Ausgabe | I/O-Controller | USB, PCIe, Netzwerk |
| Bus-System | Northbridge/Southbridge (heute: SoC) | Adress-, Daten-, Steuerbus |
**Von-Neumann-Flaschenhals:** CPU und Speicher teilen einen Bus – die Bandbreite begrenzt die Geschwindigkeit. Moderne CPUs umgehen dies durch Caches (L1/L2/L3), die als Harvard-ähnliche Puffer dienen.
---
<!-- _class: klausur -->
<!-- _header: '' -->
<!-- _footer: '' -->
@@ -689,6 +743,33 @@ PRÜFUNGSRELEVANT: Warum Von-Neumann revolutionär, Unterschied zu Harvard, Beis
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Stored Program Concept – Vertiefung
Vor Von Neumann mussten Computer für jedes Problem neu verkabelt werden (ENIAC: tagelange Arbeit). Das **Stored Program Concept** machte Programme zu Daten – austauschbar wie Dokumente.
**Konsequenzen für die Software-Industrie:**
- **Betriebssysteme** möglich: Laden verschiedene Programme aus demselben Speicher
- **Updates** ohne Hardware-Austausch: Nur Bits ändern, nicht Kabel
- **Multitasking**: Mehrere Programme gleichzeitig im Speicher
- **Self-Modifying Code**: Programme können sich selbst ändern (Compiler, JIT)
**Harvard-Architektur (Alternative):**
| Aspekt | Von Neumann | Harvard |
|--------|-------------|---------|
| Speicher | Gemeinsam für Code + Daten | Getrennt |
| Busse | Ein Bus (Flaschenhals) | Paralleler Zugriff |
| Flexibilität | Hoch (Code = Daten) | Geringer |
| Einsatz | Desktop, Server, Smartphone | DSP, Mikrocontroller |
**Modern:** „Modified Harvard" – L1-Cache trennt Code/Daten (Speed), RAM bleibt gemeinsam (Flexibilität).
---
<!-- _class: lead -->
# Vom Militär zum Netz
@@ -1117,6 +1198,34 @@ PRÜFUNGSRELEVANT: Was gehört in <head>, Unterschied zu <body>, wichtigste Meta
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# HTML Metadaten – Vertiefung
Der `<head>`-Bereich enthält Informationen *über* das Dokument, nicht den sichtbaren Inhalt. Diese Metadaten steuern Browser-Verhalten, Suchmaschinen-Indexierung und Social-Media-Vorschauen.
**Kritische Meta-Tags:**
| Tag | Funktion | Beispiel |
|-----|----------|----------|
| `<title>` | Browser-Tab, Suchergebnis-Titel | `<title>HdM Stuttgart</title>` |
| `<meta charset>` | Zeichenkodierung (Umlaute!) | `<meta charset="UTF-8">` |
| `<meta viewport>` | Mobile Darstellung | `width=device-width, initial-scale=1` |
| `<meta description>` | Suchergebnis-Snippet (max 160 Zeichen) | SEO-kritisch |
**Open Graph Protocol (Facebook, 2010):**
```html
<meta property="og:title" content="Artikel-Titel">
<meta property="og:image" content="https://example.com/preview.jpg">
```
Steuert die Vorschau beim Teilen auf Facebook, LinkedIn, WhatsApp, Slack.
**SEO-Relevanz:** Google nutzt `<title>` und `<meta description>` für Ranking und Snippet-Anzeige. Fehlende Metadaten = schlechtere Auffindbarkeit.
---
# HTML-Tags und Attribute
```html
@@ -1340,6 +1449,33 @@ PRÜFUNGSRELEVANT: Arten von Einschränkungen, Screenreader-Beispiele, WCAG
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Web-Zugänglichkeit – Vertiefung
**a11y** = Accessibility (a + 11 Buchstaben + y). Die WHO schätzt, dass 15% der Weltbevölkerung eine Behinderung haben – das sind über 1 Milliarde potenzielle Nutzer.
**Arten von Einschränkungen:**
| Typ | Permanent | Temporär | Situativ |
|-----|-----------|----------|----------|
| Visuell | Blindheit | Nach Augen-OP | Grelle Sonne |
| Motorisch | Amputation | Gebrochener Arm | Baby auf dem Arm |
| Auditiv | Taubheit | Ohrenentzündung | Laute Umgebung |
| Kognitiv | Legasthenie | Müdigkeit | Ablenkung |
**Assistive Technologien:**
- **Screenreader:** NVDA (Windows, kostenlos), VoiceOver (Apple, integriert), JAWS (kommerziell)
- **Braillezeilen:** Taktile Ausgabe, ~40–80 Zeichen
- **Switch-Geräte:** Ein-Knopf-Steuerung für motorische Einschränkungen
- **Eye-Tracking:** Blicksteuerung für Bewegungsunfähige
Screenreader lesen den DOM sequenziell – semantisches HTML (`<nav>`, `<main>`, `<button>`) ermöglicht Navigation per Tastenkürzel.
---
<!-- _class: klausur -->
<!-- _header: '' -->
<!-- _footer: '' -->
@@ -1379,6 +1515,35 @@ PRÜFUNGSRELEVANT: EAA kennen, Curb-Cut-Effekt erklären können, Business Case
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Rechtliche Anforderungen – Vertiefung
Der **European Accessibility Act (EAA)** trat am 28. Juni 2025 in Kraft und betrifft erstmals auch private Unternehmen – nicht nur öffentliche Stellen.
**Betroffene Sektoren:**
- E-Commerce (Online-Shops)
- Bankdienstleistungen
- Telekommunikation
- E-Books und E-Reader
- Ticketing und Check-in-Terminals
**WCAG 2.2 – Konformitätsstufen:**
| Level | Anforderung | Beispiel |
|-------|-------------|----------|
| A | Minimum | Alt-Texte für Bilder |
| AA | Gesetzlicher Standard | Kontrast 4,5:1, Tastaturnavigation |
| AAA | Optimal | Gebärdensprache für Videos |
**Curb-Cut-Effekt:** Barrierefreiheit hilft allen. Bordsteinabsenkungen für Rollstühle nutzen auch Kinderwagen, Rollkoffer, Fahrräder. Untertitel helfen Gehörlosen, aber auch in lauten Umgebungen oder beim Sprachlernen.
**Sanktionen:** Bis zu 100.000 € Bußgeld bei Verstößen.
---
# WCAG: Der Standard
**W**eb **C**ontent **A**ccessibility **G**uidelines
@@ -1532,6 +1697,38 @@ Echte NutzerInnen einbeziehen = Gold-Standard
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Barrierefreiheit testen – Vertiefung
Automatisierte Tests finden nur ~30% der Barrierefreiheitsprobleme. Der Rest erfordert manuelles Testen und idealerweise echte Nutzer mit Behinderungen.
**Tastatur-Test (5 Minuten, jeder kann's):**
1. Maus weglegen, nur Tab + Enter + Pfeiltasten nutzen
2. Fokus-Indikator immer sichtbar? (kein `outline: none;`!)
3. Logische Reihenfolge? (nicht kreuz und quer)
4. Alle interaktiven Elemente erreichbar?
**Automatisierte Tools:**
| Tool | Typ | Findet |
|------|-----|--------|
| axe DevTools | Browser-Extension | ~30% der WCAG-Verstöße |
| WAVE | Browser-Extension | Struktur-Probleme, Kontrast |
| Lighthouse | Chrome DevTools | Performance + Accessibility |
| Pa11y | CLI | CI/CD-Integration |
**Screenreader-Kurztest:**
- macOS: `Cmd + F5` (VoiceOver)
- Windows: NVDA installieren (kostenlos)
- Augen schließen, nur zuhören: Ist die Seite verständlich?
**Gold-Standard:** Usability-Tests mit Menschen, die Assistive Technologien täglich nutzen.
---
<!-- _class: lead -->
@@ -71,6 +71,38 @@ section.aufgabe footer {
section.glossar {
font-size: 1.4rem;
}
section.erklaerung {
font-size: 1.1rem;
background: repeating-linear-gradient(
135deg,
#fce4ec,
#fce4ec 40px,
#fff 40px,
#fff 80px
) !important;
}
@media print {
section.erklaerung {
background: #fce4ec !important;
}
}
section.erklaerung h1 {
font-size: 1.5rem;
color: #a02060;
margin-bottom: 0.3rem;
}
section.erklaerung ul,
section.erklaerung ol {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung p {
font-size: 1.0rem;
line-height: 1.4;
}
section.erklaerung table {
font-size: 0.9rem;
}
</style>
<!-- _class: invert -->
@@ -402,6 +434,31 @@ SPEAKER NOTES:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# TCP/IP-Modell – Vertiefung
Das TCP/IP-Modell entstand praktisch aus dem ARPANET (1970er), im Gegensatz zum theoretischen OSI-Modell (7 Schichten, 1984). TCP/IP hat sich durchgesetzt, weil es das reale Internet beschreibt.
**Schicht-Aufgaben im Detail:**
| Schicht | Frage | Protokolle | Geräte |
|---------|-------|------------|--------|
| 4 Anwendung | Was will ich? | HTTP, DNS, SMTP, FTP | – (Software) |
| 3 Transport | Kommt es an? Welches Programm? | TCP, UDP | – (Software) |
| 2 Internet | Welcher Rechner weltweit? | IP, ICMP | Router |
| 1 Netzzugang | Wie zum Nachbarn? | Ethernet, WLAN, PPP | Switch, Access Point |
**OSI vs. TCP/IP:**
- OSI Schicht 5–7 (Session, Presentation, Application) → TCP/IP Schicht 4
- OSI Schicht 1–2 (Physical, Data Link) → TCP/IP Schicht 1
**Warum Schichten?** Abstraktion. HTTP muss nicht wissen, ob Ethernet oder WLAN verwendet wird. Änderungen in einer Schicht betreffen andere nicht.
---
# Schichten verpacken Daten
```
@@ -461,6 +518,33 @@ SPEAKER NOTES:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Dateneinheiten & Encapsulation – Vertiefung
**Encapsulation** (Verkapselung): Jede Schicht fügt ihren Header hinzu, ohne den Inhalt der oberen Schicht zu verändern.
**Was jeder Header enthält:**
| Schicht | Einheit | Header-Inhalte |
|---------|---------|----------------|
| Anwendung | Daten | HTTP-Header, Cookies, Content-Type |
| Transport | Segment | Quell-/Zielport, Sequenznummer, Flags (SYN, ACK) |
| Internet | Paket | Quell-/Ziel-IP, TTL, Protokoll (TCP=6, UDP=17) |
| Netzzugang | Frame | Quell-/Ziel-MAC, EtherType, CRC-Prüfsumme |
**Overhead-Rechnung (1 Byte HTTP-Body):**
- Ethernet: 14 + 4 Bytes (Header + Trailer)
- IP: 20 Bytes (ohne Optionen)
- TCP: 20 Bytes (ohne Optionen)
- **Minimum: 58 Bytes für 1 Byte Nutzlast**
**Decapsulation:** Empfänger packt in umgekehrter Reihenfolge aus. Jede Schicht prüft ihren Header (z.B. CRC) und reicht Nutzdaten nach oben.
---
# Warum ist das clever?
**Ohne Schichten:**
@@ -640,6 +724,34 @@ SPEAKER NOTES:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# IP, MAC, Port – Vertiefung
Drei Adressebenen lösen drei verschiedene Probleme:
**IP-Adresse (Schicht 2 – Internet):**
- Hierarchisch aufgebaut: Netzwerk-Teil + Host-Teil
- Router lesen nur den Netzwerk-Teil für Routing-Entscheidungen
- IPv4: 32 Bit (z.B. 192.168.1.1), IPv6: 128 Bit
**MAC-Adresse (Schicht 1 – Netzzugang):**
- 48 Bit, vom Hersteller fest vergeben (theoretisch)
- Erste 24 Bit = OUI (Organizationally Unique Identifier) = Hersteller
- Nur relevant für den **nächsten Hop** – wird bei jedem Router ersetzt
- ARP (Address Resolution Protocol) übersetzt IP → MAC
**Port (Schicht 3 – Transport):**
- 16 Bit → 65.535 mögliche Ports
- Well-Known Ports (0–1023): HTTP=80, HTTPS=443, SSH=22
- Ephemeral Ports (49152–65535): Dynamisch für Client-Verbindungen
**Warum ändert sich nur MAC?** IP ist das Endziel (Brief-Adresse), MAC ist der aktuelle Bote (wer trägt den Brief gerade?).
---
<!-- _class: lead -->
# Die Reise eines Klicks
@@ -922,6 +1034,36 @@ SPEAKER NOTES:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# 3-Way-Handshake – Vertiefung
Der Handshake synchronisiert **Sequenznummern** – essenziell für TCPs Zuverlässigkeit.
**Warum zufällige Startwerte (ISN)?**
- Sicherheit: Verhindert Session-Hijacking durch Raten
- Eindeutigkeit: Unterscheidet alte von neuen Verbindungen
- ISN = Initial Sequence Number, vom OS zufällig gewählt
**TCP-Flags im Handshake:**
| Paket | Flags | Bedeutung |
|-------|-------|-----------|
| 1 | SYN | Client will Verbindung, sendet seine ISN |
| 2 | SYN+ACK | Server akzeptiert, sendet seine ISN, bestätigt Client-ISN+1 |
| 3 | ACK | Client bestätigt Server-ISN+1 |
**Was passiert bei Problemen?**
- Kein SYN-ACK → Client wiederholt SYN (Timeout)
- SYN-Flood-Attacke: Millionen SYNs ohne ACK → Server-Ressourcen erschöpft
- Schutz: SYN-Cookies (Server speichert keinen State bis ACK kommt)
**Verbindungsabbau:** 4-Way-Handshake (FIN → ACK → FIN → ACK) oder RST für sofortigen Abbruch.
---
# Nach dem Handshake
**Status:** Die TCP-Verbindung steht.
@@ -1429,6 +1571,38 @@ SPEAKER NOTES:
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# TCP vs. UDP – Vertiefung
Beide sind Transport-Protokolle (Schicht 3), aber mit fundamental unterschiedlichen Garantien.
**TCP (Transmission Control Protocol):**
- Verbindungsorientiert (Handshake vor Daten)
- Sequenznummern → Reihenfolge garantiert
- ACKs + Retransmission → Kein Datenverlust
- Flow Control (Sliding Window) → Empfänger nicht überlasten
- Congestion Control → Netzwerk nicht überlasten
**UDP (User Datagram Protocol):**
- Verbindungslos (Fire-and-Forget)
- Keine Sequenznummern, keine ACKs
- Header nur 8 Bytes (TCP: 20+ Bytes)
- Anwendung muss selbst für Zuverlässigkeit sorgen
| Anwendung | Protokoll | Grund |
|-----------|-----------|-------|
| HTTP/HTTPS | TCP | Vollständigkeit kritisch |
| DNS | UDP | Kleine Pakete, schnelle Antwort |
| Video-Streaming | UDP/QUIC | Latenz wichtiger als Perfektion |
| Online-Gaming | UDP | Echtzeit, veraltete Daten nutzlos |
**QUIC:** Googles Protokoll kombiniert UDP-Geschwindigkeit mit TCP-ähnlicher Zuverlässigkeit (HTTP/3).
---
# Warum UDP bei Video-Calls?
**Szenario:** Ein Paket geht verloren.
@@ -1508,6 +1682,37 @@ Das wird wichtiger, wenn ihr mit REST-APIs arbeitet.
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# HTTP-Methoden – Vertiefung
HTTP-Methoden definieren die **Semantik** der Anfrage – was der Client vom Server erwartet.
**CRUD-Mapping (Create, Read, Update, Delete):**
| Methode | CRUD | Idempotent | Safe | Typischer Einsatz |
|---------|------|------------|------|-------------------|
| GET | Read | Ja | Ja | Ressource abrufen |
| POST | Create | Nein | Nein | Formular, neue Ressource |
| PUT | Update | Ja | Nein | Ressource vollständig ersetzen |
| PATCH | Update | Nein | Nein | Ressource teilweise ändern |
| DELETE | Delete | Ja | Nein | Ressource löschen |
**Idempotent:** Mehrfaches Ausführen hat denselben Effekt wie einmaliges (GET, PUT, DELETE).
**Safe:** Ändert nichts am Server (nur GET, HEAD, OPTIONS).
**REST-Prinzip:** URLs identifizieren Ressourcen, Methoden definieren Aktionen.
```
GET /users/42 → Benutzer 42 abrufen
PUT /users/42 → Benutzer 42 vollständig ersetzen
DELETE /users/42 → Benutzer 42 löschen
POST /users → Neuen Benutzer erstellen
```
---
<!-- _class: klausur -->
<!-- _header: '' -->
<!-- _footer: '' -->
@@ -1543,6 +1748,31 @@ Status-Codes sagen euch, was passiert ist.
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# HTTP Status-Codes – Vertiefung
Die erste Ziffer kategorisiert die Antwort:
| Bereich | Kategorie | Häufige Codes |
|---------|-----------|---------------|
| 1xx | Informational | 100 Continue, 101 Switching Protocols |
| 2xx | Success | 200 OK, 201 Created, 204 No Content |
| 3xx | Redirection | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx | Client Error | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found |
| 5xx | Server Error | 500 Internal Error, 502 Bad Gateway, 503 Unavailable |
**Wichtige Unterscheidungen:**
- **401 vs. 403:** 401 = nicht authentifiziert (wer bist du?), 403 = nicht autorisiert (du darfst nicht)
- **301 vs. 302:** 301 = permanent umgezogen (Cache-fähig), 302 = temporär (nicht cachen)
- **304 Not Modified:** Browser hat Cache, Server bestätigt: noch aktuell → spart Bandbreite
**API-Design:** Korrekte Status-Codes sind wichtig für Clients. `200` bei Fehler mit `{"error": "..."}` im Body ist schlechtes Design.
---
<!-- _class: klausur -->
<!-- _header: '' -->
<!-- _footer: '' -->
@@ -1579,6 +1809,40 @@ Wie Encapsulation funktioniert.
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Netzwerk-Grundlagen – Vertiefung
Die vier Kernkonzepte für Web-Entwickler:
**1. DNS-Auflösung:**
- Browser fragt DNS-Resolver (z.B. 8.8.8.8)
- Rekursive Abfrage: Root → TLD → Authoritative
- Caching auf jeder Ebene (TTL = Time To Live)
**2. TCP-Verbindungsaufbau:**
- 3-Way-Handshake vor jeder HTTP-Anfrage (HTTP/1.1)
- Keep-Alive: Verbindung bleibt offen für mehrere Requests
- HTTP/2: Multiplexing – viele Requests über eine Verbindung
**3. HTTP Request/Response:**
```
Request: Methode + URL + Header + (Body)
Response: Status + Header + Body
```
**4. Schichten & Adressen:**
| Was bleibt gleich? | Was ändert sich? |
|-------------------|------------------|
| Ziel-IP | MAC-Adressen (bei jedem Hop) |
| Ports | – |
**Debugging:** Browser DevTools (F12 → Network) zeigt alle Requests, Timing, Header.
---
# Werkzeuge zum Selbst-Erkunden
**Im Browser (F12 → Network-Tab):**
@@ -1870,6 +2134,33 @@ Inline-Styles schlagen alles – außer !important, was ihr vermeiden solltet.
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# CSS Spezifität – Vertiefung
Spezifität bestimmt, welche CSS-Regel gewinnt, wenn mehrere auf dasselbe Element zutreffen. Sie wird als 4-stellige Zahl berechnet: **(Inline, IDs, Klassen, Elemente)**.
**Berechnung:**
| Selektor | Inline | IDs | Klassen | Elemente | Gesamt |
|----------|--------|-----|---------|----------|--------|
| `p` | 0 | 0 | 0 | 1 | 0,0,0,1 |
| `.info` | 0 | 0 | 1 | 0 | 0,0,1,0 |
| `p.info` | 0 | 0 | 1 | 1 | 0,0,1,1 |
| `#header` | 0 | 1 | 0 | 0 | 0,1,0,0 |
| `#header .nav a` | 0 | 1 | 1 | 1 | 0,1,1,1 |
**Wichtige Regeln:**
- Eine Klasse (0,0,1,0) schlägt **jede Anzahl** von Elementen (0,0,0,99)
- Eine ID schlägt jede Anzahl von Klassen
- `!important` bricht alles → vermeiden, da schwer zu überschreiben
**Best Practice:** Flache Spezifität anstreben. BEM-Methodik (`.block__element--modifier`) hält Spezifität gleichmäßig niedrig.
---
# Box-Modell
```
@@ -2117,6 +2408,37 @@ Das Gegenteil wäre Desktop First mit max-width – aber Mobile First ist heute
---
<!-- _class: erklaerung -->
<!-- _header: '' -->
<!-- _footer: '' -->
# Responsive Design – Vertiefung
**Mobile First** ist der Standard: Basis-CSS für kleine Screens, dann Erweiterungen für größere.
**Breakpoints (gängige Werte):**
| Breakpoint | Gerät | Media Query |
|------------|-------|-------------|
| < 576px | Smartphone (Portrait) | Basis (kein Query) |
| ≥ 576px | Smartphone (Landscape) | `@media (min-width: 576px)` |
| ≥ 768px | Tablet | `@media (min-width: 768px)` |
| ≥ 992px | Desktop | `@media (min-width: 992px)` |
| ≥ 1200px | Large Desktop | `@media (min-width: 1200px)` |
**Viewport-Meta-Tag (kritisch!):**
```html
<meta name="viewport" content="width=device-width, initial-scale=1">
```
Ohne diesen Tag ignorieren mobile Browser eure Media Queries und rendern die Desktop-Version verkleinert.
**Moderne Alternativen zu Media Queries:**
- `clamp()`: `font-size: clamp(1rem, 2vw, 2rem);`
- Container Queries: Reagieren auf Container-Größe statt Viewport
- CSS Grid `auto-fit`/`auto-fill`: Automatisches Responsive Layout
---
# Zusammenfassung CSS
**Selektoren:**
File renamed without changes.
+973
View File
@@ -0,0 +1,973 @@
---
marp: true
theme: gaia
paginate: true
backgroundColor: #fff
header: ""
footer: ""
title: "Fragenkatalog – IT-Grundlagen (223015c)"
---
<style>
:root {
--color-foreground: #1a1a2e;
--color-highlight: #d63384;
--color-dimmed: #4a4a6a;
}
section.invert {
--color-foreground: #fff;
}
section {
font-size: 1.325rem;
}
h1 {
color: #a02060; /* darker raspberry */
}
section.invert h1 {
color: #fff;
}
h2 {
color: #1f2937; /* dark gray, almost black */
}
pre {
background: #0f0f23;
border-radius: 8px;
}
pre code {
background: transparent;
color: inherit;
}
a {
color: var(--color-highlight);
}
section.disable {
opacity: 0.3;
}
</style>
# Klausurfragen – 223015c
**IT-Grundlagen · HdM Stuttgart · M. Czechowski**
<small>Stand: 01.02.2026</small>
---
> **Legende – Moodle XML-Typen:**
> `[MC]` = `multichoice` (einzelne Auswahl)
> `[MM]` = `multichoice` + `<single>false</single>` (Mehrfachauswahl)
> `[MATCH]` = `matching` (Zuordnung)
> `[ORDER]` = `ordering` (Reihenfolge)
> `[ESSAY]` = `essay` (Freitext, manuell bewertet)
> `[SHORTANS]` = `shortanswer` (Stichwort/Satz, automatisch geprüft)
> `[NUMERIC]` = `numerical` (Zahlenwert ± Toleranz)
> `[CLOZE]` = `cloze` (Lückentext, gemischt)`
---
<!-- _class: lead -->
## BLOCK A – Von-Neumann-Architektur
---
### A1 – Komponenten zuordnen
**Thema:** Von-Neumann Grundstruktur
**Punkte:** 3
**Typ:** `[MATCH]`
Ordne jeder Komponente der Von-Neumann-Architektur ihre Funktion zu.
| Komponente | Funktion |
|---|---|
| Rechenwerk (ALU) | Führt arithmetische und logische Operationen durch |
| Steuerwerk | Holt, dekodiert und steuert die Ausführung von Befehlen |
| Speicherwerk | Enthält sowohl Programme als auch Daten |
| Ein-/Ausgabe | Schnittstelle zu externen Geräten (Tastatur, Bildschirm, Netzwerk) |
| Bus-System | Verbindet alle Komponenten mittels Adress-, Daten- und Steuerbus |
> **Feedback:** Die 5 Komponenten: ALU (Rechnen), Steuerwerk (Befehle steuern), Speicherwerk (Programme UND Daten), Ein-/Ausgabe (Peripherie), Bus-System (Verbindung).
---
<!-- _class: disable -->
### A2 – Welche Komponente ist das?
**Thema:** Von-Neumann – einzelne Komponente identifizieren
**Punkte:** 1
**Typ:** `[MC]`
Ein Programm besteht aus einer Folge von Befehlen. Eine Komponente der Von-Neumann-Architektur ist für das Abrufen, Dekodieren und Ausführen dieser Befehle zuständig. Welche?
- [ ] Rechenwerk (ALU)
- [x] **Steuerwerk** ✅
- [ ] Speicherwerk
- [ ] Ein-/Ausgabe
> **Feedback:** Das Steuerwerk (Control Unit) orchestriert den Fetch-Decode-Execute-Zyklus – es ist der „Dirigent" der CPU.
---
### A3 – Von-Neumann: Was wird ermöglicht?
**Thema:** Von-Neumann – Bedeutung
**Punkte:** 2
**Typ:** `[MM]` (Mehrfachauswahl)
Welche der folgenden Aussagen werden durch die Von-Neumann-Architektur ermöglicht? (Mehrere Antworten möglich)
- [x] **Betriebssysteme können verschiedene Programme aus dem Speicher laden.** ✅
- [x] **Apps können ohne Hardwareänderung installiert werden.** ✅
- [ ] Der Computer kann nur ein einziges Programm gleichzeitig ausführen.
- [x] **Multitasking wird möglich.** ✅
- [ ] Die Hardware muss für jedes neue Programm physisch umgebaut werden.
- [x] **Software kann aktualisiert werden, ohne die Hardware zu ändern.** ✅
> **Feedback:** Kern der Von-Neumann-Architektur: Programme und Daten teilen denselben Speicher → Programme sind austauschbare Daten. Ohne das: kein Betriebssystem, keine Apps, kein Multitasking, keine Updates.
---
<!-- _class: lead -->
## BLOCK B – Netzwerk-Grundlagen (TCP/IP)
---
### B1 – Protokoll → TCP/IP-Schicht zuordnen
**Thema:** TCP/IP-Schichtmodell – Zuordnung
**Punkte:** 3
**Typ:** `[MATCH]`
Ordne jedem Protokoll die richtige TCP/IP-Schicht zu.
| Protokoll | Schicht |
|----------|---|
| HTTP | Anwendung |
| DNS | Anwendung |
| TCP | Transport |
| UDP | Transport |
| IP | Internet |
| Ethernet | Netzzugang |
| WLAN | Netzzugang |
> **Feedback:** Anwendung: HTTP, DNS, SMTP, FTP. Transport: TCP, UDP. Internet: IP. Netzzugang: Ethernet, WLAN.
---
### B2 – Welche Schicht ist das? (einzeln)
**Thema:** TCP/IP – einzelne Schicht identifizieren
**Punkte:** 1
**Typ:** `[MC]`
Das Protokoll IP arbeitet auf welcher TCP/IP-Schicht?
- [ ] Anwendung
- [ ] Transport
- [x] **Internet** ✅
- [ ] Netzzugang
> **Feedback:** IP (Internet Protocol) arbeitet auf der Internet-Schicht – dort werden Pakete adressiert und geroutet.
---
<!-- _class: disable -->
### B3 – Schicht-Funktion beschreiben
**Thema:** TCP/IP – Funktionen der Schichten
**Punkte:** 2
**Typ:** `[ESSAY]`
Beschreibe in einem Satz pro Schicht die Hauptfunktion jeder der vier TCP/IP-Schichten (Anwendung, Transport, Internet, Netzzugang).
> **Musterlösung:** Anwendung: Stellt Protokolle für spezifische Dienste bereit (HTTP für Web, SMTP für Mail). Transport: Sorgt für zuverlässige (TCP) oder schnelle (UDP) Übertragung zwischen zwei Endpunkten. Internet: Adressiert und routet Pakete über Netzwerkgrenzen hinweg mittels IP. Netzzugang: Übertragen von Frames auf einem physischen Übertragungsweg (Ethernet, WLAN).
---
### B4 – Was ist eine MAC-Adresse?
**Thema:** MAC-Adresse – Konzept
**Punkte:** 1
**Typ:** `[MC]`
Was identifiziert eine MAC-Adresse?
- [ ] Den konkreten Dienst (z. B. Webserver) auf einem Computer.
- [ ] Den Computer im globalen Internet über Netzwerkgrenzen hinweg.
- [x] **Die Netzwerkkarte eines Geräts auf einem lokalen Netzwerksegment.** ✅
- [ ] Die Routen, die ein Paket durch das Internet nimmt.
> **Feedback:** MAC = Media Access Control. Sie ist eine 48-Bit-Adresse, die einer Netzwerkkarte ab Werk zugewiesen wird – lokal, ein Hop.
---
### B5 – Was ist eine IP-Adresse?
**Thema:** IP-Adresse – Konzept
**Punkte:** 1
**Typ:** `[MC]`
Was identifiziert eine IP-Adresse?
- [ ] Die Netzwerkkarte eines Geräts auf einem lokalen Segment.
- [x] **Ein Gerät (Host) im globalen Internet – sie ermöglicht das Routing über Netzwerkgrenzen.** ✅
- [ ] Den Dienst, der auf einem bestimmten Port läuft.
- [ ] Die physische Leitung zwischen zwei Computern.
> **Feedback:** IP = Internet Protocol. Die IP-Adresse ist der globale „Hausnummer" eines Geräts – routing-tauglich, im Gegensatz zur lokalen MAC-Adresse.
---
### B6 – Was ist eine Port-Nummer?
**Thema:** Port – Konzept
**Punkte:** 1
**Typ:** `[MC]`
Wozu dient eine Port-Nummer auf dem Zielrechner?
- [ ] Sie bestimmt die Geschwindigkeit der Verbindung.
- [ ] Sie identifiziert das Gerät im Netzwerk.
- [x] **Sie adressiert den konkreten Dienst bzw. die Anwendung auf dem Computer (z. B. Webserver auf 80, HTTPS auf 443).** ✅
- [ ] Sie zeigt an, ob das Gerät per WLAN oder Kabel verbunden ist.
> **Feedback:** IP = „Welches Gebäude?", Port = „Welche Tür im Gebäude?" (welcher Dienst soll die Anfrage empfangen).
---
### B7 – IP, MAC, Port: Zuordnung
**Thema:** Adressierung – Unterschiede auf einen Blick
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jeder Adresse ihre Beschreibung zu.
| Adresse | Beschreibung |
|---|---|
| IP-Adresse | Globale Adresse eines Geräts – ermöglicht Routing über Netzwerkgrenzen |
| MAC-Adresse | Lokale Adresse einer Netzwerkkarte – nur innerhalb eines Segments gültig |
| Port-Nummer | Adressiert einen bestimmten Dienst auf einem Computer |
> **Feedback:** Drei Ebenen der Adressierung: Gerät global (IP), Gerät lokal (MAC), Dienst auf dem Gerät (Port).
---
<!-- _class: disable -->
### B8 – MAC ändert sich, IP nicht: Warum?
**Thema:** IP vs. MAC beim Routing – Transfer
**Punkte:** 2
**Typ:** `[ESSAY]`
Ein Paket reist von Ihrem Laptop zu einem Webserver über mehrere Router. Erkläre in 2–3 Sätzen, warum die MAC-Adresse an jedem Router neu gesetzt wird, während die IP-Adresse des Ziel-Servers konstant bleibt.
> **Musterlösung:** Die IP-Adresse des Ziel-Servers bleibt konstant, weil sie das globale Routingziel identifiziert – jeder Router nutzt sie, um das nächste Hop zu bestimmen. Die MAC-Adresse hingegen gilt nur für ein einzelnes Netzwerksegment (einen „Hop"). An jedem Router wird ein neuer Frame erstellt mit der MAC des nächsten Hops als Ziel – die alte MAC wird verworfen.
---
### B9 – Encapsulation: Dateneinheit → Schicht
**Thema:** Encapsulation – Zuordnung
**Punkte:** 3
**Typ:** `[MATCH]`
Bei der Übertragung wird eine Nachricht von Schicht zu Schicht verpackt. Ordne jeder Dateneinheit die zugehörige Schicht und was hinzugefügt wird.
| Dateneinheit | Schicht + Was wird ergänzt |
|---|---|
| Daten | Anwendungsschicht – die eigentliche Nachricht (z. B. HTML-Seite) |
| Segment | Transportschicht – Daten + Ports und Sequenznummern |
| Paket | Internetschicht – Segment + IP-Adressen (Quelle und Ziel) |
| Frame | Netzzugangsschicht – Paket + MAC-Adressen und Prüfsumme |
> **Feedback:** D-S-P-F: Daten → Segment → Paket → Frame. Jede Schicht fügt einen Header (und beim Frame auch einen Trailer) hinzu.
---
### B10 – Encapsulation: Reihenfolge sortieren
**Thema:** Encapsulation – Reihenfolge
**Punkte:** 2
**Typ:** `[ORDER]`
Sortiere die Dateneinheiten in der Reihenfolge, wie sie beim Senden entstehen (von innen nach außen):
1. Daten
2. Segment
3. Paket
4. Frame
> **Feedback:** Zwiebelprinzip: Die Anwendung erzeugt Daten → Transport verpackt zu einem Segment → Internet zu einem Paket → Netzzugang zum Frame.
---
### B11 – Decapsulation: Umgekehrte Reihenfolge
**Thema:** Decapsulation – Empfänger-Seite
**Punkte:** 2
**Typ:** `[MC]`
Wenn der Server das Signal empfängt, passiert Decapsulation. In welcher Reihenfolge werden die Header entfernt?
- [ ] Anwendung → Transport → Internet → Netzzugang
- [ ] Alle Header werden gleichzeitig entfernt, sobald die Daten im RAM liegen.
- [x] **Netzzugang (Ethernet-Header weg) → Internet (IP-Header weg) → Transport (TCP-Header weg) → Daten.** ✅
- [ ] Internet → Netzzugang → Transport → Anwendung
> **Feedback:** Das Auspacken erfolgt in umgekehrter Reihenfolge wie das Einpacken – der äußerste Header (Frame) wird zuerst entfernt.
---
### B12 – Encapsulation: Lückentext
**Thema:** Encapsulation – Terminologie
**Punkte:** 2
**Typ:** `[CLOZE]`
Bei der Übertragung wird eine Nachricht von Schicht zu Schicht verpackt. Die Transportschicht erzeugt ein [[1:Segment]], die Internetschicht ein [[2:Paket]], und die Netzzugangsschicht einen [[3:Frame]]. Am Empfänger wird dieses in [[4:umgekehrter Reihenfolge]] wieder abgepackt (Decapsulation).
> **Feedback:** D-S-P-F vorwärts beim Senden, F-P-S-D beim Empfangen. Jeder Name beschreibt die Dateneinheit mit allen bis zu dieser Schicht hinzugefügten Headern.
---
### B13 – TCP vs. UDP: Videostreaming
**Thema:** TCP vs. UDP – Echtzeit-Szenario
**Punkte:** 2
**Typ:** `[MC]`
Ein Videostreaming-Dienst sendet Daten an Ihren Browser. Ein einzelnes Paket geht verloren. Warum wählt der Dienst UDP statt TCP?
- [ ] UDP sendet jedes Paket doppelt, daher geht statistisch nie etwas verloren.
- [x] **Bei Echtzeit ist Verzögerung schlimmer als Verlust. TCP würde das Paket erneut anfordern → Video friert ein. UDP ignoriert es → kurzer Glitch, Video läuft weiter.** ✅
- [ ] TCP kann bei Videostreaming nicht verwendet werden, da es zu langsam für Multimedia ist.
- [ ] UDP ist immer schneller als TCP – deshalb nutzt jeder Streaming-Dienst UDP.
> **Feedback:** Der Kern: Bei Echtzeit zählt Latenz, nicht Vollständigkeit. Ein fehlendes Frame ist besser als ein eingefrorenes Video.
---
### B14 – TCP vs. UDP: Unterschiede beschreiben
**Thema:** TCP vs. UDP – Konzept-Vergleich
**Punkte:** 2
**Typ:** `[ESSAY]`
Nenne zwei wesentliche Unterschiede zwischen TCP und UDP und gib für jeden einen konkreten Anwendungsfall an, in dem genau dieses Eigenschaftspaar ausschlaggebend ist.
> **Musterlösung:** (1) TCP ist verbindungsorientiert und zuverlässig (Handshake, Sequenznummern, ACK) → ideal für Dateiübertragung, wo jedes Byte zählt. (2) UDP ist verbindungslos und schneller, aber ohne Garantie für Lieferung oder Reihenfolge → ideal für Echtzeit-Anwendungen wie Videostreaming oder Online-Gaming, wo Latenz wichtiger als Vollständigkeit ist.
---
### B15 – TCP vs. UDP: Richtig oder Falsch?
**Thema:** TCP vs. UDP – Aussagen prüfen
**Punkte:** 1
**Typ:** `[MC]`
„UDP garantiert, dass alle Pakete in der richtigen Reihenfolge ankommen."
Diese Aussage ist …
- [ ] …korrekt – UDP nutzt Sequenznummern wie TCP.
- [x] **…falsch – UDP bietet keine Garantie für Reihenfolge noch für Lieferung.** ✅
- [ ] …korrekt – UDP ist sogar zuverlässiger als TCP.
- [ ] …falsch – UDP existiert gar nicht mehr in modernen Netzwerken.
> **Feedback:** UDP = „fire and forget". Keine Verbindung, keine Sequenznummern, keine Bestätigung. Genau deshalb ist es schneller.
---
### B16 – TCP 3-Way-Handshake: SYN geht verloren
**Thema:** TCP-Verbindungsaufbau – Störfall
**Punkte:** 2
**Typ:** `[MC]`
Der Client sendet ein SYN zum Server. Das SYN-Paket geht verloren – es erreicht den Server nie. Was passiert als nächstes?
- [ ] Der Server sendet trotzdem ein SYN-ACK, da die IP-Adresse bekannt ist.
- [x] **Der Server kennt die Anfrage nicht → sendet kein SYN-ACK → der Client erhält keine Antwort → keine Verbindung. Der Client sendet das SYN nach einem Timeout erneut.** ✅
- [ ] Der Client sendet direkt ein ACK als Fallback – Verbindung mit zwei Paketen.
- [ ] Das verloren gegangene SYN wird vom Netzwerk automatisch rekonstruiert.
> **Feedback:** Ohne SYN beim Server: kein SYN-ACK, kein Handshake, keine Verbindung. TCP retransmittiert nach Timeout.
---
### B17 – TCP 3-Way-Handshake: Ablauf beschreiben
**Thema:** TCP-Verbindungsaufbau – Konzept
**Punkte:** 2
**Typ:** `[ESSAY]`
Beschreibe die drei Schritte des TCP 3-Way-Handshakes. Erkläre, warum alle drei Schritte nötig sind, bevor Daten gesendet werden.
> **Musterlösung:** (1) Client → Server: SYN („Ich will eine Verbindung aufbauen"). (2) Server → Client: SYN-ACK (「Ich bestätige das und will auch eine Verbindung"). (3) Client → Server: ACK ("Bestätigt"). Alle drei Schritte sind nötig, damit beide Seiten wissen, dass die andere die Verbindung akzeptiert hat – erst dann kann zuverlässiger Datenaustausch beginnen.
---
<!-- _class: disable -->
### B18 – TCP Sequenznummern: Wozu?
**Thema:** TCP – Sequenznummern
**Punkte:** 1
**Typ:** `[MC]`
Welches Problem lösen Sequenznummern im TCP-Header konkret?
- [ ] Sie verhindern, dass Hacker die Verbindung abhören können.
- [x] **Pakete können in falscher Reihenfolge ankommen. Sequenznummern erlauben das korrekte Sortieren beim Empfänger.** ✅
- [ ] Sie zählen, wie viele Benutzende gleichzeitig auf dem Server sind.
- [ ] Sie bestimmen die maximale Größe einer Datei.
> **Feedback:** IP-Pakete können unterschiedliche Routen nehmen → Part 3 kommt vor Part 1. TCP sortiert sie anhand der Sequenznummern wieder.
---
<!-- _class: lead -->
## BLOCK C – HTTP
---
### C1 – HTTP-Methoden: Zuordnung
**Thema:** HTTP-Methoden – Was macht was
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jeder HTTP-Methode ihre Hauptfunktion zu.
| Methode | Hauptfunktion |
|---|---|
| GET | Ruft eine Ressource ab (nur lesen) |
| POST | Erstellt eine neue Ressource auf dem Server |
| PUT | Ersetzt eine existierende Ressource vollständig |
| DELETE | Löscht eine Ressource auf dem Server |
> **Feedback:** CRUD-Mapping: GET=Read, POST=Create, PUT=Update, DELETE=Delete.
---
### C2 – POST vs. PUT: Unterschied
**Thema:** HTTP-Methoden – POST vs. PUT
**Punkte:** 1
**Typ:** `[MC]`
Eine Person erstellt einen neuen Blog-Eintrag auf einer Webseite. Welche HTTP-Methode wird verwendet?
- [x] **POST – eine neue Ressource wird erstellt.** ✅
- [ ] PUT – PUT wird immer verwendet, wenn Daten gesendet werden.
- [ ] GET – GET kann auch Daten senden mit URL-Parametern.
- [ ] DELETE – DELETE erstellt und löscht gleichzeitig.
> **Feedback:** POST = „Erstelle etwas Neues". PUT = „Ersetze etwas Bestehendes". Neuer Blog-Eintrag → POST.
---
### C3 – PUT: Profilbild ersetzen
**Thema:** HTTP-Methoden – PUT im Szenario
**Punkte:** 1
**Typ:** `[MC]`
Eine Person aktualisiert ihr Profilbild – das alte Bild wird durch ein neues ersetzt. Welche HTTP-Methode?
- [ ] GET – GET kann auch Daten senden.
- [x] **PUT – ersetzt eine existierende Ressource.** ✅
- [ ] POST – POST ist immer für das Ersetzen zuständig.
- [ ] DELETE – DELETE sendet das neue Foto und löscht das alte.
> **Feedback:** „Ersetzen einer existierenden Ressource" = PUT. POST wäre, wenn ein völlig neues Bild erstellt würde, ohne dass ein vorhandenes überschrieben wird.
---
### C4 – DELETE: Wann nutzen?
**Thema:** HTTP-Methoden – DELETE im Szenario
**Punkte:** 1
**Typ:** `[MC]`
Eine Person löscht einen von ihr erstellten Kommentar auf einer Webseite. Welche HTTP-Methode wird der Browser im Hintergrund verwenden?
- [ ] GET – GET kann auch Löschvorgänge auslösen.
- [ ] POST – POST ist die Standardmethode für alle Änderungen.
- [ ] PUT – PUT löscht und ersetzt gleichzeitig.
- [x] **DELETE – der Kommentar wird vom Server entfernt.** ✅
> **Feedback:** DELETE = „Entferne diese Ressource vom Server." Konkret: der Kommentar wird anhand seiner URL/ID identifiziert und gelöscht.
---
<!-- _class: disable -->
### C5 – GET: Warum nicht für Passwörter?
**Thema:** HTTP-Methoden – GET Sicherheit
**Punkte:** 2
**Typ:** `[MC]`
Warum sollte man niemals GET verwenden, um sensible Daten (z. B. ein Passwort) an den Server zu senden?
- [ ] GET ist langsamer als POST – Passwörter müssen schnell übertragen werden.
- [x] **Bei GET stehen die Daten sichtbar in der URL (Browser-Verlauf, Server-Logs, Proxy-Server). Bei POST sind sie im Body versteckt.** ✅
- [ ] GET erlaubt nur Zahlen, keine Buchstaben.
- [ ] GET wird vom Server nie verschlüsselt, POST immer.
> **Feedback:** GET-Parameter hängen an der URL (`?pw=123`). Diese ist in History, Logs, Proxies sichtbar. HTTPS verschlüsselt zwar beides auf der Leitung, aber die URL selbst wird an zu vielen Stellen gespeichert.
---
### C6 – Status-Codes: Kategorisierung
**Thema:** HTTP Status-Codes – Bedeutung der ersten Ziffer
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jeder ersten Ziffer eines HTTP-Status-Codes ihre Bedeutung zu.
| Erste Ziffer | Bedeutung |
|---|---|
| 2xx | Erfolg – die Anfrage wurde erfolgreich verarbeitet |
| 3xx | Weiterleitung – die Ressource wurde verschoben |
| 4xx | Client-Fehler – die Anfrage der Anfragenden war fehlerhaft |
| 5xx | Server-Fehler – der Server hat ein Problem |
> **Feedback:** Die erste Ziffer = Kategorie. 200 OK, 301 Moved, 404 Not Found, 503 Service Unavailable – die Kategorie sagt Ihnen sofort, wo das Problem liegt.
---
### C7 – 503: Server-Fehler erkläre
**Thema:** HTTP Status-Codes – 5xx Transfer
**Punkte:** 1
**Typ:** `[MC]`
Sie rufen eine Webseite auf und erhalten `HTTP/2 503 Service Unavailable`. Was bedeutet das?
- [ ] Sie haben die falsche URL eingegeben.
- [ ] Der Server hat die Anfrage erfolgreich umgeleitet.
- [x] **Der Server ist überlastet oder temporär nicht verfügbar – Verantwortung liegt beim Betreiber.** ✅
- [ ] Der Server hat die Seite dauerhaft verschoben.
> **Feedback:** 5xx = Server-Problem. Sie als Client können nur später erneut versuchen. Der Betreiber muss das lösen.
---
### C8 – 404: Wer hat „Schuld"?
**Thema:** HTTP Status-Codes – 4xx Transfer
**Punkte:** 1
**Typ:** `[MC]`
Sie erhalten einen 404-Fehler. Wer ist für die Ursache verantwortlich?
- [ ] Der Server ist abgestürzt.
- [ ] Das Internet ist ausgefallen.
- [x] **Der Client (Anfragende) – eine URL wurde angefordert, die nicht existiert (Tippfehler oder veralteter Link).** ✅
- [ ] Der DNS-Server konnte den Namen nicht auflösen.
> **Feedback:** 4xx = Client-Fehler. Der Server funktioniert perfekt, er sagt nur: „Das, was Sie anfragen, habe ich nicht."
---
### C9 – Status-Codes: Szenarios zuordnen
**Thema:** HTTP Status-Codes – Transfer Zuordnung
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Szenario den passenden HTTP-Status-Code zu.
| Szenario | Status-Code |
|---|---|
| Sie rufen eine Seite auf, die seit letztem Jahr auf eine neue URL umgeleitet wurde | 301 Moved Permanently |
| Eine Webseite lädt erfolgreich | 200 OK |
| Sie geben eine URL ein, die nicht existiert | 404 Not Found |
| Der Webserver ist überlastet | 503 Service Unavailable |
> **Feedback:** 200 = Alles gut. 301 = dauerhaft verschoben. 404 = nicht gefunden (Ihr Fehler). 503 = Server-Problem (Betreiber).
---
### C10 – Status-Codes: Freitext
**Thema:** HTTP Status-Codes – Konzept zusammenfassen
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre, warum HTTP-Status-Codes aus einer dreistelligen Zahl bestehen und was die erste Ziffer konkret bedeutet. Nenne je einen Beispiel-Code für 2xx, 4xx und 5xx.
> **Musterlösung:** Die erste Ziffer kategorisiert die Antwort: 2xx = Erfolg, 3xx = Weiterleitung, 4xx = Client-Fehler, 5xx = Server-Fehler. Die restlichen zwei Ziffern spezifizieren den genauen Fall. Beispiele: 200 OK (Erfolg), 404 Not Found (Client-Fehler), 500 Internal Server Error (Server-Fehler). Diese Struktur ermöglicht es, allein aus dem Code zu verstehen, ob und wo ein Problem liegt – ohne die Antwort ganz lesen zu müssen.
---
<!-- _class: lead -->
## BLOCK D – DNS
---
<!-- _class: disable -->
### D1 – DNS: Was macht es?
**Thema:** DNS – Grundfunktion
**Punkte:** 1
**Typ:** `[MC]`
Was ist die Hauptfunktion eines DNS-Servers?
- [ ] Er verschlüsselt die Verbindung zwischen Client und Server.
- [x] **Er übersetzt einen Domain-Namen (z. B. `hdm-stuttgart.de`) in eine IP-Adresse.** ✅
- [ ] Er routet Pakete durch das Internet.
- [ ] Er weist jedem Computer eine MAC-Adresse zu.
> **Feedback:** DNS = Domain Name System = „Telefonbuch des Internets". Name → IP. Ohne DNS müsste man überall IP-Adressen eintippen.
---
<!-- _class: disable -->
### D2 – DNS: Zeitlicher Ablauf
**Thema:** DNS – Rolle im Gesamtablauf
**Punkte:** 2
**Typ:** `[MC]`
Sie geben `https://hdm-stuttgart.de` in die Adresszeile ein. Was passiert vor dem TCP-Handshake?
- [ ] Der Browser sendet direkt den Namen an den Server – DNS wird erst danach benötigt.
- [x] **DNS-Auflösung: Der Name wird in eine IP-Adresse umgewandelt. TCP kann nur zu IP-Adressen Verbindungen aufbauen.** ✅
- [ ] DNS passiert nach dem TCP-Handshake.
- [ ] DNS ist nur für HTTPS nötig – bei HTTP kann der Name direkt verwendet werden.
> **Feedback:** DNS vor TCP. Kein Name-to-IP? Kein Handshake möglich. TCP arbeitet auf IP-Adressen, nicht auf Domain-Namen.
---
<!-- _class: disable -->
### D3 – DNS: Warum zwingend nötig?
**Thema:** DNS – Transfer/Begründung
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre in 2–3 Sätzen, warum der DNS-Schritt zwingend vor dem TCP-Handshake stehen muss. Was würde passieren, wenn der Browser den Domain-Namen direkt an den Netzwerk-Stack übergeben würde?
> **Musterlösung:** TCP arbeitet nur mit IP-Adressen – ein Domain-Name wie `hdm-stuttgart.de` ist für TCP-/IP-Stack sinnlos. Ohne vorherige DNS-Auflösung würde der Browser nicht wissen, an welche IP er das SYN senden soll. Der DNS-Schritt konvertiert den human-readable-Namen in eine maschinenlesbare IP, erst danach kann der Verbindungsaufbau beginnen.
---
<!-- _class: disable -->
### D4 – DNS: Lückentext
**Thema:** DNS – Terminologie
**Punkte:** 1
**Typ:** `[CLOZE]`
Der DNS-Server übersetzt einen [[1:Domain-Namen]] in eine [[2:IP-Adresse]]. Dieser Schritt fällt [[3:vor]] dem TCP-Handshake statt, weil TCP nur zu [[4:IP-Adressen]] Verbindungen aufbauen kann.
> **Feedback:** Die vier Lücken beschreiben den DNS-Ablauf vollständig: Was wird übersetzt, in was, wann, und warum.
---
<!-- _class: lead -->
## BLOCK E – Der Gesamtablauf (Zusammen)
---
### E1 – Reihenfolge eines HTTPS-Aufrufs
**Thema:** Gesamtablauf – Sortierung
**Punkte:** 2
**Typ:** `[ORDER]`
Sortiere die Schritte eines HTTPS-Aufrufs in der richtigen Reihenfolge:
1. DNS-Auflösung (Name → IP)
2. TCP 3-Way-Handshake (Verbindung aufbauen)
3. TLS-Handshake (Verschlüsselung vereinbaren)
4. HTTP GET (Anfrage senden)
5. HTTP 200 OK + HTML (Antwort empfangen)
> **Feedback:** DNS → TCP → TLS → HTTP Request → HTTP Response. Jeder Schritt ist eine Voraussetzung für den nächsten.
---
### E2 – Reihenfolge: Welche Folge ist korrekt?
**Thema:** Gesamtablauf – Multiple Choice
**Punkte:** 1
**Typ:** `[MC]`
Sie geben eine URL ein. Welche Reihenfolge ist korrekt?
- [ ] (1) TCP-Handshake → (2) DNS → (3) HTTP GET → (4) HTTP 200 OK
- [x] **(1) DNS → (2) TCP-Handshake → (3) HTTP GET → (4) HTTP 200 OK** ✅
- [ ] (1) HTTP GET → (2) DNS → (3) TCP-Handshake → (4) HTTP 200 OK
- [ ] (1) DNS → (2) HTTP GET → (3) TCP-Handshake → (4) HTTP 200 OK
> **Feedback:** DNS immer zuerst. Dann TCP (Verbindung). Dann HTTP (Anfrage/Antwort).
---
<!-- _class: lead -->
## BLOCK F – HTML-Grundlagen
---
### F1 – `<head>` vs. `<body>`: Was passiert bei Fehler?
**Thema:** HTML-Struktur – head/body
**Punkte:** 2
**Typ:** `[MC]`
Eine studierende Person platziert den `<title>` und `<meta name="description">` im `<body>` statt im `<head>`. Welche zwei Konsequenzen hat das?
- [ ] Kein Problem – Browser ignorieren die Unterscheidung.
- [x] **(1) Der Browser-Tab zeigt keinen Titel an. (2) Suchmaschinen haben keine Beschreibung für das Snippet → schlechte SEO, Screen-Reader können die Seite nicht richtig vorlesen.** ✅
- [ ] (1) Der Titel wird im Seiteninhalt sichtbar angezeigt. (2) Die description wird als Text auf der Seite eingeblendet.
- [ ] Nur das Fehlen von `<meta charset>` ist ein Problem.
> **Feedback:** `<head>` = Metadaten (unsichtbar für die Benutzenden, sichtbar für Browser/Maschinen). `<body>` = sichtbarer Inhalt. Title und description im Body werden nicht als Metadaten interpretiert.
---
### F2 – `<head>`: Was gehört wohin?
**Thema:** HTML-Struktur – Zuordnung
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Element zu, ob es in `<head>` oder `<body>` gehört.
| Element | Wohin? |
|---|---|
| `<title>` | `<head>` |
| `<meta charset="UTF-8">` | `<head>` |
| `<meta name="description">` | `<head>` |
| `<h1>Willkommen</h1>` | `<body>` |
| `<p>Text hier</p>` | `<body>` |
| `<link rel="stylesheet">` | `<head>` |
> **Feedback:** `<head>` = alles, was die Benutzenden nicht direkt sehen (Metadaten, Styles, Titel). `<body>` = alles, was im Browser-Fenster angezeigt wird.
---
<!-- _class: disable -->
### F3 – Charset: Was passiert ohne `<meta charset>`?
**Thema:** HTML – Zeichenkodierung
**Punkte:** 1
**Typ:** `[MC]`
Was ist die konkrete Konsequenz, wenn `<meta charset="UTF-8">` fehlt oder falsch gesetzt ist?
- [ ] Die Webseite lädt gar nicht.
- [x] **Sonderzeichen (Umlaute, Emojis) werden als kryptische Symbole dargestellt, weil der Browser die falsche Zeichenkodierung rät.** ✅
- [ ] Die Seite wird langsamer, da der Browser alle Sprachen durchprobieren muss.
- [ ] Das CSS wird nicht geladen.
> **Feedback:** Ohne charset nutzt der Browser oft einen Standard wie Latin-1. Bei UTF-8-gespeicherten Dateien → Umlaute und Emojis werden falsch dargestellt (Mojibake).
---
<!-- _class: lead -->
## BLOCK G – CSS
---
### G1 – Spezifität: ID vs. Klasse vs. Element
**Thema:** CSS Spezifität – Grundregel
**Punkte:** 2
**Typ:** `[MC]`
Gegeben:
```
p { color: blue; }
.highlight { color: green; }
#main { color: red; }
```
Ein Element `<p class="highlight" id="main">` wird angezeigt. Welche Farbe?
- [ ] Blau – die Element-Regel steht zuerst im Code.
- [ ] Grün – Klassen haben immer Vorrang vor IDs.
- [x] **Rot – die ID `#main` hat die höchste Spezifität (0,1,0,0).** ✅
- [ ] Rot – die letzte Regel im Code gewinnt immer.
> **Feedback:** Spezifität: ID (0,1,0,0) > Klasse (0,0,1,0) > Element (0,0,0,1). Reihenfolge im Code ist nur relevant bei gleicher Spezifität.
---
### G2 – Responsive Design: Mobile First – Welche Farbe?
**Thema:** CSS Media Queries – Mobile First
**Punkte:** 2
**Typ:** `[MC]`
```css
.container { background: white; }
@media (min-width: 768px) { .container { background: blue; } }
@media (min-width: 1024px) { .container { background: green; } }
```
Welche Farbe bei 900 px Breite?
- [ ] Weiß – Media-Queries gelten nur ab 1024 px.
- [ ] Grün – die letzte Media-Query überschreibt immer.
- [x] **Blau – bei 900 px greift `min-width: 768px` (900 ≥ 768), aber `min-width: 1024px` nicht (900 < 1024).** ✅
- [ ] Weiß – keine Media-Query greift zwischen den Breakpoints.
> **Feedback:** Mobile First: Basis = white. Bei 900px: 768px-Query greift ✓, 1024px-Query greift ✗ → blau.
---
<!-- _class: disable -->
### G3 – Desktop First: `max-width` erkläre
**Thema:** CSS Media Queries – Desktop First
**Punkte:** 1
**Typ:** `[MC]`
Wie würde eine Media Query für „Desktop First" aussehen (Standard ist Desktop, Anpassung für kleine Screens)?
- [ ] `@media (device-width: small) { ... }`
- [ ] `@media (min-width: ...)` – bleibt gleich, nur die Reihenfolge ändert sich.
- [x] **`@media (max-width: ...)` – Stile für Bildschirme, die kleiner als eine bestimmte Breite sind.** ✅
- [ ] `@media (mobile: true) { ... }`
> **Feedback:** Desktop First: Basis-CSS für große Schirme. `max-width` = „Wenn der Bildschirm schmäler ist als X, dann…" – Ausnahmen für Tablets/Handys.
---
### G4 – Mobile First vs. Desktop First: Vergleich
**Thema:** CSS Media Queries – Konzept-Vergleich
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre den Unterschied zwischen „Mobile First" und „Desktop First" beim Responsive Design. Welche Media-Query-Eigenschaft nutzt jeder Ansatz, und warum?
> **Musterlösung:** Mobile First: Das Basis-CSS ist für kleine Bildschirme (Handy). Mit `min-width` werden schrittweise Anpassungen für größere Bildschirme hinzugefügt („ab dieser Breite"). Desktop First: Das Basis-CSS ist für große Bildschirme. Mit `max-width` werden Ausnahmen für kleinere Geräte definiert (「bis zu dieser Breite"). Mobile First wird bevorzugt, weil die Mehrheit der Benutzenden mobil zugrifft und forced-mobile-first die Grundlage für progressive Enhancement bietet.
---
<!-- _class: lead -->
## BLOCK H – Barrierefreiheit
---
### H1 – Wie nutzen Menschen das Web?
**Thema:** Barrierefreiheit – Eingabegeräte
**Punkte:** 2
**Typ:** `[MATCH]`
Ordne jedem Eingabegerät seine Nutzungsweise zu.
| Eingabe | Nutzungsweise |
|---|---|
| Maus | Klicken, Scrollen |
| Tastatur | Tab-Navigation, Enter, Pfeiltasten |
| Screenreader | Vorlesen von Inhalten |
| Sprachsteuerung | „Klicke auf Anmelden" |
| Augensteuerung | Eye-Tracking |
| Switch-Geräte | Ein-/Aus-Schalter |
> **Feedback:** Nicht alle nutzen Maus + Bildschirm. ~15% der Weltbevölkerung haben eine Behinderung (WHO). Assistive Technologien wie Screenreader (NVDA, VoiceOver, JAWS) oder Switch-Geräte ermöglichen Web-Zugang für Menschen mit verschiedenen Einschränkungen.
---
<!-- _class: disable -->
### H2 – Einschränkungen: Temporär vs. situativ
**Thema:** Barrierefreiheit – Einschränkungstypen
**Punkte:** 2
**Typ:** `[MC]`
Eine Person kann aktuell nur mit einer Hand ihr Handy bedienen, weil sie das Baby auf dem Arm trägt. Wie klassifiziert man diese Einschränkung?
- [ ] Permanent – das ist eine bleibende körperliche Behinderung.
- [ ] Temporär – die Person ist verletzt und braucht Zeit zum Heilen.
- [x] **Situativ – die Einschränkung entsteht durch die aktuelle Umgebung/Situation, nicht durch eine Behinderung.** ✅
- [ ] Diese Art von Einschränkung existiert nicht – Barrierefreiheit betrifft nur Menschen mit Behinderung.
> **Feedback:** Drei Typen: Permanent (z. B. Blindheit), Temporär (z. B. gebrochener Arm, Augen-OP), Situativ (z. B. helle Sonne, laute Umgebung, Baby auf dem Arm). Barrierefreie Gestaltung hilft bei allen drei.
---
<!-- _class: disable -->
### H3 – Curb-Cut-Effekt: Beispiel identifizieren
**Thema:** Barrierefreiheit – Curb-Cut-Effekt
**Punkte:** 1
**Typ:** `[MC]`
Welches Beispiel demonstriert den Curb-Cut-Effekt?
- [ ] Barrierefreie Webseiten laden langsamer.
- [x] **Untertitel: gedacht für Gehörlose, helfen aber auch in lauter Umgebung oder beim Sprachlernen.** ✅
- [ ] Der Curb-Cut-Effekt bedeutet, dass barrierefreie Seiten nur für Menschen mit Behinderung nützlich sind.
- [ ] Alt-Texte verlängern die Ladezeit einer Webseite.
> **Feedback:** Curb-Cut-Effekt = eine barrierefreie Lösung nutzt am Ende allen. Untertitel für Gehörlose → helfen auch in lauter Umgebung. Kontrastreiche Farben für Sehbehinderung → besser im Sonnenlicht, für ältere Menschen.
---
<!-- _class: disable -->
### H4 – Curb-Cut-Effekt: Erklärung
**Thema:** Barrierefreiheit – Curb-Cut-Effekt Transfer
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre das Konzept des Curb-Cut-Effekts. Nenne zwei konkrete Web-Beispiele und erkläre jeweils, wer die ursprüngliche Zielgruppe war und wer sonst davon profitiert.
> **Musterlösung:** Der Curb-Cut-Effekt beschreibt, wie eine Maßnahme für Menschen mit Behinderung am Ende allen zugute kommt – wie die Bordsteinabsenkung, die für Rollstuhlfahrer gedacht war, aber auch Kinderwagen, Rollkoffer und Fahrrädern helfen. Web-Beispiele: (1) Untertitel – primär für Gehörlose, helfen auch in lauter Umgebung oder beim Sprachlernen. (2) Alt-Texte – primär für Screen-Reader-Benutzende, helfen auch Suchmaschinen (SEO).
---
### H5 – EAA: Was ist das?
**Thema:** Barrierefreiheit – Rechtlicher Rahmen
**Punkte:** 1
**Typ:** `[MC]`
Was ist der European Accessibility Act (EAA)?
- [ ] Ein freiwilliges EU-Programm zur Förderung barrierefreier Websites.
- [x] **Eine EU-Richtlinie, die seit Juni 2025 in Kraft ist und Barrierefreiheit in bestimmten digitalen Bereichen verpflichtend macht.** ✅
- [ ] Ein deutsches Gesetz, das nur öffentliche Behörden betrifft.
- [ ] Ein technisches Standard wie HTML oder CSS.
> **Feedback:** EAA = European Accessibility Act. Seit 28. Juni 2025 in Kraft. Betrifft E-Commerce, Banking, Telekommunikation, Transport, E-Books. In Deutschland umgesetzt durch das BFSG (Barrierefreiheitsstärkungsgesetz). Verstoß: bis 100.000€ Bußgeld möglich.
---
### H6 – Barrierefreiheit: Warum auch für „normale" Benutzende?
**Thema:** Barrierefreiheit – Business Case
**Punkte:** 2
**Typ:** `[ESSAY]`
Erkläre, warum barrierefreie Gestaltung nicht nur für Menschen mit Behinderung wichtig ist, sondern auch einen praktischen Nutzen für alle Benutzenden hat. Nenne mindestens zwei konkrete Beispiele.
> **Musterlösung:** Barrierefreiheit verbessert die UX für alle: (1) SEO – Alt-Texte und semantisches HTML helfen Suchmaschinen, die Seite besser zu verstehen → besseres Ranking. (2) Mobile – viele barrierefreie Prinzipien (z. B. große Tippflächen, guter Kontrast) sind auch für Mobilgeräte im Sonnenlicht wichtig. (3) Ältere Menschen – Sehschwäche, motorische Einschränkungen betreffen einen großen Anteil der Bevölkerung. Der Markt: ~15% Menschen mit Behinderung + ~20% ältere Menschen.
---
### H7 – Tastatur-Test: Was prüfen?
**Thema:** Barrierefreiheit – Praktischer Test
**Punkte:** 2
**Typ:** `[MC]`
Sie möchten eine Webseite auf Barrierefreiheit testen, ohne assistive Technologie zu installieren. Was machen Sie?
- [ ] Sie scrollen durch die Seite und schauen, ob sie schön aussieht.
- [x] **Sie navigieren nur mit Tab + Enter durch die Seite und prüfen: Erreichen Sie alle Funktionen? Ist der Fokus immer sichtbar? Ist die Tab-Reihenfolge logisch?** ✅
- [ ] Sie installieren einen Screenreader und lassen die Seite vorlesen.
- [ ] Sie öffnen den Quellcode und zählen die barrierefreien Tags.
> **Feedback:** Der Tastatur-Test ist der schnellste barrierefreie Selbsttest: Nur Tab + Enter benutzen. Wenn man so eine Funktion nicht erreicht kann, ist sie für Tastatur-Benutzende (und damit auch für Screenreader-Benutzende) nicht zugänglich. Tools wie axe DevTools oder Lighthouse automatisieren ~30% der Checks.
---
<!-- _class: lead disable -->
## BLOCK I – Zusammenfassung-Fragen (Übergreifend)
---
<!-- _class: disable -->
### I1 – Gesamtablauf: Wahl der richtigen Methode
**Thema:** HTTP + TCP + DNS zusammen
**Punkte:** 3
**Typ:** `[ESSAY]`
Eine Person klickt auf einen „Neuen Eintrag erstellen"-Button einer Webanwendung. Beschreibe vom Klick bis zur Antwort des Servers, welche Protokolle beteiligt sind und welche HTTP-Methode verwendet wird.
> **Musterlösung:** (1) Der Browser sendet eine HTTP-Anfrage. Da es sich um eine neue Ressource handelt, nutzt er POST. (2) Vorher: DNS löst den Domain-Namen auf. (3) TCP-Handshake stellt die Verbindung her. (4) POST-Anfrage wird gesendet (Daten im Body). (5) Server verarbeitet, erstellt den Eintrag, antwortet mit 201 Created.
---
<!-- _class: disable -->
### I2 – Gesamtablauf: Störfall analysieren
**Thema:** Netzwerk + HTTP – Transfer/Problemlösung
**Punkte:** 3
**Typ:** `[ESSAY]`
Sie rufen eine Webseite auf und erhalten eine Fehlermeldung. Beschreibe drei verschiedene Szenarien, die zu einer Fehlermeldung führen könnten, und erkläre, in welcher „Schicht" des Ablaufs (DNS, TCP, HTTP) das Problem liegt und wie Sie es erkennen.
> **Musterlösung:** (1) DNS-Fehler: „Der Server wurde nicht gefunden" → DNS konnte den Namen nicht auflösen (z. B. Tippfehler in der URL oder DNS-Server nicht erreichbar). (2) TCP-Fehler: „Die Verbindung wurde verweigert" → Server existiert (IP bekannt), akzeptiert aber keine Verbindung (nicht gestartet, Port blockiert). (3) HTTP-Fehler: 404 → TCP-Verbindung erfolgreich, aber die angeforderte Ressource existiert nicht auf dem Server.