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 11 o al massimo su Windows 10 (possono funzionare anche XP, Windows 7, 8 e Vista ma con numerosi difetti).

Tablet10a    Theremino FlatPC

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

Reperibilità dei PC, Tablet e Mini PC

In questa sezione presentavamo varie soluzioni tra cui FlatPC e StickPC, ma erano altri tempi, ed era difficile trovare “qualcosa” che facesse girare bene Windows senza essere un baraccone alto mezzo metro.

Ora esistono ottimi Mini PC con Windows 11 che costano meno di 100 Euro e sono più veloci dei computer a vapore che usavamo allora, per cui abbiamo eliminato tutto e sostituiamo con i pochi consigli che seguono.

  • Comprate qualcosa (Mini PC, Tablet, Laptop o Tower) con processore e hardware (CPU, TPM ecc.) che siano validi per Windows 11
  • Deve avere almeno 6 GB di RAM (ma meglio se sono 8 GB) e almeno 64 GB di SSD
  • Deve avere un processore contemplato nella lista di quelli validi per Windows 11
  • Il processore dovrebbe essere quadcore. Anche alcuni dual core vanno bene ma prima di comprarli chiedete a Gemini se ha prestazioni abbastanza buone.
  • Non deve essere un processore SnapDragon, guardate questo video per capire il perchè.
  • Non spendete più di 100 o 200 Euro per prestazioni che alla fine non vi servirebbero (a meno che vogliate fare pesanti editing video o gaming estremo)
  • Se volete spendere poco comprate su AliExpress scegliendo oggetti “Choice” che vi arriveranno in una settimana o poco più. AliExpress ha una ottima e rapidissima assistenza post vendita e al minimo problema vi restituiscono i soldi, a volte senza nemmeno volere la merce indietro.

Consigli per usare i Mini PC

A volte i Mini PC possono arrivarvi con applicazioni già installate, il che è noioso e c’è anche poco da fidarsi, per cui se volete stare tranquilli, prima di iniziare a usarli installate Windows 11 da zero come spiegato nel prossimo capitolo (prima di installare dovete salvare i Driver e il  Product Key, è ben spiegato nel documento ma è bene ricordarlo anche qui).

Per controllare i Mini PC consigliamo di utilizzare Google Remote Desktop. Potrete controllarli comodamente dal vostro PC principale o con un LapTop e non dovrete nemmeno collegare tastiera, monitor e mouse al Mini PC.

Tutti i BIOS recenti permettono anche di impostarli in modo che il MiniPC si accenda quando riceve alimentazione e questo è molto comodo se li usate ad esempio per macchine  come una fresa o un oscilloscopio. Però per spegnerli è sempre meglio usare il comando di sistema.


Installare Windows 11

Secondo Microsoft dovremmo buttare tanti buoni PC con processori veloci e recenti, ma in realtà si può installare Windows 11 su qualunque computer.

Gli unici limiti sono che il sistema operativo sia Windows, non Android, e che deve essere già a 64 bit (Home o Pro non importa), che il processore sia almeno Dual Core, che non sia uno SnapDragon (vedere questo video), che ci siano almeno venti o trenta Giga liberi sul disco e che la RAM sia almeno 6 GB.

Abbiamo provato questo sistema su un gran numero di PC, Notebook, Tablet e MiniPC di modelli diversi e su tutti Windows 11 ha funzionato bene e anche un po’ più veloce di Windows 10, con tutti i driver a posto e, molto importante, si aggiornano tutti automaticamente con Windows Update.

Inoltre con il metodo che illustriamo si risparmia anche molto tempo, rispetto al lentissimo “Aggiornamento a Windows 11” che vi propone Windows 10 su alcuni PC.

In poche decine di minuti ci si toglie il pensiero e il Windows 11 che si ottiene è quasi identico al Windows 10 cui siamo abituati. Lo avremo configurato come vogliamo e sarà anche un po’ più veloce e più stabile di Windows 10.

     Download della documentazione in formato pdf
Windows11_Installation_ITA.pdf
Windows11_ShareFolders_ITA.pdf
Windows11_Installation_ENG.pdf
Windows11_ShareFolders_ENG.pdf

     Download della documentazione in formato ODT
Chi conosce bene queste lingue, potrebbe aprire i file con Office e correggerli. Per le altre lingue potete prendere il file inglese e farlo tradurre da: onlinedoctranslator che è ottimo, velocissimo e rispetta la formattazione.
Windows11_Installation_ITA.odt
Windows11_ShareFolders_ITA.odt
Windows11_Installation_ENG.odt
Windows11_ShareFolders_ENG.odt


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.