La scia della cometa Halley

Storia vera di comete, Commodore 64 e hacker romantici

Ho deciso di raccontarvi una storia vera, non mia, che mi ha commosso.
Sì commosso, le ragazzine si commuovono con i gossip e la gente come me si commuove con le storie di codice sorgente.
Una storia romantica che fa capire il valore dell'open-source.
Purtroppo manca la conclusione che spero Luca abbia voglia di scrivere, prima o poi, quella di quando lui contatta l'autore di Halley. Eravamo al tavolo di una bettola parigina, felafel alla mano, quando gliel'ho sentita raccontare: mi ha conquistato e con il suo permesso la pubblico qui.
Nel suo blog la trovate scritta in inglese. Io mi sono limitato a tradurla, con qualche semplificazione.

Come imparai l'astrazione procedurale e la meraviglia della scienza

Il nastro abbandonato

Questa storia inizia in una sera d'estate di fine anni ottanta quando avevo forse 10 o 11 anni. Ero a una fiera di paese con mio fratello, cinque anni più giovane di me – che a quell'età facevano la differenza.

Stavamo camminando quando mio fratello ha trovato a terra una cassetta audio e ha insistito per portarla a casa. Sembrava sporca e ricordo che non volevo la raccogliesse, ma allora era facile persuadermi. La cassetta probabilmente era stata registrata in casa, l'etichetta era in bianco. Ok, vada per prenderla.
Tornati a casa l'abbiamo subito infilata nello stereo portatile; non era musica ma ne abbiamo comunque riconosciuto il suono: si trattava di un programma per computer! Ma non solo, era proprio per il nostro computer! il Commodore 64 - una macchina già un po' antiquata, ma hey, era tutto quello che avevamo.

Come mille altre volte ho premuto CTRL + RUN STOP, quindi il solito PRESS PLAY ON TAPE è apparso sullo schermo. <PLAY>.
Abbiamo pensato che fosse un gioco, noi amavamo i giochi, ma questa cassetta si sarebbe rivelata molto meglio.

FOUND "HALLEY"
LOADING ...

Poi abbiamo aspettato i soliti due o tre minuti di caricamento. Forse anche meno del solito.


Halley

L'idea di base di Halley era semplice: inserendo giorno, ora e posizione sulla Terra, lui ti disegnava il cielo visto da quel luogo in quel momento.

Aveva anche altre funzionalità come quella per evidenziare le costellazioni e, naturalmente, quella per mostrare la posizione della cometa Halley, di passaggio nel 1986 e al centro di una piccola moda anch'essa passeggera; purtroppo noi abbiamo usato il programma con qualche anno di ritardo.

Nonostante fosse un programma complesso, credo di aver capito subito che unire le stelle del Carro Maggiore non era interessante quanto capire come poter calcolare la posizione delle stelle partendo da numeri. Certo, per me non aveva alcuna applicazione pratica capirlo, ma che importava?
Non sapevo ancora il termine esatto, ma la mia intuizione era giusta: c'era un modello predittivo all'opera.

L'incredibile bellezza della scienza. Mi aveva lasciato a bocca aperta.


Astrazione procedurale

Di lì a poco sono arrivato a una seconda scoperta importante, questa volta sulla programmazione. Potrebbe essere difficile da comprendere oggi per chi è cresciuto senza Commodore 64 o lontano dal contesto formativo di quel periodo. Vivevo in un ambiente isolato dove nessuno poteva insegnarmi a usare il computer, e ciò che sapevo sulla programmazione l'avevo appreso tutto da due libri: il manuale del Commodore e un altro libro specifico per C64 – ora posso dire che nessuno dei due era gran che.

Certo, anche le limitazioni dell'interfaccia non aiutavano gran che. In quegli anni i programmi “seri” venivano scritti in linguaggio macchina - sto dicendo linguaggio macchina, non assembly. Col senno di poi, penso che sarei stato in grado di impararne le basi ma all'epoca non avevo alcuna documentazione: assembly e linguaggio macchina venivano trattati nei libri avanzati, troppo difficili da trovare. E le BBS erano fuori portata per me.

Per i bambini sfortunati che vivevano in piccoli paesi di campagna non rimaneva che il BASIC. La maggior parte dei computer domestici era dotato di un interprete BASIC nella ROM, disponibile all'avvio e utile anche al sistema operativo come interfaccia rudimentale: estremamente lento rispetto al codice nativo, il BASIC aveva comunque il vantaggio di essere amichevole. E in effetti era facile da imparare, anche se non lo definirei comunque un linguaggio di alto livello.


PEEK e POKE

Per essere in quegli anni, la macchina offriva buone funzionalità per la grafica, l'audio e la connettività: purtroppo nessuna di queste funzionalità era disponibile in BASIC. Per usare gli sprites, ad esempio, che erano supportati a livello hardware, si doveva manualmente fare "PEEK e POKE" in registri di memoria mappati, citando esplicitamente i loro indirizzi numerici. Lo stesso per molte operazioni banali, come cambiare il colore di sfondo in modalità testo etc.

Andare in modalità grafica e disegnare non era per niente banale e, naturalmente, non vi era alcun framebuffer che ti permettesse il controllo del singolo pixel: toccava destreggiarsi in righe e colonne composti da quadrati di 8x8 e giocare con i bitwise operators per aggiornare i pixel desiderati nel quadrato desiderato. Per gestire i colori poi, non vi dico.

Quindi anche se un programma BASIC era più facile da leggere rispetto a un listato in assembly, in termini di aritmetica e di controllo di flusso, molte operazioni "fondamentali" andavano comunque scritte a un livello molto basso.

Se non sapevi niente altro allora quello per te era il solo modo in cui le cose potessero funzionare, e ti imparavi questi numeri magici senza farti troppe domande. Quello era il solo modo che conoscevi, per questo non ti sembrava nemmeno troppo scomodo.


Procedure

Un giorno ho premuto <RUN STOP> per errore mentre stavo usando Halley. Ho visto BREAK IN e il numero di riga, seguito dal solito READY e il cursore lampeggiante. Naturalmente sapevo che cosa significasse: Halley era stato scritto in BASIC.

LIST sembrava confermare l'ipotesi: in effetti era un grosso programma BASIC, e potevo studiarlo per capirne il funzionamento.

Ben presto ho notato alcuni strani comandi nel sorgente di Halley, i cui nomi iniziavano sempre con una "freccia sinistra": il mio inglese era debole ma ho potuto capire le parole che mi interessavano come LINE e CIRCLE: sembravano essere comandi grafici. Ho provato a farli funzionare in modo interattivo, e funzionavano. Eppure ero assolutamente sicuro che non facevano parte del BASIC. Sapevo già come disegnare una linea e sapevo che era molto più faticoso di così, con tutti i calcoli su offset e bit.

Poi, dopo un reset della macchina, i nuovi comandi hanno smesso di funzionare. Era la conferma che quei comandi non erano inclusi in BASIC ma facevano parte di Halley, che aveva costruito nuovi comandi in grado anche di accettare parametri per le operazioni di livello più alto. Questo è quello che sono stato in grado di capire da solo, e per me è stata una scoperta fantastica. Era ovviamente il modo giusto di programmare: le operazioni che si ripetevano potevano essere accorpate e richiamate con dei parametri. Avevo scoperto l'astrazione procedurale.

Dai due libri di programmazione che avevo letto diverse volte, sapevo per certo che il BASIC non forniva alcun modo di definire procedure, quindi ero abbastanza sicuro che quelle di Halley fossero state scritte nel leggendario "linguaggio macchina". Quel giorno non riuscii già a scrivere le mie prime procedure, ma avevo avuto l'illuminazione.


Ricerca di un'immagine del nastro in rete

Io sono un tipo sentimentale, lo sono sempre stato. E naturalmente, visto quel che Halley significava per me, ho sempre voluto essere in grado di eseguirlo anche quando, negli anni successivi, avevo già cambiato diversi computer.

Il Commodore 64 è ancora lì nella sua scatola, e le cassette dovrebbero ancora funzionare, o almeno funzionavano bene l'ultima volta che ho provato, una decina di anni fa. Ma usarlo è scomodo, è in mezzo a scatole, polvere e persone sgradevoli; e soprattutto adesso vivo in Francia, un po' troppo lontano per andarlo a prendere quando ne ho voglia.

Per questo ho ripiegato su un emulatore: VICE è un free-software che funziona meravigliosamente ma, dal momento che non è del tutto banale trasformare la cassetta di Halley in file, ne ho cercato una copia su Internet, scoprendo che non era per niente popolare: infatti in questi anni non l'ho mai trovato - fino a questo pomeriggio.

Dopo pranzo come faccio ogni tanto mi sono messo alla ricerca, un po' annoiato, ed ho iniziato a scorrere sovrappensiero i risultati: no, non è "Il progetto comunitario", e nemmeno uno dei soliti due o tre titoli in cima alla pagina... ma invece, inaspettatamente, eccolo!


Identificato l'autore

Non mi ricordo esattamente la query di ricerca che mi ha portato all'intervista dell'autore Nemo Galletti, ma dopo aver letto quel nome la mia sensazione di déjà vu non durò ancora a lungo. L'avevo finalmente trovato: http://ready64.it/articoli/leggi/idart/8/intervista-a-nemo-galletti. Tutto sommato non era così difficile da rintracciare, l'intervista risale al 2008.
Qual è stata l'ultima volta che ho cercato Halley prima del 2008? Non ne ho idea.

Dall'intervista ho scoperto qualcosa di interessante: le nuove primitive alle quali devo la mia illuminazione erano le famose "routine di Toma". Galletti sembra molto modesto: non solo riconosce volentieri di aver riutilizzato alcune routine grafiche scritte da Danilo Toma, ma rinuncia anche ad ogni particolare competenza nel campo dell'astronomia, dichiarando di avere semplicemente applicato formule facilmente reperibili su riviste specializzate. Questo mi ha sorpreso.


Identificato l'autore delle routine grafiche

Le routine di Toma sono state pubblicate su una rivista cartacea in almeno due versioni nel corso degli anni ottanta. Sono state compilate manualmente (!) e poi estratte dalla memoria e pubblicate come una lunga lista di comandi insieme ad un commento (!). A quel tempo vi erano buone ragioni tecniche per una pratica del genere: la macchina era troppo limitata per ospitare anche un compilatore decente, senza estensioni hardware.

Una cosa che mi ha scioccato sapere dopo molti anni è che le routine di Toma supportavano realmente le coordinate 3D e renderizzavano in prospettiva, e naturalmente Galletti aveva utilizzato anche la terza dimensione.

Da giovane, studiando il codice senza alcuna documentazione per le routine di Toma, non riuscivo a capire il ruolo di tutti quei parametri; oggi sono un po' deluso di me stesso per non aver nemmeno sospettato una cosa così importante. È chiaro che avevo comunque giocato con cerchi, linee e punti, ma ero affascinato soprattutto da quel concetto che avevo capito per la prima volta piuttosto che da quel particolare insieme di nuove primitive.

È possibile ancora trovare la scansione di una rivista piuttosto “popolare” con un lungo articolo di Toma, comprese le sue routines: http://ready64.it/download/scheda_download.php?id_download=46 .

Toma sembrava così interessante e senza pretese, ma a parte quello che ha scritto in questo articolo non c'è nulla su di lui in rete.


Eseguire Halley di nuovo

Sapendo il nome dell'autore, è diventato facile trovare anche Halley: http://ready64.it/download/scheda_download.php?id_download=255.

Ora finalmente sto per eseguirlo di nuovo. Ho esitato un po' prima di guardare nuovamente il sorgente, rileggerlo con gli occhi di oggi avrebbe potuto rovinare i miei ricordi d'infanzia.
Poi ho messo da parte i pensieri, ho cliccato <RUN STOP> e ho digitato LIST

Non sono rimasto particolarmente impressionato dal codice sorgente. Ma questo non significa nulla. Era un altro mondo. Non sarebbe giusto giudicare i programmi di quel tempo con gli occhi di oggi. E Halley nella parte "difficile" sembra perfettamente ragionevole, con i dati relativi a ogni costellazione raggruppati nella loro sezione DATA, e è ben commentato.

No, Non ho nulla di negativo da dire sui sorgenti di Halley.


Venticinque anni dopo la cometa

La cometa di Halley è passata molto tempo fa, e tra le varie mode quella fu una moda positiva: ha introdotto le persone all'astronomia, e sono sicuro che da lì qualcuno ha coltivato l'interesse.

Anche se a volte accarezzo l'idea di acquistare un telescopio a basso costo e imparare qualcosa (perché no?), dubito che l'astronomia possa mai diventare una vera passione per me. Ma già allora avevo capito molto chiaramente che l'astronomia non era il punto: era solo un esempio del fascino della razionalità, ordinata in modo talmente chiaro e semplice che anche un bambino come ero io la poteva capire.

All'epoca non sapevo nulla di Galileo, ma ora sono sicuro che l'astronomia non era il punto per lui, o almeno non il solo.


Primo epilogo

Alcuni mesi fa, un supermercato di seconda classe in un sobborgo di Parigi. Il ragazzo in fila alla cassa di fronte a me è un po' trasandato, con la barba e l'espressione stanca; circa la mia età, mi assomiglia anche un po'.

Ha solo due oggetti in mano: una confezione grande di omogeneizzati per bambini, e un telescopio.

(Ehi, vendono telescopi qui?)

Sta sorridendo.


Secondo epilogo

Eccomi qui, infine di nuovo di fronte ad Halley, ora in esecuzione su un Commodore 64 emulato da VICE, molto più veloce di quello vero. Ed ecco come Halley mostra il cielo di stasera, 18 settembre 2011 alle 23:59, latitudine Parigi:

Halley - the sky of Paris on 18th september 2011 at 23:59