Scrivete un aggiornamento del dispositivo? Prendete in considerazione seriamente WebUSB!

Proprio come Wikipedia, chiunque può contribuire al codice sorgente della nostra calcolatrice e condividere i miglioramenti con la comunità.

Tuttavia, per consentire a tutti di utilizzare effettivamente questi miglioramenti, dovevamo assicurarci che il firmware della nostra calcolatrice potesse essere aggiornato con estrema facilità. Poiché gli aggiornamenti via etere sono fuori discussione, abbiamo fatto un viaggio interessante alla ricerca della soluzione migliore e vorremmo condividere con voi le nostre scoperte.

Le nostre esigenze

  1. L’aggiornamento dovrebbe funzionare dal maggior numero possibile di computer e sistemi operativi.
  2. Gli utenti non devono installare un software specifico solo per aggiornare la loro calcolatrice.
  3. Vorremmo scrivere meno codice possibile. Meno codice, meno bug.

Cosa non ha funzionato

Prima di trovare una buona soluzione, abbiamo provato diverse alternative. Ognuna aveva i suoi difetti.

Utilizzo di un’applicazione nativa

Questa è di gran lunga la strategia più comune, ma purtroppo corrisponde solo a un requisito su tre.

  • Gli utenti devono installare un’applicazione specifica solo per aggiornare il loro computer. Questo potrebbe non funzionare per alcuni utenti che non hanno i diritti di amministratore sul loro computer.
  • Ostico da distribuire. Ci sono così tante piattaforme binarie diverse che è davvero difficile occuparsi di tutte.
  • Sarà richiesto un codice specifico per la piattaforma. Anche se ci sono alcune soluzioni multipiattaforma come Qt e libusb, sarà necessario testare e fare il debug su ogni singolo sistema operativo. E anche se libusb fa un buon lavoro, gli stack USB di Linux, macOS e Windows sono abbastanza diversi da farvi avere molti problemi specifici della piattaforma.
  • Meta overflow: gli utenti dovranno aggiornare il programma di aggiornamento.

Utilizzo di un’applicazione web accoppiata ad un bridge da USB a HTTP

Un compromesso è quello di utilizzare un’applicazione web per l’interfaccia utente e un piccolo componente nativo senza interfaccia utente per gestire le comunicazioni USB. Tale componente espone un’API HTTP che può essere consumata dall’applicazione web. Questa è un’opzione che abbiamo usato per un po’ di tempo, ma alla fine abbiamo deciso di allontanarci da essa.

  • HTTPS non è disponibile perché non è possibile spedire un certificato valido per localhost.
  • È ostico da distribuire, e potrebbe essere ancora necessario aggiornare il bridge (anche se meno frequentemente di un’applicazione GUI).

WebUSB in soccorso

WebUSB è un insieme di funzioni che consentono di effettuare comunicazioni USB in JavaScript direttamente da un browser web. Si adatta perfettamente a tutte le nostre esigenze:

Un abbinamento perfetto…

  1. È disponibile su una vasta gamma di dispositivi e sistemi operativi (Android, Windows, macOS e Linux).
  2. Funziona in modo immediato sulla maggior parte dei sistemi operativi.
  3. Abbiamo bisogno di scrivere un solo codice JavaScript per tutti i dispositivi e sistemi operativi.

…che però non è magia

  • Tecnicamente WebUSB è un open standard. Ma solo Chrome implementa questa specifica al momento, quindi gli utenti finali potrebbero aver bisogno di cambiare browser per aggiornare il loro dispositivo.
  • Richiede un driver su Windows. Questo può essere evitato per alcune versioni di Windows se si possono aggiungere speciali descrittori USB sul dispositivo. In ogni caso, non è un grosso problema, perché si tratta di un driver senza codice. Si tratta, più o meno, di un file di configurazione che dice a Windows “Ehi, ogni volta che vedi una calcolatrice NumWorks, allora legala a WinUSB in modo che Chrome possa parlarci”.
  • I dispositivi iOS non sono supportati, ma sono talmente bloccati che è stata comunque una battaglia persa.

Grazie

WebUSB è stato incluso in Chrome 61 che è diventato disponibile a settembre 2017. Si tratta di un’aggiunta molto utile al web e vorremmo ringraziare Reilly Grant and Ken Rockot di Google per questa iniziativa.

Soddisfaceva tutti i nostri requisiti ed era una scelta perfetta per noi, e non saremmo sorpresi se diventasse abbastanza popolare per casi d’uso simili. Se volete fare un tentativo, potete andare al nostro Workshop e aggiornare la calcolatrice direttamente dal vostro browser!