Con il mio articolo del marzo 2018 “Software libero per la blockchain” sottolineavo come il primo software per la tecnologia blockchain, quello utilizzato per la realizzazione del Bitcoin, fosse software libero.
Con il successivo articolo del dicembre 2018 “Sempre software libero per perfezionare la blockchain” rilevavo come anche il software per i perfezionamenti che hanno portato all’evoluzione Blockchain 2.0 sia stato sviluppato all’insegna dell’open source, costituendo anzi l’occasione per affermare l’opportunità che software di tipo infrastrutturale come questo siano sviluppati in maniera collaborativa: da qui il progetto Hyperledger Fabric promosso da IBM all’interno della Linux Foundation.
Un lettore di questi articoli, lo scorso luglio, apprezzando le informazioni, mi invitò a parlare anche di cosa si potesse fare con Python per la blockchain.
Dopo qualche ricerca e sperimentazione sono in grado di segnalare qualche cosa di concreto che è maturato nel mondo Python, sicuramente utile per capire cosa sia la blockchain nell’intimità e per creare una vera e propria blockchain.
Nell’allegato manualetto in formato PDF, dopo una piccola introduzione esplicativa terra a terra utile per capire di cosa stiamo parlando, segnalo alcune possibilità di approfondimento per chi vi fosse interessato.
Come sempre si tratta di documentazione liberamente riproducibile e distribuibile.
Categoria: programmazione
Newlisp
Nel mio articolo “Lisp sempreverde” del maggio 2015 ho parlato di come il vecchio linguaggio di programmazione LISP, concepito nel lontano 1958, avesse ritrovato una delle sue tante vite grazie ai recenti sviluppi di una nuova versione, chiamata NewLISP, ultima arrivata di altre, come il Common LISP, l’Emacs LISP, l’AutoLISP, ecc.: alcuni chiamano queste versioni “dialetti”, ma trovo questo termine troppo dispregiativo, soprattutto se riferito a NewLISP.
In quell’articolo ho illustrato brevemente alcune caratteristiche del NewLISP riferendomi alla versione di allora, la 10.6.2, già particolarmente ricca di utilissime funzioni preconfezionate. Nei quattro anni che sono trascorsi si sono susseguiti parecchi perfezionamenti, soprattutto dedicati all’arricchimento delle funzioni preconfezionate, e siamo arrivati alla versione 10.7.5, rilasciata il 12 maggio 2019.
Dal momento che qualche frequentatore di questo blog ha osservato che il contenuto del mio articolo aveva il difetto di poter essere compreso solo da coloro che già conoscevano il LISP, ho ritenuto di rimediare proponendo l’allegato manualetto nel quale, rivolgendomi al mio solito pubblico di dilettanti evoluti, descrivo le basi del linguaggio in modo che il lettore possa cominciare a sviluppare qualche programmino e rendersi conto di quanto possa essere affascinante programmare con NewLISP.
Come sempre, il documento è liberamente scaricabile, stampabile e distribuibile.
Software libero per il calcolo simbolico
Nell’allegato “calcolo.pdf” al mio articolo del maggio 2015 “Software libero per calcolare”, archiviato in questo blog nella categoria Software libero, dopo aver introdotto la distinzione tra calcolo numerico e calcolo letterale o simbolico, per quanto riguarda quest’ultimo ho accennato all’esistenza del software libero Maxima, che ritenevo e tuttora ritengo il migliore.
Successivamente ho presentato con maggiore approfondimento alcuni importanti strumenti di calcolo: Calc di Libre Office (nell’allegato all’articolo “Matematica e Statistica con Calc” del giugno 2016) e KNIME (nell’allegato all’articolo “KNIME: l’alternativa a Python per i data scientists” del giugno 2019). Tutti strumenti di calcolo numerico.
Ora torno al calcolo letterale o simbolico per una più esauriente illustrazione dell’argomento e degli strumenti di software libero in quello che viene chiamato CAS, Computer Algebra System, dove il calcolo coinvolge non soltanto dati numerici (3 4,67 8 ecc.) ma anche o solo simboli (a x δ z β ecc.).
L’utilità del calcolo simbolico sta nella sua capacità di astrazione e di generalizzazione del calcolo numerico attraverso l’introduzione di simboli che sottendono un valore numerico qualsiasi in notazioni che chiamiamo espressioni matematiche.
Gli stessi simboli possono essere oggetto di calcolo fornendo sempre un risultato espresso in simboli in nuove espressioni matematiche.
Solo sostituendo ai simboli dei valori numerici si addiviene ad un risultato numerico.
Tutto ciò richiama il meccanismo delle formule matematiche.
Il modo più sintetico di definire il doppio di un numero è 2x. Se moltiplichiamo 2x per 2 otteniamo 4x in definizione del quadruplo di un numero. Per ottenere il doppio di 3, nell’espressione 2x sostituiamo 3 a x e otteniamo 6. Per ottenere il quadruplo di 5, nell’espressione 4x sostituiamo 5 a x e otteniamo 20.
Complicando un po’ le cose: il modo più semplice per calcolare il valore della derivata prima della funzione x al quadrato per x = 0,5 è quello di calcolare in simboli che la derivata prima di x al quadrato è 2x e poi sostituire 0,5 a x in quest’ultima espressione per arrivare al risultato numerico 1. E la formula 2x può servire per calcolare il valore della derivata della funzione x al quadrato in qualsiasi punto, compresa la possibilità, attraverso la soluzione dell’equazione 2x = 0, di trovare il punto in cui la derivata si azzera, ad indicare la possibile esistenza, in quel punto, di un massimo o di un minimo relativo della funzione x al quadrato.
Come si vede, riconosciuto al calcolo numerico tutto il merito di quantificare soluzioni a problemi concreti nei più disparati campi, non si può negare che senza il calcolo simbolico non esisterebbe l’analisi matematica e il linguaggio scientifico sarebbe veramente a corto di possibilità espressive.
Peraltro lo stesso calcolo numerico molto spesso fornisce risultati utili in quanto alle sue spalle esiste un tracciato costruito in simboli che prepara la strada per raggiungere quei risultati.
* * *
Esistono parecchi software per il calcolo simbolico, generalmente utilizzabili anche per il calcolo numerico.
Ai blasonati e costosi software commerciali Maple, Mathematica, Derive, Matlab arricchito della Toolbox per il CAS si affiancano altrettanti ed equivalenti software liberi e gratuiti, tutti funzionanti non solo su Linux ma anche su Windows e Mac.
Il migliore di questi, come ho già detto e secondo la mia opinione, è Maxima, che troviamo all’indirizzo http://maxima.sourceforge.net/ nella versione a riga di comando o in quella per la finestra Unix Xwindow (xMaxima), entrambi ben documentati da un help inglobato nel software. Per un utilizzo reso estremamente intuitivo da una ben fatta interfaccia grafica consiglio la versione wxMaxima che si trova all’indirizzo https://sourceforge.net/projects/wxmaxima/. Su Google Play troviamo una versione di Maxima anche per Android (Maxima on Android).
Sempre restando sui software più completi e accreditati, ricordo Axiom (scaricabile da qui), Reduce (scaricabile da qui) e Yacas (scaricabile da qui). Per Yacas è disponibile un file .jar, utilizzabile con la Java Virtual Machine.
Le ultime versioni di Geogebra (dalla Classic 5.0 in poi) sono dotate di una calcolatrice CAS: con questa non possiamo fare tutto ciò che facciamo con Maxima ma possiamo fare comunque molto con ottima integrazione in quell’insuperabile software didattico libero che è Geogebra.
* * *
Tutti questi software compiono elaborazioni di calcolo simbolico su input espressi secondo un linguaggio che varia da software a software e forniscono un risultato. Se questo risultato è funzionale per compiere ulteriori elaborazioni, esso è inseribile, sempre secondo il linguaggio del software, in queste ulteriori elaborazioni fino al raggiungimento del risultato finale, magari di carattere numerico.
Al programmatore, più o meno dilettante, che voglia inserire in un programma scritto nel suo linguaggio preferito passaggi di calcolo simbolico, insieme a quant’altro, questi software non servono.
Ma nel mondo del software libero si è pensato anche a queste esigenze e, di fianco ai citati software a ciclo completo, si sono create librerie che consentono di inserire il calcolo simbolico all’interno di normali programmi scritti in C, in Pascal o in Python.
Probabilmente la più famosa è GiNaC (acronimo ricorsivo di Ginac is not a cas), biblioteca per C++.
Altra biblioteca, utilizzabile in C, C++, Pascal, Fortran, Perl e Python, è Pari.
Ma un appassionato di Python come me non può certo ignorare SymPy, il modulo di calcolo simbolico del linguaggio Python.
Tra l’altro SymPy ha il pregio di essere la più completa risorsa nel mondo Python per la soluzione di equazioni di ogni tipo.
E’ proprio a questa libreria che dedico l’allegata guida introduttiva, in formato PDF, liberamente scaricabile, stampabile e distribuibile.
Kotlin: Java facilitato
Nel mio articolo “Il più giovane compilatore open source” del gennaio 2019 ho parlato del linguaggio Go, che Google ha proposto al mondo open source come semplificazione del linguaggio C/C++.
Oggi non posso fare a meno di richiamare l’esistenza di un altro linguaggio open source, che si chiama Kotlin, questa volta definito come semplificazione del linguaggio Java, che ha acquisito il pregio di essere raccomandato da Google per la programmazione delle app per Android, finora programmate preferibilmente in Java.
Al di là di questa prerogativa, il linguaggio Kotlin può servire per programmare in generale.
In rete esiste parecchia documentazione, con ottimi tutorial, anche in italiano e lo scorso maggio Apogeo ha pubblicato il testo di Massimo Carli “Kotlin, guida al nuovo linguaggio di Android e dello sviluppo mobile”.
Come ho fatto quando ho parlato di Go, anche per Kotlin ho ritenuto di predisporre l’allegato manualetto in formato PDF, a vantaggio dei dilettanti curiosi come me, che contiene quanto serve per avere un’idea di base del linguaggio e per produrre qualche programmino facile facile.
Come sempre, il documento è liberamente scaricabile, stampabile e distribuibile.
Ancora Python su Android
In un mio articolo del giugno 2015, intitolato Python su Android e archiviato in Programmazione su questo blog, ho parlato di come fosse possibile lavorare con Python su Android grazie all’installazione di un layer per l’esecuzione di script di vario tipo, tra cui gli script Python.
Tuttora è possibile fare questo installando le due app indicate in quell’articolo: il layer sl4a, il cui funzionamento è illustrato nel file PDF allegato all’articolo stesso, e il pacchetto Python per Android.
Con quegli strumenti abbiamo la possibilità di creare e utilizzare script Python di varia utilità, avendo tuttavia a disposizione la sola versione Python di base, semplicemente arricchita della libreria per le funzioni matematiche ricorrenti. Non abbiamo invece la possibilità di accedere alla ricchezza delle estensioni descritte nel mio articolo Python per tutti del febbraio 2017, alle funzioni grafiche descritte nei miei articoli Grafica con Python del maggio 2018 e Ancora grafica con Python dell’ottobre 2018 ed alle sofisticazioni descritte nel mio articolo Software libero per data scientists dello scorso mese di aprile 2019: tutti articoli archiviati in Programmazione su questo blog.
Nel frattempo la IIEC di Novosibirsk ci ha regalato una cosa interessante: una app che ci consente di avere Python sul nostro dispositivo equipaggiato Android come – o quasi – se lo stessimo utilizzando su un normale computer equipaggiato Linux, senza più limitazioni, salvo quelle di memoria e di capacità elaborativa del dispositivo stesso.
Il primo rilascio di questa app, che si chiama Pydroid, risale alla fine del 2017 e il più recente, versione 3.01, è del 4 aprile 2019.
Visto che, pur con qualche residuale eccezione, pare che la app abbia superato l’assestamento dei primi rilasci, ne presento le funzionalità nell’allegato manualetto in formato PDF.
Come sempre il documento è liberamente scaricabile, stampabile e distribuibile.
Software libero per data scientists
Qualche anno fa la Harvard Business Revue ha pubblicato un articolo dal titolo “Data Scientist: the Sexiest Job of the 21st Century”.
Per farci capire cosa ci sia di così seducente in questa professione, definita la più sexy del XXI secolo, l’articolo la definisce “di alto livello, con la formazione e la curiosità di fare scoperte nel mondo dei big data”, dice che i data scientists “fanno scoperte mentre nuotano nei dati. È il loro metodo preferito per navigare nel mondo che li circonda. A loro agio nel regno digitale, sono in grado di strutturare grandi quantità di dati senza forma e renderne possibile l’analisi.” e conclude invitando il lettore a pensare al data scientist come a “un ibrido di data hacker, analista, comunicatore e consulente di fiducia in una combinazione estremamente potente e rara.”
In maniera meno colorita diciamo che la scienza dei dati è la disciplina finalizzata ad estrarre conoscenza dai dati e che il professionista che vi si dedica deve sapere di informatica e di statistica, avendo anche la capacità di tradurre in linguaggio naturale i risultati delle sue analisi e le indicazioni che ne derivano.
A supporto di quest’ultima capacità di capire e comunicare non esiste software ma per l’informatica (strutturazione dei dati e algoritmi per elaborarli) e la statistica (analisi della correlazione tra dati e dell’inferenza) esiste moltissimo software, sviluppato o reso funzionale alle moderne esigenze soprattutto negli anni più recenti.
Software per analizzare ed elaborare dati ce n’è da quando c’è il computer. Ma fino a qualche tempo fa oggetto delle elaborazioni erano soprattutto piccole quantità di dati numerici: la statistica ha sempre lavorato per lo più su campioni di dati numerici. Le moderne esigenze sono innanzi tutto quella di lavorare sulle enormi moli di dati che vengono accumulati di minuto in minuto dalla digitalizzazione che ha invaso ogni nostra attività e quella di non rinunciare a trarre conoscenza anche dall’analisi di dati non numerici.
Per fare queste cose, nel mondo del software libero abbiamo gioielli come KNIME, Orange e WEKA. Ma la quintessenza, per completezza di strumenti, è una raccolta di programmi open source in linguaggio Python che, tanto per stare tra rettili, si chiama Anaconda, il cui primo rilascio, con licenza libera New BSD, è del 17 luglio 2012.
Esistono raccolte similari: ActivePython, Enthought Canopy e, solo per Windows, WinPython se stiamo a quelle legate al linguaggio Python, Apache Spark, legato al linguaggio Scala/Java, più adatto al calcolo distribuito e utilizzato nei progetti Apache Hadoop e IBM Watson, solo per Linux.
In tutto questo mondo, Anaconda è ampiamente utilizzata e spesso preferita dagli addetti ai lavori per come si presenta e per come è organizzata, per la numerosità dei pacchetti che contiene (anche se, alla fine, quelli che contano sono pochissimi e sono presenti in tutte le altre distribuzioni), per tutta una serie di utilità collaterali che offre in tema di apprendimento e documentazione e, non da ultimo, per la sua scalabilità, cioè per la possibilità che abbiamo di costruirla anche in dimensioni più ridotte di quella completa.
Ovviamente con disponibilità per tutti i sistemi operativi più diffusi (Linux, Mac OS X e Windows).
Dal momento che la documentazione in lingua italiana sull’argomento scarseggia ho ritenuto utile produrre l’allegato manualetto in formato PDF, dedicato a Anaconda.
Come sempre si tratta di documento liberamente scaricabile, stampabile e distribuibile.
Il più giovane compilatore open source
Una decina di anni fa, all’interno di Google e per problemi suoi, si avvertì l’opportunità di lavorare ad un nuovo linguaggio di programmazione che avesse le stesse funzionalità e la stessa potenza dei linguaggi C e C++ ma che fosse più facile da apprendere e da utilizzare.
Ne è nato il linguaggio Go, nome completo Golang, che Google ha immediatamente rilasciato come open source, facendolo diventare uno dei tanti gioielli del software libero.
Nel 2009 e nel 2016 è stato eletto Linguaggio di programmazione dell’anno dalla TIOBE, struttura che si occupa di monitorare la popolarità e la diffusione dei linguaggi di programmazione.
Nella sostanza, non so se sia molto facile da apprendere nella sua interezza ma sicuramente il suo utilizzo è molto semplificato, almeno rispetto a C e C++: tra l’altro, e non è poco, solleva il programmatore dalla preoccupazione di gestire la memoria, avendo incorporato un garbage collector che se ne occupa.
Da curioso dilettante ho cercato di capirci qualche cosa e mi sono sempre trovato di fronte a documentazione piuttosto difficile, evidentemente destinata a professionisti, ovviamente in lingua inglese. Anche la poca documentazione in lingua italiana è sempre piuttosto ostica e non scende mai alla portata del dilettante al quale basterebbero poche nozioni di base per cominciare a fare qualche programmino.
Ho pertanto ritenuto utile mettere a disposizione di tutti gli altri dilettanti curiosi, alla ricerca di cose semplificate, l’allegato manualetto in formato PDF, dove ho raccolto gli appunti su quello che ho capito io della struttura di base di questo linguaggio.
Come sempre, il documento è liberamente scaricabile, stampabile e distribuibile.
Ancora grafica con Python
Il mio articolo “Grafica con Python” del maggio 2018 aveva per oggetto principale la grafica finalizzata a “vestire” graficamente un programma per computer. Il suo allegato era un manualetto in formato PDF sul modulo Tkinter con il quale si può fare questo.
Per una presentazione completa di Tkinter non ho potuto tuttavia fare a meno di mostrare il funzionamento del sotto-modulo della grafica della tartaruga che poggia sullo stesso Tkinter e ne fa parte, così come non ho potuto tralasciare la descrizione del widget contenitore Canvas e di tutto ciò che vi si può disegnare.
Questi sono esempi di come con Python si possa fare della grafica non necessariamente finalizzata alla creazione di interfacce per facilitare l’uso di un programma (GUI).
Nel caso della tartaruga disegniamo figure di varia natura impartendo al computer istruzioni per manovrare un pennino e nel caso del canvas impartendo macro-istruzioni finalizzate al disegno di figure geometriche.
Queste istruzioni possono far parte di uno script, più o meno dotato di GUI, e possono anche essere impartite una via l’altra in modo interattivo utilizzando la shell di Python.
Nel primo caso il risultato della nostra creazione grafica lo vediamo compiuto eseguendo lo script, nel secondo caso abbiamo invece modo di veder crescere passo passo la nostra creazione.
Nel citato manualetto su Tkinter ho dato per scontato il metodo dello script e tutti gli esempi che ho presentato sono così impostati.
Ma quando si fa della grafica non finalizzata alla costruzione di GUI ma finalizzata alla creatività o allo studio diventa piacevole ed educativo lavorare in maniera interattiva con la shell.
Tra l’altro, per quest’ultimo tipo di grafica, oltre alle librerie della tartaruga e del canvas contenute in Tkinter, esistono altri moduli Python.
Nell’allegato tutorial in formato PDF, liberamente scaricabile, riproducibile e distribuibile, che dedico alla grafica interattiva con Python, ne presento alcuni.
Coding per tutti
Di questi tempi si parla molto di coding: in lingua italiana si dice programmazione e si tratta del modo che abbiamo per dare istruzioni ad un computer perché faccia determinate cose.
Programmi che fanno fare determinate cose a un computer ce ne sono un’infinità: solo quelli che ho presentato nel tempo in questo blog mi pare rappresentino una completezza di cose al di là delle quali è difficile immaginarne altre. E acquisire dimestichezza con il funzionamento di tutti questi programmi vuol già dire essere ben introdotti nell’informatica e vivere consapevolmente la così detta rivoluzione digitale.
Sta tuttavia maturando la convinzione che questo sia un traguardo da utenti dell’informatica ma non da protagonisti e che, per poter veramente vivere la rivoluzione digitale, non basti saper usare programmi fatti da altri ma occorra anche sapere come si fanno i programmi: solo così, infatti, si può acquisire il così detto pensiero computazionale. E’ questo un termine (computational thinking) riportato alla ribalta dalla scienziata informatica Jeannette Wing nel 2006 per indicare il processo attraverso cui risolvere algoritmicamente problemi anche complessi.
Al punto che stiamo assistendo all’affermazione dell’opportunità di avviare alla programmazione bambini, ancor prima della scuola elementare, con strumenti ludici capaci di sviluppare queste abilità: basti pensare all’ambiente di programmazione Scratch.
All’indirizzo https://www.programmailfuturo.it/ possiamo sapere tutto su ciò che bolle in pentola.
Sicuramente siamo in presenza di un’ondata di moda. Molto simile a quella cui da qualche tempo assistiamo nel mondo della cucina. Non basta più saper apprezzare un buon brasato per essere classificati dei buongustai, occorre anche conoscere la ricetta (l’algoritmo, appunto) per fare il brasato ed acquisire la capacità di inventare altre ricette. Allora libri, riviste, televisione con cuochi da tutte le parti, ecc.
Avendo a che fare con qualche cosa di meno gustoso, nel campo dell’informatica non assisteremo ad una simile baldoria e, comunque, la moda potrà avere qualche effetto positivo: quanto meno quello di smettere di considerare esperti digitali quei ragazzini che si destreggiano a fare quattro cretinerie con il cellulare.
Importante non esagerare nel dare importanza alle cose. Non dimentichiamo che il così detto pensiero computazionale serve innanzi tutto a sbocconcellare un problema e la relativa soluzione affinché diventino alla portata di una stupida macchina. Sicuramente si tratta di una ginnastica che fa bene al nostro cervello ma non è con il pensiero computazionale che Galileo, Newton, Gauss e tanti altri hanno prodotto ciò che hanno prodotto.
E non dimentichiamo nemmeno che la così detta intelligenza artificiale che attribuiamo ad una macchina spesso deriva semplicemente dall’avere ben istruito la macchina stessa a lavorare con formule che ci hanno regalato quei signori, che non hanno mai visto un computer.
Fatte queste premesse, devo dire che programmare è divertente, occupa positivamente il cervello e dà soddisfazione. Ben venga pertanto questa ondata di interesse.
Quanto agli strumenti per programmare, cioè ai linguaggi che possiamo utilizzare per impartire istruzioni al computer, ormai c’è l’imbarazzo della scelta. Lasciando Scratch ai bambini piccoli e la tartaruga di Logo agli appena più grandicelli, un facile linguaggio per tutti i gusti e che può fornire eccelsi risultati è Python, di cui mi sono spesso occupato in questo blog.
Ma ce ne sono molti altri e una panoramica pressocché completa la possiamo avere procurandoci una piccola app per Android, che troviamo su Google Play e si chiama Dcoder.
Non è software libero e non dovrei parlarne in questo blog dedicato al software libero. Ma è talmente bello e intelligente che faccio un’eccezione.
Vista la scarsa documentazione esistente su questa preziosità e la totale assenza di qualche cosa scritta in italiano, ho pensato di proporre l’allegato manualetto in formato PDF, liberamente scaricabile, stampabile e distribuibile.
Grafica con Python
In questo blog ho parlato spesso del linguaggio di programmazione Python (articoli “Da Python2 a Python3”, “Python su Android” del giugno 2015 e “Python per tutti” del febbraio 2017 archiviati in Programmazione, oltre a “Esecuzione di script Python” del giugno 2015 archiviato in Suggerimenti vari).
La potenza del linguaggio Python, abbinata alla relativa facilità del suo apprendimento e del suo uso, ne fa strumento ideale per la didattica del coding e per l’esecuzione di calcoli e la soluzione di problemi scientifici, anche alquanto impegnativi. Tutto ciò grazie alle innumerevoli librerie che la comunità Python ha costruito attorno a questo magnifico esempio di software libero (per una panoramica vedere l’allegato PDF “mondo_python” al mio citato articolo “Python per tutti” del febbraio 2017).
Per questi usi basta e avanza la produzione di programmi eseguibili da riga di comando (attraverso quello che si chiama “terminale” nei sistemi operativi derivati dal mondo Unix, come Linux e Mac OS X, o quello che in Windows si chiama “prompt dei comandi”) ed è perfettamente inutile complicarsi la vita per dare ai programmi una particolare veste grafica.
Vi sono tuttavia situazioni nelle quali la vestizione grafica del programma lo rende meglio utilizzabile o addirittura diventa necessaria, come nei giochi.
A questo proposito, sempre in questo blog nel giugno 2015, ho presentato un esempio di programma grafico Python da me scritto per giocare a Master Mind.
Mentre per l’apprendimento del linguaggio esiste, in libreria e in rete, molto ottimo materiale scritto in italiano, dal lato della grafica la manualistica è per lo più in lingua inglese e molto spesso si presenta sotto forma di prontuario ad uso degli iniziati e poco si presta all’apprendimento.
Ho ritenuto allora utile proporre l’allegato manualetto in formato PDF, dedicato a quello che ritengo il più semplice modo di fare grafica con Python.
Come sempre, il documento è liberamente scaricabile, distribuibile e riproducibile.