- pubblicato martedì 30 aprile 2024
-
Ode al testo puro
- Standard aperto: non mi lega a nessun vendor, posso leggere i miei dati con qualunque software, è quindi estremamente portabile
- Future proof: essendo uno standard aperto, con grandissima probabilità sarò in grado di leggerlo anche in futuro (cosa non vera per i formati proprietari)
- Bassissima occupazione, in termini di byte, di spazio disco e di banda: a tutti gli effetti costa meno salvarlo, trasmetterlo, etc.. L'intera Divina Commedia occupa poco più di 500 Kb (meno di una foto decente di un tenero gattino)
- Può essere sottoposto a controllo di versione, che è ormai un requisito indispensabile per la produzione di software
- Fornisce la base per la creazione di linguaggi più strutturati (JSON, markdown, yaml, etc..)
- Può essere manipolato molto convenientemente, sottoposto a ricerca, sostituzione, etc...
- Può essere convertito in altri formati (ad esempio può rappresentare una tabella di database con il formato CSV)
- Può essere copiato e incollato con facilità mantenendo il 100% dell'informazione, in questo senso ne è la sorgente
- E' puro contenuto, indipendente dalla forma in cui si deciderà di presentarlo.
- http://wiki.c2.com/?PowerOfPlainText
- The unreasonable effectiveness of plain text (video)
- The Power of Plain Text (Topic 16) in "The pragmatic programmer" (affiliate link)
-
Ma non è sempre stato così: esistevano anche dei computer decimali fino agli anni 70 ↩
-
Il cosiddetto linguaggio macchina ↩
Come salviamo l'informazione?
Il "digitale" è ormai parte integrante e fondamentale della vita di ognuno di noi, ma spesso poco ci si sofferma sul suo funzionamento più intrinseco e ci si limita ad utilizzare ciò che ci viene proposto dall'esterno senza davvero rendersi conto di cosa succede all'interno dei dispositivi elettronici che abbiamo in tasca o sulla scrivania, e come questi trattino le informazioni.
Per questo farò un breve escursus di come le informazioni vengono gestite in digitale, specificamente riguardo al testo puro.
Codifica binaria
E' noto che il mondo dei computer si basa sul codice binario1: le macchine di cui parliamo funzionano cioè in base due. Funzionano in base due perché elettronicamente e a livello ingegneristico, gestire due stati, "acceso" e "spento" è la cosa più semplice (ed è stato chiaro fin dai tempi del telegrafo). Tutto ciò che è digitale quindi, che sia dato, programma, immagine, video, stream, qualsiasi cosa, non può prescindere da questa codifica. E' la base di tutto.
A differenza del mondo fisico, nel dominio digitale c'è un limite di divisibilità nel piccolo che non si può trascendere: il bit. Il bit è l'atomo dell'informatica: atomo significa infatti "che non si può dividere". In realtà si è poi visto che i veri atomi si possono dividere, ma il bit no: non esiste e non può esistere il mezzo bit o il centesimo di bit.
Ok, ma come si passa dal bit a qualcosa di utile, come le foto di teneri gattini?
Breve riassunto sui calcolatori
Il processore (CPU), il cervello di ogni device digitale, è fondamentalmente un apparecchio che esegue calcoli ad una velocità sorprendente, nell'ordine dei miliardi di operazioni al secondo (i famosi GigaHertz), ed esegue questi calcoli sempre basandosi sulla codifica binaria. Sia le istruzioni2 che gli vengono date (che so, "somma il valore che c'è al registro x con quello al registro y") che i valori (i dati) sono sempre codificati in forma binaria.
Inizialmente i computer erano macchine enormi, costosissime e complessissime da costruire e da operare ed erano usati appunto per questo, per fare calcoli scientifici con grandi numeri, o grandi quantità di numeri, e in seguito per tenere la contabilità di grandi multinazionali, o la gestione dei dati di uno stato e altri compiti di larga scala su questo genere.
Successivamente, con l'avvento del personal computer all'inizio degli anni '80, l'informatica è diventata alla portata di tutti e si è via via legata sempre di più alla telematica, sfruttando le reti di computer interconnessi che grazie ad internet, la "rete delle reti", permettono di comunicare in un battere di ciglia da un capo all'altro del mondo (cosa che oggi diamo per scontata ma che non lo era affatto).
Altro concetto fondamentale è quello di memoria che può essere "di lavoro" (RAM), dove il processore legge e scrive direttamente e velocemente durante l'esecuzione, o "di massa" dove salvare le informazioni per un uso successivo (schede perforate, nastro magnetico, hard disk, cdrom, ssd e via dicendo).
Tornando ai bit: la macchina li sa gestire, spostare, salvare, recuperare, sommare, moltiplicare, etc.. ma il significato che hanno quei bit siamo noi a darlo: siamo noi che scriviamo il programma che la macchina esegue, e siamo noi che sappiamo leggere i risultati che la macchina ci restituisce a partire da un input che noi le forniamo. Dal punto di vista della macchina sono solo infinite sequenze di zero o uno. Il tenero gattino sono due milioni di bit uno dietro l'altro.
Testo puro: un eroe sotto mentite spoglie
Perché voglio cantare un'ode al testo puro? Che cos'è il testo puro?
Il testo puro (plain text in inglese) o "testo semplice" (anche se vedremo che non è poi così semplice) è il formato più basilare e più standard in cui si possano salvare delle informazioni in digitale.
Tradizionalmente, questo tipo di file ha un'estensione .txt
, come
nel classico README.txt
che accompagna spesso il software, ma
possiamo trovare anche altre estensioni, a seconda del contenuto: ad
esempio un file markdown di solito è un .md
o un file HTML ha una
estensione .html
, ma diciamo che tutti questi tipi di file
contengono plain text e possono essere aperti con un editor di testo
semplice e letti da un umano, con diversi gradi di comprensibilità. Ci
possono anche essere dei file senza estensione (README
), in quel
caso per capire cosa c'è dentro ci può venire incontro il comando unix
file
:
file src/ardour/README
src/ardour/README: ASCII text
Il plain text è il formato in cui viene scritto il codice sorgente
ovvero il testo che viene utilizzato per scrivere i programmi da fare
eseguire alla macchina; in quel caso a seconda del linguaggio avremo
fai_questo.py
, fai_quello.js
, FaiCose.java
, etc...
Il testo semplice è anche il formato utilizzato in quella che è la killer application di internet: l'email, anche se molti mandano le mail in HTML (specialmente email di marketing o newsletter) anche in questo caso il plain text garantisce una resa migliore con meno spreco di banda. Anche la maggior parte dei protocolli di internet parlano di solito in plain text.
Il testo semplice è anche, se vogliamo, il formato usato prima del digitale, il formato con cui sono scritti da secoli i libri. E anche in questo caso, a partire dallo stesso alfabeto era possibile avere libri di poesie, libri di favole, libri scientifici, libri di narrativa, etc...
Naturalmente una poesia o un racconto hanno una struttura immensamente più libera rispetto ad un sorgente python o javascript, che deve sottostare a delle regole molto più stringenti per essere interpretato ed eseguito senza errori dalla macchina.
Una poesia non può essere "eseguita" da una CPU, ma può essere salvata su file. Per farlo usiamo il testo puro, dove ogni carattere del testo è rappresentato da uno specifico gruppo di bit, secondo una convenzione standard per cui ad una certa sequenza di bit corrisponde un determinato carattere.
Codifiche di testo
Uno dei modi di raggruppare i bit in elementi più grandi è il
byte che
consta di 8 bit e che viene usato anche come unità di misura della
memoria. Con un byte da 8 bit è possibile rappresentare 256 valori in
base 2, da 00000000
a 111111111
(da 0 a 255 in base dieci),
possiamo dire con una generalizzazione abbastanza veritiera che un
byte rappresenta un carattere del testo.
Un primo standard per la codifica del testo si ebbe negli anni '60 con ASCII, standard inizialmente a 7 bit (128 possibili valori) che codificava le lettere maiuscole e minuscole della lingua inglese, lasciando fuori non solo gli ideogrammi o gli alfabeti non latini, ma anche le comuni accentate delle lingue europee, generando per decenni molta confusione e svariate incompatibilità agli utenti non americani, che dovettero ricorrere ad una estensione dell'ASCII a 8 bit chiamata ISO-8859.
Oggigiorno fortunatamente esiste uno standard molto più avanzato chiamato Unicode, che è retrocompatibile con ASCII e ISO-8859 ma contiene tutti i simboli necessari a rappresentare qualsiasi lingua umana ed è uno standard de facto utilizzato ovunque (comunemente la variante UTF-8). In questo contesto non è più vera l'equivalenza un byte = un carattere, perché unicode usa spesso più di un byte, ma è comunque una astrazione utile per comprendere il quadro generale.
Vantaggi del testo puro
Il testo puro è un formato minimalista, fondamentale per tutta l'informatica ed è uno dei modi primari con cui diamo senso ai computer.
Esso offre molti vantaggi come formato di salvataggio delle informazioni:
Markdown
Tra i linguaggi che si possono usare per dare un minimo di struttura
al testo puro un posto di primo piano lo ricopre sicuramente
Markdown, un linguaggio di markup che molto semplicemente mette a
disposizione dell'autore elementi strutturali come titoli e liste, ed
elementi di formattazione come grassetto, corsivo,
monospaziato
e permette anche l'inserimento di link
ipertestuali.
Con queste pochissime istruzioni, che si possono imparare in breve tempo, è possibile comporre testi complessi e strutturati che possono poi essere renderizzati in HTML o in altri formati (questo articolo ad esempio è stato scritto in markdown)
Org
Un altro formato di markup utilissimo (soprattutto se si usa emacs) è il formato di Org mode, che ha feature molto più avanzate di markdown come ad esempio la possibilità di usarlo per il Literate Programming, o l'integrazione con agenda e calendario per creazione di TODO, o addirittura la possibilità di crearsi una knowledge base personale3 (una sorta di wiki).
Pur essendo meno portabile di markdown in quanto è utilizzabile a piena potenza solo sotto emacs, org-mode è comunque un formato puramente testuale e per il quale valgono tutti i vantaggi sopra elencati.
Ledger
Un ulteriore esempio della potenza e della portabilità del testo puro come formato dei propri dati è ledger, un sistema completo di contabilità in Partita doppia che utilizza un semplice formato in testo puro per la tenuta del libro mastro (journal), e a partire da questo permette di creare tutta una serie di reportistica di bilancio e in definitiva di tenere a bada i propri conti (o quelli della propria azienda)
Anche ledger, manco a dirlo, ha un modo dedicato per emacs.
Conclusioni
Spero che questa piccola elucubrazione da vecchio informatico abbia ispirato o almeno incuriosito qualcuno ad esplorare i molteplici modi in cui il testo puro può arricchire la nostra vita digitale, e mostrato che esso rappresenta quanto di più vicino ci possa essere a una informazione pura, inalterata, essenziale.
Facendo un parallelo con le tecniche delle arti visive, paragonerei il testo puro alla umile matita: strumento basilare ma indispensabile, che costituisce il fondamento di tutto quello che viene dopo.
Ispirazione
E finalmente, il premio meritatissimo di chi è arrivato fino in fondo, il tenero gattino! (In ASCII art naturalmente)
_
\`*-.
) _`-.
. : `. .
: _ ' \
; *` _. `*-._
`-.-' `-.
; ` `.
:. . \
. \ . : .-' .
' `+.; ; ' :
: ' | ; ;-.
; ' : :`-: _.`* ;
.*' / .*' ; .*`- +' `*'
`*-* `*-* `*-*'
(ASCII Art by Blazej Kozlowski)