Software libero per digitalizzare

Tutto ciò che produciamo con il computer è rappresentabile in un file digitale, cioè in un documento che contiene informazione codificata con un linguaggio convenzionale in bit (binary digit, cioè 0 e 1), memorizzabile in modo permanente su un determinato tipo di supporto fisico (disco rigido, compact disc, memoria flash su chiavetta usb, dvd). Mutuando una bella definizione di Wikipedia, diciamo che la documentazione digitale è una rappresentazione astratta e numerica della realtà sensoriale.
In contrapposizione abbiamo la rappresentazione analogica della realtà sensoriale.
Per rappresentare analogicamente la realtà sensoriale suono, captiamo con un idoneo strumento le vibrazioni trasportate dall’onda sonora che lo genera e trasmettiamo intensità e profondità di queste vibrazioni nell’ampiezza e nella profondità di incisione di un solco su un materiale adatto. Ripercorrendo questo solco con un idoneo strumento sensibile alla sua ampiezza e profondità possiamo rigenerare le stesse vibrazioni e la stessa onda sonora, cioè riascoltare, in maniera analogica, il suono originario.
Un altro modo per registrare l’onda sonora, oltre a quello di catturarla fisicamente attraverso le vibrazioni che trasporta come abbiamo visto prima, è quello di registrarne il valore numerico ad intervalli di tempo regolari. Dal momento che l’onda sonora ha un aspetto sinusoidale, se noi registrassimo il valore della sua altezza in termini numerici, poniamo, trenta volte al secondo, otterremmo probabilmente una registrazione della sinusoide come una successione di triangoli: il che non servirebbe a nulla.
Se però misuriamo il valore dell’onda 44.100 volte al secondo, che è la frequenza utilizzata per il suono registrato sui CD musicali, la nostra sinusoide diventa ben liscia nelle sue curve.
Al punto che è dimostrato che, con questa frequenza di campionamento la sinusoide captata in via analogica e quella descritta con i numeri sono sì diverse (la prima è una curva continua, la seconda è una curva che collega punti discreti), ma la loro diversità non può essere colta dall’udito umano (se qualche vostro amico vi dice che sente la differenza tra un vinile e un CD caccia balle, a meno che la senta per il tic tic della puntina, ma allora è un’altra cosa).
L’unico inconveniente è che con questa tecnica abbiamo enormi grandezze da trattare, sia in termini di velocità di elaborazione (provate a tenere a mente 44 mila numeri al secondo) sia in termini di memoria fisica (il mio primo computer, un glorioso Philips TC 100, aveva un disco fisso di 20 MB, cioè non ci stava su neanche una canzoncina di due minuti).
Per non parlare dei file video, tipo i file .avi dove possiamo memorizzare le animazioni che generiamo, per esempio, con Blender: l’animazione, così come il filmato che facciamo con la telecamera, è costituita dalla visione ravvicinata di più fotografie, una via l’altra, al ritmo di 25 al secondo (lo standard televisivo PAL, in modo che l’animazione possa essere vista bene su un televisore che scansiona 25 volte al secondo). Un filmetto di tre minuti è lungo 180 secondi, cioè è formato da 4.500 fotografie: applichiamo pure tutte le tecniche di compressione e gli algoritmi per memorizzare solo ciò che differenzia una fotografia dall’altra, restringiamo a un piccolo rettangolino la scena, ciascuna immagine da memorizzare arriverà a pesare almeno 10 kB. Anche così il nostro filmetto, ridotto e strizzato alla stessa stregua di un file .mp3 audio, peserà una quarantina di MB, cioè una dozzina di volte tanto il suo omologo in campo audio (comunque sempre meglio dei 3 GB abbondanti che il nostro filmetto occuperebbe se non fossimo ricorsi a tecniche di compressione).
Ma i PC di oggi sono potenti e in spazi sempre più piccoli si possono memorizzare moli sempre più elevate di dati.
Allora, visto che la tecnologia ce lo consente, digitalizziamo tutto.
Il mondo del software commerciale ci propone costosi programmi per fare queste cose, ma anche il mondo del software libero non scherza e, in più, ce li offre.
Il documento PDF allegato contiene una mia rassegna di programmi di software libero, come sempre con tutte le indicazioni per capire a cosa serve ciascun programma presentato, come possiamo procurarcelo e com’è il suo funzionamento di base.
Per scaricare il file clicca sul suo nome qui sotto.

digitalizzazione

Software libero per utilizzare file digitali

Considerato il materiale che possiamo produrre direttamente con il PC e quello che possiamo acquisire per digitalizzazione da fonti esterne, possiamo arrivare ad avere una caterva di roba e, se non la organizziamo razionalmente, rischiamo di avere grosse difficoltà ad utilizzarla: il che equivale a non averla.
Un principio di base è quello di avere un file digitale per ogni cosa a livello elementare. Come la macchina fotografica digitale produce un file per ogni scatto, così, quando digitalizziamo con lo scanner le nostre fotografie, produciamo un file per ogni fotografia (non mettiamone due o tre nello scanner per fare un file solo). Quando digitalizziamo un disco vinilico che contiene più canzoni, facciamo un file per ogni canzone. Se digitalizziamo da un disco vinilico una sinfonia, facciamo un file per ogni movimento. Come, del resto, avviene per le tracce che troviamo sui CD musicali.
Ad ogni file diamo un nome che abbia una qualche relazione con il contenuto, meglio ancora se riusciamo proprio a descrivere in toto il contenuto stesso. Una foto scattata a Benevento, chiamiamola Benevento_01, ammesso che poi ci sia la Benevento_02, la Benevento_03, ecc. Una canzone chiamiamola con il suo titolo. Il movimento di una sinfonia chiamiamolo per quello che è (1. Allegro con brio, 3. Scherzo, ecc.).
I file così denominati raggruppiamoli in directory sempre più ingrappolate, partendo dal basso e fermandoci dove siamo soddisfatti. I file 1. Allegro con brio, … 3. Scherzo, … li mettiamo in una directory chiamata Beethoven – Sinfonia n. 3. I file Benevento_01, Benevento_02 … li mettiamo in una directory chiamata Benevento. I file delle canzoni li mettiamo in una directory che, trattandosi di musica leggera, sarà più interessante battezzare con il nome dell’interprete più che con quello dell’autore.
Le directory di musica classica saranno poi finalmente comprese in una directory Musica classica, quelle di musica leggera in una directory Musica leggera, quelle di fotografie in una directory Fotografie, magari passando attraverso vari raggruppamenti intermedi.
In questo modo organizziamo i nostri file in un archivio navigando nel quale, in un ragionevole numero di passaggi, arriviamo a trovare quello che ci serve.
L’archivio avrà una dimensione notevole ma, con le capienze degli attuali dischi rigidi dei computer, probabilmente sarà possibile ospitarlo tutto sul nostro computer.
Evitiamo l’errore di averne una sola copia sul computer. Facciamone immediatamente un’altra copia su uno o più supporti esterni: unità disco esterne, memorie flash più o meno su pennette, serie di DVD, ecc., ricordando che il DVD è praticamente indistruttibile fino a graffiatura volontaria o da grave disattenzione mentre le unità disco si possono guastare o smagnetizzarsi e le memorie flash, a distanza di tempo, andar soggette a qualche inconveniente.
Consideriamo comunque che ciò che c’è sul disco fisso del computer, se si guasta il sistema operativo si può fare in modo di recuperarlo (ovviamente prima di installare un altro sistema operativo che cancelli tutto il disco), se si guasta il disco tutto è irrimediabilmente perso.
Archiviati ordinatamente i nostri file, dobbiamo poi avere a disposizione sul computer software adatto per utilizzarli.
In genere i file prodotti da noi (documenti, fogli elettronici, ecc.) li possiamo aprire per vederli in chiaro utilizzando gli stessi programmi con cui li abbiamo prodotti.
Il problema si pone per i file digitali che contengono suono, immagini, filmati, per goderci i quali abbiamo bisogno di software che garantisca anche una buona qualità di riproduzione; meglio ancora se questo software ci può anche aiutare a trovare i file che vogliamo riprodurre.
L’allegato file PDF contiene una mia selezione di programmi di software libero adatti a questi scopi, con tutte le indicazioni per capire a cosa serve ciascun programma presentato, come possiamo procurarcelo e com’è il suo funzionamento di base.
L’ambiente nativo dei software presentati è Linux ma in qualche caso essi sono disponibili anche per i sistemi operativi Windows e OS X. Per questi ultimi sistemi operativi esiste comunque un’ampia scelta di software commerciali analoghi, ovviamente a pagamento.
Per scaricare il file clicca sul suo nome qui sotto.

utilizzo_file_digitali

Software libero per la multimedialità

Nell’articolo ‘Software libero per utilizzare file digitali’ e nel relativo allegato PDF abbiamo visto come possiamo fruire dei nostri archivi digitali per dilettarci la vista o l’udito, sempre, però, prendendo i file uno per uno, magari arrivando a mettere insieme fotografie in uno slideshow arricchito di qualche effetto di transizione e, persino, per esempio nel caso di Fotoxx, con la possibilità di abbinare allo slideshow un file audio (per musica di sottofondo o commento): quest’ultimo è un esempio di multimedialità, anche se, nell’esempio citato, molto grezza in quanto, con Fotoxx, non abbiamo modo di coordinare le immagini con la musica di sottofondo o con il commento, che potrà essere solo generico e non puntuale su ciascuna immagine.
Inoltre tutto quanto, audizioni e presentazioni, era finalizzato ad un uso sul nostro computer e non era esportabile se non su un altro computer attrezzato con gli stessi software presenti sul nostro.
In questo articolo vediamo, invece, come si possano mettere insieme più cose di natura diversa (immagini, musica, parola, scritto) per costruire qualche cosa di nuovo, che resti e che possa essere riprodotto anche su strumenti diversi dal computer (televisore, tablet, smartphone, lettore di DVD): multimedialità, pertanto, nel contenuto e nelle possibilità di fruizione del contenuto.
Nell’allegato file in formato PDF, scaricabile e stampabile, presento una mia selezione di programmi di software libero con cui possiamo costruire produzioni multimediali. Vi si trovano tutte le indicazioni per capire a cosa serve ciascun programma presentato, come possiamo procurarcelo e com’è il suo funzionamento di base.
I software presentati, il cui ambiente nativo è Linux, sono spesso disponibili anche per i sistemi operativi Windows e OS X. Per questi ultimi sistemi informativi esiste ampia scelta di software commerciali a pagamento che fanno le stesse cose, anche se, a volte, non con le stesse sofisticazioni.
Per scaricare il file clicca sul suo nome qui sotto.

multimedialità

Software libero per produrre supporti ottici

Tutta la nostra produzione informatica ed audiovisiva possiamo conservarla sui molteplici supporti che la tecnologia ci offre e che sono praticamente classificabili in tre categorie:
• supporti magnetici,
• supporti a stato solido,
• supporti ottici.
I supporti magnetici sono i dischi rigidi, a partire da quello che abbiamo nel computer per arrivare a quelli esterni collegabili al computer attraverso la porta USB. Il punto debole di questi supporti, oltre a quello di soffrire la vicinanza a forti campi magnetici, è la parte meccanica: questi supporti sono infatti costituiti da dischi magnetici letti da una testina il cui braccio è in movimento. Il punto forte è la grande capacità di memoria in spazi sempre più piccoli e sempre meno costosi. Possono funzionare solo con un computer.
I supporti a stato solido sono le così dette chiavette USB e le memory card, nelle quali i dati vengono memorizzati in matrici di transistors capaci di conservare la carica elettrica per lungo tempo. Non hanno parti meccaniche, per cui non soffrono del punto debole attribuibile ai supporti magnetici: in compenso si dice che la memorizzazione non sia altrettanto longeva di quella effettuata su supporti magnetici. La dimensione fisica di questi supporti è ormai arrivata alla miniaturizzazione e si presta all’utilizzo su piccoli apparecchi come macchine fotografiche e smartphones. Il costo per unità memorizzata è di gran lunga superiore a quello dei supporti magnetici. Possono funzionare su computer attraverso la porta USB, alla quale sono collegabili lettori di memory card, se il computer non ne è dotato: ma i computer più recenti hanno ormai tutti la finestrella di lettura di questi supporti. Inoltre funzionano sugli apparecchi progettati per servirsene (tablet, smartphone, macchina fotografica, lettori di file musicali compressi come mp3 e aac, ecc.).
Il supporto ottico è un disco di policarbonato trasparente al cui interno è inserito un sottile foglio di alluminio, su cui vengono registrate e lette le informazioni tramite un raggio laser. La sua capacità di memoria, anche se non disprezzabile, non è nemmeno paragonabile a quella dei supporti magnetici o a stato solido, ma ha il vantaggio di essere eterna (unica precauzione quella di non danneggiare fisicamente il disco con graffi o deformazioni). Per utilizzare il supporto ottico è necessario apposito apparecchio, che può essere un semplice lettore o lettore/masterizzatore; quest’ultimo inglobato o collegabile via USB ad un computer. Gli apparecchi lettori e riproduttori hanno avuto grande diffusione da quando il supporto ottico ha sostituito il vinile nella produzione di dischi musicali e da quando si è diffuso il DVD cinematografico.
Mentre i supporti magnetici e i supporti a stato solido sono scrivibili e leggibili direttamente sul computer, cui sono collegabili via USB, alla stessa stregua di quanto si fa con il disco fisso, per i supporti ottici, oltre all’hardware, costituito dal masterizzatore, è necessario un software che governi quest’ultimo.
Il file PDF allegato contiene la descrizione dei due più famosi ed efficienti programmi di masterizzazione per Linux. Non mi risulta esistano analoghi programmi di software libero che funzionino su Windows e su OS X: per questi sistemi operativi esiste un’ampia scelta nel mondo del software commerciale.
Il file PDF è scaricabile e stampabile cliccando sul suo titolo qui sotto.

supporti_ottici

Insidie nei programmi di calcolo

Nel mio articolo sul Software libero per calcolare ho accennato alla delicatezza del software di calcolo ed all’esistenza di alcune trappole annidate nei vari linguaggi di programmazione, con il pericolo che il programma che utilizziamo per fare un calcolo fornisca un risultato sbagliato senza che ce ne accorgiamo.
Al fine di mettere in guardia il programmatore dilettante che voglia cimentarsi nel costruire qualche strumento di calcolo a suo uso e consumo per calcolare, ad esempio, la temperatura percepita nota la temperatura e l’umidità relativa (o altre cose che non troviamo facilmente in programmi già predisposti), ho pensato di indicare in questo articolo quali sono le due principali fonti di complicazione: la questione del separatore decimale e quella della divisione tra interi.

Il separatore decimale

In tutti i linguaggi di programmazione il separatore decimale è il punto (.) ed è questo che deve essere rigorosamente usato nelle assegnazioni interne ai programmi.
Il problema si pone, specialmente per noi italiani abituati ad usare come separatore decimale la virgola, quando è richiesto un input numerico all’utente, in quanto egli, anche se avvisato sul separatore decimale da utilizzare, può sbagliare e ciò può avere, in certi casi, conseguenze disastrose sul risultato dell’elaborazione compiuta dal programma.
I linguaggi più sicuri da questo punto di vista sono Ada, Java, Pascal e Python in quanto in questi linguaggi è imposto un input con separatore decimale punto e, se l’utente usa la virgola, viene elevata una eccezione di input e non viene fornito alcun risultato. Attraverso una opportuna gestione di questa eccezione è possibile avvisare l’utente dell’errore ed invitarlo a formulare un input corretto: il tutto senza uscire dal programma. Se l’eccezione non viene gestita il programma termina senza risultato e il danno è circoscritto a questo.
I linguaggi più subdoli sono il C, il C++ e PHP in quanto impongono il punto ma, se l’utente usa la virgola, non sollevano eccezioni di input, ignorano ciò che viene immesso dopo la virgola e forniscono risultati sballati: il tutto senza che l’utente sappia alcunché, né sull’errore compiuto usando la virgola in luogo del punto né – il che è gravissimo – sul fatto che il risultato che gli è stato fornito dal programma è sbagliato. Unico rimedio a tutto ciò è un accurato controllo dell’input, carattere per carattere, in modo da rimediare alla falla del linguaggio con accorgimenti di programmazione che sollevino un’eccezione gestibile nel momento in cui nell’input venisse trovata una virgola. Eccezione gestibile fino a sostituire un punto alla virgola, nel caso la si trovasse, senza dire nulla all’utente, ed arrivare comunque ad un risultato corretto: in questo modo possiamo avere un programma per il quale va bene l’uso di entrambi i separatori decimali, punto e virgola.
Vi sono, infine, i linguaggi del gruppo Visual Studio di Microsoft, dove i problemi non mancano, anzi…..
Visual C++ di Visual Studio si comporta esattamente come il normale C++.
Visual C# di Visual Studio ha la particolarità che, quando viene caricato su un computer, si adegua alla cultura dell’utente: se il sistema operativo installato è una versione italiana, anche Visual C# sarà italiano. Tra le caratteristiche di questa cultura c’è il fatto che l’utente usa come separatore decimale la virgola e C# si adegua: al suo interno usa rigorosamente il punto come separatore decimale ma quando legge un input dell’utente italiano si aspetta di trovare, come separatore decimale, la virgola. Se l’utente usa il punto, questo viene semplicemente ignorato e il numero viene letto come un intero composto da tutte le cifre immesse, sia quelle prima che quelle dopo il punto e l’elaborazione prosegue con questo numero, con tutte le disastrose conseguenze del caso.
Visual Basic, sia nella vecchia versione, sia in quella più aggiornata, è il massimo della confusione. Anch’esso, al momento dell’installazione, si adegua alla cultura dell’utente ma lo fa parzialmente: mentre, infatti, la funzione Cdbl() per convertire in numero la stringa immessa dall’utente si adegua alla cultura di questi e, se egli usa un sistema operativo in italiano, si aspetta di trovare la virgola come separatore decimale e, se trova il punto, fa avvenire esattamente quello che avviene in C#, la funzione Val(), utilizzabile per lo stesso scopo, si aspetta di trovare comunque il punto come separatore decimale e, se trova una virgola, non legge oltre ed incamera un numero intero composto dalle sole cifre immesse dall’utente prima della virgola e prosegue così il suo percorso di elaborazione. Visual Basic, pertanto, non è solo subdolo ma è anche ambiguo.
Fortunatamente le versioni di Visual C# e di Visual Basic delle più recenti edizioni di Visual Studio hanno la funzione membro Replace() dell’oggetto stringa che, con poca spesa, ci aiuta a correggere l’input in modo da poter accettare invariabilmente sia il punto che la virgola dall’utente (sempre, in Visual Basic, stando attenti alla correzione da apportare in coerenza a che cosa si usa per convertire la stringa).

Divisione tra interi

L’uso dell’operatore / tra due numeri fornisce come risultato il quoziente di una divisione.
Questo risultato è il quoziente vero, qualunque sia il tipo di numero indicato prima e dopo l’operatore /, solo nei linguaggi Pascal, Python 3 e Visual Basic (sia nella vecchia che nella nuova versione). Per quoziente vero si intende il 2,5 che risulta da 5 / 2.
Nei linguaggi C, C++ e C# se i numeri indicati prima e dopo l’operatore / sono interi si ha una divisione tra interi che fornisce come risultato la parte intera del quoziente. Cioè 5 / 2 fornisce il risultato 2. Purtroppo ciò avviene anche quando la variabile cui assegnare il risultato sia stata dichiarata come double, senza che vi sia alcuna segnalazione di errore. Per ottenere il quoziente vero occorre che almeno uno dei due numeri inseriti prima e dopo l’operatore / sia un double (basta scrivere 5.0 anziché 5).
In Java questo inconveniente si presenta soltanto se l’espressione di divisione è inserita in una istruzione di stampa, senza passare attraverso l’assegnazione a variabili. L’istruzione System.out.println(5/2) stampa 2 e, per ottenere la stampa del risultato corretto occorre scrivere System.out.println(5/2.0) o System.out.println(5.0/2). Non è invece possibile, per sollevamento di eccezione nella compilazione, assegnare il risultato di 5/2 ad una variabile dichiarata double, il che, almeno in parte, attutisce i pericoli che Java ha ereditato dal C.
Allo stesso modo di Java si comporta Ada con la sola eccezione che la divisione inserita in una istruzione di stampa, perchè dia il risultato corretto deve avere sia prima che dopo l’operatore / un float. Cioè non basta dire Put(5.0/2) o Put(5/2.0) ma occorre dire Put(5.0/2.0): in caso contrario viene segnalato errore nella compilazione.
Python 2 è nella stessa situazione di Java se l’input è acquistito con la funzione raw_input(), in quanto tutto si sistema se con la conversione della stringa acquisita si memorizza il valore in una variabile float. Se l’input è acquisito con la funzione input(), dal momento che questa, in Python 2, ritorna un valore numerico, occorre che almeno uno dei due numeri sia scritto come float dalla tastiera.