Introduzione


Requisiti per il Software 


Tutte le applicazioni del sistema theremino, funzionano su Windows-10 e Windows-11, sia a 32 bit che a 64 bit. Quasi tutte le nostre applicazioni funzionano ancora anche su Windows-XP, Windows-Vista, Windows-7, Windows-7-Starter e Windows-8. Per il funzionamento sui sistemi alieni (con prestazioni ridotte), sono necessari Mono o Wine. Vedere le note nelle pagine Raspberry Pi, Linux, Android e Mac OSX. Non ci sono requisiti minimi, per la memoria e per la CPU.

Se le applicazioni non si avviano, potrebbero mancare DotNet 3.5 SP1 e DirectX 9.0c.

Purtroppo Microsoft sposta frequentemente i file, e nasconde gli installatori “off-line”, per favorire quelli “on-line” (che poi spesso non contengono tutto e danno problemi). Quindi per semplificare, ecco qui i file giusti:

Se tutte le applicazioni non si avviano, installare questo:
Net_Framework_3.5_SP1

Per alcune applicazioni (ad esempio Theremino 3D), serve anche questo:
DirectX_9.0c  (download locale)
DirectX_9.0c  (download da Microsoft)

Gli installatori vanno sempre avviati con “Tasto mouse destro” e “Esegui come amministratore”, altrimenti potrebbero dare errori e non funzionare.

Attenzione che l’installatore di DirectX non si avvia da solo. Si deve decomprimerlo dallo ZIP in una cartella (scegliere una cartella vuota e temporanea – magari farne una apposta). Poi si deve lanciare DxSetup.exe, seguire le istruzioni e dare tutti gli OK necessari.

Se questi due file non risolvono il problema, leggere anche questa pagina: blog/tips-and-tricks

– – – – – – – –

ATTENZIONE: Se usate un Windows a 64 bit, allora è necessario compilare tutte le applicazioni per x86 (altrimenti a volte non riescono a leggere e scrivere gli Slot).

Per accedere alle configurazioni, dentro a VisualStudio, aprire “Menu-Tools”/”Project and Solutions”/”General” e abilitare “Show advanced build configuration” e anche “Always show solution”.

Poi andare anche sulla Toolbar / Tasto destro / Customize / Commands /  Build / e aggiungere i due ultimi comandi della lista, che si chiamano “Solution Configurations” e ” Solution Platforms”, trascinandoli sulla toolbar e chiudere il pannello Customize.

Infine andare sulla casella “Solution platforms” (la più larga delle due), aprire il “Configuration manager”, fare una nuova “Platform” di tipo “x86” e assegnarla sia a Debug che a Release.


Firmware dei dispositivi di sistema

Il firmware per Master, Slaves e CapSensor si scarica dalla pagina degli schemi elettrici:
https://www.theremino.com/technical/schematics


Computers e sistemi operativi

Il software thereminico gira (male) anche su Linux e Mac OSX, ma se si vuole lavorare comodi e senza problemi, è meglio eseguirlo su Windows (Windows XP, Windows 7 e, meglio ancora, Windows 10). Eventualmente chiedere assicurazione al venditore. Per maggior sicurezza far girare una nostra applicazione, provare ad esempio lo SlotViewer.

Tablet10a    Theremino FlatPC

I computer adatti sono: PC, Notebooks, Net-Books, Tablets, Tablets con tastiera staccable, eeeBox, Stick PC e FlatPC

PC e Notebooks: Solitamente vanno tutti bene. Controllare che il processore non sia un ARM e che il sistema operativo sia Windows 7 o Windows 10.

Netbooks: I Netbook sono ottimi per sistemi portatili, ad esempio per la spettrometria Gamma, o per le prospezioni geologiche. Sono appena più grandi di un Tablet e si chiudono per trasportarli. Alcuni hanno un processore ARM, e non vanno bene. Controllare che il sistema operativo non sia Linux.

Tablet: Su Amazon sono in vendita alcuni modelli di Tablet, da 8 pollici, con CPU Quad-core e Windows10 genuino, per meno di 50 Euro. Il display è un po’ piccolo ma tutte le applicazioni del sistema Theremino funzionano perfettamente.

Tablet TCU (Theremino Control Units): Questi sono i Tablet approvati dal sistema Theremino. Sono testati con tutti i moduli e le applicazioni del sistema. Abbiamo anche verificato che abbiano due prese USB, di cui una grande di tipo USB3 e che si possano alimentare mentre sono collegati al Theremino Master.

Piccoli PC, eeeBox, Sticks per TV: Esistono vari modelli in genere piuttosto lenti e alcuni anche molto costosi (attenzione che spesso non hanno Windows installato). Per sistemi Stand-Alone gli eeeBox sono più economici di altre soluzioni (Mini-ITX, VIA, EPIA, Raspberry) perché nel prezzo è compreso tutto: Alimentatore, HardDisk e contenitore, nonché tastiera e mouse via radio.

FlatPC TCU (Theremino Control Units): Sono dei mini PC, particolarmente adatti per i moduli e le applicazioni del sistema Theremino. Sono piccoli e leggerissimi, tanto da poter essere la “testa pensante” di un drone o di un aereomodello. Ma sono talmente potenti da poter sostituire tutta l’elettronica di controllo, che normalmente nei droni pesa anche il doppio.

Nella attesa che i cinesi del sito store-ino riescano finalmente a importare i FlatPC, ci si può arrangiare con i Meegopad, reperibili su Amazon o eBay per circa 80 Euro, spedizione compresa. Fate attenzione che abbiano Windows10 con licenza, eventualmente chiedetelo espressamente al venditore.

Un ottimo modo di controllare i FlatPC è utilizzare un Tablet come schermo e tastiera senza fili (via WiFi con TeamViewer). Si può farlo in rete locale, senza necessità di un collegamento a Internet, oppure anche attraverso Internet. Si può quindi controllare, ad esempio dall’ufficio o da un’isola tropicale, il computer di casa, quello della serra, quello meteorologico... ecc…


Reperibilità dei PC, Tablet e FlatPC

Nel seguito di questa pagina presenteremo diverse soluzioni e stiamo facendo il possibile per spingere i cinesi ad affrettare la progettazione e la messa in vendita dei modelli che a noi interessano. Ma trattare con loro richiede sempre molto tempo, non tanto per la distanza e nemmeno per la lingua, ma per la differente cultura che da alle stesse parole significati diversi.

Nel frattempo ci sono varie alternative possibili:

1) Gli stick Meegopad con Windows10. Praticamente identici a un FlatPC, stesso processore, stesse prestazioni. Li abbiamo provati e vanno benissimo con tutte le nostre applicazioni. Li si possono trovare su Amazon o su eBay per circa 90 Euro.

2) Lo “YUNTAB Intel tv box Windows 10 Compute MINI PC” che si trova su Amazon per 97 Euro, anche lui con le stesse prestazioni.

3) Tablet da 7 pollici o 8 pollici. Ad esempio il “Mediacom WinPad W801 Tablet PC” da 74 Euro, oppure il “Mediacom WinPad W700 Tablet PC” da 41 Euro spedizione compresa. E sono tutti Atom Z3735G, cioè QuadCore per 1.8 GigaHz. Il secondo ha 16 Giga di memoria, il primo 32 Giga (vuol dire che sopporta decine delle nostre applicazioni contemporaneamente e anche una decina di film).

Controllare spesso su  store-ino perché è li che verranno pubblicati i nuovi modelli dai cinesi man mano che saranno disponibili.

In tutti i casi si deve fare attenzione che il sistema operativo sia Windows, altrimenti le nostre applicazioni non funzionano (o funzionano con prestazioni ridotte).

                                   



Tablet TCU 

Tablet10b

Questo è un Tablet PC – TCU (Theremino Control Unit) che sarà presto vendita presso store-ino.

Ha Windows 10 preinstallato, genuino e con licenza. Ha il touch screen, la tastiera rimovibile con connettore magnetico POGO, oltre 7 ore di autonomia, 32 Giga Byte di memoria di massa, HDMI, Wifi, Bluetooth, USB3, 2 Giga di RAM DDR3, 2 Mega di cache L2, processore quad core da 64 bit con velocità fino a 1.83 Giga, etc.. Le caratteristiche complete (controllate da noi una per una) sono sui singoli modelli (10 o 12 pollici) sul sito store-ino.

La tastiera ha anche il TouchPad, come il tablet di Microsoft, ma a una frazione del suo prezzo. Con il connettore HDMI si può collegare un secondo monitor esterno, quindi doppio spazio sul desktop. E aggiungendo un mouse senza fili (bluetooth), si ottiene un PC classico di grandi prestazioni.

Gli esemplari che ci hanno inviato in prova hanno funzionato perfettamente in tutti i test. Anche il modello piccolo (da 10 pollici) si accende in 5 secondi, va più veloce del “PC a vapore” che usiamo in laboratorio, consuma meno di 5 Watt, in funzionamento normale, e addirittura meno di 2 Watt spegnendo il display e altre periferiche. Controllandolo con TeamViewer, con display spento, siamo arrivati a superare le dieci ore di autonomia.

Li abbiamo testati estesamente con tutti i moduli e tutte le applicazioni del sistema Theremino. Hanno due connettori USB, uno mini USB e uno standard, che è addirittura una USB3, quindi maggiore corrente e velocità. Inoltre hanno una presa per una memory card, protetta con uno sportellino, per espandere ulteriormente l’hard disk a stato solido. Comunque anche con i “soli” 32 GB di base c’è abbastanza spazio per caricare tutte le applicazioni del sistema Theremino contemporaneamente.

               



Flat PC

Stanno finalmente arrivando. Sono varie volte più potenti del Raspberry PI, cento volte più potenti di un Arduino e tre volte più piccoli di tutti e due. Modelli simili sono già in vendita per 93 Euro, spedizione compresa, e si prevede che nel 2017 scenderanno sotto i 50 Euro

FlatPC_4      FlatPC_2

Questo è un Flat PC – TCU (Theremino Control Unit) che sarà in vendita su store-ino nei prossimi mesi.

Raspberry e Arduino, teoricamente, costerebbero anche meno, ma si devono aggiungere il Wifi, la memoria di massa, l’alimentatore, la scatola e i dissipatori, per cui il prezzo reale finisce per superare i 100 Euro.

Vantaggi rispetto a un Raspberry: La memoria non è una SDI esterna, per cui non c’è il pericolo di perdere il sistema operativo appena manca corrente. C’è Windows 10 genuino, il WiFi e il Bluetooth integrati, la velocità di esecuzione è maggiore e il consumo di corrente minore. Inoltre tutte le nostre applicazioni funzionano perfettamente, come siamo abituati sui PC grandi, e funzionano subito, senza installare strane librerie di Linux. Non si deve più combattere con i mono, i wine, le password e i “sudo” (diritti di superuser).

Vantaggi rispetto a un Arduino: Un FlatPC può fare tutto quello che fa un Arduino, ma cento volte più veloce e con mille volte più memoria. La velocità è tale che la esecuzione è più “in tempo reale” di quello che si può ottenere da un Arduino. Inoltre, disponendo di un vero sistema operativo, diventa facile implementare funzioni difficili o impossibili per un Arduino, ad esempio spedire una Mail o controllare un drone con il WiFi. E tutto questo senza aggiungere cavi, adattatori e ingombranti “Shield” (vedere questa pagina).

Riassumendo: Un FlatPC è un vero PC, ma incredibilmente piccolo! Più piccolo di un Raspberry e di un Arduino (circa 3 volte meno volume). Così piccolo e leggero (meno di 50 grammi) che può stare su un Drone. E può fare tutto da solo (radio, telemetria, pilotaggio, video di pilotaggio remoto, accelerometro, immagini ad alta risoluzione…). Quindi si eliminano tutti gli altri moduli, 200 grammi di peso in meno e centinaia di Euro risparmiati.

Anche il FlatPC ha il connettore HDMI per collegare un monitor esterno. Aggiungendo una economica tastiera e un mouse senza fili (bluetooth), si ottiene un PC classico di grandi prestazioni, ma economico e poco ingombrante.

Un ottimo modo di controllare i FlatPC è utilizzare un Tablet come schermo e tastiera senza fili (via WiFi con TeamViewer). Si può farlo in rete locale, senza necessità di un collegamento a Internet, oppure anche attraverso Internet. Si può quindi controllare, ad esempio dall’ufficio o da un’isola tropicale, il computer di casa, quello della serra, quello meteorologico... ecc…

     



Comparazione delle caratteristiche

Le seguenti caratteristiche sono ricavate dai campioni inviatici in prova da Yuntab e da informazioni ricavate da Internet. Sono in gran parte nostre supposizioni, sono approssimative, possono contenere errori e sono suscettibili di modifiche prima del rilascio ufficiale.

Questa comparazione non è un giudizio sulla qualità di Raspberry e Arduino. Sono ottimi sistemi per le applicazioni per le quali sono stati progettati e noi li consigliamo spesso. Sia Raspberry che Arduino hanno ottimi compilatori e prestazioni fantastiche per chi usa Linux e gli Sketch. Ma sono prestazioni che non hanno relazione con le applicazioni del sistema Theremino, per cui non sono listate in questa tabella.

  FlatPC + Theremino Master Raspberry PI 2 Model B Arduino_DUE
CPU INTEL Z3735G/F
Quad Core ByTrail
4 x 1330 MHz
ARM__Cortex_A7
Quad Core
4 x 900 MHz
Atmel_SAM3X8E
Single Core
1 x 84 MHz
Bit del processore 64 bit 32 bit 32 bit
RAM 2 Giga Byte
DDR3
666 MHz
1 Giga Byte
DDR2

166 MHz
96 Kilo Byte
SRAM
84 MHz
L2 cache 2 MByte 1 MByte No
Memoria di massa 32 (o 64) Giga di serie
+ slot fino a 64 Giga esterni
Niente memoria
solo slot fino a 32 Giga esterni
512 kilo Byte
Dimensioni 74 x 104 x 12 mm
(Nota 1)
92 x 100 x 33 mm
(Nota 1)
62 x 112 x 35 mm (Nota 1)
Volume 92  cm3
(Nota 1)
303  cm3
(Nota 1)
243  cm3
(Nota 1)
Peso 65 grammi in tutto (compreso un Master, e un modulo ADC a 24 bit e 16 canali) 50 grammi
+ 70 g. scatola
+ peso Wifi etc…
(Nota 3)
100 grammi
+ 40 g. scatola
+ peso Wifi etc…
(Nota 3)
Wi-Fi Sempre di serie (802.11/n) No No
3G Di serie su alcuni modelli No No
Bluetooth Sempre di serie
(Realtek chip set)
No No
Accelerometro SI No No
Orologio in tempo reale Windows RTC system No No
Controllore per batterie LiPo SI (e integrato con sistema operativo)
(Nota 5)
No (da aggiungere ma non integrato)
(Nota 5)
No
Audio Scheda Audio Intel con In-Out WDM Solo uscita (bassa qualità) No
Video HDMI
2400 x 1600 pixel e oltre
HDMI
H264 
fino a 1080 x 1024 pixel
No
Alimentazione 5 Volt
2 Watt
(Nota 2)
5 Volt
4.5 Watt
(Nota 2)
Da 7 a 12 Volt
da 1 a 2 Watt
In Out
generici
InOut – 21 tipi
fino a 22 ADC
fino a 24 bit
(Nota 6)
InOut – 6 tipi
e nessun ADC
InOut – 5 tipi
fino a 16 ADC
fino a 12 bit
Windows 10 completo e genuino SI No
(Windows IOT)
(Nota 7)
No
DotNet 3.5 e 4 SI No No
Visual Studio Community (gratuito) SI No No
Giochi con DirectX SI No No
Controllo a distanza con Team Viewer SI SI No
Prezzo (indicativo) 50..100 Euro tutto incluso (Nota 6) 60..110 Euro
(Nota 4)
70..120 Euro
(Nota 4)

Nota 1: Dimensioni approssimative, con scatola, Hub USB, cavi di connessione, adattatore Wifi, adattatore Bluetooth e 29 GB di memoria esterna.
Nota 2: Potenza usata dalla sola scheda madre, con scheda video spenta (controllo via TeamViewer). Non sono inclusi Wifi, bluetooth, memoria esterna e altri accessori.
Nota 3: Dato che Raspberry e Arduino non dispongono di WiFi, Bletooth, HardDisk e contenitore, si deve aggiungere anche il peso dei cavi, hub, shield e adattatori per collegarli.
Nota 4: Prezzo approssimativo, con dissipatori, scatola, alimentatore da rete elettrica, Hub USB, cavi di connessione, adattatore Wifi, adattatore Bluetooth e 29 GB di memoria esterna.
Nota 5: Nei FlatPC il caricatore delle batterie LiPo è incluso di serie e il sistema operativo viene informato dello stato di carica. Quindi appare il normale indicatore di batteria come sugli SmartPhone, Tablet e Notebook. Invece su un Raspberry, aggiungendo un controller per le LiPo, il sistema operativo non viene informato e l’indicatore di carica di Linux non appare.
Nota 6: Il prezzo dei FlatPC include 30 Giga Byte di memoria di massa, Wifi, Bluetooth, un Master, alimentatore da rete e cavi. Invece gli accessori (modulo ADC da 16 canali a 24 bit, USB HUB, Mouse, Tastiera) variano a seconda delle offerte.
Nota 7: Il Windows IOT (Internet Of Things), che si può installare su Raspberry, fa girare solo applicazioni scritte apposta per lui. Un Raspberry con Windows IOT, non funziona con nessuna delle applicazioni desktop, che siamo abituati a usare sui PC.


Strumenti di sviluppo 

Per sviluppare o modificare il software, si usa Visual Studio Express, che Microsoft fornisce gratuitamente, per usi non commerciali o didattici. Per permettere a tutti di aprire i progetti, usiamo Visual Studio Express 2008.

Visual Studio Express 2008 è praticamente uguale al 2010, 2012 e 2013, a parte i colori e poco altro, ma ha prestazioni che mancano, a tutte le versioni successive, tra cui:

  • La possibilità, di convertire i vecchi progetti scritti in VB6.
  • La possibilità di installarlo su macchine vecchie, anche con XP.
  • La velocità di installazione (qualche minuto contro le ore che servono per installare la versione 2019).
  • La poca occupazione di spazio sull’HardDisk che nei Tablet è sempre scarso (meno di 1 GigaByte contro gli incredibili 20 GigaByte delle versioni del 2015 complete di CPP e varie utility. E la 2019 dovrebbe essere anche peggio).
  • La velocità di compilazione dei progetti, frazioni di secondo contro decine e decine di secondi anche sulle macchine più veloci.

Quindi gli sviluppatori, che vogliono collaborare con il sistema Theremino, dovrebbero installare VS2008ExpressSp1, solitamente il solo VbNet (gli altri linguaggi potranno essere installati in seguito uno per volta). Tutti gli strumenti di sviluppo, vanno installati in inglese, per facilitare le comunicazioni, tra sviluppatori.

Download di VisualStudioExpress2008 solo VbNet (file da 500 Mega compresso con 7Z):
VS2008ExpressSp1_VB

Download di  VisualStudioExpress2008 completo (file da 780 Mega in versione ISO):
VS2008ExpressSp1_VB_C#_CPP

– – – – – – –

Per quanto possibile cerchiamo di usare sempre Visual Studio 2008 Express (in inglese) e DotNet 3.5, in modo da mantenere le applicazioni semplici e leggere a scopo didattico. Per i progetti che veramente richiedono funzioni esotiche (e solo per quelli) useremo l’ultima versione di Visual Studio che attualmente è “Visual Studio 2019 Community”. Importante notare che ora le versioni gratuite non si chiamano più “Express” ma “Community”.

Download del Visual Studio 2019 Community dal sito Microsoft:
https://www.visualstudio.com/it-it/downloads/download-visual-studio-vs.aspx

Prima di scaricare il Visual Studio scegliere la lingua inglese. Poi, durante la installazione, scegliere i componenti da installare e aggiungere il CPP e magari anche il supporto per le applicazioni “modern” (le applicazioni a tastoni).

– – – – – – –

Per chi trovasse troppo complesso il Visual Studio, abbiamo creato due alternative: il Theremino Automation (molto facile da usare e anche abbastanza potente) e il Theremino Script.

Theremino Script è difficile da usare e anche meno potente di Visual Studio, quindi unisce il peggio di ambedue. Il nostro consiglio è quindi di utilizzare Automation o di passare direttamente a Visual Studio.


Theremino EmptyApp


Il modo più facile per comunicare, con le altre applicazioni e con l’hardware, sarebbe Theremino Automation. Oppure, come secondo livello di difficoltà, ci sarebbe Theremino Script. Ma alcuni utenti vogliono usare il vero Visual Studio, e ci hanno chiesto una base semplificata, per iniziare.

Questa applicazione, contiene solo tre pulsanti e una casella di testo, ma contiene anche la classe “Theremino Slots”, che serve per scrivere e leggere gli Slot. Per mezzo degli slot, si comunica con l’hardware, e con le altre applicazioni, del sistema Theremino. E quando si arriva agli slot, si può fare di tutto.

Attenzione: può accadere che su sistemi a 64 bit le applicazioni non riescano a leggere e scrivere gli Slot, in questo caso vanno compilate per “x86”. La versione 1.1 di Empty App è configurata per essere compilata con x86, ma ugualmente è bene imparare a farlo. Leggere le note all’inizio di questa pagina che spiegano, come preparare Visual Studio, con le caselle “Debug/Release” e “Solution Configuration”.

Durante le prove, consigliamo di tenere sempre aperto uno Slot Viewer, per vedere i valori degli slot, e per modificarli a piacere. Una prima prova potrebbe essere questa:

  • Individuare la “Timer1_Tick” (ultima funzione del Form1)
  • Commentare o eliminare le tre istruzioni (righe), che sono dentro alla “Timer1_Tick”
  • Scrivere al loro posto questa riga: TextBox1.Text = Slots.ReadSlot(1).ToString
  • Lanciare il programma, e premere il secondo pulsante.
  • Variare il valore dello Slot 1, con lo Slot Viewer.
  • Il valore dello Slot 1, dovrebbe apparire nella casella di testo, e aggiornarsi velocemente.

https://www.theremino.com/wp-content/uploads/files/Theremino_EmptyApp_V1.1.zip


Consigli per gli sviluppatori

Prima di tutto, provare se le nostre applicazioni funzionano e, se necessario, installare DotNet 3.5 runtime e DirectX 9.0c. Per verificare se c’è DirectX provare, ad esempio, Theremino_3D.

Poi installare il Visual Studio Express (solitamente il solo VbNet) e prepararlo come spiegato, nel prossimo paragrafo.

Cominciare esplorando una applicazione semplice, ad esempio lo Slot Viewer, aprendo il file della “Solution”, che si chiama “Theremino_SlotViewer.sln”.

Per fare nuove applicazioni non conviene mai partire da zero ma:
– Scegliere una applicazione, che faccia più o meno, le cose che servono.
– Copiare la cartella superiore (che contiene tutti i file della applicazione).
– Studiare un nuovo nome, mantenendo la convenzione “Theremino_NomeApp”
– Rinominare la nuova cartella, appena creata, con il nuovo nome (underscore compreso)
– Aprire il file solution,
– Eliminare il progetto che non viene più trovato dato che la cartella è rinominata.
– Con il tasto destro sulla soluzione fare “Add existing project” e scegliere il file “.vbproj”
– Nel “Solution explorer” (finestra a destra in alto) rinominare “Solution” e “Project”.
– Aprire le proprietà del progetto e selezionare il pannello “Application”.
– Rinominare le due caselle in alto “Assembly name” e “Root namespace”.
– Premere “Assembly information” e rinominare il titolo, la descrizione e gli altri campi.
– Selezionare il pannello “Compile” e impostare “All Configurations” e “All Platforms”.
– Premere il pulsante “Browse” e rinominare la cartella dove verrà scritto il file EXE.
– Compilare, chiudere DotNet e eliminare manualmente, tutti i file con il vecchio nome.
– Modificare le applicazioni, cercando di mantenere la struttura fondamentale.
– Eventualmente copiare funzioni, controlli e idee da altre applicazioni thereminiche.
– Per copiare da una applicazione a un altra, si aprono contemporaneamente le due applicazioni, in più copie di VisualStudio, facendo doppio click sui rispettivi file “.sln”. Infine si fa copia – incolla di tutto quel che serve, sia oggetti grafici che funzioni.

Per accedere agli slot: partire dal file “Class_ThereminoSlots.vb”, o da “Class_ThereminoSlots.cs” (per chi preferisse lavorare in CSharp o sta facendo un porting su Java, Python o CPP). Le ultime versioni, della classe Theremino Slots, si trovano nei sorgenti dell’HAL, in VbNet e CSharp, che si scaricano da qui: downloads/foundations#hal

Per iniziare con uno scheletro semplificato: partire da Theremino_EmptyApp, che si trova in questa stessa pagina: downloads/notes-on-software#emptyapp

Per esplorare lo stato delle variabili durante il funzionamento: cambiare la casella “Release” in “Debug”, posizionare un pallino rosso, con il tasto sinistro del mouse, a sinistra della riga, dove si vuole interrompere il programma, e lanciare il programma, con la freccia verde.

Compilare i programmi senza ottimizzazioni. Le ottimizzazioni non accelerano la esecuzione del software, se non di pochissimo, e solo in alcuni casi. In compenso le ottimizzazioni creano problemi ad alcuni antivirus, e possono far considerare il programma come “sospetto”.

Compilare i programmi come “x86” e non “AnyCpu”, a meno di sapere esattamente cosa si sta facendo. Con AnyCpu tutti i passaggi dei parametri devono essere perfetti, se si sbaglia un IntPtr al posto di un Int32, il programma potrebbe non funzionare sui sistemi a 64 bit. Se si compila AnyCpu, si deve poi provare il programma, su tutti i sistemi Windows, sia a 32 che a 64 bit.

Usare sempre Int32 al posto di Integer e Int64 al posto di Long, altrimenti su macchine a 64 bit, possono accadere difetti imprevedibili.

Lasciare a DotNet il compito di distruggere gli oggetti. DotNet sa meglio di noi, quale è il momento migliore, per distruggere gli oggetti, e recuperare lo spazio. Se si usa “Dispose”, lo si costringe a distruggerli prematuramente, e gli si fa solo perdere tempo.

Lasciare a DotNet il controllo degli errori. Quando accadono errori, è bene che DotNet possa emettere i suoi messaggi, che sono sempre molto significativi. Se gli si impedisce di farlo, poi diventa difficile capire cosa è successo. Quindi, per piacere, non impestate il programma di Try Catch, tranne in casi particolari (praticamente solo nella lettura e scrittura dei file).

I Try Catch servono per poter proseguire anche in caso di errori, non per far esplodere il programma, al minimo soffio di vento. Quindi, oltre a non infarcire tutte le righe di Try Catch, i Catch devono essere rigorosamente vuoti. Solo in casi particolari, quando si sa bene cosa si sta facendo, e si vuole emettere un messaggio più significativo, di quello di Dot Net, allora ha senso mettere qualcosa nel Catch.

Commentare poco e bene. Scrivere ad esempio “A = B  ‘Questa istruzione assegna, alla variabile A, una copia del valore numerico, della variabile B” distrae l’attenzione e rende il software lungo e illeggibile. Alcuni programmatori arrivano all’assurdo, di scrivere tre righe di commenti, per ogni riga di codice, a volte anche con istruzioni aggiuntive, per generare i file XML. Per piacere non fatelo! 

Documentazione automatica? No grazie. I file XML sono più difficili da leggere del codice stesso. Inoltre quando si modifica il codice, è facilissimo dimenticare di allineare le istruzioni per l’XML. Per cui alla fine non ci si può fidare della “documentazione automatica” e si deve sempre verificare anche il codice. Il quale, sadicamente, è diventato lungo e illeggibile, a causa della “documentazione automatica”.

Non commentare tra le righe ma nello spazio vuoto a destra. Cercate di commentare, con lo stesso stile usato dalla comunità thereminica. I commenti non servono, per chi scrive il programma, ma per chi lo leggerà in futuro. Per cui è bene usare uno stile uniforme (un apice seguito da un riga di meno, con il commento sulla destra). Questo aiuta a separare le istruzioni, in gruppi significativi, ogni gruppo con un breve commento all’inizio.

Scrivere i nomi delle funzioni, le variabili e i commenti in inglese. La lingua universale del software è l’inglese semplificato: “IO FARE QUESTO TU FARE QUELLO”. Noi Italiani siamo solo una piccola parte del mondo, abituiamoci a scrivere software comprensibile per tutti. Chi non sa l’inglese, può scrivere in italiano semplificato e tradurre con GoogleTranslate. Nel software si usano solo parole semplici, e facili da ricordare.

Mantenere una struttura modulare. Copiate la struttura fondamentale dalle applicazioni esistenti. In questo modo si potranno trasferire funzioni e comportamenti, da una applicazione all’altra. La struttura modulare, facilita la collaborazione e permette anche ai meno esperti, di comporre nuove applicazioni, con il copia incolla.

Sfruttare il software già esistente. Attualmente sono disponibili oltre 50 applicazioni e altrettanti script, che vanno dal 3D ai WebBrowser, dall’audio, alle applicazioni scientifiche, alla musica, e al video. Quasi tutti gli algoritmi, e ogni genere di sintassi, sono presenti, in una o l’altra delle applicazioni, ma non solo! Le soluzioni che proponiamo sono scelte con cura, e sono al 99%, la soluzione migliore che si possa trovare sul web. Spesso sono soluzioni inedite, che sul Web non si trovano proprio. Quindi individuate una applicazione, che contenga quel che serve, apritela contemporaneamente alla vostra, e copiate i pezzi necessari, da un Visual Studio all’altro.

Naturalmente chi scrive per se stesso può fare esattamente quello che gli pare. Ma in tal caso farebbe bene a dare un nome personale (senza “Theremino_xxx”) alle sue applicazioni.


Programmazione non deterministica

Ci hanno scritto chiedendo di approfondire l’argomento della programmazione non deterministica accennato nella pagina “mission” e di specificare linee guida su di essa.

Molto è stato scritto sulla programmazione ma chi la conosce sa che è più un arte che una scienza. E anche che gran parte del buono e del cattivo nella programmazione dipende più dallo stile che dalle regole. E così come non si possono specificare regole per “produrre” quadri metafisici piuttosto che astratti o impressionistici. Per gli stessi motivi non è possibile specificare regole per la programmazione non deterministica.

Pertanto non scriveremo cosa fare, ma solo qualche idea e alcuni errori da evitare.

  • Semplicità – Conviene passare più tempo a semplificare e meno ad aggiungere funzioni dato che più un programma è complesso e più contiene errori. Le dimostrazioni formali di correttezza sono necessariamente più complesse del programma stesso e quindi inevitabilmente contengono anch’esse degli errori. Solo l’intuito e l’esperienza possono dare una ragionevole sicurezza che un programma funzioni bene (Nota 1) ma l’intuito dà buoni risultati solo con programmi semplici. Quindi se una applicazione diventa troppo complessa è bene dividerla in più applicazioni separate, ciascuna con compiti più semplici. Ed è per questo motivo che le applicazioni del sistema Theremino sono numerose (una cinquantina nel 2017) e crescono di una dozzina all’anno.
  • Robustezza – Un software robusto non è un software pieno di messaggi di errore, ma un software che si arrangia da solo. A volte potrebbe dare messaggi informativi, ma non dovrebbe mai bloccarsi. Per colpa di uno di questi messaggi di errore c’è mancato poco che non si scendesse sulla luna. Fortunatamente è intervenuto un tecnico che, con grande coraggio, nei pochi secondi ancora disponibili, ha sostanzialmente detto: “freghiamocene”. Ma se fosse stato solo per il software la missione sarebbe fallita (Nota 2).
  • Programmazione ridondante e probabilistica – Tutti i programmi che non siano semplici “due più due uguale quattro”, contengono sempre errori e se anche non ne contenessero, gli errori potrebbero arrivare con i dati da elaborare o potrebbero annidarsi nelle specifiche stesse usate come base per scriverli. Per cui bisogna abbandonare l’idea di scrivere algoritmi perfetti ma piuttosto cercare di scriverli in un modo tale che possano continuare a funzionare anche in presenza di errori. E qui non esistono regole, per riuscirci è assolutamente necessario avere una esperienza almeno decennale e aver scritto migliaia di applicazioni.
  • Asincronicità – Se i sottosistemi si attendono l’un l’altro basta che uno si blocchi per far morire l’intero programma. Gli esseri viventi non fanno questo. Ogni neurone sussurra o grida il suo messaggio e non si preoccupa se i neuroni seguenti lo hanno raccolto e nemmeno attende una risposta da essi, una conferma di ricezione o un controllo di parità (Nota 3).
  • Somiglianza con i “software” prodotti dalla evoluzione – I sistemi biologici continuano a elaborare dati anche se tutto è totalmente e irrimediabilmente sbagliato. Anche in presenza di enormi danni, e a volte proprio grazie agli errori, un qualche risultato lo ottengono sempre. Possono zoppicare ma non smettono lo stesso di provarci. Questo è quello che dovremmo cercare di ottenere dal software. Le consuetudini attuali portano invece a scrivere software che vorrebbe essere perfetto ma che, proprio per il suo esagerato perfezionismo, muore con estrema facilità.

(Nota 1) Kurt Gödel nel 1931 dimostrò che l’aritmetica stessa risulta incompleta (primo teorema) e anche che nessun sistema abbastanza espressivo da contenere l’aritmetica può essere utilizzato per dimostrare la sua stessa coerenza (secondo teorema). E ha dedotto anche che se un sistema assiomatico può dimostrare la sua stessa coerenza, allora esso stesso deve essere incoerente. Ma Gödel disse anche che gli esseri umani (e gli altri organismi viventi n.d.A.) possiedono una modalità intuitiva, non solo computazionale, e che quindi il suo teorema non pone limiti a ciò che può essere riconosciuto come vero dall’uomo (e dagli altri organismi viventi n.d.A.)

(Nota 2) Oltre a sprecare milioni di dollari la storia sarebbe potuta cambiare completamente. Forse la missione seguente avrebbe avuto un guasto e magari si sarebbe abbandonata del tutto l’idea di provarci. Questo non vuol dire che scendere sulla luna sia poi molto diverso dallo scendere da un albero, ma forse sono state missioni uniche e irripetibili. Probabilmente ci estingueremo come hanno fatto gli abitanti dell’isola di Pasqua, dopo aver distrutto l’ambiente in cui vivevano. Quindi, nel nostro piccolo, essere scesi sulla luna un po’ di importanza ce l’ha, ed è comunque il punto più lontano che siamo riusciti a raggiungere.

(Nota 3) Abbiamo comunque dimostrato con Theremino CNC che è possibile un controllo asincrono anche per applicazioni difficili che necessitano della massima sicurezza. Theremino CNC muove fino a cinque assi in modo coordinato in uno spazio a cinque dimensioni e nessuno delle centinaia di utenti che lo stanno usando gli ha ancora trovato difetti. Anzi lo trovano tutti semplice e ben funzionante, senza considerare che il suo cuore profondo è totalmente asincrono (scrive “quando capita” e legge “alla carlona”).


Eventi e Threads

Per convivere con un sistema operativo, le applicazioni vanno scritte in modo particolare. Con applicazioni semplici queste difficoltà non si notano, ma appena la applicazione diventa un po’ complessa, si verificano puntualmente difetti e inceppamenti. Questi problemi, non sono causati dal linguaggio di programmazione (VbNet, ThereminoScript, Java, C++, Vb6…), e nemmeno dal sistema operativo (Windows, Linux o Android). Si tratta di concetti generali, che devono essere compresi.

Perché Arduino non risente di queste difficoltà? Perché normalmente gli Sketch di Arduino sono semplici e non devono collaborare con un sistema operativo. Ma anche con Arduino, appena si esce dalla fase giocattolo, questi problemi spuntano. Leggere questo post che è un esempio classico di quel che può succedere.

Capire gli Eventi e i Threads

Gli Eventi sono generati dal sistema operativo, si tratta di pulsanti premuti, finestre spostate, mouse e temporizzatori che scadono. Gli eventi sono eseguiti nel Thread principale della applicazione. Ogni applicazione ha come minimo, un Thread principale, che si occupa della comunicazione con l’utente (UI – User Inteface).

Ogni Thread può fare una sola cosa per volta, se sta eseguendo una istruzione, non può contemporaneamente eseguirne altre. Cosa succede se si eseguono compiti lunghi, ad esempio una pausa di 10 secondi, nel Thread principale della applicazione? Succede che la applicazione non risponde più, ai comandi dell’utente.

Soluzioni?

  • Gestire con cura gli eventi, del Thread principale, della applicazione. Mai fare pause o operazioni lunghe (stare sempre sotto a un decimo di secondo, meglio un centesimo). In caso di operazioni lunghe, si dovrebbero scrivere meccanismi complicati, per interromperle periodicamente (Macchine a Stati, Do Events e simili)
  • Lanciare un secondo Thread, che da quel momento, avrà una sua vita indipendente.

I Thread sono lavoratori indipendenti. Un Thread non può chiamare le funzioni di un altro Thread, per costringerlo a fare immediatamente qualcosa. Questo perché il secondo Thread sta eseguendo altre istruzioni, e non può sdoppiarsi. Quindi il primo Thread deve lasciare messaggi, e il secondo deve periodicamente controllarli, ed eseguirli. Solitamente per comunicare, si usano variabili condivise (variabili numeriche o di testo).


Come deve apparire il Visual Studio

In pratica si modificano i pulsanti della toolbar, la posizione e la visibilità dei pannelli, e le altre opzioni, fino ad ottenere, lo stesso aspetto di questa immagine. Queste operazioni vanno fatte una volta sola, dopo aver installato Visual Studio.

Prima di tutto, si apre il menu “Tools” “Options” e nel pannello Options, si sceglie “Project and solutions”, “General” e si abilitano “Show advanced build configurations” e “Always show solution”.

Per lavorare bene si deve vedere il pannello “Solution explorer”, a destra, con sotto il riquadro delle proprietà, e in basso la finestra degli errori. Se manca qualche pannello, li si aggiungono con il menu “View”, e con il menu “Debug-Windows”.

La toolbar deve contenere la casella “Debug/Release” (per poter fermare il programma con i breakpoint, e ispezionare i valori delle variabili), e la casella “x86” (per poter impostare x86, e far funzionare le applicazioni, su tutte le versioni di Windows). Se mancano, si preme il tasto destro del mouse, a destra dell’ultimo comando, e si sceglie “Customize”, “Commands”, e poi “Build”. Infine si scrolla la lista dei comandi, fino agli ultimi due: “Solution configuration” e “Solution platform”, e li si trascina sulla barra dei comandi.      


Download delle impostazioni

Per velocizzare la configurazione, abbiamo preparato i file con le nostre impostazioni per Visual Studio Express 2008 e Visual Studio Community 2015:
https://www.theremino.com/wp-content/uploads/files/VisualStudio2008_Settings.zip
https://www.theremino.com/wp-content/uploads/files/VisualStudio2015_Settings.zip

Per applicare le impostazioni a Visual Studio si possono usare due metodi:

1) Decomprimere i file ZIP dove si preferisce. Aprire Visual studio, menu “Tools”, “Import and export settings” e infine scegliere “Import selected environment settings”.

2) Decomprimere i file ZIP e sovrascrivere i file che si trovano nelle cartelle seguenti:
“C:\Users\xxxxx\Documents\Visual Studio 2008\Settings”
“C:\Users\xxxxx\Documents\Visual Studio 2015\Settings”


Caratteristiche non comuni del Software thereminico

Theremino non è una applicazione, ma un intero ecosistema, composto da oltre cinquanta applicazioni, che comunicano tra loro.

Lo applicazioni “thereminiche”, non richiedono installazione, non richiedono mai di riavviare il computer, e non scrivono nel registro di sistema. Il computer e il sistema operativo, non vengono alterati, in nessun modo. Un principio di base sistema Theremino, è che le applicazioni, non modificano mai nulla, al di fuori della loro cartella. Questi principi sono la base delle applicazioni portatili.

Per cui, per disinstallare basta cancellare, e per aggiornarsi alle nuove versioni, basta sovrascrivere i file. I vecchi file di configurazione funzionano, anche sulle nuove versioni di applicazioni (e viceversa). Le applicazioni possono essere spostate di cartella, sono portatili e modulari, possono comunicare tra loro e possono essere eseguite in più copie (curando di mantenerle in cartelle separate, in modo che ogni applicazione, abbia i suoi parametri, e i suoi file privati)

Le applicazioni hanno documentazione minimale. Tutti i parametri sono immediatamente visibili, e l’interfaccia utente è semplificata al massimo. L’idea di fondo dice: “Se un’applicazione, necessita di molte spiegazioni, vuol dire che è fatta male, meglio migliorare la sua interfaccia utente, che allungare la documentazione”.

Considerate le nostre applicazioni come esempi, quindi modificabili e migliorabili. Sono tutte corredate di sorgenti, e scritte in modo semplice. Per cui si possono aggiungere prestazioni, o usarle come base, per creare nuove applicazioni. Sperimentatori e collaboratori sono i benvenuti.

Abbiamo scritto il software nel modo più semplice possibile, in modo che sia possibile usarlo per imparare la programmazione. Per cui, prima di tutto, abbiamo usato il linguaggio più semplice, il Basic, che con VbNet è anche diventato, il linguaggio più potente e veloce – non credete a chi dice il contrario – verificate da soli, facendo i test di velocità con i tre programmi MMF, scaricabili dalla pagina downloads/foundations, che fanno tutti esattamente le stesse cose, e sono scritti in C++, CSharp e VbNet. Infine esplorate i codici sorgente, e giudicate voi stessi, quale sia il più semplice, conciso e comprensibile. Chi, per qualche oscuro motivo, preferisse scrivere di più, per ottenere le stesse cose, potrebbe aprire le nostre applicazioni con SharpDevelop, premere “VbNet to CSharp” e, in pochi secondi, avrebbe il suo software convertito, con qualche migliaio di punti e virgola in più.
In questa pagina si possono leggere i particolari che rendono il VbNet superiore al CSharp (e anche notevolmente superiore al C++): https://www.simple-talk.com/dotnet/net-framework/10-reasons-why-visual-basic-is-better-than-c


Programming Tools

Questa sezione raggruppa attrezzi, consigli e software, che potrebbero essere utili ai programmatori. L’ordine di questo elenco è casuale. Tutto quello che non trova una collocazione più precisa, finisce qui.

Funzioni di calcolo delle matrici
La rete è piena di librerie per le matrici! Si è vero. Ma quando ne abbiamo avuto bisogno (per l’algoritmo di calcolo delle gaussiane, nel Theremino MCA), non siamo riusciti a trovarne una che funzionasse. Gran parte delle librerie, sono fatte da matematici, i quali si curano solo dell’aspetto formale. Di conseguenza quando inserite in un algoritmo, vanno continuamente in errore, a causa di valori intermedi infiniti, divisioni per zero e ricorsioni che divergono. Le funzioni di calcolo, di questo zip, hanno molti vantaggi: Primo fra tutti funzionano! Poi non si inciampano nelle singolarità, sono scritte in DotNet puro, e non sono ricorsive. Inoltre, le abbiamo provate a lungo, e possiamo garantire, che sono tra le più veloci.
https://www.theremino.com/wp-content/uploads/files/Module_MatrixFunctions.zip

Theremino Know-How 2014, 2015 e 2020
Questo è un ammasso selvatico di idee, esempi, funzioni, algoritmi e trucchi per VbNet. Non era pensato per essere pubblicato, quindi ci si può trovare di tutto, tra cui commenti in italiano e cose senza senso. Si tratta di quasi un Giga Byte di conoscenze, che possono essere utili, ai programmatori estremi (quelli che fanno il lavoro sporco). Questo file è aggiornato all’agosto del 2014. Prevediamo di pubblicarne uno nuovo ogni anno.
https://www.theremino.com/uploads/Theremino_KnowHow_2014.zip

La versione del 2015 contiene anche le ultime novità, che purtroppo sono sparse in un mare di informazioni obsolete. Abbiamo eliminato alcune parti tra le più inutili, ma il file rimane lo stesso un enorme ammasso di rumenta, con qualche perla qua e là.
https://www.theremino.com/uploads/Theremino_KnowHow_2015.zip

La versione del 2020 è la stessa del 2015 ma con 200 megabyte aggiuntivi. I nuovi file contengono tutto quello che abbiamo imparato negli ultimi cinque anni.
https://www.theremino.com/uploads/Theremino_KnowHow_2020.zip


Remote Desktop

Se avete dei problemi che non riuscite a risolvere scriveteci a engineering@theremino.com

A volte accadono problemi difficili da spiegare con una mail. In tal caso potremmo parlare via Skype o telefono, e sarebbe anche utile poter condividere lo schermo.

Vi consigliamo quindi di installare una applicazione “Remote desktop”. Queste applicazioni permettono di vedere il desktop di un computer lontano, come se si fosse sul posto. Si possono anche trasferire file e intervenire sul software che si trova sul computer distante. Esistono molte applicazioni del genere, alcune anche open source e totalmente gratuite, noi solitamente utilizziamo AnyDesk che è veloce e facile da usare.

AnyDesk è una applicazione commerciale, ma utilizzabile da privati e makers senza fini di lucro, quindi adatta a una organizzazione No-Profit come la nostra.

AnyDesk si scarica da questa pagina e si installa in poche decine di secondi. Una volta installato vi sarà utile anche in altre occasioni, ad esempio per aiutare i vostri amici meno esperti.

Ringraziamo il team di AnyDesk, che ci concede di usare gratuitamente la loro ottima applicazione.

– – –

Applicazioni “Remote desktop” da non usare

TeamViewer – In precedenza lo utilizzavamo ma ha creato problemi (le versioni acquistate non andavano d’accordo con quelle gratuite e c’erano sempre problemi di versione). Alcuni nostri corrispondenti cinesi utilizzano TeamViewer anche per scopi commerciali e quindi l’hanno comprato. E hanno comprato la versione 12, che è incompatibile con le versioni successive (13 e 14). Per cui o loro compravano la versione quattordici (spendendo ulteriori cifre abbastanza sostanziose), o noi eravamo tutti costretti a installare la versione 12 per poter comunicare con loro. 

Comments are closed.