EchoPlay — WinUI 3 von Grund auf: C#-Tutorial-Serie
Wie arbeiten Interfaces, DataServices, Mapper und ViewModels zusammen? (Teil 1)
Warum testen wir mit echten Fakes statt mit Mocking-Frameworks? (Teil 2)
API-Keys in einer Desktop-App sicher ablegen (Teil 3)
Entity Framework Core mit SQLite: DbContext, Migrations und Query Filter (Teil 4)
Soft-Delete: Datensätze löschen ohne Datenverlust (Teil 5)
Dependency Injection in einer WinUI-3-Desktop-App (Teil 6)
MVVM in WinUI 3: ObservableObject, RelayCommand und x:Bind (Teil 7)
Navigation in WinUI 3: NavigationView, Frame und ViewModel-Loading (Teil 8)
Themes in WinUI 3: ResourceDictionary und Laufzeit-Wechsel (Teil 9)
Eigenes Logging-System: Sinks, Logger und MemorySink (Teil 10)
Spotify-Integration: Client-Credentials-Flow und Token-Cache (Teil 11)
Retry und Resilienz: Linearer Backoff für HTTP-Anfragen (Teil 12)
Audio-Wiedergabe: MediaPlayer, Playlist und PlaybackState (Teil 13)
SyncService: IServiceScopeFactory in Singleton-Services (Teil 14)
Import-Flow: ImportService und Keyed Services (Teil 15)
Lokalisierung in WinUI 3: Deutsch und Englisch mit .resw-Dateien (Teil 16)
Ein Abonnement-Flag: Kleines Feld, große Wirkung (Teil 17)
Dashboard-ViewModel: Services kombinieren und Gruppen-Layout (Teil 18)
Lokale Mediathek: Drei-Spalten-Navigation mit Auswahl-Kaskade (Teil 19)
Suche und Import: Ergebnis-ViewModels und Import-Status (Teil 20)
Player-Seite: FolderPicker, ID3-Cover und Slider-Antifeedback (Teil 21)
Einstellungen mit Tabs: TabView und Verbindungstest (Teil 22)
StatusBar als Singleton: Globaler Zustand ohne N+1 (Teil 23)
Tag-Manager: Audio-Metadaten lesen, schreiben und nachschlagen (Teil 24)
Log-Viewer: DispatcherTimer, IDisposable und NumberBox (Teil 25)
Cover-Suche: Fünf Anbieter parallel abfragen (Teil 26)
Online-Folgencheck: iTunes API vs. lokale Ordner (Teil 27)
SQLite professionell optimieren: PRAGMAs, Indizes und Partial Indexes (Teil 28)
Online-Mediathek: Akkordeon-Layout und Provider-Suche (Teil 29)
Cover-Architektur: Blobs von Metadaten trennen (Teil 30)
UserControls in WinUI 3: SeriesTileControl und DependencyProperties (Teil 31)
Hintergrund-Services: Schleife, Task.Delay und graceful Shutdown (Teil 32)
Startup-Validierung: Splash-Screen und StartupResult (Teil 33)
Favoriten und Überwachung: Feature-Flags auf Serien-Covers (Teil 34)
Cache-Verwaltung und Datenbankpflege in den Einstellungen (Teil 35)
Barrierefreiheit in WinUI 3: Warum ein Tooltip kein Name ist (Teil 41)
Deployment ohne Store und Auto-Update ohne Zertifikat (Teil 40)
Eine Desktop-App auf Sicherheitslücken prüfen (Teil 42)
Große ViewModels aufteilen: was die Oberfläche danach bindet (Teil 36)
Ein Runbook im Repository: Symptom, Ursache, Lösung (Teil 38)
UserActionScope: einen Klick durchs ganze Protokoll verfolgen (Teil 37)
Release-Prozess: vom grünen Build zur signierfreien Setup.exe (Teil 39)
„Nicht wieder anzeigen“ — vier Entscheidungen hinter einem Häkchen (Teil 49)
Eichen ist nicht senken — was eine Kennzahl wirklich misst (Teil 48)
Die Kontrolle, die niemand vermisst hat (Teil 47)
Zwei Prüfer, eine Regel — und warum eckige Klammern lügen (Teil 46)
Grüner Build, kein einziger Test — der Wechsel der Testplattform (Teil 45)
Eine Zahl an neun Stellen — Paketversionen zentral verwalten (Teil 44)
Eine Anwendung ohne Hauptfenster: LookAway im Infobereich (Teil 1)
Ein Fenster über allem: das Pausen-Overlay auf jedem Monitor (Teil 2)
Globale Tastenkombinationen: ein eigener Faden nur für Nachrichten (Teil 3)
Der Zeitgeber als Zustandsautomat: Pausenmodelle, Erkennung, Statistik (Teil 4)
Drei Sprachen und ein Update, dem man trauen kann (Teil 5)
Das Setup bauen — von der Versionsnummer bis zum Release (Teil 43)
LookAway — die Pause, an die man sich nicht erinnert
xUnit für Fortgeschrittene — Fixtures, Parallelität und eigene Assertions (Teil 6)
Integrationstests mit xUnit — WebApplicationFactory, In-Memory-DB und echte HTTP-Tests (Teil 5)
Zero Warnings — warum jede Compiler-Warnung eine Ursache hat, die behoben werden muss
var in C# — warum ich explizite Typen bevorzuge
Moq gezielt einsetzen — Orchestrierungstests in C# mit xUnit (Teil 4)
Eigene Fakes statt Moq — warum Verhaltenstests echte Implementierungen brauchen (Teil 3)
Kommentare im Code — warum das Warum wichtiger ist als das Was
Testbenennung und Teststruktur — warum gute Tests bei guten Namen anfangen (Teil 2)
xUnit — was ist das eigentlich und wofür braucht man es?
Testing mit xUnit — Grundlagen für C#-Entwickler (Teil 1)
mdExplorer — Markdown-Bestände durchsuchen und pflegen
ShopAnalytics — SEO-Analyse als lizenziertes Desktop-Produkt
EchoPlay — Hörspiel-Manager für Windows