Software libero per la sicurezza informatica

Quello della sicurezza informatica è probabilmente il campo in cui la presenza di software libero è preponderante, forse anche perché è in questo campo che troviamo tutto il software anonimamente creato ed utilizzato dagli hacker cattivi per compiere le loro azioni, molto spesso criminose e, purtroppo, portatrici di danno.
Tra l’altro è molto spesso difficile stabilire, per esempio, se un software destinato a trovare i punti deboli di una rete sia nato per rimediare alle falle (finalità di sicurezza) oppure per penetrare nella rete e rubare dati dai computer che vi sono collegati (finalità criminosa).
Sicché ormai tutte queste attività destinate ad indagare i lati più misteriosi dell’informatica sono universalmente catalogate nel così detto hacking, salvo poi distinguere tra hacker bianchi e hacker neri, magari anche grigi: i bianchi sono quelli buoni, altrimenti detti hacker etici, che si accorgono di falle e le comunicano a chi di dovere affinché trovi rimedio, anche suggerendo il rimedio stesso, i neri sono quelli cattivi, che ricercano o creano i punti deboli per fare danno. In mezzo stanno i grigi, a caccia di punti deboli per ricattare chi ne soffre.
Penso che i singoli tool per fare queste cose siano parecchie centinaia ed abbiano creato una vera e propria foresta inestricabile.
Fortunatamente c’è chi si è dato la briga di creare delle raccolte, addirittura raggruppando vari strumenti attorno ad un kernel di sistema operativo a loro dedicato, in modo che gli strumenti stessi siano utilizzabili in ambiente separato da quello su cui facciamo le nostre cose di tutti i giorni.
Siamo in pieno software libero e il sistema operativo universalmente utilizzato per queste cose non può che essere Linux.
Nel manualetto allegato in formato PDF presento un paio di soluzioni che insieme penso raccolgano la stragrande maggioranza dei tool esistenti.
Come sempre il manualetto è liberamente scaricabile, stampabile e distribuibile, mi auguro a fin di bene.

hacking_tools

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.

golang

Sempre software libero per perfezionare la blockchain

Lo scorso marzo, sotto il titolo “Software libero per la blockchain”, ho raccontato come il software che fa funzionare la prima applicazione della blockchain, la piattaforma Bitcoin, sia open source, talmente open che nemmeno si conosce esattamente chi abbia cominciato a scriverlo.
Ho anche indicato come chiunque possa procurarsi questo software e lo possa caricare sul suo computer diventando così un nodo della rete blockchain.
Open il software, open la rete in questa prima applicazione della blockchain, che qualcuno ha ormai battezzato Blockchain 1.0.
Da alcuni mesi, usciti dalla fase delle sperimentazioni, possiamo affermare che funzioni la Blockchain 2.0.
L’evoluzione tra le due concezioni sta nel fatto che, mentre la Blockchain 1.0 è aperta a chiunque, in gergo unpermissioned ledger, la Blockchain 2.0 si presta al governo delle partecipazioni, in gergo permissioned ledger. E’ questa evoluzione che segna e segnerà l’estensione inimmaginabile delle applicazioni della tecnologia blockchain non solo ad applicazioni pubbliche, dove tutti sono in grado di vedere tutto e potenzialmente tutti possono autorizzare le transazioni (mining), ma anche ad applicazioni private, dove sia possibile stabilire chi possa autorizzare e chi possa e cosa possa vedere.
Ovviamente è la seconda concezione quella più adatta ad applicazioni nel mondo degli affari, quello che sicuramente è il più predisposto a cogliere l’innovazione e che maggiormente contribuirà allo sviluppo delle applicazioni blockchain, almeno nell’immediato.
Il passaggio dalla Blockchain 1.0 alla Blockchain 2.0 ha richiesto un immane sforzo per l’adeguamento del software: la gestione delle permission, infatti, non è uno scherzo.
Ed è qui che si è avuta la più grandiosa manifestazione della potenza dell’open source: la piattaforma che ha reso possibili le prime applicazioni Blockchain 2.0 è infatti la Hyperledger Fabric, il cui sviluppo è stato promosso da IBM all’interno della Linux Foundation.
Tra l’altro è stato un bel modo di festeggiare il compleanno ventennale dell’open source: questo è infatti nato nel 1998 con l’uscita del codice sorgente del browser Netscape Navigator.
La Linux Foundation nasce una dozzina di anni fa per favorire e sostenere una crescita ordinata di Linux sul mercato. I primi progetti furono il Linux Standard Base, l’Open Printing, Data Center Linux, Carrier Grade Linux e altri, tutti destinati ad una standardizzazione nel mondo Linux, il cui kernel veniva utilizzato in svariate distribuzioni, ed all’accelerazione dell’ingresso di Linux nel mondo enterprise.
La serietà di intenti e la filosofia open source che ispirava l’iniziativa attrassero immediatamente l’attenzione di grandi operatori come IBM e Oracle, che furono gli apripista di quella che è diventata l’attuale nutrita schiera di sostenitori della Linux Foundation (ormai ne fa parte la stessa Microsoft) e che furono i primi a capire che, almeno per realizzazioni di natura “infrastrutturale”, la via da seguire è quella della collaborazione: ciò che, in tema di software, si chiama open source.
Hyperledger Fabric, da alcuni definito consorzio di innovazione, è la prima grande realizzazione ispirata a questi concetti.
Ovviamente non siamo in presenza di un pacchetto direttamente installabile sul nostro computer, come avviene per il software Bitcoin. Siamo in presenza di una piattaforma su cui potrà lavorare lo specialista che chiameremo a costruire la nostra applicazione blockchain privata. Ma, ancora, lo specialista lavorerà con software libero: infatti la programmazione degli smart contract che magari la nostra applicazione dovrà gestire avverrà con il linguaggio Go, quello che Google ha regalato al mondo del software libero. Ma già si sta lavorando affinché sia possibile utilizzare anche il linguaggio Java, ormai altrettanto libero.
Potenza del software libero!

Poker di editor video

L’ultima volta che ho parlato di editor video in questo blog risale al settembre 2016. A quell’epoca, in un articolo intitolato “Kdenlive sempre meglio, ma solo per Linux”, commentavo il rilascio della innovativa versione 16.08.01 dello storico software libero Kdenlive, lamentando il fatto che ancora non fosse comparsa una versione per coloro che insistono ad usare il sistema operativo Windows, annunciando tuttavia che ci si stava lavorando.
Già allora esistevano altri editor video prodotti nel mondo del software libero ma, a torto o a ragione, ero convinto che Kdenlive fosse di gran lunga il migliore.
Oggi, verso la fine del 2018, mi accorgo che quest’anno sono state rilasciate le nuove versioni di ben quattro software liberi di editing video, che si tratta di versioni lavorando con le quali non si capisce che cosa si possa ancora migliorare e che tutti i quattro software sono disponibili per i tre più diffusi sistemi operativi Windows, Mac OS X e Linux.
Ai più anziani Avidemux e Kdenlive si sono aggiunti i relativamente più recenti Shotcut e OpenShot, tutti ormai a livello di perfezione, a formare un vero e proprio poker d’assi per dilettanti ma non disprezzabile per esigenze di esperti professionisti.
Per questi ultimi esiste comunque sempre il meno dilettantesco Cinelerra, il cui ultimo rilascio risale al 2017, ancora riservato ai soli sistemi Linux e Mac OS X: non lo considero nel poker in quanto il suo utilizzo è più da professionisti e il mio blog si rivolge ad un pubblico di dilettanti.
Mi accorgo che in rete esistono non pochi manuali, manualetti, tutorial e video-tutorial su tutti questi software, anche il lingua italiana, per cui il mio compito divulgativo potrebbe esaurirsi qui.
Dal momento, però, che la situazione è divenuta tale da mettere in dubbio la primazia tradizionalmente attribuibile a Kdenlive e si crea l’imbarazzo della scelta, per fornire elementi utili ad un giudizio consapevole ho ritenuto di riepilogare nel manualetto allegato alcuni aspetti che non riguardano tanto il funzionamento dei vari software quanto invece come i vari software si attagliano a quelle che possono essere le nostre finalità e le nostre attrezzature.
Come sempre il manualetto, in formato PDF, è liberamente scaricabile, stampabile e distribuibile.

video_editing

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.

grafica_interattiva_python

Intelligenza artificiale per l’improvvisazione musicale

Contrariamente a quanto ci potrebbe far pensare il termine “improvvisazione”, l’improvvisazione musicale è una difficile arte che richiede doti non comuni di sensibilità musicale e orecchio e la conoscenza ed il rispetto di ben definite regole sull’armonizzazione dei suoni. Infatti, a meno che si voglia fare della punk music per chi la gradisce e vuole essere a tutti i costi diverso dagli altri, la musica, sia essa composta e scritta attraverso una serie di tentativi e organizzata in forme particolari sia essa improvvisata dal vivo con uno strumento, deve essere innanzi tutto gradevole ed appagante per l’ascoltatore. Senza dimenticare che, molto spesso, l’unico ascoltatore è lo stesso improvvisatore che si diverte un sacco nel creare e sentire ciò che sta creando.
Altra cosa da sfatare è la diffusa convinzione che l’improvvisazione sia appannaggio della sola musica jazz. Vero è che la musica jazz è per sua natura votata all’improvvisazione e ne è fertilissimo terreno di coltura ma non dimentichiamo che tra i più grandi improvvisatori annoveriamo Mozart, Chopin, Liszt, Paganini, ecc. che non hanno mai avuto nulla a che vedere con il jazz.
Peraltro molta musica classica che oggi leggiamo sugli spartiti altro non è che la trascrizione di improvvisazioni, origine che riecheggia negli appellativi con cui definiamo queste composizioni: toccata, ricercare, fantasia, tiento, improvviso, preludio, ecc. Per non parlare delle così dette cadenze previste praticamente in tutti i concerti per strumento solista e orchestra, spesso composte dallo stesso autore ma destinate anche a far sì che l’interprete abbia uno spazio di improvvisazione nell’ambito del concerto.
Tra i software che ci aiutano a fare musica ve ne sono che generano linee melodiche accostando casualmente note e durate sulla base di predefiniti giri armonici. Il più famoso di tutti penso sia Band-in-a-Box della PG Music.
Ma su un blog dedicato al software libero è d’obbligo dare la preferenza a Impro-Visor.
Innanzi tutto perché è un software libero distribuito sotto licenza GNU.
In secondo luogo perché è un software didattico: non solo produce improvvisazioni ma ci aiuta a capire come si fanno.
In terzo luogo perché è un prodotto scientifico ed è uno strumento di vera e propria intelligenza artificiale applicata alla composizione musicale.
Visto che la documentazione manca un tantino di organicità e aggiornamento ed è tutta in lingua inglese, ho ritenuto utile proporre l’allegato manualetto sull’ultima edizione del software rilasciata lo scorso luglio come guida almeno per un suo utilizzo di base.
Al solito si tratta di un file in formato PDF liberamente scaricabile, stampabile e distribuibile.

impro-visor

Rosegarden come DAW

Nel dicembre 2015 ho pubblicato su questo blog un articolo sul software libero Rosegarden, allegandovi un manualetto che illustra l’utilizzo di questo software come sequencer MIDI.
Già a quel tempo Rosegarden era qualche cosa di più di un sequencer MIDI, ma ho limitato il manuale a questa sola sua funzione innanzi tutto perché per gli amici che insistono ad usare solo il sistema operativo Windows Rosegarden è semplicemente – e purtroppo è ancora così – un sequencer MIDI e, in secondo luogo, perché, a quel tempo, le sue potenzialità di trattamento audio disponibili per il sistema operativo Linux non erano al livello raggiunto in seguito.
A quel tempo mi riferivo alla versione 14 di Rosegarden, che non poteva essere definita una vera e propria Digital Audio Workstation. Oggi è disponibile la versione 17.12.1, rilasciata nel febbraio 2018, che assomiglia di più ad una vera e propria Digital Audio Workstation.
Dal momento che continua a mancare documentazione in lingua italiana per l’uso di questo gioiello del software libero, ho ritenuto di proporre l’allegato manualetto che descrive Rosegarden nella sua completezza.
Purtroppo questa versione del manuale non può interessare coloro che utilizzano il sistema operativo Windows, per i quali vale sempre il precedente manuale sulla versione 14 limitata al MIDI.
Invito tuttavia anche loro a leggere il nuovo manuale qui proposto. Basta poco, infatti, per installare di fianco a Windows un sistema Linux che dia modo di sfruttare in pieno le potenzialità di Rosegarden.
Come sempre, il manuale è liberamente scaricabile, stampabile e distribuibile.

rosegarden_daw

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.

dcoder

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.

tkinter

Software libero per sintesi e riconoscimento vocale

Macchine che parlano o che comprendono la voce umana hanno sempre esercitato un enorme fascino, fin da quando, sul finire degli anni cinquanta del secolo scorso, i primi robot sono comparsi con le loro voci metalliche nelle fiere e nelle esposizioni.
Tuttavia si può dire che fino all’inizio del nostro secolo si è sempre trattato di cose che poco avevano a che vedere con ciò che facciamo tutti i giorni. Nonostante ciò, la ricerca e la sperimentazione nel campo della sintesi e del riconoscimento vocale sono sempre state attive ed oggi, sia grazie alla quasi perfezione dei risultati tecnici raggiunti sia grazie all’utile applicabilità di questi risultati alle moderne apparecchiature, soprattutto quelle di ultima generazione nel mobile, praticamente tutti i giorni utilizziamo queste tecnologie.
Gli apparecchi telefonici installati sulle automobili e gli smartphone sono già dotati di tutto quanto serve perché ci venga letto un messaggio SMS o perché lo possiamo dettare.
Per non parlare del navigatore che abbiamo sull’automobile, che ci indica la strada a voce.
Tutto ciò non avviene per i personal computer o, quanto meno, sui personal computer, queste tecnologie non sono così automaticamente presenti e così facilmente accessibili.
Per chi voglia superare questo incomodo ho ritenuto utile catalogare quanto di meglio ci offre il software libero in questo campo nel manualetto allegato, liberamente scaricabile e distribuibile.

tts_stt