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

7.4 KiB
Raw Permalink Blame History

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:

ffmpeg -i input.mp3 -af "volume=0.3" -y output.mp3

2. Qt/QML Best Practices

Funktioniert:

// Property-Binding für automatische Synchronisation
MediaPlayer {
    volume: root.musicVolume  // Wird automatisch aktualisiert
}

Problem: Binding wird gebrochen durch:

// Direkte Zuweisung zerstört das Binding!
mediaPlayer.volume = value;  // ❌

Richtig:

// Nur die Property setzen, Binding überträgt automatisch
root.musicVolume = value;  // ✅

Anker-Positionierung:

// 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:

# 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


Dokument erstellt: 03.06.2026 | Letzte Aktualisierung: 03.06.2026