Stefan Franke

Entwicklung interaktiver Softwareanwendungen

SoSe 2025

Bildbeschreibung

Übersicht

  • Wiederholung (was war vor 14 Tagen...)
  • Basics & (neue) Begriffe von Serveranwendungen
  • Von Website zur Anwendung
    • 🐍 Python – Programmiersprache im Backend
    • 🔥 Flask – Web-Framework für Routen & Logik
    • 🧪 Virtuelle Umgebung (venv) für isolierte Installation

Wiederholung: Was war vor 14 Tagen?

  • 📁 Strukturierung eines Website-Projekts im Verzeichnis ~/www
  • 🧭 Erstellung einer Navigationsstruktur mit fünf Unterseiten:
    • index.html, ueber_uns.html, kontakt.html, impressum.html, eis_projekt.html
  • 🎨 Auslagerung des Designs in css/style.css
    → Responsives Layout, konsistente Gestaltung
  • 🖼️ Aufbau einer kleinen Fotogalerie im Verzeichnis img/
    → Optional mit Klickvergrößerung
  • 📄 PDF-Datei im Ordner assets/ hochladen und verlinken
  • ✅ Trennung von Inhalt, Struktur und Darstellung gemäß Webstandards
  • ✏️ Erste Schritte mit JavaScript:
    • Einfache Skripte mit Berechnung, Ausgabe, Bedingungen & Funktionen
    • DOM-Manipulation: Texte einfügen, Formulareingaben verarbeiten, auf Klicks reagieren
    • 🔗 HTML = Struktur, CSS = Stil, JavaScript = Verhalten
  • 🎯 Ziel: Webseiten interaktiv und dynamisch gestalten

Rückblick & Herausforderungen

  • 📄 Inhalt einer Datei mit nano löschen:
    • Möglichkeit 1: Alles markieren und löschen:
      Strg + _, 1 → springt an den Anfang
      Strg + Umschalt + 6 → Markierung starten
      → Mit Pfeil ↓ bis zum Ende, dann Strg + K → löschen
    • Möglichkeit 2: Mehrfach Strg + K drücken, um Zeile für Zeile zu löschen
    • ✅ Terminal-Befehl: > meintext.txt
      → Datei wird geleert, aber nicht gelöscht
    • → Datei wird geleert, aber nicht gelöscht
  • 📤 Datei vom lokalen Gerät auf den Server hochladen (via scp):
    • scp -P 2222 logo.svg isa##@edumake.de:/home/isa##/www/img/
    • -P 2222: Port
      isa##@edumake.de: Nutzername
      ~/www/img/: Zielverzeichnis
    • ⚠️ Befehl muss lokal (nicht auf dem Server) ausgeführt werden
    • 📁 Zielverzeichnis muss existieren – ggf. per SSH vorher anlegen
    Webserver-Schema

❓ Was hat gut geklappt? Wo gab es weitere Schwierigkeiten?

📚 Zentrale Begriffe aus Sitzung 1/2

  • Terminal
  • PowerShell
  • Verzeichnisstruktur
  • cd, ls, pwd
  • mkdir, cp, mv, rm
  • nano
  • SSH
  • Public / Private Key
  • scp
  • JavaScript
  • script-Tag
  • document.getElementById()
  • innerHTML
  • event / EventHandler
  • IP-Adresse
  • Port (2222)
  • URL
  • HTML / CSS / JavaScript
  • Landing Page
  • Ubuntu Server
  • Webserver
  • NGINX
  • SSL / HTTPS
  • Routing
  • DOM
  • Formular / input
  • .value
  • prompt() / alert()
  • Funktion / function
  • if / else
Begriffe im Zusammenhang – Webserver

🧠 Begriffe im Überblick (kompakt erklärt)

  • Terminal: Kommandozeilenprogramm unter macOS/Linux zur Eingabe von Befehlen.
  • PowerShell: Windows-Äquivalent zum Terminal, mit eigener Syntax und Erweiterungen.
  • Verzeichnisstruktur: Aufbau von Ordnern und Unterordnern auf einem System.
  • cd, ls, pwd: Navigation (cd), Anzeige von Inhalten (ls), aktueller Pfad (pwd).
  • mkdir, cp, mv, rm: Ordner erstellen, Dateien kopieren, verschieben, löschen.
  • nano: Einfacher Texteditor in der Kommandozeile (z. B. für HTML-Dateien).
  • SSH: Sicheres Protokoll zur Verbindung mit einem Server über das Netzwerk.
  • Public / Private Key: Schlüsselpaar für sichere Authentifizierung ohne Passwort.
  • scp: Befehl zum sicheren Kopieren von Dateien über SSH.
  • IP-Adresse: Eindeutige Netzwerkadresse eines Geräts (z. B. 89.58.62.146).
  • Port (2222): Spezieller Kommunikationskanal – wir nutzen Port 2222 für SSH.
  • URL: Adresse einer Webseite, z. B. https://isa17.edumake.de.
  • HTML / CSS / JavaScript: Struktur, Stil und Funktion einer Website.
  • Landing Page: Eigene Startseite auf dem Server im Ordner ~/www.
  • Ubuntu Server: Betriebssystem für Server – läuft auf unserem Testserver.
  • Webserver: Software, die Webseiten ausliefert (z. B. Apache oder NGINX).
  • NGINX: Leistungsstarker Webserver und Reverse Proxy.
  • SSL / HTTPS: Verschlüsselung für sichere Webseitenzugriffe.
  • Routing: Steuerung, welche URL auf welche Datei oder Funktion zeigt.
  • JavaScript: Programmiersprache, die Webseiten interaktiv und dynamisch macht.
  • script-Tag: HTML-Element zur Einbindung von JavaScript-Code in eine Webseite.
  • document.getElementById(): Zugriff auf ein HTML-Element per ID aus dem DOM.
  • innerHTML: Inhalt eines HTML-Elements (Text, HTML) per JavaScript ändern.
  • event / EventHandler: Ereignis (z. B. Klick), das per JavaScript erkannt und verarbeitet wird.
  • DOM: Document Object Model – die Baumstruktur der HTML-Elemente einer Webseite.
  • Formular / input: HTML-Elemente zur Eingabe von Nutzerdaten auf Webseiten.
  • .value: JavaScript-Zugriff auf den Wert eines Eingabeelements (z. B. eines Textfelds).
  • prompt() / alert(): Einfache Fenster zur Eingabe (prompt) oder Ausgabe (alert) von Daten.
  • Funktion / function: Wiederverwendbarer Block von JavaScript-Code für bestimmte Aufgaben.
  • if / else: Bedingte Verzweigung in JavaScript – führt Code je nach Wahrheitswert aus.

✨ Heute wird aus einer Website eine richtige Anwendung

🎯 Ziele der heutigen Veranstaltung

  • Ziel: Gemeinsame Entwicklung eines virtuellen Escape Games.
  • Aufgabe: Jedes Tandem gestaltet einen einzigartigen Raum mit individuellen Rätseln.
  • Koordination: Zuweisung fester Raumnummern (isa15 bis isa30) an jedes Tandem.
  • Rätsel-Einzigartigkeit / Doppelungsvermeidung: Austausch untereinander zur Sicherstellung, dass Rätsel nicht mit anderen Räumen überschneiden.

🛠️ Verwendete Technologien

  • HTML: Struktur und Inhalt der Webseiten
  • CSS: Gestaltung und Layout (Farben, Schrift, Aussehen)
  • JavaScript: Interaktive Elemente, Eingabeverarbeitung
  • Flask (Python): Serverlogik, Rätselprüfung, Spielfortschritt
  • Python: Backend-Logik, Datenverarbeitung, Zustandsverwaltung

🐍 Was ist Python?

Python ist eine einfach zu lernende, mächtige Programmiersprache, die besonders gut für Einsteiger geeignet ist.
In unserem Projekt verwenden wir sie für die Logik im Escape Room – z. B. zur Auswertung von Rätseln.

🔗 Empfohlene Tutorials für Einsteiger (aus OOP WiSe):

🔥 Flask – Python für Webanwendungen

  • leichtgewichtiges Python-Webframework
  • ideal für kleine Webprojekte (z. B. Escape Game)
  • fügt Webseiten echte Logik & Interaktivität hinzu
  • läuft als eigener Webserver im Hintergrund

👉 Mit Flask definierst man **Routen** wie / oder /raetsel, die bei einem Aufruf durch den Browser eine Funktion starten. Diese Funktion kann z. B. eine HTML-Seite anzeigen oder prüfen, ob eine Rätselantwort richtig ist.

🔗 Mehr Infos: flask.palletsprojects.com

🧪 Virtuelle Entwicklungsumgebung (venv)

  • Isolierter Bereich für ein Python-Projekt
  • Unabhängig von global installierten Paketen
  • Verhindert Versionskonflikte zwischen Projekten
  • Wichtig bei Flask, damit Pakete nur lokal gelten

🛠️ So erstellst du eine venv:

python3 -m venv venv
source venv/bin/activate

👉 Nach dem Aktivieren steht (venv) vor deiner Eingabezeile.
Um die Umgebung zu verlassen: deactivate

📁 Ordnerstruktur & Platzierung der venv

Wenn Sie mit Flask arbeiten, sollten Sie die virtuelle Umgebung direkt im Projektordner anlegen – z. B. unter /var/www/isa##/venv.

Nach dem Anlegen entsteht ein neuer Ordner venv/. Darin befindet sich alles, was Ihr Projekt braucht:

  • bin/ – enthält ausführbare Dateien wie python und pip
  • lib/ – enthält alle installierten Python-Pakete (z. B. Flask)
  • include/ – Header-Dateien (für C-Module, meist nicht relevant)
  • pyvenv.cfg – Konfigurationsdatei der virtuellen Umgebung

👉 Sie müssen diesen Ordner nicht bearbeiten – aktivieren Sie einfach die Umgebung und arbeiten Sie darin weiter.

📁 Empfohlene Projektstruktur

So könnte Ihr Home-Verzeichnis für das Tutorial sinnvoll aufgebaut sein:

/home/isa##
├── .ssh/                      # SSH-Zugang (public key)
├── www/                      # Statische Landing Page
│   ├── index.html
│   ├── unterseiten.html
│   ├── css/
│   │   └── style.css
│   ├── js/
│   │   └── script.js
│   └── img/
│
├── flask_app/                # Flask-Anwendung
│   ├── app.py                # Haupt-Logik
│   ├── venv/                 # Virtuelle Umgebung
│   ├── templates/            # HTML-Templates (Jinja2)
│   │   ├── index.html
│   │   └── raetsel.html
│   └── assets/               # CSS, JS, Bilder für Flask
│       ├── style.css
│       ├── script.js
│       └── img/

✅ Trennung von statischer Seite (www/) und interaktiver Flask-App (flask_app/) sorgt für Übersicht.

🌐 So erreichen Sie Ihre Flask-Anwendung im Browser

Angenommen, Sie sind Gruppe isa17, dann lautet die Adresse:

http://isa17.edumake.de:8017

🔗 Schema: http://[subdomain].edumake.de:[port]

📌 Wichtig dabei:

Was Beispielwert Bedeutung
Subdomain isa17 Ihre zugewiesene Raumnummer
Port 8017 Eindeutiger Port pro Gruppe
Flask-Code app.run(port=8017) Muss zur Subdomain passen

🖥️ Überblick: Serverstruktur & Projektaufbau

Die folgende Grafik zeigt den grundlegenden Aufbau des Servers und die Struktur unseres Projekts:

Überblick Serverstruktur

🚀 Let's start

  1. Kein Vorwissen? Starten Sie mit Python
    🐍 Hilfreich für Einsteiger: Python-Tutorials (Installation, Grundlagen)
  2. Warm-up: Eigene HTML-Unterseite im Menü verlinken
    🧪 Erstellen Sie mit nano eine neue Datei meine_seite.html im Verzeichnis ~/www/.

    👉 Diese Unterseite soll enthalten:
    • 🎨 Eine Hintergrundfarbe per eingebettetem CSS
    • ⚙️ Einen Button mit alert("Hallo!") bei Klick
    ➕ Verlinken Sie die Seite über das vorhandene Navigationsmenü (z. B. in index.html).
    🧹 Entfernen Sie veraltete JavaScript-Popups, falls vorhanden. 🔍 Testen Sie die Seite anschließend unter: https://isa##.edumake.de/meine_seite.html

  3. Flask – Weblogik verstehen & anwenden
    🔥 Einstieg ins Tutorial: Flask Tutorial