// Écrits
Notes de parcours
Réflexions sur la création d’un logiciel apaisant et privé, à une seule personne.
Flux RSS
Les TypeConverters Room en 2026 : stocker enums, dates et listes sans corrompre votre schéma
Un guide pratique des TypeConverters Room sur Android — enums, Instant/LocalDate, et listes — ainsi que les erreurs qui transforment un converter en bug silencieux de corruption de données.
R8 et ProGuard pour Kotlin, Room et Compose : le crash qui n'arrive qu'en release
Pourquoi une app Android Room + Compose peut fonctionner parfaitement en debug et planter en production, et les règles keep R8/ProGuard précises qui l'évitent.
L'API In-App Review d'Android : demander une note sans être pénible
Un guide pratique de l'API In-App Review de Google — comment elle fonctionne réellement, quand la déclencher, et pourquoi la popup classique « notez-nous » nuit discrètement à votre note sur le Play Store.
Raccourcis d'application et tuiles de Paramètres rapides sur Android : enregistrer de l'eau sans ouvrir l'application
Un guide pratique de l'API dynamique ShortcutManager et de TileService sur Android — comment permettre à une action en un tap de contourner complètement l'application, avec les pièges qui font trébucher la plupart des implémentations.
Les types de services au premier plan sur Android en 2026 : choisir celui auquel votre fonctionnalité correspond vraiment
Un guide pratique des restrictions de types de services au premier plan d'Android — dataSync, mediaPlayback, specialUse, shortService — et comment choisir le bon sans se faire tuer ou rejeter.
Une application, une tâche : pourquoi je ne construis pas de super-app
Chaque application qui grandit subit une pression pour ajouter des fonctionnalités et fusionner en une seule plateforme. Voici pourquoi MFKAPPS reste six petites applications.
StateFlow vs SharedFlow dans Jetpack Compose : modéliser l'état UI sans le bug de replay
Quand utiliser StateFlow et quand utiliser SharedFlow dans un ViewModel Compose — et le bug d'événement unique qui apparaît quand on les confond.
Les index de base de données Room en 2026 : trouver la requête réellement lente et la corriger
Un guide pratique pour indexer une base Room/SQLite sur Android — lire EXPLAIN QUERY PLAN, ajouter @Index sans deviner, et les erreurs qui neutralisent un index en silence.
@Relation de Room : interroger des données un-à-plusieurs sur Android sans requêtes N+1
Un guide pratique de l'annotation @Relation de Room — modéliser des données un-à-plusieurs comme des catégories et des entrées sans requêtes N+1 ni jointures manuelles.
Navigation typée dans Jetpack Compose : les routes comme données, pas comme chaînes de caractères
Comment remplacer les routes Compose Navigation basées sur des chaînes par des objets Kotlin sérialisables — arguments typés, graphes imbriqués, et deep links qui survivent à un refactoring.
Budgétiser avec un revenu irrégulier : un système qui ne suppose pas un salaire fixe
La plupart des conseils budgétaires supposent qu'un même montant arrive chaque mois. Voici un système pensé pour un revenu freelance, à la commission ou saisonnier, qui tient vraiment la route.
Android 16 Live Updates : afficher le minuteur de concentration de Mintly sur l'écran de verrouillage
Un guide pratique des notifications centrées sur la progression d'Android 16 — segments ProgressStyle, notifications continues promues, et ce qu'elles apportent à un minuteur Pomodoro actif.
Configurer des rappels de médicaments pour un proche : le guide de l'aidant
Un guide pratique pour aider un parent ou un partenaire à suivre ses médicaments — quoi configurer, quoi éviter, et comment prendre des nouvelles sans surveiller.
Les canaux de notification Android en 2026 : concevoir des niveaux d'importance que les utilisateurs ne couperont pas
Un guide pratique des canaux de notification Android — niveaux d'importance, groupes de canaux, pourquoi les réglages se figent après création, et comment migrer sans perdre la confiance des utilisateurs.
Quelle devrait être la durée d'une session de concentration ? Un cadre au-delà des 25 minutes par défaut
Le Pomodoro de 25 minutes est un point de départ, pas une règle. Un cadre pratique pour trouver votre vraie durée de session, selon la tâche et l'énergie.
Paging 3 avec Room : garder une liste de transactions fluide sur Android en 2026
Comment paginer une liste de transactions adossée à Room avec Jetpack Paging 3 pour que des années de données restent fluides dans Compose — pas de RemoteMediator, pas de réseau, juste une base de données locale bien faite.
La migration Android vers les pages mémoire de 16 Ko : ce qui casse vraiment et comment vérifier ton APK
Google exige désormais que les apps Android prennent en charge les pages mémoire de 16 Ko. Voici ce que ça change en pratique, pourquoi les bibliothèques natives sont celles qui cassent, et comment vérifier que la tienne est sûre.
La concurrence structurée sur Android en 2026 : scopes, annulation et les fuites qu'elle évite
Un guide pratique de la concurrence structurée Kotlin sur Android — viewModelScope contre lifecycleScope, pourquoi l'annulation se propage, et les fuites de coroutines qu'elle élimine silencieusement.
La recomposition dans Jetpack Compose : ce qui la déclenche vraiment, et pourquoi j'ai arrêté de deviner
Un guide pratique de la recomposition Jetpack Compose en 2026 — stabilité des types, lambdas instables, clés LazyColumn, et comment lire le rapport de métriques du compilateur.
La recherche plein texte dans Room : ajouter une recherche instantanée à une app Android local-first en 2026
Un guide pratique du support FTS4 de Room sur Android — construire une table virtuelle de recherche, la synchroniser avec des triggers, et pourquoi FTS5 exige une migration manuelle.
Pas de compte, pas de mot de passe : pourquoi mes applications n'ont pas d'écran de connexion
Six applications, zéro formulaire d'inscription. Voici le raisonnement réel derrière l'absence totale de comptes — ce que ça coûte, ce que ça supprime, et où se situe la limite.
Chiffrer une base Room en 2026 : SQLCipher, le Keystore, et migrer sans perdre de données
Un guide pratique pour chiffrer au repos une base Room/SQLite sur Android avec SQLCipher — gestion des clés via le Keystore, migration unique, et le vrai coût en performance.
Sauvegarder des données local-first sur Android en 2026 : export SAF, Auto Backup, et un flux de restauration fiable
Comment les applications Android local-first sauvegardent les données utilisateur sans serveur : export/import SAF, Auto Backup for App Data, et une restauration qui vérifie avant d'écraser.
Tester une application Android local-first en 2026 : Room, Flow et les tests Compose UI qui détectent de vrais bugs
Une stratégie de test pratique pour les applications Android local-first en 2026 — tests DAO Room en mémoire, Turbine pour Flow, et les quelques tests Compose UI qui valent vraiment la peine.
L'authentification biométrique sur Android en 2026 : BiometricPrompt, le Keystore et le verrouillage d'une app local-first
Un guide pratique d'androidx.biometric sur Android — BiometricPrompt, clés adossées à un CryptoObject, repli sur les identifiants de l'appareil, et les erreurs qui font qu'une empreinte digitale ne protège rien.
L'accessibilité sur Android en 2026 : une checklist TalkBack et sémantique Compose qui tient la route
Une checklist pratique d'accessibilité Android pour 2026 — TalkBack, sémantique Compose, zones tactiles et la passe de test que je fais sur chaque écran avant publication.
Health Connect sur Android en 2026 : lire et écrire des données sans renoncer au local-first
Un guide pratique de l'API Health Connect d'Android en 2026 — permissions, lectures en arrière-plan, et pourquoi une app local-first devrait la traiter comme optionnelle, pas comme une vérité absolue.
Edge-to-edge et retour prédictif sur Android en 2026 : ce qui est désormais obligatoire, et comment ne pas casser votre interface
L'edge-to-edge est désormais imposé sur API 35+ et le retour prédictif est le geste par défaut. Un guide pratique sur les insets Compose, WindowInsets et PredictiveBackHandler.
Combien d'eau faut-il vraiment boire ? Une formule qui bat la règle des « 8 verres par jour »
La règle des 8 verres ignore votre poids, votre activité et le climat. Voici la formule basée sur le poids que les cliniciens utilisent réellement, avec un exemple concret.
Une configuration de téléphone apaisée : une feuille de route pour débutants
Une feuille de route pratique et progressive vers un téléphone plus calme — tri des notifications, un écran d'accueil allégé, et des créneaux de consultation groupés qui tiennent vraiment dans la durée.
Jetpack DataStore en 2026 : migrer depuis SharedPreferences sans perdre un seul réglage
Un guide pratique pour passer de SharedPreferences à Jetpack DataStore sur Android — les pièges asynchrones, le chemin de migration qui préserve les valeurs existantes, et comment le tester.
Comment auditer ses abonnements en 20 minutes (et vraiment résilier ceux que vous n'utilisez pas)
Un audit d'abonnements étape par étape que vous pouvez terminer en une seule séance — repérez chaque prélèvement récurrent, tranchez avec une seule règle, et prenez une habitude qui garde la liste honnête.
Le scan de codes-barres avec ML Kit sur Android en 2026 : comment Stocky ajoute un article au garde-manger en moins d'une seconde
Un guide pratique 2026 du scan de codes-barres sur l'appareil avec ML Kit et CameraX : réglage des formats, recherche produit hors ligne, et le calcul d'usage partiel d'une app de garde-manger.
Les migrations de base de données Room en 2026 : faire évoluer un schéma sans perdre une seule ligne
Un guide pratique des migrations de base de données Room sur Android — AutoMigration, objets Migration écrits à la main, et comment tester une migration avant que vos utilisateurs ne trouvent le bug.
Baseline Profiles sur Android : ce qui change vraiment votre temps de démarrage à froid en 2026
Un guide pratique des Baseline Profiles Android — les générer avec Macrobenchmark, les brancher dans Gradle, mesurer le vrai gain, et les trois autres leviers du démarrage à froid.
Jetpack Glance en 2026 : construire un widget d'écran d'accueil qui ne ment jamais sur vos données
Un guide pratique des widgets Jetpack Glance sur Android — état, actions de clic, et le piège du quota de mise à jour qui affiche des données périmées.
Un système d'inventaire de garde-manger qui empêche vraiment le gaspillage alimentaire
La plupart du gaspillage alimentaire ne vient pas d'une mauvaise planification, mais du fait d'oublier ce qu'on a déjà. Un système simple d'inventaire et de tri des dates qui agit avant la poubelle.
Construire le calendrier d'observance d'OldSchool : transformer des prises en un jour fiable
Un calendrier d'observance mensuel ressemble à un simple point coloré par jour. Voici le modèle d'événements, les règles de statut journalier et le calcul de ponctualité, sur l'appareil.
Construire Subly : les calculs de calendrier derrière les dates de renouvellement d'abonnement
Prédire la prochaine date de prélèvement d'un abonnement semble trivial jusqu'à ce qu'on tombe sur la facturation en fin de mois, les années bissextiles et les conversions d'essai. Voici comment Subly y arrive, sur l'appareil.
Construire Mintly : garder un minuteur de focus précis quand Android veut tuer le processus
Un minuteur Pomodoro en cours d'exécution pose un problème de fiabilité plus difficile qu'un simple rappel ponctuel. Voici comment Mintly survit au mode Doze, à la mort du processus et à la dérive écran éteint grâce à un service au premier plan et une heure de fin en temps réel.
Une routine d'hydratation qui ne dépend pas de la volonté
La plupart des conseils sur l'hydratation se résument à « buvez plus d'eau » et espèrent que la volonté comblera le reste. Voici une routine construite autour de déclencheurs et de rappels doux à la place.
Construire Granyn : un suivi de budget sans connexion bancaire, en trois tables
Comment Granyn suit les dépenses dans plusieurs devises et détecte les factures récurrentes sans lier le moindre compte bancaire — le schéma Room derrière tout ça, et les compromis qu'il impose.
Bien faire les actions de notification Android : marquer une dose comme prise sans ouvrir l'application
Un guide pratique des boutons d'action de notification Android — PendingIntent, la restriction du trampoline d'activité, goAsync() et la mise à jour sûre de l'état Room.
La technique Pomodoro qui survit à une mauvaise journée
Le minuteur 25/5 est facile à commencer et facile à abandonner. Voici une version de la technique Pomodoro construite sur des rituels, pas des séries, pour qu'une journée difficile ne mette pas fin à l'habitude.
Un système de budget pour ceux qui n'ont jamais réussi à en tenir un
La plupart des budgets meurent en deux semaines. Un système à trois catégories et un point hebdomadaire de cinq minutes qui survit à un mois chaotique, pas seulement à un mois parfait.
Construire Stocky : prédire ce qui va manquer dans votre cuisine — sur l'appareil lui-même
Comment Stocky transforme un scan de code-barres et un peu d'historique d'utilisation en une liste de courses qui apparaît avant que vous ne tombiez à court — avec tous les calculs, et toutes les données, qui restent sur votre téléphone.
Bâtir une routine de prise de médicaments que vous suivrez vraiment
Un guide pratique sur l'observance médicamenteuse — pourquoi on manque ses doses, comment fonctionne réellement le minutage des rappels, et comment construire une routine qui survit à une mauvaise semaine.
Le site parle désormais sept langues
MFKAPPS est maintenant disponible en anglais, turc, français, espagnol, japonais, hindi et russe. Une courte note sur les raisons qui ont poussé un studio d'une seule personne à s'en soucier, et comment il reste rapide.
OCR respectueux de la vie privée sur Android : comment Subly lit les factures sans le cloud
Un guide pratique 2026 de l'OCR sur l'appareil sous Android avec ML Kit Text Recognition — la configuration, le code et les astuces d'extraction de champs qui gardent les données utilisateur hors de vos serveurs.
Construire Hydrame : des rappels intelligents, sans harcèlement
Une application de rappels vit ou meurt par ses notifications. Voici comment j'ai conçu celles d'Hydrame pour vous encourager en douceur — et s'adapter à votre journée au lieu de la contrarier.
Trop d'abonnements : pourquoi je ne relie plus ma banque aux applications
Les applications de suivi d'abonnements résolvent généralement le problème en réclamant vos identifiants bancaires. En 2026, il existe une voie plus sereine — la numérisation des factures sur l'appareil, sans Plaid, sans agrégateur.
Des rappels Android fiables en 2026 : WorkManager, alarmes exactes et les nouvelles règles de batterie
Comment publier en 2026 des rappels Android qui se déclenchent vraiment — WorkManager vs AlarmManager, SCHEDULE_EXACT_ALARM, POST_NOTIFICATIONS et les bizarreries des constructeurs qui piègent encore.
Android local-first en 2026 : SQLite, Room et garder les données de l'utilisateur sur l'appareil
Un guide 2026 pour construire des applications Android local-first avec Room et SQLite — conception du schéma, migrations, WAL, exports, et quand (et quand ne pas) ajouter la synchronisation.
Comment je publie des applis Android en solo en 2026
Un vrai guide de lancement de bout en bout pour publier seul une appli Android en Kotlin + Compose en 2026 — cadrage, développement, fiche Play Store et les détails ennuyeux qui décident si vous publiez un jour.
L'avantage en matière de confidentialité des applications local-first
La donnée la plus confidentielle est celle que l'on ne collecte jamais. Le local-first n'est pas qu'un choix d'architecture — c'est la politique de confidentialité la plus simple qui soit.
Pourquoi je suis parti pour créer des outils apaisants
La plupart des applis sont conçues pour vous garder accroché. Je voulais faire l'inverse — un logiciel qui fait son travail, puis s'efface.