Martedì 10 novembre 2026
L’edizione di oggi
Millebit
AI · Software · QA · Sicurezza
Il segnale, non il rumore.

Gli articoli di Millebit sono scritti con l’intelligenza artificiale a partire da fonti citate in ogni pezzo. Come lavoriamo

Sviluppo software

Muffle mantiene tutto sul telefono: profili sonori gestiti solo con SQLite

Testo scritto con l’intelligenza artificiale a partire da una fonte citata, senza revisione umana prima della pubblicazione.

L'app evita cloud e account, usa Room/SQLite e servizi Android nativi per conservare geofence, orari e contatti esclusivamente in locale.

Illustrazione generata con l’intelligenza artificiale

Un venerdì, in moschea, un trillo acuto ha rotto il silenzio. Volti girati, imbarazzo, mani che cercano il tasto per tacere. L’autore di Muffle dice di esserci passato in riunione, in aula, in ambulatorio. Da qui l’idea: profili sonori che si attivano da soli, senza passare dal cloud1.

Muffle salva confini di geofencing, orari e routine in SQLite locale. Niente account, chiavi API o connettività obbligatoria. L’architettura usa solo il dispositivo: database e servizi Android in background gestiscono tutta la logica. I dati restano sul telefono1.

Per la persistenza l’autore sceglie Room, non SQLiteOpenHelper. Room fornisce un’astrazione e valida le query a compile-time. Le routine stanno in entità osservate con LiveData: quando il database cambia, l’interfaccia si aggiorna. L’oggetto Routine contiene tipo di trigger, orari di inizio e fine, azione e priorità. Se l’utente perde il telefono, perde anche le routine. È un compromesso accettato per tutelare la privacy1.

Lo stato audio si cambia con AudioManager. C’è anche il “bypass emergenza”. Nessun server coinvolto: un content resolver locale interroga Contatti e CallLog. Alla chiamata in arrivo l’app confronta il numero con la lista di contatti scelti dall’utente. Le informazioni restano nel sandbox dell’app1.

La tenuta dei processi in background è stata il nodo più duro. Doze e le ottimizzazioni dei produttori arrestavano il servizio che seguiva gli allarmi di AlarmManager. Una ForegroundService con notifica persistente non è bastata. Anche GeofencingClient smetteva di attivarsi quando il processo veniva terminato. Se l’app non è nella whitelist dell’utente, i broadcast nel manifest possono non partire. La soluzione adottata: a ogni riavvio, un receiver su BOOT_COMPLETED re-inizializza AlarmManager e GeofencingClient1.

Il posizionamento richiedeva risparmio energetico. Solo GPS consumava troppo. L’autore è passato a FusedLocationProviderClient, che combina GPS, Wi-Fi e rete cellulare per un fix a minor costo di batteria. Tutto resta locale1.

Senza un server come “fonte di verità”, il client deve riflettere lo stato reale dell’hardware. All’inizio tutta la logica correva in un singolo thread di background. Quando due routine scattavano insieme, per esempio un orario di preghiera e un evento manuale, nascevano race condition. La riscrittura introduce una PriorityQueue dentro un servizio singleton: vince sempre la priorità più alta, non l’ultimo evento1.

Con il senno di poi, l’autore avrebbe testato prima, e meglio, su più versioni di Android. In particolare la soglia tra WorkManager per i compiti differibili e i task immediati in primo piano. Le differenze di piattaforma e di OEM incidono sui risultati, dal geofencing alla sopravvivenza dei servizi1.

Il modello “solo locale” sposta tutto sul client: migrazioni, controlli di corruzione, risoluzione dei conflitti. Gli utenti apprezzano l’offline, ma pretendono affidabilità. Qui il patto è chiaro: niente dati inviati, niente account, ma più lavoro sul dispositivo e sulla qualità dell’esecuzione. Per chi sviluppa utility, il takeaway è pratico: se eviti il cloud, prepara fallback per riavvii e kill di processo, bilancia precisione e batteria con FusedLocationProviderClient, ordina i trigger con priorità esplicite e testa WorkManager e servizi in primo piano su più OEM. La fiducia parte da qui, da un telefono che non “telefona a casa” per silenziare una suoneria1.

Fonti

  1. Architecting for Privacy: Why I Chose a 100% Local-Only SQLite Strategy for Muffle dev.to · 9 novembre 2026
Come è nato questo articolo Scritto da un sistema di intelligenza artificiale, con controlli automatici

Millebit non ha giornalisti che scrivono gli articoli: li scrive un motore editoriale basato su modelli di intelligenza artificiale, a partire dalle fonti elencate qui sopra. Prima di uscire, ogni testo passa questi controlli:

  • Rilettura. Un passaggio toglie i tic della prosa generata da un modello, come i contrasti costruiti e le frasi che annunciano invece di informare, senza toccare fatti e fonti.
  • Fedeltà alle fonti. Un passaggio dedicato toglie ogni affermazione che le fonti non sostengono. Valutazione su questo pezzo: 9,5/10.
  • Anti-cliché. Un filtro scarta frasi fatte, enfasi e tic della prosa artificiale: superato.
  • Giudizio editoriale. Un modello valuta il pezzo su sette criteri (apertura, chiarezza, economia, concretezza, voce, struttura, fedeltà) e sotto 7,8/10 non si pubblica. Questo articolo ha preso 8,3/10 dopo 1 revisione.

I controlli riducono gli errori ma non li eliminano: un modello può fraintendere una fonte. Per le decisioni importanti, risali alla fonte originale. Se trovi un errore, segnalacelo.

Come funziona Millebit, nel dettaglio →

Hai trovato un errore? Segnalacelo
Tipo di segnalazione

Leggiamo ogni segnalazione. Le correzioni fatte sono elencate in Correzioni. L’email, se la lasci, serve solo a risponderti.