Files
fortunecookie/LEKTIONEN_2026-06-03.md
2026-06-04 21:39:13 +02:00

231 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Lektionen & Erkenntnisse - 03.06.2026
## 📌 Projekt: FortuneCookie App (Ubuntu Touch 24.04 / Lomiri)
---
## 🎯 Heute erreichte Meilensteine
| Aufgabe | Status | Lösung |
|---------|--------|--------|
| Aktive Liste unten links anzeigen | ✅ | `Label` mit `currentFortuneListDescription` |
| Nur Beschreibung (ohne Name/Anzahl) | ✅ | Eigene Property für reine Beschreibung |
| Listen-Beschreibung auf Icon-Höhe | ✅ | `verticalCenter: musicButton.verticalCenter` |
| Audio-Button verkleinern | ✅ | 10×10 gu → 8×8 gu, Font: xxx-large → xx-large |
| Lautstärke-Regelung (SW) | ❌ | **Funktioniert nicht in Ubuntu Touch** |
| Lautstärke-Anpassung (HW) | ✅ | `chinese_music.mp3` per FFmpeg auf 30% reduziert |
| Alle Listen ≥100 Sprüche | ✅ | farmer wisdom, UNfortune, sandman, famous quotes ergänzt |
| Neue Listen hinzufügen | ✅ | sandman (Bettgehzeit!), famous quotes (Berühmte Zitate) |
| Autoren zu Zitaten | ✅ | Format: "Zitat - Autor" |
---
## 🔧 Technische Erkenntnisse
### 1. **Lomiri/Ubuntu Touch - Medienwiedergabe**
| Problem | Erkenntnis | Lösung |
|---------|-----------|--------|
| `MediaPlayer.volume` wirkt nicht | QtMultimedia Volume-Property wird in Ubuntu Touch ignoriert | **Dateiebene anpassen** mit FFmpeg |
| PyOtherSide sync-Aufrufe blockieren UI | Deadlock-Gefahr | **Asynchrone** `py.call()` verwenden |
| Lautstärke-Slider ohne Effekt | Plattform-Limitierung | Slider entfernt, feste Volumes |
**FFmpeg-Befehl zum Lautstärke reduzieren:**
```bash
ffmpeg -i input.mp3 -af "volume=0.3" -y output.mp3
```
### 2. **Qt/QML Best Practices**
#### ✅ Funktioniert:
```qml
// Property-Binding für automatische Synchronisation
MediaPlayer {
volume: root.musicVolume // Wird automatisch aktualisiert
}
```
#### ❌ Problem: Binding wird gebrochen durch:
```qml
// Direkte Zuweisung zerstört das Binding!
mediaPlayer.volume = value; // ❌
```
#### ✅ Richtig:
```qml
// Nur die Property setzen, Binding überträgt automatisch
root.musicVolume = value; // ✅
```
#### Anker-Positionierung:
```qml
// Vertikal zentriert mit anderem Element
Label {
anchors {
left: parent.left
verticalCenter: musicButton.verticalCenter // ✅
leftMargin: units.gu(2)
}
}
```
---
## 🌿 Branches-System
### Aktuelle Struktur:
```
main → Stabil (Releases)
└── daily → Entwicklung (aktuell)
```
### Regeln:
1. **Daily-Branch** für alle Entwicklungen nutzen
2. **Main-Branch** nur für getestete Releases
3. **Vor Merge:**
- App testen auf Gerät
- Alle Funktionen prüfen
- Keine debug-Logs im Production-Code
4. **Versionierung:**
- `manifest.json.in`: App-Version (1.0.x)
- `fortunecookie.py`: Modul-Version (1.1.x)
### Heute genutzt:
```bash
# Im daily-branch arbeiten
git checkout daily
# Ändern, bauen, installieren
clickable build && clickable install
```
---
## 📚 Referenzquellen & Zeitersparnis
### 🔍 **Referenz-Apps studieren!**
- **metime** (Lomiri) - Gute Beispiele für:
- UI/UX-Patterns
- MediaPlayer-Integration
- Einstellungen-Handling
- Python-QML-Kommunikation
### ⏱️ **Fehlerbehebung beschleunigen:**
1. **Zuerst Referenz-Apps prüfen** (metime, andere Lomiri-Apps)
2. **Lomiri-Dokumentation:** https://docs.ubuntu-touch.io/
3. **QtMultimedia Limitations:** Ubuntu Touch hat Einschränkungen bei Volume-Control
4. **PyOtherSide:** Immer asynchron arbeiten
### 📖 **Wichtige Dateien im Projekt:**
```
qml/Main.qml # Haupt-UI
src/fortunecookie.py # Python-Backend
assets/fortunes/*.json # Spruchlisten
manifest.json.in # App-Metadaten
fortunecookie.apparmor # Berechtigungen
```
---
## 📁 Dateistruktur FortuneCookie
```
fortunecookie-neu/
├── testing/ # Entwicklungszweig
│ ├── qml/
│ │ └── Main.qml # Haupt-UI (Navigation, MediaPlayer, Einstellungen)
│ ├── src/
│ │ └── fortunecookie.py # Backend (Sprüche laden, Einstellungen)
│ ├── assets/
│ │ ├── fortunes/ # Spruchlisten
│ │ │ ├── fortune.json (140 Sprüche)
│ │ │ ├── farmer wisdom.json (114 Sprüche)
│ │ │ ├── UNfortune.json (100 Sprüche)
│ │ │ ├── sandman.json (100 Sprüche - Bettgehzeit!)
│ │ │ └── famous quotes.json (121 Sprüche - Berühmte Zitate)
│ │ ├── chinese_music.mp3 # Hintergrundmusik (30% Lautstärke)
│ │ └── cookie_crack.mp3 # Knack-Geräusch (100% Lautstärke)
│ └── manifest.json.in # App-Version: 1.0.8
└── build/ # Build-Output
```
---
## 🎓 Gelernte Lektionen
### 1. **Ubuntu Touch spezifisch**
- MediaPlayer.volume wird **ignoriert** → Lautstärke in Datei anpassen
- PyOtherSide: **Immer async** (`py.call()`, nicht `py.syncCall()`)
- UI-Elemente: `units.gu()` für konsistente Größen
- Icons: Emoji-Shortcodes funktionieren (z. B. `\uD83D\uDD0A` = 🎆)
### 2. **QML Best Practices**
- **Property-Bindings** nutzen statt manueller Zuweisungen
- **Anker** statt absoluter Positionen
- **Component.onCompleted** mit `Qt.callLater()` für verzögerte Initialisierung
- **Visible vs. Opacity:** `visible: false` entfernt Element komplett
### 3. **Python Backend**
- **Settings speichern:** `save_setting()` / `load_setting()`
- **JSON-Listen laden:** Automatisch aus `assets/fortunes/`
- **AVAILABLE_FORTUNE_LISTS** muss alle Listen enthalten
### 4. **Projektmanagement**
- **Referenz-Apps vor Implementierung prüfen** (spart Stunden!)
- **Branches diszipliniert nutzen** (daily für Entwicklung)
- **Kleine, testbare Änderungen** statt großer Refactorings
- **Fehler dokumentieren** für zukünftige Referenz
---
## 🚀 Empfehlungen für zukünftige Sessions
### ✅ DO:
- [ ] Vor Implementierung: Referenz-Apps (metime) prüfen
- [ ] QtMultimedia-Limitations in Ubuntu Touch beachten
- [ ] Immer im **daily-branch** arbeiten
- [ ] Änderungen in kleinen Schritten testen
- [ ] FFmpeg für Audio-Bearbeitung nutzen
- [ ] Property-Bindings statt direkter Zuweisungen
### ❌ DON'T:
- [ ] `MediaPlayer.volume` für Lautstärke-Regelung erwarten
- [ ] Sync PyOtherSide-Aufrufe in Timern
- [ ] Direkte MediaPlayer-Property-Zuweisungen (bricht Bindings)
- [ ] Main-Branch für Entwicklung nutzen
- [ ] Ohne Test auf Gerät deployen
---
## 📊 Versionen & Änderungen
| Datum | Version (App) | Version (Modul) | Änderungen |
|-------|---------------|------------------|-----------|
| 03.06.2026 | 1.0.8 | 1.1.1 | Listen-Beschreibung, Lautstärke-Fix, neue Listen |
### Detailed Changelog:
```
1.0.8 (03.06.2026):
- FEAT: sandman-List (100 Sprüche, "Bettgehzeit!")
- FEAT: famous quotes-List (121 Zitate mit Autoren)
- FEAT: Alle Listen auf ≥100 Sprüche ergänzt
- FIX: Musik-Lautstärke via FFmpeg auf 30% reduziert
- FIX: Listen-Beschreibung vertikal zentriert mit Audio-Button
- FIX: Audio-Button verkleinert (8×8 gu)
- FIX: Lautstärke-Slider entfernt (funktioniert nicht in UT)
- REFACTOR: Property-Bindings für MediaPlayer.volume
```
---
## 🔗 Nützliche Links
- [Lomiri Documentation](https://docs.ubuntu-touch.io/)
- [QtMultimedia Documentation](https://doc.qt.io/qt-5/qtmultimedia-index.html)
- [PyOtherSide GitHub](https://github.com/thp/pyotherside)
- [Ubuntu Touch Forum](https://forums.ubports.com/)
---
*Dokument erstellt: 03.06.2026 | Letzte Aktualisierung: 03.06.2026*