rein damit
This commit is contained in:
1 parent
7f6b8ebe07
commit
07dbc01c92
38 files changed
+5632
-5
No files matched your search
@@ -0,0 +1,34 @@
|
||||
# Anleitung für Prüfer
|
||||
|
||||
> Stand: 29.10.2026 · Ziel: jede Frage fachlich prüfen und freigeben oder ablehnen.
|
||||
|
||||
## Voraussetzungen
|
||||
- Python ≥ 3.11 (nur Standardbibliothek), ein aktueller Browser (Firefox, Chromium).
|
||||
- Editor mit JSON-Schema-Unterstützung (z. B. VSCode/VSCodium) – validiert beim Tippen über `$schema`.
|
||||
|
||||
## Ablauf
|
||||
1. Paket entpacken, `index.html` öffnen und die Fragen im **Lernmodus** durchgehen (Topic-Filter auf der Startseite, Reihenfolge „nach Objective“, Optionen nicht mischen).
|
||||
2. Fragen im Quelltext `data/<prüfung>/questions_<topic>.json` prüfen – Regeln: [question_rules.md](question_rules.md), Prüfungsrahmen: [exam_format.md](exam_format.md).
|
||||
3. Ergebnis je Frage als Vermerk eintragen:
|
||||
```json
|
||||
"review": { "status": "approved", "by": "<Name oder Rolle>", "date": "2026-11-02" }
|
||||
"review": { "status": "rejected", "by": "<Name oder Rolle>", "date": "2026-11-02", "note": "Option ‚…‘ ist ebenfalls korrekt" }
|
||||
```
|
||||
Korrekturen direkt in der Frage vornehmen und `meta.version` der Datei erhöhen.
|
||||
4. Prüfen und bauen:
|
||||
```bash
|
||||
python3 tools/build_bank.py -c # Regeln, Prüfstatus, Abdeckung je Objective
|
||||
python3 tools/build_bank.py # js/bank.js neu (verschlüsselt, eigener PSK in tools/.psk)
|
||||
python3 tools/build_bank.py --approved-only -e # nur Freigegebenes, Export nach dist/
|
||||
python3 -m http.server 8080 -d dist # Export ausliefern
|
||||
```
|
||||
5. Geänderte `questions_*.json` zurückgeben (nicht `js/bank.js`, nicht `tools/.psk`).
|
||||
|
||||
## Neue Fragen
|
||||
Nächste freie Nummer im Objective verwenden (`<objective>-<NNN>`), Format siehe [`../README.md`](../README.md#format-einer-frage). Ohne Build testen: Datei im Simulator über **Import** laden.
|
||||
|
||||
## Tests
|
||||
```bash
|
||||
chromium --headless --allow-file-access-from-files --virtual-time-budget=5000 --dump-dom tests/selftest.html | grep -o 'RESULT[^<]*'
|
||||
chromium --headless --allow-file-access-from-files --virtual-time-budget=40000 --dump-dom tests/ui_smoke.html | grep -oE '(FAIL|RESULT)[^<]*'
|
||||
```
|
||||
@@ -0,0 +1,28 @@
|
||||
# Festlegungen
|
||||
|
||||
> Stand: 29.10.2026 · getroffene Entscheidungen mit Begründung und offene Punkte.
|
||||
|
||||
## Entscheidungen
|
||||
| Datum | Entscheidung | Warum |
|
||||
|---|---|---|
|
||||
| 29.10.2026 | Zunächst LPIC-1 (101-500, 102-500), Objectives 5.0; weitere Prüfungen (LPIC-2) als zusätzliche Ordner unter `data/` | Prüfungen auswählbar, erweiterbar ohne Codeänderung |
|
||||
| 29.10.2026 | Statische Web-Anwendung, läuft von `file://` **und** von jedem statischen Webserver; kein Backend | lokal ohne Installation nutzbar |
|
||||
| 29.10.2026 | reveal.js 5.1.0 unverändert unter `vendor/reveal/`, eingebautes **Dracula**-Theme; kein CDN | offline lauffähig, reproduzierbar |
|
||||
| 29.10.2026 | Reines JavaScript (klassische Scripts, ES2022), kein TypeScript, kein Build für den Code | ES-Module und `fetch` sind unter `file://` blockiert; kein node nötig |
|
||||
| 29.10.2026 | Fragen-Quelltext als JSON unter `data/` (Klartext), Bank `js/bank.js` per `tools/build_bank.py` (nur Python-Standardbibliothek) | JSON-Schema-Prüfung im Editor; Script-Datei lädt auch unter `file://` |
|
||||
| 29.10.2026 | Fragen: `single`/`multi` mit **genau 5 Optionen**, Erläuterung je Option, Gesamterläuterung; `fill` für Lückentext | Vorgabe des Betreibers; LPI-Fragetypen |
|
||||
| 29.10.2026 | Lernmodus: „Weiter“ zeigt erst die Auflösung mit Erläuterungen, dann die nächste Frage | Lernen mit sofortiger Begründung |
|
||||
| 29.10.2026 | Prüfungsmodus: 60 Fragen, 90 min, Auswahl gewichtet nach Objectives, Auflösung nach Abgabe | entspricht dem LPI-Format ([exam_format.md](exam_format.md)) |
|
||||
| 29.10.2026 | Bewertung alles-oder-nichts; Richtwert Bestehen 65 % (`pass_percent` in `exam.json`) | LPI veröffentlicht weder Teilpunkte noch Prozentgrenze (Skala 200–800, bestanden ab 500) – **Annahme** |
|
||||
| 29.10.2026 | Fortschritt automatisch im `localStorage`; Export/Import der Sitzung als JSON (enthält die Fragen der Sitzung); Fragenpakete per Import nachladbar | Pause und Fortsetzen, auch auf anderem Rechner |
|
||||
| 29.10.2026 | Ausgelieferte Bank ChaCha20-verschlüsselt (RFC 8439); Schlüssel = SHA-256 über einen PSK (`LPIC_SIM_PSK` bzw. `tools/.psk`, nicht weitergeben), steht als `build`-Kennung in `bank.js` | kein Klartext auf der Platte; **Verschleierung**, kein Schutz gegen gezielte Analyse, da der Browser den Schlüssel braucht |
|
||||
| 29.10.2026 | Eigene ChaCha20-Implementierung statt WebCrypto | WebCrypto fehlt bei `http://<IP>` (kein Secure Context) und kennt kein ChaCha20 |
|
||||
| 29.10.2026 | Prüfvermerk `review` je Frage; `rejected` nie in der Bank, `--approved-only` für Freigabe-Builds | Durchsicht und Freigabe durch Prüfer |
|
||||
| 29.10.2026 | Export `build_bank.py -e` nur mit Laufzeitdateien (ohne `data/`, `tools/`, `tests/`) | Auslieferung an Lernende ohne Quelltext |
|
||||
|
||||
## Offene Punkte
|
||||
1. Richtwert 65 % für „bestanden“ – anpassen?
|
||||
2. Teilpunkte bei Mehrfachauswahl: von LPI nicht dokumentiert; derzeit alles-oder-nichts.
|
||||
3. Sitzungs-Export und `localStorage` enthalten die Fragen einer Sitzung im Klartext.
|
||||
4. Alle 180 Fragen sind KI-erstellt (Claude Opus 5.5) und **noch nicht fachlich geprüft** – Aufgabe der Prüfer ([REVIEW.md](REVIEW.md)).
|
||||
5. Nicht getestet: Safari, echte Mobilgeräte.
|
||||
@@ -0,0 +1,38 @@
|
||||
# LPIC-1 – Prüfungsformat und Objectives 5.0
|
||||
|
||||
> Stand: 29.10.2026 · Alle Angaben von lpi.org, abgerufen am 29.10.2026. Grundlage für Prüfungsmodus und Fragenbank.
|
||||
> Inoffizielles Lernwerkzeug, nicht mit dem Linux Professional Institute (LPI) verbunden. „LPIC“ ist eine Marke des LPI.
|
||||
|
||||
## Fakten
|
||||
| Merkmal | Wert | Quelle |
|
||||
|---|---|---|
|
||||
| Prüfungen | 101-500 und 102-500 | Objectives-Seite |
|
||||
| Objectives-Version | 5.0 | Objectives-Seite |
|
||||
| Umfang je Prüfung | 60 Fragen, 90 Minuten | LPIC-1-Übersicht („60 multiple-choice and fill-in-the-blank questions“) |
|
||||
| Fragetypen | Multiple Choice (Einfach-/Mehrfachauswahl) und Lückentext | LPIC-1-Übersicht |
|
||||
| Bewertung | Skala 200–800, bestanden ab 500 | FAQ („ranked on a scale from 200 to 800, with a passing score of 500“) |
|
||||
| Prozentgrenze | nicht veröffentlicht; hängt von der Fragenkombination ab (psychometrische Studien, modifizierte Angoff-Studie) | FAQ, Development Standards |
|
||||
| Gewichtung | Gewicht eines Objectives = Anzahl Fragen dazu; Summe je Prüfung = 60 | FAQ, Objectives-Seite |
|
||||
| Teilpunkte bei Mehrfachauswahl | nicht dokumentiert | – |
|
||||
| Angekündigte Änderungen | `ifup`/`ifdown`, net-tools und TCP-Wrapper sollen entfallen (ohne Termin) | Objectives-Seite |
|
||||
|
||||
## Regeln zur Fragenerstellung laut LPI (Development Standards)
|
||||
- Multiple Choice bevorzugt, da „more information per unit time“.
|
||||
- Distraktoren müssen **falsch, aber plausibel** sein.
|
||||
- Formulierung klar, auch für Nicht-Muttersprachler verständlich; verwirrende Items werden abgelehnt oder umformuliert.
|
||||
- Items, die vorhandenen im Wesentlichen gleichen, werden abgelehnt.
|
||||
- Fachleute prüfen Korrektheit, Relevanz und erwartete Schwierigkeit.
|
||||
- Eine feste Anzahl Antwortoptionen nennt LPI **nicht**; die 5 Optionen sind eine Projektvorgabe ([decisions.md](decisions.md)).
|
||||
|
||||
## Objectives 5.0 mit Gewicht
|
||||
**101:** 101.1 (2) · 101.2 (3) · 101.3 (3) · 102.1 (2) · 102.2 (2) · 102.3 (1) · 102.4 (3) · 102.5 (3) · 102.6 (1) · 103.1 (4) · 103.2 (2) · 103.3 (4) · 103.4 (4) · 103.5 (4) · 103.6 (2) · 103.7 (3) · 103.8 (3) · 104.1 (2) · 104.2 (2) · 104.3 (3) · 104.5 (3) · 104.6 (2) · 104.7 (2) – 104.4 entfallen.
|
||||
|
||||
**102:** 105.1 (4) · 105.2 (4) · 106.1 (2) · 106.2 (1) · 106.3 (1) · 107.1 (5) · 107.2 (4) · 107.3 (3) · 108.1 (3) · 108.2 (4) · 108.3 (3) · 108.4 (2) · 109.1 (4) · 109.2 (4) · 109.3 (4) · 109.4 (2) · 110.1 (3) · 110.2 (3) · 110.3 (4).
|
||||
|
||||
Titel und Topics maschinenlesbar: [`../data/lpic1_101/exam.json`](../data/lpic1_101/exam.json), [`../data/lpic1_102/exam.json`](../data/lpic1_102/exam.json).
|
||||
|
||||
## Quellen
|
||||
- https://www.lpi.org/de/exam-101-102-objectives/ (abgerufen 29.10.2026)
|
||||
- https://www.lpi.org/value-of-certification/our-certification-development-standards/ (abgerufen 29.10.2026)
|
||||
- https://www.lpi.org/our-certifications/lpic-1-overview/ (abgerufen 29.10.2026)
|
||||
- https://www.lpi.org/faq/ (abgerufen 29.10.2026)
|
||||
@@ -0,0 +1,35 @@
|
||||
# Regeln für Fragen
|
||||
|
||||
> Stand: 29.10.2026 · gilt für alle Dateien `data/<prüfung>/questions_*.json`.
|
||||
> Technische Regeln prüft `tools/build_bank.py -c` (und der Import im Simulator); inhaltliche Regeln prüfen Menschen.
|
||||
|
||||
## Technisch (automatisch geprüft)
|
||||
| Regel | Details |
|
||||
|---|---|
|
||||
| Datei | `format: "lpic-sim-questions"`, `exam` = id aus `exam.json`, Schema `data/schema/questions.schema.json` |
|
||||
| id | `<objective>-<NNN>`, z. B. `103.4-007`, eindeutig je Prüfung; Objective muss in `exam.json` existieren |
|
||||
| `single` | genau 5 Optionen `a`–`e` in dieser Reihenfolge, genau 1 richtig |
|
||||
| `multi` | genau 5 Optionen, 2–4 richtig; der Simulator zeigt „Wählen Sie ZWEI/DREI/VIER“ und begrenzt die Auswahl |
|
||||
| `fill` | keine Optionen; `answers` = akzeptierte Antworten, erste = Musterlösung; Leerraum wird normalisiert; `case_sensitive` Standard `true` |
|
||||
| Erläuterungen | jede Option hat `explanation`, jede Frage eine Gesamt-`explanation` |
|
||||
| keine doppelten Optionstexte | |
|
||||
| `review.status` | `pending` (Standard), `approved`, `rejected` |
|
||||
|
||||
## Inhaltlich (Prüfer)
|
||||
- **Genau eine fachlich richtige Lösung** (bzw. genau die markierten bei `multi`). Distraktoren eindeutig falsch, aber plausibel – keine „auch richtig, aber nicht gemeint“-Optionen.
|
||||
- Klar und kurz, auch für Nicht-Muttersprachler verständlich; keine Fangfragen über Formulierungstricks, keine doppelten Verneinungen.
|
||||
- Genau einem Objective zugeordnet; Inhalt passt zu dessen Lernzielen (Objectives 5.0, [exam_format.md](exam_format.md)).
|
||||
- Keine inhaltlichen Dubletten.
|
||||
- Erläuterungen begründen **warum** – nicht nur „richtig/falsch“; möglichst mit `references` (Manpage).
|
||||
- Erläuterungen nie auf Buchstaben beziehen („Option A“) – die Optionen werden im Simulator gemischt.
|
||||
- `fill`: alle gleichwertigen Schreibweisen in `answers` aufnehmen (Lang-/Kurzoptionen, Reihenfolge der Optionen).
|
||||
- Bewertung im Simulator wie vermutlich bei LPI: alles oder nichts.
|
||||
|
||||
## Schreibweise
|
||||
- Sprache Deutsch mit korrekten Umlauten (ä ö ü ß); Befehle, Optionen, Pfade im Original.
|
||||
- Inline-Code zwischen zwei Backticks; einzelne Backticks vermeiden (Befehlsersetzung als `$(…)` schreiben). `**fett**` für Betonung.
|
||||
- Mehrzeilige Ausgaben/Dateien ins Feld `code`.
|
||||
- Beispieladressen und -namen aus Dokumentationsbereichen: `192.0.2.0/24`, `198.51.100.0/24`, `example.org`, `host01`, `anna`.
|
||||
|
||||
## Datei-Header
|
||||
Jede Datei trägt im Objekt `meta` (bei Code als Kommentar) `file`, `brief`, `author`, `owner`, `version` (`x.y.z (TT.MM.JJJJ)`), bei KI-Beteiligung `assist`. Bei inhaltlicher Änderung `version` erhöhen.
|
||||
Reference in new issue
Block a user