Ciao a tutti! 👋
Vi ricordate di SensorMenu? Ne avevo parlato qualche mese fa in questo articolo, raccontandovi di come avessi costruito una piccola applicazione per monitorare la temperatura e l’umidità del mio studio direttamente dalla menu bar del Mac (e dalla tray di Windows/Linux).
SensorMenu-GoSCARICA L’APP PER MACOS dal mio repository GitHub
All’epoca ero tutto gasato per averla realizzata con Electron. Funzionava? Sì. Era carina? Abbastanza.
Ma c’era un “piccolo” problema che non mi faceva dormire sonni tranquilli: il peso.
Il problema del “Tir per consegnare una pizza”
Parliamoci chiaro: Electron è fantastico per tante cose, ma usare un intero motore Chromium per mostrare due numerini (temperatura e umidità) è un po’ come noleggiare un tir per consegnare una singola pizza margherita.
La mia “piccola” app, una volta compilata e pacchettizzata, pesava oltre 300 MB.
Sì, avete letto bene. Trecento megabyte per leggere un topic MQTT e aggiornare un’icona. Ogni volta che la aprivo sentivo le ventole del computer guardarmi male.
Avevo bisogno di una cura dimagrante drastica. E la risposta è stata Go.
Perché Go e Fyne?
Ho deciso di buttare via tutto il vecchio codice e ripartire da zero (sì, mi piace farmi del male, ma è così che si impara). Questa volta ho scelto Golang accoppiato alla libreria grafica Fyne.
Perché proprio questa scelta?
- Leggerezza estrema: Il risultato finale è sconvolgente. Siamo passati da >300 MB a un eseguibile che pesa circa 20 MB. Un calo di peso del 93%! Adesso l’app si avvia istantaneamente e occupa una frazione ridicola di RAM.
- Compilazione istantanea: Una delle cose che amo di Go è la velocità. Scrivo codice, lancio go build e bam, l’eseguibile è pronto prima che io riesca a staccare le dita dalla tastiera. Con Electron, tra npm install, build step e packaging, potevo tranquillamente andare a farmi un caffè.
- Un unico binario: Go mi sputa fuori un singolo file eseguibile statico. Niente dipendenze strane da installare, niente node_modules infiniti (buco nero del disco rigido), niente runtime da configurare. Lo prendi, lo lanci, funziona.
Cosa è cambiato (e cosa no)
L’interfaccia è rimasta minimalista e funzionale. L’app fa ancora il suo sporco lavoro egregiamente:
- Si connette al broker MQTT locale (localhost:1883).
- Ascolta il topic esp32/dht22.
- Piazza un’iconcina nella barra dei menu con i dati aggiornati in tempo reale (es: 20.7°C | 61,4%).
Grazie a Fyne, sono riuscito a mantenere tutte le funzionalità accessorie: c’è il menu per mettere in pausa la lettura, la finestra “About” e, ovviamente, le impostazioni per configurare l’IP del broker se non usate localhost.
Conclusioni
Riscrivere SensorMenu in Go è stata una boccata d’aria fresca. Ho imparato che scegliere lo strumento giusto per il lavoro è fondamentale: Electron va bene per le app complesse simil-web (tipo VS Code o Slack), ma per le utility di sistema, la potenza e la snellezza di un linguaggio compilato come Go sono imbattibili.
Se volete provare la nuova versione “light” o dare un’occhiata al codice (e magari insultarmi per come ho gestito le goroutine 😄), trovate tutto sul mio repository GitHub.
Fatemi sapere cosa ne pensate nei commenti!
Alla prossima build! 🖥️☕