--- marp: true theme: gaia paginate: true backgroundColor: #fff header: "Web Engineering – DHBW Stuttgart" footer: "Michael Czechowski – SoSe 2026" title: Web Engineering --- ![bg cover opacity:0.2](./assets/background.png) # Web Engineering **DHBW Stuttgart** · Informatik / Wirtschaftsinformatik **Sommersemester 2026** --- # Ressourcen zum Selbstlernen - **CODE CRISPIES** — [codecrispi.es](https://codecrispi.es/) - **Online Code-Editor** — [codepen.io](https://codepen.io/pen/) - **MDN** — [developer.mozilla.org](https://developer.mozilla.org/de/) - **Flexbox-Spiel** — [flexboxfroggy.com](https://flexboxfroggy.com/) - **Grid-Spiel** — [cssgridgarden.com](https://cssgridgarden.com/) --- # Herzlich Willkommen! ## 1. Sitzung: 08.05.2026 --- # Über mich ![bg right:33% fit](./assets/logos/collage.png) Michael Czechowski - Software Engineer, ehemals freischaffend - Lektor an HdM Stuttgart + DHBW - librete.ch --- # Vorlesungsplan (Auszug) | Termin | Thema | |--------|-------| | 1 | Web Engineering (heute) | | 2 | CSS Extended | | 3 | Node.js Basics | | 4 | Node.js Advanced | | 5 | Testing | | 6 | TypeScript | | 7 | Docker | | 8 | Best Practices | --- # Prüfungsleistung — 75 P + 10 Bonus **Projekt-Abgabe** statt Klausur. | Bereich | Punkte | |---------|-------:| | Projekt-Struktur + README | 10 | | Code-Qualität | 15 | | Git-Hygiene | 10 | | Tests | 10 | | Docker | 10 | | HTTP / API | 10 | | Frontend + A11y | 10 | | Präsentation + Bonus | 5 + 10 | --- # Kontext: was ist „das Web"? --- # Internet-Timeline | Jahr | Was | |------|-----| | 1969 | ARPANET — 4 Knoten | | 1971 | Email (Ray Tomlinson, `@`) | | 1983 | TCP/IP-Standard | | **1989** | **WWW** (Berners-Lee, CERN) | | 1993 | Mosaic-Browser → Web wird populär | --- # Das WWW (1989) **Tim Berners-Lee am CERN.** Drei Standards: - **HTTP** — Protokoll - **HTML** — Format - **URL** — Adresse Patentfrei → Web konnte explodieren. --- # Heute: physische Infrastruktur - ~400 Unterseekabel - 1,3 Mio km Glasfaser weltweit - DE-CIX Frankfurt: größter Internet-Knoten (~12 Tbit/s) Das Web ist **physisch.** --- # URL → Pixel in 7 Schritten 1. **URL parsen** — Schema, Host, Port, Path 2. **DNS-Lookup** — Host-Name → IP 3. **TCP-Handshake** mit Server 4. **TLS-Handshake** (https) 5. **HTTP-Request** senden 6. Server antwortet mit **HTML + CSS + JS** 7. Browser **parsed + rendert** → Pixel --- # HTTP — Anatomie ```http GET /index.html HTTP/1.1 Host: librete.ch User-Agent: Mozilla/5.0 ... HTTP/1.1 200 OK Content-Type: text/html Content-Length: 1234 ... ``` **Statuscodes:** 200 OK · 301 Moved · 404 Not Found · 500 Server Error --- # Onboarding ## Tools, Runtimes, Workflows --- # Werkzeuge & Betriebssystem | Bereich | Empfehlung | |---------|------------| | Editor | **VS Code** · JetBrains (edu lizenz frei) | | Browser | **Chromium / Firefox** | | Terminal | macOS Terminal · Linux Terminal · Windows Terminal | | Paket-Manager | macOS: brew · Linux: apt/dnf · Windows: winget/scoop/choco | | Versions-Control | Git + GitHub/Gitea | --- # Node.js installieren **Best Practice:** Versions-Manager statt Direkt-Install. | OS | Empfehlung | |----|------------| | macOS | `brew install fnm` → `fnm install --lts` | | Linux | `curl -fsSL https://fnm.vercel.app/install \| bash` | | Windows | `winget install Schniz.fnm` | **Aktuelle LTS:** Node 24. --- # Warum Versions-Manager? **Direkt-Install** (z.B. `brew install node`) bringt Probleme: - Projekt-A braucht Node 18, Projekt-B braucht Node 22 → Konflikt - Update bricht alte Projekte - Kein automatisches Switching pro Projekt **fnm / nvm / volta:** pro Projekt Node-Version, automatisch via `.nvmrc`. --- # Alternative Runtimes | Runtime | Stärke | |---------|--------| | **Node** | Standard, größtes Ökosystem | | **Deno** | Sicher by default, TypeScript nativ | | **Bun** | Schnell, all-in-one (runtime + bundler + tester) | Für DHBW-Kurs: **Node 24 LTS.** --- # Browser DevTools **F12** öffnet das Power-Tool jeder Webentwicklung. | Tab | Wofür | |-----|-------| | Elements | DOM-Baum inspizieren + live editieren | | Console | JS ausführen, Errors lesen | | Network | HTTP-Requests sehen, Latenz | | Performance | Render + Memory profilen | | Lighthouse | A11y · SEO · Perf-Audit | --- # HTTP-Clients Tools zum Testen von APIs: - **curl** — CLI, überall - **Hoppscotch** — Browser, Open Source - **Postman** — GUI, kommerziell - **VS Code REST Client** — Plugin --- # Git Setup ```sh git config --global user.name "Dein Name" git config --global user.email "du@dhbw.de" git config --global init.defaultBranch main git config --global core.autocrlf input # Windows: true ``` **SSH-Key** für GitHub/Gitea ohne Passwort-Prompt: ```sh ssh-keygen -t ed25519 -C "du@dhbw.de" cat ~/.ssh/id_ed25519.pub # zu GitHub kopieren ``` --- # Projekt-Skeleton ``` mein-projekt/ ├── .git/ ├── .gitignore # node_modules/, .env, build/ ├── README.md # was, wie, warum ├── package.json # npm metadata + scripts ├── src/ # eigener Code ├── public/ # statische Assets (für Web) ├── tests/ # Unit + Integration └── Dockerfile # für Container-Deploy ``` --- # HTML ## Hypertext Markup Language --- # Was ist HTML? **Tim Berners-Lee, 1989.** Struktur-Format des Webs. **Syntax:** Tags mit Attributen umfassen Inhalt. **Browser parst HTML** → DOM (Document Object Model) → rendert. Plain-Text mit Tags. Lesbar mit jedem Editor. --- # HTML-Anatomie ```html Mein Link ``` - `` — Closing-Tag - Alles zusammen = **Element** --- # Self-closing Tags ```html Sonnenuntergang
``` Kein Closing-Tag. Inhalt aus Attributen + (für ``) User-Eingabe. --- # Document-Grundgerüst ```html Meine Seite

Hallo Welt

``` --- # Semantische HTML-Tags | Tag | Bedeutung | |-----|-----------| | `
` | Kopfbereich (Logo, Nav) | | `