miniBloq

miniBloq

miniBloq è un linguaggio di programmazione visuale open source in fase di sviluppo per Multiplo ™, Arduino ™ e dispositivi fisici di calcolo e robot. Minibloq nasce nel 1997 quando lo sviluppatore Juliàn da Silva Gillig pubblica Minibloques, una versione gratuita ma non aperta, utilizzata nelle scuole elementari e medie in Argentina.

Tra maggio e giugno del 2011, miniBloq partecipa ad una raccolta fondi su KickStarter  con il progetto chiamato “Minibloq: graphical programming environment for Arduino” raggiungendo e oltrepassando di molto il traguardo di 4.300$.

Non ho compreso a quale versione del programma fossero quando hanno lanciato la raccolta fondi, fatto è che gli obiettivi proposti erano molti e le persone gli hanno effettivamente dato fiducia. Ad oggi però, ancora non esiste la versione 1.0 e molti degli obiettivi proposti (tra i quali il miglioramento della GUI) non sono stati ancora raggiunti.

La versione 0.83 attualmente disponibile, che ho personalmente testato, presenta un ambiente a mio parere stabile ma molto scomodo e poco intuitivo. La scelta delle icone che rappresentano i “blocchi” sono poco comprensibili e la loro dimensione, quando vengono inseriti nell’area di sviluppo, risulta a mio parere inappropriata alla programmazione. Con il comando Mouse wheel + Ctrl: Zoom in / Zoom out, è possibile  ingrandire e rimpicciolire i blocchi presenti nell’area di sviluppo ma non sembra risolvere il problema, solo cambia la loro dimensione e questa pratica di rimpicciolire i blocchi può solo aiutare la navigazione del codice ma non la sua comprensione.

Un’altro problema è la rappresentazione delle strutture di controllo, in quanto l’unica via per riconoscere dove inizia e finisce una struttura è osservando la posizione dei blocchi e quindi la loro indentazione. Però l’indentazione è una soluzione di leggibilità tipica dei linguaggi puramente testuali, dove si cerca in tutti i modi di migliorare la leggibilità del testo anche attraverso colori e dimensioni. Nel caso di Scratch e Snap!, l’indentazione viene usata in modo marginale, in quanto il codice contenuto all’interno di una struttura di controllo viene letteralmente avvolto dalla stessa. Questo approccio permette di avere la percezione che il codice è effettivamente contenuto ed eseguito al suo interno e, se il fine è quello di educare i giovani alla programmazione, credo sia indispensabile alleggerire la lettura e la comprensione del codice.

Anche se vi sono molti altri problemi legati all’ambiente di sviluppo, credo non sia necessario sottolinearli in quanto stiamo parlando di una versione in corso d’opera che spero di vedere un giorno conclusa.

Parlando invece degli aspetti positivi su cui investirei, ho trovato molto utile l’accesso agli esempi suddivisi secondo l’hardware utilizzato, mi piace che si possa fare un confronto diretto tra il codice sviluppato graficamente ed il codice in formato testuale e trovo importante avere una lista ragguardevole di possibili piattaforme hardware da poter utilizzare.

Hardware supportato:

  • AERobot v1.0
  • Arduino Leonardo
  • Arduino Mega 2560 o Mega ADK
  • Arduino Uno
  • DuinoBot Kids v1.x.HID
  • DuinoBot v1.x -> 2.3 HID
  • DuinoBot c2.3.CDC
  • miniSim v0.2
  • Pi-Bot v1.0
  • RedBoard
  • RedBot v1.0
  • Seeeduino 328/Arduino Duemilanove
  • Seeeduino Mega 1280 / Arduino Mega
  • Sparki v1.0
  • Ta-Bot v1.0

In casa, l’unico Hardware ora a mia disposizione per testare le funzionalità di miniBloq, è una scheda Arduino Uno, delle resistenze e tanti LED. La mia iniziale intenzione era quella di poter scrivere un programma per costruire un orologio binario. Dopo però essermi reso conto che l’unico tipo di variabile disponibile è di tipo float, che le uniche strutture di controllo sono if/else, while e for, che non si può lavorare con gli array, che non vi è il modulo per calcolare il resto e che l’unico modo per poter inserire nel codice questi elementi era quello di scriverli a mano, decisi di desistere con il mio progetto e di testare alcuni esempi tra i quali quello che vedete nell’animazione che si chiama 310.FiveLEDs.

In conclusione, credo che attualmente miniBloq sia ad un ottimo punto di partenza per la creazione di un IDE che possa un giorno raggiungere i livelli di altri ambienti di sviluppo come Snap!, ma penso che per ora sia più utile come banco test dove poter improvvisare alcune semplici automazioni.

 

Link:

LabVIEW

LabVIEW

Tra tutti i Linguaggi di Programmazione Visuali esistenti ed esistiti (sono oltre 100), LabVIEW è forse l’unico che si sia distaccato e che sia entrato nella top 50 dell’indice di popolarità dei linguaggi di programmazione TIOBE. LabVIEW nasce nel 1983 dalla necessità della National Instruments di testare i suoi prodotti Hardware ed oggi, con l’uscita della sua ultima versione LabVIEW 2017, puó essere definito un linguaggio universale in quanto è in grado di integrarsi, oltre che agli strumenti di proprietà della National Instruments, anche ad una vasta quantità di prodotti di terze parti. Inoltre possiede strumenti di progettazione di terze parti tra cui (solo per citarne alcuni) il software MATLAB, SolidWorks, Simulink ed anche strumenti per la compilazione di schede di tipo Arduino e Raspberry. Fornisce funzioni e driver per la connessione a reti e protocolli industriali, e possiede molti strumenti grafici per la creazioni di interfacce grafiche di tipo industriale e non.

Aree di Impiego e alcuni approfondimenti del linguaggio:

Le aree di impiego di LabVIEW sono molteplici grazie alla vasta libreria di funzioni e driver per la gestione e la comunicazione con la quasi totalitá dell’hardware esistente, per questo motivo puó essere facilmente integrato in qualsiasi ambiente professionale. Inoltre, grazie alla programmazione grafica, é in grado di accellerare i tempi di programmazione, semplificando l’integrazione hardware e permettendo quindi di acquisire e visualizzare rapidamente i dati da ogni tipo di dispositivo I/O.

Esempi aree di impiego:

  • Sistemi di controllo e monitoraggio embedded
  • Monitoraggio e controllo industriale
  • Monitoraggio condizioni macchina
  • Sviluppo di sistemi di test di produzione
  • Sistemi di misura con sensori e attuatori
  • Progettazione di sistemi di comunicazione wireless
  • Robotica e veicoli autonomi
  • Progettazione di applicativi ad interfaccia utente
  • Analisi ed elaborazione dati
  • Analisi ed elaborazione del segnale

Inoltre tra i suoi moduli di ampliamento vi sono:

  • Vision Development Module – Pensato per lo sviluppo di applicazioni di visione artificiale. Dispone delle funzioni per l’acquisizione, l’analisi e l’elaborazione di immagini. Viene usato spesso nel settore industriale per rilevare la presenza di oggetti, identificare le caratteristiche e per misurare parti e sezioni.
  • LabVIEW FPGA Module – Permette di lavorare con la tecnologia FPGA senza necessitare di profonde conoscenze di progettazione digitale hardware in quanto possiede gli strumenti per definire sistemi complessi in modo rapido, con l’aiuto di simulatori e funzioni di debug.
  • LabVIEW NI SoftMotion Module – Dispone di un ambiente di sviluppo grafico per la creazione di applicazioni in grado di gestire le impostazioni di movimentazione assi, di effettuare i test per la configurazione e regolare i motori per la loro integrazione.

 

Come funziona:

LabVIEW viene definito dai suoi creatori come linguaggio G (grafico) ed al contrario di quanto si possa pensare, pur non avendo una fase esplicita di compilazione, LabVIEW é un linguaggio compilato. In fase di sviluppo, il programmatore può modificare il codice e subito poi eseguirlo semplicemente cliccando sul “Run button” il quale eseguirà all’istante l’intero progetto senza dover attendere per la compilazione dello stesso.

Senza entrare molto nel dettaglio, di seguito verranno introdotti alcuni degli aspetti importanti che rendono il compilatore di LabVIEW altamente performante:

  • Algoritmo di propagazione dei tipi di dato – Gestisce il controllo dei tipi di dato e della loro “sintassi” identificando eventuali errori.
  • Clumping – Identificazione del parallelismo nei diagrammi raggrupandoli in nodi chiamati “clump” i quali vengono poi eseguiti in parallelo.
  • Inplacer – Algoritmo che riduce notevolmente le prestazioni di esecuzione, é in grado di allocare i dati che poi verranno riutilizzati durante l’esecuzione evitando inutili copie.
  • Linker – I Linker disegnano una mappa delle varie dipendenze che esistono tra i VI (Virtual Instruments) per poi poterli ricompilare.
  • GenAPI – Algoritmo per l’allocazione dei registri.
  • Data Flow Intermediate Representation (DFIR) – Tra le sue varie funzioni possiede gli algoritmi per l’eliminazione del codice morto o irragiungibile, il folding delle costanti e lo spostamento del codice loop-invariante.
  • LLVM – Dal 2010 LabVIEW ha implementato il framework compilatore open source LLVM – Low Level Virtual Machine utilizzato per la creazione di istruzioni macchina eseguibili in memoria.

Community:

Come ogni altro affermato linguaggio di programmazione, anche LabVIEW dispone di una community di utilizzatori che partecipano attivamente. Esistono molti forum sia ufficiali che non, dove poter aprire discussione e reperire materiale utile alla programmazione.