<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blockly on Melabit</title>
    <link>https://static.233.196.69.159.clients.your-server.de/it/tags/blockly/</link>
    <description>Recent content in Blockly on Melabit</description>
    <generator>Hugo</generator>
    <language>it</language>
    <lastBuildDate>Fri, 30 Jan 2015 06:00:00 +0000</lastBuildDate>
    <atom:link href="https://static.233.196.69.159.clients.your-server.de/it/tags/blockly/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Programmazione visuale: App Inventor 2</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2015/01/30/programmazione-visuale-app-inventor-2/</link>
      <pubDate>Fri, 30 Jan 2015 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2015/01/30/programmazione-visuale-app-inventor-2/</guid>
      <description>&lt;p&gt;Lo dico subito, da &lt;a href=&#34;http://appinventor.mit.edu/explore/&#34;&gt;App Inventor 2&lt;/a&gt; mi sarei aspettato molto di più. Sarà per &lt;a href=&#34;http://newsoffice.mit.edu/2010/android-abelson-0819&#34;&gt;la sua origine&lt;/a&gt; (Google), sarà per chi lo sviluppa attualmente (il MIT), pensavo fosse molto più rifinito e facile da usare di quanto sia in realtà.&lt;/p&gt;&#xA;&lt;p&gt;Con App Inventor 2 (da ora in poi AI2) lo sviluppo dell&amp;rsquo;interfaccia grafica e del codice a blocchi di una applicazione viene effettuato interamente nel browser web, ma per eseguirla bisogna compilare ogni volta l&amp;rsquo;applicazione e trasferirla su un cellulare o un tablet Android.&lt;/p&gt;&#xA;&lt;h4 id=&#34;alla-ricerca-dellemulatore&#34;&gt;Alla ricerca dell&amp;rsquo;emulatore&lt;/h4&gt;&#xA;&lt;p&gt;In teoria esiste &lt;a href=&#34;http://appinventor.mit.edu/explore/ai2/setup-emulator.html&#34;&gt;un emulatore per AI2&lt;/a&gt; in grado di eseguire l&amp;rsquo;applicazione direttamente sul computer utilizzato per lo sviluppo, ma per quanto ci abbia provato non sono riuscito a farlo funzionare sul mio Mac con Yosemite. L&amp;rsquo;emulatore può essere installato senza problemi, ma smette di funzionare una volta eseguito l&amp;rsquo;aggiornamento all&amp;rsquo;ultima versione disponibile online. L&amp;rsquo;emulatore ha anche bisogno di un programma, &lt;code&gt;aiStarter&lt;/code&gt;, che sul Mac viene &lt;a href=&#34;http://melabit.wordpress.com/2014/12/11/automatizzare-il-mac-dal-terminale-una-soluzione-targata-apple/&#34;&gt;eseguito al boot da &lt;code&gt;launchd&lt;/code&gt;&lt;/a&gt; e rimane sempre attivo in background, anche quando l&amp;rsquo;emulatore non viene utilizzato. Una cosa assolutamente inutile, tanto più che sia su Windows che su Linux &lt;code&gt;aiStarter&lt;/code&gt; viene eseguito manualmente solo se e quando serve.&lt;/p&gt;&#xA;&lt;p&gt;Può darsi che l&amp;rsquo;emulatore abbia bisogno per funzionare di qualche componente di Java non installato sul mio Mac, magari il &lt;a href=&#34;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&#34;&gt;Java SE Development Kit (JDK) 8&lt;/a&gt; (vedi sotto), ma durante l&amp;rsquo;installazione e l&amp;rsquo;aggiornamento dell&amp;rsquo;emulatore non compare nessun messaggio di avviso in proposito.&lt;/p&gt;&#xA;&lt;p&gt;Come se non bastasse, l&amp;rsquo;emulatore dimAI2 è piuttosto complicato da disinstallare: tutto deve essere fatto rigorosamente a mano e obbliga a riavviare il Mac.&lt;/p&gt;&#xA;&lt;p&gt;Non pensate nemmeno di risolvere il problema scaricando &lt;a href=&#34;http://developer.android.com/sdk/index.html&#34;&gt;Android Studio&lt;/a&gt; e utilizzando l&amp;rsquo;emulatore integrato nel sistema di sviluppo di Android. Io l&amp;rsquo;ho fatto, ho scaricato Android Studio e ho scoperto solo al momento della prima esecuzione di dover installare anche il &lt;a href=&#34;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html&#34;&gt;Java SE Development Kit (JDK) 8&lt;/a&gt;. Una volta installato il JDK, ho dovuto installare anche un certo numero di componenti aggiuntivi obbligatori. Insomma, dopo aver riempito il disco rigido con un paio di GB di roba praticamente inutile, sono riuscito finalmente a lanciare l&amp;rsquo;emulatore di Android 5.0/Lollipop e&amp;hellip; non è successo niente! L&amp;rsquo;emulatore ha cominciato a caricare Android ma dopo mezz&amp;rsquo;ora era sempre allo stesso punto, bloccato senza speranza.&lt;/p&gt;&#xA;&lt;p&gt;Per fortuna Android Studio è relativamente &lt;a href=&#34;http://stackoverflow.com/questions/17625622/how-to-completely-uninstall-android-studio&#34;&gt;facile da disinstallare&lt;/a&gt;, ma anche in questo caso manca un disinstallatore che renda il processo automatico.&lt;/p&gt;&#xA;&lt;p&gt;Ma chi la dura la vince.&lt;/p&gt;&#xA;&lt;p&gt;Dato che non riuscivo a far funzionare sul Mac gli emulatori &lt;em&gt;ufficiali&lt;/em&gt;, ho provato &lt;a href=&#34;http://www.bluestacks.com/app-player.html&#34;&gt;BlueStacks App Player&lt;/a&gt;, un emulatore &lt;em&gt;indipendente&lt;/em&gt;. La versione per OS X non viene più sviluppata (da quanto dicono sul sito per il &lt;a href=&#34;http://support.bluestacks.com/hc/en-us/articles/202494928-Why-has-the-Mac-OS-X-version-not-been-updated-&#34;&gt;troppo successo&lt;/a&gt; di quella per Windows), ma ho trovato su MacUpdate una vecchia versione di &lt;a href=&#34;http://www.macupdate.com/app/mac/43696/bluestacks-app-player&#34;&gt;BlueStacks App Player per Mac&lt;/a&gt; che funziona senza problemi su Yosemite.&lt;/p&gt;&#xA;&lt;p&gt;Maggiori dettagli sull&amp;rsquo;installazione e la configurazione di BlueStacks App Player si possono trovare in &lt;a href=&#34;https://melabit.wordpress.com/2015/01/12/emuliamo-android-sul-mac-bluestacks-app-player/&#34;&gt;Emuliamo Android sul Mac: BlueStacks App Player&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h4 id=&#34;sviluppo-del-codice&#34;&gt;Sviluppo del codice&lt;/h4&gt;&#xA;&lt;p&gt;A questo punto è possibile iniziare ad usare l&amp;rsquo;interfaccia web di AI2 per implementare il Crivello di Eratostene in questo linguaggio. L&amp;rsquo;interfaccia assomiglia a quella di un classico ambiente di sviluppo integrato (IDE) e integra due strumenti complementari: &lt;code&gt;Designer&lt;/code&gt; per il disegno dell&amp;rsquo;interfaccia grafica e &lt;code&gt;Blocks&lt;/code&gt; per lo sviluppo del codice vero e proprio dell&amp;rsquo;applicazione.&lt;/p&gt;&#xA;&lt;p&gt;Premendo il bottone &lt;code&gt;Designer&lt;/code&gt; si accede alla pagina di realizzazione dell&amp;rsquo;interfaccia grafica. La colonna di sinistra contiene gli elementi grafici (widget) disponibili, suddivisi in base alla loro tipologia. L&amp;rsquo;interfaccia dell&amp;rsquo;applicazione viene costruita trascinando e posizionando uno alla volta i vari elementi grafici dalla colonna di sinistra all&amp;rsquo;area centrale di disegno. La colonna di destra permette di visualizzare e modificare le proprietà dell&amp;rsquo;elemento selezionato nell&amp;rsquo;area di disegno.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1623&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/01-ai2-sieve_original_gui.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/01-ai2-sieve_original_gui.png?w=605&#34; alt=&#34;Fig. 1 - Disegno dell&amp;#039;interfaccia grafica dell&amp;#039;applicazione che implementa il Crivello di Eratostene in App Inventor 2.&#34; width=&#34;605&#34; height=&#34;429&#34; class=&#34;size-large wp-image-1623&#34; /&gt;&lt;/a&gt; Fig. 1 - Disegno dell&amp;rsquo;interfaccia grafica dell&amp;rsquo;applicazione che implementa il Crivello di Eratostene in App Inventor 2.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Premendo il bottone &lt;code&gt;Blocks&lt;/code&gt; si passa alla pagina di sviluppo del codice vero e proprio tramite l&amp;rsquo;assemblaggio dei blocchi funzionali che compongono il linguaggio di programmazione.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1624&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/02-ai2-sieve_original_code.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/02-ai2-sieve_original_code.png?w=605&#34; alt=&#34;Fig. 2 - Codice a blocchi dell&amp;#039;applicazione.&#34; width=&#34;605&#34; height=&#34;429&#34; class=&#34;size-large wp-image-1624&#34; /&gt;&lt;/a&gt; Fig. 2 - Codice a blocchi dell&amp;rsquo;applicazione.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Il linguaggio a blocchi di AI2 è molto più ricco di quello di Blockly, anche perché deve gestire gli elementi dell&amp;rsquo;interfaccia grafica, che mancano in Blockly. Inoltre AI2 supporta le procedure (dette anche funzioni o subroutine in altri linguaggi), blocchi di codice richiamabili dall&amp;rsquo;applicazione principale o da altre procedure, e distingue fra variabili globali (valide per tutto il programma) e locali (valide solo all&amp;rsquo;interno di una procedura).&lt;/p&gt;&#xA;&lt;p&gt;Tutto ciò rende AI2 più complesso di Blockly, e i programmi diventano facilmente più grandi di una singola schermata, rendendo difficile mantenere una visione complessiva dell&amp;rsquo;applicazione in fase di sviluppo.&lt;/p&gt;&#xA;&lt;p&gt;Ho trovato però molto comodo il fatto che, quando si rinomina una variabile, il nuovo nome viene aggiornato nell&amp;rsquo;intera applicazione. Sarebbe veramente utile se gli editor di codice &lt;em&gt;classico&lt;/em&gt; implementassero una funzione analoga.&lt;/p&gt;&#xA;&lt;p&gt;All&amp;rsquo;opposto mi sembra sconcertante la totale mancanza di un &lt;code&gt;undo&lt;/code&gt;: spesso mi è capitato di cancellare involontariamente interi blocchi di programma senza avere la possibilità di recuperarli in alcun modo. Se si aggiunge il fatto che ogni modifica al codice dell&amp;rsquo;applicazione in fase di sviluppo viene salvata automaticamente sul server di AI2, si può capire quanto sia facile commettere errori e rovinare il lavoro fatto. Anche Blockly non ha un undo ma, non so perché, con Blockly non mi è mai capitato di cancellare per sbaglio interi blocchi di codice.&lt;/p&gt;&#xA;&lt;p&gt;Non serve nemmeno usare i &lt;code&gt;checkpoint&lt;/code&gt; per salvare via via i diversi stati dell&amp;rsquo;applicazione in fase di sviluppo. La gestione dei checkpoint è assolutamente confusa &amp;ndash; provare per credere &amp;ndash; e allo stato attuale sono inutili.&lt;/p&gt;&#xA;&lt;p&gt;Usando AI2 è quindi necessario salvare spesso il progetto esportandolo sul proprio computer in formato &lt;code&gt;.aia&lt;/code&gt;. Questi file non sono altro che dei file compressi in formato &lt;code&gt;zip&lt;/code&gt; e possono essere scompattati (ad esempio usando il comando &lt;code&gt;unzip&lt;/code&gt; da Terminale) per mostrare come è fatto un progetto di AI2. Immagino che i file del progetto possano essere modificati con un editor e che, una volta compressi, possano essere importati di nuovo da AI2, ma io non ho mai provato a farlo.&lt;/p&gt;&#xA;&lt;h4 id=&#34;proviamo-lapplicazione&#34;&gt;Proviamo l&amp;rsquo;applicazione&lt;/h4&gt;&#xA;&lt;p&gt;Durante lo sviluppo di una applicazione è consigliabile provare ogni tanto ad eseguirla nell&amp;rsquo;emulatore, in modo da controllare che l&amp;rsquo;interfaccia grafica e le funzioni implementate nel codice a blocchi funzionino come dovrebbero.&lt;/p&gt;&#xA;&lt;p&gt;Selezionando dal menu &lt;code&gt;Build&lt;/code&gt; la voce &lt;code&gt;app (save .apk to my computer)&lt;/code&gt;, l&amp;rsquo;applicazione viene compilata e &lt;em&gt;impacchettata&lt;/em&gt; automaticamente, salvandola sul Mac come file &lt;code&gt;.apk&lt;/code&gt; (normalmente nella stessa directory che contiene il codice .aia del progetto). Il formato &lt;code&gt;.apk&lt;/code&gt; è il formato dei &lt;em&gt;package&lt;/em&gt; di Android e contiene l&amp;rsquo;eseguibile vero e proprio insieme a tutti i file accessori.&lt;/p&gt;&#xA;&lt;p&gt;Ma come trasferire il package dell&amp;rsquo;applicazione in BlueStacks App Player?&lt;/p&gt;&#xA;&lt;p&gt;Il modo più semplice è &lt;a href=&#34;https://melabit.wordpress.com/2015/01/12/emuliamo-android-sul-mac-bluestacks-app-player/&#34;&gt;installare Dropbox nell&amp;rsquo;emulatore&lt;/a&gt; e usarlo per sincronizzare il package fra il Mac e BlueStacks App Player. Una volta completato il trasferimento, basta aprire Dropbox sull&amp;rsquo;emulatore e cliccare con il mouse sull&amp;rsquo;icona del file .apk appena sincronizzato per lanciare il processo di installazione del package.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1625&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/03-ai2-dropbox.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/03-ai2-dropbox.png?w=605&#34; alt=&#34;Fig. 3 - Sincronizzazione tramite Dropbox sull&amp;#039;emulatore del package in fase di sviluppo.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1625&#34; /&gt;&lt;/a&gt; Fig. 3 - Sincronizzazione tramite Dropbox sull&amp;rsquo;emulatore del package in fase di sviluppo.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1626&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/04-ai2-installation_done.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/04-ai2-installation_done.png?w=605&#34; alt=&#34;Fig. 4 - Installazione del package.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1626&#34; /&gt;&lt;/a&gt; Fig. 4 - Installazione del package.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;In alternativa, si può usare il Terminale, eseguendo i comandi riportati nel post relativo &lt;a href=&#34;https://melabit.wordpress.com/2015/01/12/emuliamo-android-sul-mac-bluestacks-app-player/&#34;&gt;all&amp;rsquo;installazione e all&amp;rsquo;uso di BlueStacks App Player&lt;/a&gt; sul Mac. Supponendo che il package dell&amp;rsquo;applicazione di Figura 2 si chiami &lt;code&gt;sieve_original.apk&lt;/code&gt; e che sia stata salvato nella directory &lt;code&gt;~/Documenti/AI2/&lt;/code&gt; (il simbolo &lt;code&gt;~&lt;/code&gt; indica come al solito la &lt;a href=&#34;https://melabit.wordpress.com/le-parole-per-dirlo/&#34;&gt;cartella Inizio&lt;/a&gt; dell&amp;rsquo;utente), lanciamo BlueStacks App Player ed eseguiamo da Terminale i comandi&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$ cd  /Applications/BlueStacks.app/Contents/Runtime/&#xA;$ ./uHD-Adb install ~/Documenti/AI2/sieve_original.apk&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Indipendentemente dal metodo usato, alla fine troveremo l&amp;rsquo;icona dell&amp;rsquo;applicazione sulla schermata principale dell&amp;rsquo;emulatore e potremo eseguirla cliccando con il mouse sulla sua icona.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1628&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/05-ai2-home_screen.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/05-ai2-home_screen.png?w=605&#34; alt=&#34;Fig. 5 - Schermata principale dell&amp;#039;emulatore con il package appena installato.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1628&#34; /&gt;&lt;/a&gt; Fig. 5 - Schermata principale dell&amp;rsquo;emulatore con il package appena installato.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Alla prima esecuzione però avremo una sorpresa sgradita: la finestra dell&amp;rsquo;applicazione è minuscola, molto più piccola delle dimensioni della finestra principale di BlueStacks App Player.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1629&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/06-ai2-first_run.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/06-ai2-first_run.png?w=605&#34; alt=&#34;Fig. 6 - La finestra dell&amp;#039;applicazione è veramente minuscola.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1629&#34; /&gt;&lt;/a&gt; Fig. 6 - La finestra dell&amp;rsquo;applicazione è veramente minuscola.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Per ingrandirla, bisogna premere l’icona Settings (quella con il simbolo di una chiave inglese e di un cacciavite incrociati), selezionare la voce Manage Applications e selezionare in correspondenza dell&amp;rsquo;applicazione la dimensione &lt;code&gt;Tablet&lt;/code&gt; al posto di quella di default. Riavviando l&amp;rsquo;applicazione questa avrà dimensioni più &lt;em&gt;normali&lt;/em&gt;, anche se sempre piuttosto ridotte rispetto alla finestra principale.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1630&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/07-ai2-setup.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/07-ai2-setup.png?w=605&#34; alt=&#34;Fig. 7 - Ingrandiamo la finestra dell&amp;#039;applicazione.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1630&#34; /&gt;&lt;/a&gt; Fig. 7 - Ingrandiamo la finestra dell&amp;rsquo;applicazione.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1631&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/08-ai2-tablet_size.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/08-ai2-tablet_size.png?w=605&#34; alt=&#34;Fig. 8 - Ora va un po&amp;#039; meglio.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1631&#34; /&gt;&lt;/a&gt; Fig. 8 - Ora va un po&amp;rsquo; meglio.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Finalmente si può provare ad eseguire l&amp;rsquo;applicazione, verificando che funzioni tutto come previsto.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1632&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/09-ai2-first_100_primes.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/09-ai2-first_100_primes.png?w=605&#34; alt=&#34;Fig. 9 - Esecuzione dell&amp;#039;applicazione per calcolare i numeri primi.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1632&#34; /&gt;&lt;/a&gt; Fig. 9 - Esecuzione dell&amp;rsquo;applicazione per calcolare i numeri primi.[/caption]&lt;/p&gt;&#xA;&lt;h4 id=&#34;qualche-miglioramento&#34;&gt;Qualche miglioramento&lt;/h4&gt;&#xA;&lt;p&gt;Uno degli aspetti positivi di AI2 è il supporto per le procedure (funzioni o subroutine in altri linguaggi). Le procedure permettono di raggruppare una sequenza di istruzioni in un unico blocco funzionale, una specie di scatola nera che elabora le variabili di ingresso e restituisce un risultato ben definito in uscita. Le procedure diventano a tutti gli effetti delle nuove istruzioni del linguaggio di programmazione e sono richiamabili sia dall’applicazione principale che da altre procedure, semplificando la gestione e l&amp;rsquo;analisi del codice del programma.&lt;/p&gt;&#xA;&lt;p&gt;Proviamo quindi riscrivere il codice dell&amp;rsquo;applicazione utilizzando le procedure, senza però modificare l&amp;rsquo;interfaccia grafica che rimane la stessa di Figura 1.&lt;/p&gt;&#xA;&lt;p&gt;In questo caso particolare l&amp;rsquo;utilità delle procedure è soprattutto didattica: ciascuna procedura viene richiamata una sola volta dal programma principale e quindi il loro uso non comporta nessun vantaggio rispetto ad un programma monolitico come quello di Figura 2.&lt;/p&gt;&#xA;&lt;p&gt;Anche se non è semplicissimo capire come utilizzare le procedure in AI2, dopo un po&amp;rsquo; di tentativi infruttuosi si ottiene il codice a blocchi mostrato in Figura 10.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1633&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/10-ai2-sieve_procs_code.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/10-ai2-sieve_procs_code.png?w=605&#34; alt=&#34;Fig. 10 - Codice a blocchi della nuova versione dell&amp;#039;applicazione.&#34; width=&#34;605&#34; height=&#34;429&#34; class=&#34;size-large wp-image-1633&#34; /&gt;&lt;/a&gt; Fig. 10 - Codice a blocchi della nuova versione dell&amp;rsquo;applicazione.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Eseguendo la nuova versione del programma sull&amp;rsquo;emulatore, si ottiene il risultato mostrato in Figura 11. Come si vede, è stato anche semplificato l&amp;rsquo;output del programma, mostrando nella finestra dell&amp;rsquo;applicazione solo l&amp;rsquo;elenco dei numeri primi calcolati, in modo da permettere di compattare un numero maggiore di informazioni nella piccola finestra disponibile.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1634&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/11-ai2-first_500_primes.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/11-ai2-first_500_primes.png?w=605&#34; alt=&#34;Fig. 11 - Esecuzione della nuova versione dell&amp;#039;applicazione.&#34; width=&#34;605&#34; height=&#34;371&#34; class=&#34;size-large wp-image-1634&#34; /&gt;&lt;/a&gt; Fig. 11 - Esecuzione della nuova versione dell&amp;rsquo;applicazione.[/caption]&lt;/p&gt;&#xA;&lt;h4 id=&#34;conclusioni&#34;&gt;Conclusioni&lt;/h4&gt;&#xA;&lt;p&gt;Una applicazione per Android sviluppata interamente nel browser è un risultato interessante. Purtroppo i problemi di usabilità descritti rendono il giudizio finale su AI2 decisamente meno positivo di quanto ci si potrebbe aspettare.&lt;/p&gt;&#xA;&lt;h4 id=&#34;risorse&#34;&gt;Risorse&lt;/h4&gt;&#xA;&lt;p&gt;Chi vuole provare ad usare AI2 può scaricare il codice sorgente del &lt;a href=&#34;https://bitbucket.org/sabinomaggi/sieve/downloads/sieve_original.aia&#34;&gt;programma mostrato in Figura 1 e 2&lt;/a&gt; e della &lt;a href=&#34;https://bitbucket.org/sabinomaggi/sieve/downloads/sieve_procs.aia&#34;&gt;versione migliorata di Figura 10&lt;/a&gt;. Sono anche disponibili i package precompilati per Android del &lt;a href=&#34;https://bitbucket.org/sabinomaggi/sieve/downloads/sieve_original.apk&#34;&gt;programma originale&lt;/a&gt; e della &lt;a href=&#34;https://bitbucket.org/sabinomaggi/sieve/downloads/sieve_procs.apk&#34;&gt;versione con le procedure&lt;/a&gt;.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Programmazione visuale: introduzione</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2015/01/19/programmazione-visuale-introduzione/</link>
      <pubDate>Mon, 19 Jan 2015 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2015/01/19/programmazione-visuale-introduzione/</guid>
      <description>&lt;p&gt;Il modello di programmazione tradizionale si basa sulla scrittura di codice sorgente secondo una struttura logica e ad una sintassi ben definita e dipendente dal linguaggio di programmazione prescelto.&lt;/p&gt;&#xA;&lt;p&gt;L&amp;rsquo;idea di sostituire questo modello con uno fondato su una interfaccia grafica sulla quale trascinare dei blocchi funzionali predefiniti, manipolandoli ed assemblandoli l&amp;rsquo;uno all&amp;rsquo;altro quasi fossero dei mattoncini del LEGO, data dalla fine degli anni &amp;lsquo;80 a livello commerciale e si basa su ricerche iniziate già negli anni &amp;lsquo;60. Questo cambio di paradigma aveva l&amp;rsquo;obiettivo di rendere la programmazione accessibile anche ai non &lt;em&gt;iniziati&lt;/em&gt;, permettendo di insegnarne i rudimenti già ai bambini della scuola elementare.&lt;/p&gt;&#xA;&lt;p&gt;Ma non voglio farla lunga e rimando chi fosse interessato ad approfondire l&amp;rsquo;argomento a &lt;a href=&#34;http://constructingkids.com/2013/05/15/vpl/&#34;&gt;questa eccellente infografica&lt;/a&gt; e alla bibliografia alla fine del post. Ricordo solo che anche in questo campo Apple ha fatto da apripista con il suo &lt;a href=&#34;http://en.wikipedia.org/wiki/HyperCard&#34;&gt;HyperCard&lt;/a&gt;, il primo ambiente visuale di programmazione uscito dal chiuso dei laboratori di ricerca.&lt;/p&gt;&#xA;&lt;p&gt;A parte HyperCard, finora l&amp;rsquo;unico linguaggio di programmazione visuale che ha avuto un vero successo è stato &lt;a href=&#34;http://www.ni.com/labview/i/&#34;&gt;LabVIEW&lt;/a&gt; (Laboratory Virtual Instrument Engineering Workbench), un ambiente di programmazione grafica sviluppato dalla &lt;a href=&#34;http://italy.ni.com/&#34;&gt;National Instruments&lt;/a&gt; per il controllo della strumentazione di misura, l&amp;rsquo;acquisizione dei dati e l&amp;rsquo;automazione dei processi industriali.&lt;/p&gt;&#xA;&lt;p&gt;Un linguaggio utilissimo in un ambito professionale molto specializzato, ma decisamente molto lontano dall&amp;rsquo;idea di &lt;em&gt;programmazione per i ragazzini&lt;/em&gt;. E nato anch&amp;rsquo;esso, non a caso, prima sul Mac alla fine degli anni &amp;lsquo;80 (ho usato a lungo su un &lt;a href=&#34;http://www.macworld.com/article/1167123/the_macintosh_ii_celebrates_its_25th_anniversary.html&#34;&gt;Macintosh II&lt;/a&gt; la prima versione di LabVIEW divertendomi moltissimo) e portato solo in seguito su Windows e poi finalmente anche su Linux e OS X.&lt;/p&gt;&#xA;&lt;p&gt;Ma allora perché trattare di programmazione visuale? Perché mentre preparavo i post sull&amp;rsquo;implementazione in BASIC e in Python del &lt;a href=&#34;http://melabit.wordpress.com/?s=eratostene&#34;&gt;Crivello di Eratostene&lt;/a&gt; mi sono imbattuto in tre diverse implementazioni di linguaggi di programmazione visuali derivanti chiaramente da &lt;a href=&#34;http://scratch.mit.edu/&#34;&gt;Scratch&lt;/a&gt;, il più noto linguaggio di programmazione visuale per insegnare la programmazione ai bambini:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://developers.google.com/blockly/&#34;&gt;Blockly&lt;/a&gt;, sviluppato da Google e di cui ho già parlato brevemente &lt;a href=&#34;http://melabit.wordpress.com/2014/12/16/setacciare-a-blocchi/&#34;&gt;in un post precedente&lt;/a&gt;;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://appinventor.mit.edu/explore/&#34;&gt;App Inventor 2&lt;/a&gt;, sviluppato inizialmente presso i laboratori di Google ma gestito ora dal &lt;a href=&#34;http://web.mit.edu/&#34;&gt;Massachusetts Institute of Technology (MIT)&lt;/a&gt;, che permette di creare applicazioni per Android;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://snap.berkeley.edu/&#34;&gt;SNAP!&lt;/a&gt;, sviluppato presso l&amp;rsquo;Università della California a Berkeley.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A differenza di Scratch, questi linguaggi sono utilizzabili direttamente dal browser e non richiedono nessuna installazione sul proprio Mac (o quasi).&lt;/p&gt;&#xA;&lt;p&gt;Leggendo la descrizione delle caratteristiche dai rispettivi siti web mi sono chiesto quanto fosse facile implementare un algoritmo semplice come quello del &lt;a href=&#34;http://melabit.wordpress.com/2014/09/29/setacciare-numeri-con-il-serpente/&#34;&gt;Crivello di Eratostene&lt;/a&gt; in uno di questi linguaggi rispetto al Python (o al BASIC). Ma perché chiederselo soltanto, senza provare direttamente?&lt;/p&gt;&#xA;&lt;p&gt;Nel seguito ho riassunto le mie considerazioni personali su Blockly, i prossimi post saranno dedicati rispettivamente a &lt;a href=&#34;&#34;&gt;App Inventor 2&lt;/a&gt; e a &lt;a href=&#34;&#34;&gt;SNAP!&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;blockly&#34;&gt;Blockly&lt;/h4&gt;&#xA;&lt;p&gt;Su Blockly ho già &lt;a href=&#34;http://melabit.wordpress.com/2014/12/16/setacciare-a-blocchi/&#34;&gt;scritto qualcosa&lt;/a&gt;: mi è bastata una mezz&amp;rsquo;oretta di lavoro per &lt;a href=&#34;https://blockly-demo.appspot.com/static/demos/code/index.html#d93qba&#34;&gt;implementare in Blockly&lt;/a&gt; l&amp;rsquo;algoritmo del Crivello di Eratostene a partire dalla &lt;a href=&#34;http://melabit.wordpress.com/2014/09/29/setacciare-numeri-con-il-serpente/&#34;&gt;versione originale in Python&lt;/a&gt; (e in BASIC).&lt;/p&gt;&#xA;&lt;p&gt;Usare Blockly è divertente ed è abbastanza facile capirne la logica di funzionamento. È chiaro che conoscere già dei rudimenti di programmazione in un linguaggio &lt;em&gt;tradizionale&lt;/em&gt; aiuta parecchio, ma imparare ad usare Blockly non dovrebbe essere troppo difficile anche per chi è del tutto a digiuno ma abbia voglia di applicarsi e di sperimentare un po&amp;rsquo;.&lt;/p&gt;&#xA;&lt;p&gt;Purtroppo il codice Python (ma anche JavaScript) generato automaticamente è troppo verboso rispetto ad una versione sviluppata direttamente in uno dei due linguaggi. La ragione principale è che il linguaggio cerca di prevedere esplicitamente i diversi casi che possono presentarsi a seconda del segno delle variabili utilizzate, complicando notevolmente l&amp;rsquo;implementazione del ciclo. Un aspetto che probabilmente verrà migliorato con il tempo.&lt;/p&gt;&#xA;&lt;p&gt;Il &lt;em&gt;codice&lt;/em&gt; del programma che implementa il Crivello di Eratostene in Blockly (Fig. 1) è accessibile al link &lt;a href=&#34;https://blockly-demo.appspot.com/static/demos/code/index.html#d93qba&#34;&gt;https://blockly-demo.appspot.com/static/demos/code/index.html#d93qba&lt;/a&gt;, e da quanto ho capito, ogni volta che vi si accede da un browser diverso Blockly crea automaticamente un link diverso, permettendo di provare a modificare il codice senza danneggiare la versione originale.&lt;/p&gt;&#xA;&lt;p&gt;Tutto sommato Blockly è un bel giocattolino.&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1615&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2015/01/01-sieve_blockly1.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2015/01/01-sieve_blockly1.png?w=605&#34; alt=&#34;Implementazione del Crivello di Eratostene in Blockly.&#34; width=&#34;605&#34; height=&#34;410&#34; class=&#34;size-large wp-image-1615&#34; /&gt;&lt;/a&gt; Implementazione del Crivello di Eratostene in Blockly.[/caption]&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h4 id=&#34;bibliografia&#34;&gt;Bibliografia&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Visual Programming Language - Infograph and Introduction, &lt;a href=&#34;http://constructingkids.com/2013/05/15/vpl/&#34;&gt;http://constructingkids.com/2013/05/15/vpl/&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Stack Exchange, &lt;a href=&#34;http://programmers.stackexchange.com/questions/119463/why-did-visual-programming-never-take-off-and-what-future-paradigms-might-change&#34;&gt;Why did visual programming never take off and what future paradigms might change that?&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Documentazione e risorse su HyperCard, &lt;a href=&#34;http://hypercard.org/&#34;&gt;http://hypercard.org/&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;J. Nickerson, &amp;ldquo;Visual Programming&amp;rdquo;, (1994), &lt;a href=&#34;http://www.nickerson.to/visprog/visprog.htm&#34;&gt;http://www.nickerson.to/visprog/visprog.htm&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;M. Boshernitsan, M. S. Downes, &amp;ldquo;Visual Programming Languages: A Survey&amp;rdquo;, Università della California, Berkeley (2004), &lt;a href=&#34;http://www.eecs.berkeley.edu/Pubs/TechRpts/2004/CSD-04-1368.pdf&#34;&gt;http://www.eecs.berkeley.edu/Pubs/TechRpts/2004/CSD-04-1368.pdf&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>Setacciare a blocchi</title>
      <link>https://static.233.196.69.159.clients.your-server.de/it/2014/12/16/setacciare-a-blocchi/</link>
      <pubDate>Tue, 16 Dec 2014 06:00:00 +0000</pubDate>
      <guid>https://static.233.196.69.159.clients.your-server.de/it/2014/12/16/setacciare-a-blocchi/</guid>
      <description>&lt;p&gt;L&amp;rsquo;algoritmo del Crivello di Eratostene è stato implementato in almeno &lt;a href=&#34;http://rosettacode.org/wiki/Sieve_of_Eratosthenes&#34;&gt;103 linguaggi diversi&lt;/a&gt;, alcuni decisamente curiosi o esoterici. Chi ha mai sentito parlare di AutoIt, Bracmat, M4, Nimrod o zkl?&lt;/p&gt;&#xA;&lt;p&gt;Manca una implementazione in &lt;a href=&#34;https://developers.google.com/blockly/&#34;&gt;Blockly&lt;/a&gt;, un linguaggio di generazione di codice visuale a blocchi.&lt;/p&gt;&#xA;&lt;p&gt;Blockly è stato sviluppato da Google e deriva da &lt;a href=&#34;http://scratch.mit.edu/&#34;&gt;Scratch&lt;/a&gt;, &lt;a href=&#34;http://education.mit.edu/projects/starlogo-tng&#34;&gt;StarLogo TNG&lt;/a&gt; e &lt;a href=&#34;http://snap.berkeley.edu/&#34;&gt;SNAP!&lt;/a&gt;, linguaggi di programmazione didattici rivolti soprattutto ai programmatori più giovani, e anche da &lt;a href=&#34;http://appinventor.mit.edu/explore/&#34;&gt;AppInventor&lt;/a&gt;, un linguaggio più avanzato con cui si possono sviluppare applicazioni per Android.&lt;/p&gt;&#xA;&lt;p&gt;Blockly non è però un linguaggio di programmazione vero e proprio, &lt;a href=&#34;https://developers.google.com/blockly/about/faq#what_is_blockly&#34;&gt;ma è piuttosto&lt;/a&gt;&#xA;&amp;ldquo;un editor visuale che traduce programmi creati mettendo insieme blocchi standard nel corrispondente codice JavaScript, Python, Dart e altri&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Nonostante queste limitazioni, una mezz&amp;rsquo;oretta di lavoro basta per sviluppare una &lt;a href=&#34;https://blockly-demo.appspot.com/static/demos/code/index.html#d93qba&#34;&gt;versione in Blockly&lt;/a&gt; dell&amp;rsquo;algoritmo del Crivello di Eratostene (purtroppo il codice in JavaScript e Python generato automaticamente non è un granché).&lt;/p&gt;&#xA;&lt;p&gt;[caption id=&amp;ldquo;attachment_1497&amp;rdquo; align=&amp;ldquo;aligncenter&amp;rdquo; width=&amp;ldquo;605&amp;rdquo;]&lt;a href=&#34;https://melabit.files.wordpress.com/2014/12/sieve_blockly.png&#34;&gt;&lt;img src=&#34;https://melabit.files.wordpress.com/2014/12/sieve_blockly.png?w=605&#34; alt=&#34;Algoritmo del Crivello di Eratostene in Blockly.&#34; width=&#34;605&#34; height=&#34;410&#34; class=&#34;size-large wp-image-1497&#34; /&gt;&lt;/a&gt; Algoritmo del Crivello di Eratostene in Blockly.[/caption]&lt;/p&gt;&#xA;&lt;p&gt;Chissà se vale la pena aggiungere questa implementazione del Crivello alle 103 precedenti&amp;hellip;&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>
