You asked for it. Here we go.
|
Me l'hai chiesto. Avanti.
|
I have been programming computers since 1977 when I was 13,
preparing punched paper tape and connecting from Croydon
to mainframes at the Chelsea and Imperial Colleges in London.
I just missed punched cards by one year.
|
Programmo i computer da quand'avevo 13 anni nel 1977,
preparando dei nastri di carta perforata e connettendomi da Croydon
a dei mainframe a Chelsea e ad Imperial College.
Mi sono appena perso, per un anno, le schede perforate.
|
I studied Computer Science at the University of Kent at Canterbury
from 1982 to 1985 and was mentored by
Professor David A. Turner, creator of the first lazy functional
programming languages, by
David C. Wood, the assembly language guru, by
Peter Collinson, the BSD kernel developer, by
Brian Spratt, the computer networking expert, by
Ian A. Utting, the digital typography wizard and was
co-programmer to Chris M. Downey.
|
Ho studiato l'informatica all'Università di Kent a Canterbury
dal 1982 al 1985 e i miei mentori erano
Professor David A. Turner, il creatore dei primi linguaggi di programmazione
funzionali pigri,
David C. Wood, il guru dei linguaggi assembler,
Peter Collinson, lo sviluppatore del kernel BSD,
Brian Spratt, l'esperto delle reti informatiche,
Ian A. Utting, il mago della tipografia digitale
ed ero il co-programmer di Chris M. Downey.
|
I've mentored David "Kawika" Harper
the jazz saxophonist and prolific contemporary classical composer since 2014.
|
Dal 2014 sono mentore di
David "Kawika" Harper
il sassofonista jazz e prolifico compositore contemporaneo di musica classica.
|
I know how to program in
APL, autoconf, awk, BASIC, BCPL, Bourne shell, C shell, C, COBOL, COMAL, Csound,
Forth, GIMP image-distortion scripts, Haskell, Informix 4GL, jq, KRC, Lisp, Lua,
M4, Miranda, Occam, Pascal, PHP, PostScript, sed, SQL and the
ARM, HLH's Orion Mk0, PDP/11, PIC24, VAX, Z80, 6502, 6809 and 68000
assembly languages,
6502 and PDP/11 machine codes and High Level Hardware's Orion Mk0 microcode.
|
So programmare in
APL, autoconf, awk, BASIC, BCPL, Bourne shell, C shell, C, COBOL, COMAL, Csound,
Forth, script del GIMP per distorcere le immagini, Haskell, Informix 4GL, jq, KRC, Lisp, Lua,
M4, Miranda, Occam, Pascal, PHP, PostScript, sed, SQL ed i linguaggi assembler
ARM, HLH's Orion Mk0, PDP/11, PIC24, VAX, Z80, 6502, 6809 e 68000,
i codici macchina del 6502 e del PDP/11 e il microcodice dell'Orion Mk0
della High Level Hardware.
|
Of these, Miranda, jq and PostScript are the most beautiful
and Informix 4GL and autoconf the nastiest.
|
Tra questi, Miranda, jq e PostScript sono i più belli
e Informix 4GL e autoconf i più brutti.
|
I know how to run AIX, 4.X BSD, Debian, MS/DOS, Solaris and Xenix systems
and can arm-wrestle EMAS and VMS.
|
So gestire i sistemi operativi AIX, 4.X BSD, Debian, MS/DOS, Solaris e
Xenix e so fare il braccio di ferro con EMAS e VMS.
|
I have programmed for 1970s mainframes, the Commodore PET,
the Research Machines 380Z, the Acorn Atom and BBC Micro,
MS/DOS, Atari TOS, NeXT and many Unices.
For Windows I made a program that opens a window with a random aphorism in it.
|
Ho programmato i mainframe degli anni '70, il Commodore PET,
la Research Machines 380Z, l'Acorn Atom e BBC Micro,
MS/DOS, Atari TOS, la NeXT e molte versioni di Unix.
Per Windows ho fatto un programma che apre una finestra contenente
un aforisma scelta a caso.
|
I know the I2C, MIDI, RS232 and TCP/IP protocols.
|
Conosco i protocolli I2C, MIDI, RS232 e TCP/IP.
|
I know how to do audio and video transcoding,
bittorrent,
cryptocurrencies,
cryptography,
databases,
data compression,
data recovery.
debugging,
digital electronics,
digital typography,
library cataloguing,
live CD construction,
numerical algorithms,
parallel processing,
program size and speed optimization,
releases of free software projects and
Unix system installation and administration.
|
So fare i torrent, le criptomonete, la crittografia, le basi dati,
la compressione dei dati, il recupero dei dati, il debugging,
l'elettronica digitale, la tipografia digitale,
la catalogazione delle biblioteche, la costruzione dei Live CD,
gli algiritmi numerici, il calcolo in parallelo,
l'ottimizzazione della grandezza e della velocità dei programmi,
i rilasci di progetti di software libero e
l'installazione e l'amministrazione dei sistemi Unix.
|
I've written programs to:
- Play and win a four-coin game.
- Play hangman with you, drawing the growing gallows with printed characters.
- Automatically conjugate Spanish verbs.
- Typeset sheet music on an ASR/33 Teletype.
- Edit text files at the command line and save them on cassette (piiiii!)
Interestingly, you got out of insert mode back to command mode
by typing a dot on a line of its own, at the same time as "ed" was
being written on the other side of the planet to work the same way.
- wraptrap:
A two-player video game similar to a 2D version of
Tron's lightcycles (before the film came out!)
using the 380Z's 16 four-quadrant characters
to double the effective screen resolution.
- Play C.P.E. Bach's Solfeggietto on a single square-wave oscillator
and make serial music of it by playing random bars with
random transposition, inverted or not, forwards or backwards
and at slowly varying speed.
I lost the last copy of it on cassette when my van was eaten
by the Mutoid Waste Company.
- Plot three-dimensional graphs on the Sinclair ZX80,
using *its* four-quadrant characters to double the screen resolution.
- Flood-fill an arbitrarily-shaped pixel-delimited area
of the Acorn Atom's bitmapped display, implemented in 6502 assembler.
- Solve simultaneous equations by matrix inversion.
- anagram: List potential anagrams of a given phrase.
- Print text in a circle in PostScript to print circular badges
and other PS programs for campaign logos and so on.
- maze:
Navigate a three-dimensional view of a maze,
implemented with the painter's algorithm.
- empress:
Compression data by optimal variable-length Huffman coding.
It beat the current champion of the time, compact,
and was beaten by compress.
- life:
Run Conway's Game of Life fast in assembler on a b/w bit-mapped screen
without using backing storage.
- mandel:
Calculate and display regions of Mandelbrot's fractal,
implemented in C and VAX assembly language to use the spare time
of the University's ten VAXen and Orions.
- Monitor the memory resource usage of the Xenix kernel on a PDP/11
to be able to allocate the right number of each in the kernel build
and keep a company's business running.
- Speed up the Unix version of the portability layer of a software product.
The replacement I wrote was one sixth of the code size
and ten times as fast. The previous programmer quit and went to Mars.
- raster format:
Yet another format for raster image files with tools to
import and export a number of other image formats of the day and to
perform operations on them including
a new algorithm to rotate by 90 degrees an image larger than the
available RAM without making the virtual memory system thrash.
- genpoly:
Visualize proposed radio aerials' sensitivity
in all directions as a three-dimensional vector plot by
implementing Leneert Ameraal's hidden line removal algorithm.
- sqrt:
A new integer algorithm for square roots based on Mr C. Woo's
method for doing them on an abacus. It was six times the speed of the
BSD math library's hand-crafted VAX assembler routine that did it
by Newton-Raphson successive approximation in floating point.
- bigfloat:
An infinite-precision scientific math library in KRC, Miranda and Haskell.
- A bug database and user interface for a company's product software
in Informix 4GL, a something-on-top-of-SQL language.
No named compile-time contants.
We had to ran the source through M4 to have such luxuries.
- libwrite:
A C library to write Write documents.
- recwav:
Show spectrograms of audio files quickly on slow hardware
using variable-precision fixed-point arithmetic.
- typeset:
Do high-quality typography on dot-matrix printers of
WordStar, TopCopy Plus and text files, complete with automatic kerning.
- Profile the execution time of programs compiled with Turbo C on MS/DOS.
- Play a new card game "Pot Poker" designed for a new television game show.
- Recover 6000 patients' records from a doctor's custom-written
surgery management system that had been programmed with a time bomb
and pour them into a new, much better system running on the same hardware.
The story.
- An ex-novo Italian word list for "anagram" and to make a spell-checker,
including automatic conjugation of verbs and of the male, female and
plural variants of nouns and adjectives.
- Quadrophonic acoustic holography using two sound cards and calculating
the distance between each of the four speakers and the sounds you wanted
to place in 2D space by making the wavefronts of the signals from the
speakers coincide in one point.
- 4vol:
A JACK plugin to quadruple the mono power of a sound card
by feeding an inverted version of the signal to one of the outputs
and connecting a speaker between the left and right signal pins.
- kickdirt:
My only piece of studio-quality music, created using Csound
both as a synthesizer and as a sequencer.
- simone:
The boot loader, Linux kernel and Debian base system for a
200MHz 64MB single-board ARM computer
- armeabi:
Make the first truly open-source cross-compiler targetting
the ARM EABI and most of the bootstrapping and package porting
for the new Debian "armel" port based on it.
- crunch:
Fix GCC's non-working code generation for Cirrus Logic's
MaverickCrunch floating-point ARM coprocessor and
repositories of Debian packages compiled with it,
making floating-point math approximately four times faster.
- Lua ed:
A port of GNU "ed" to a microcontroller by translating it
from C-for-Unix to Lua-for-eLua.
- Reimplement a bit-banging I2C driver in PIC24F assembler
making it work ten times faster, at full 100MHz bus speed (just!)
- Mine cryptocoins on four server racks with 24 GPUs.
On its first test it made a net profit of just over 3000 euros a month.
When the Silk Road was closed a month later,
cryptocoin value multiplied by ten.
- Linux KRC:
Revive an extinct computer programming language from 1982
by translating its BCPL-for-EMAS interpreter to C-for-Unix
by way of a slew of #defines to make C syntax closer to BCPL.
- image:
Zoom a bitmapped image in a window in ten different GUI toolkits:
Agar, Elm, Evas, Fltk, GTK2, GTK3, IUP, QT4, SDL1 and SDL2.
- spettro:
Scroll a log-frequency-axis spectrogram of music as it plays.
- cdvd:
Rip, catalogue and compress large collections of audio CDs.
- issues:
Shell scripts to down- and upload issues from/to a Forgejo instance.
|
Ho scritto dei programmi per:
- Giocare e vincere ad un gioci di quattro monete.
- Giocare all'impiccato con te, disegnando la crescente forca
con dei caratteri stampati.
- Coniugare automaticamente i verbi spagnoli.
- Tipografare gli spartiti musicali su un Teletype ASR/33.
- Editare degli archivi di testo a riga di comando e salvari su cassetta
(piiiii!) Stranamente, si usciva dalla modalità d'inserimento
digitando un punto su una riga sola, nello stesso momento in cui,
dall'altro lato del pianeta, si stava scrivendo "ed" a funzionare
alla stessa maniera.
- wraptrap:
Giocare in due ad una versione a due dimensioni
del gioco del Motolabirinto di Tron (prima che uscisse il film!)
utilizzando i sedici caratteri a quattro quadranti del 380Z
per raddoppiare la risoluzione effettiva dello schermo.
- Suonare il Solfeggietto di C.P.E. Bach
con un oscillatore ad onda quadrata
e facendone la musica seriale suonando le battute a caso
con una trasposizione casuale, invertite o no, in avanti o
all'indietro e ad una velocità che lentamente cambiava.
Ne ho perso l'ultima copia su cassetta quando il mio furgoncino
fu mangiato dalla Mutoid Waste Company.
- Tracciare delle grafiche tredimensionali sulla Sinclair ZX80
utilizzanto i *suoi* caratteri a quattro quadranti
per raddoppiare la risoluzione dello schermo.
- Fare il riempimento a diluvio di un'area di forma arbitraria
delimitata dai pixel sul display a bitmap dell'Acorn Atom,
in assembler 6502.
- Risolvere delle equazioni simultanee mediante l'inversioni di una matrice.
- anagram: Elencare i possibili anagrammi di una data frase.
- Stampare del testo in un cerchio in PostScript ed altri programmi in PS
per fare dei loghi e così via.
- maze:
Navigare un labirinto con la vista tredimensionale,
implementato con l'algoritmo del pittore.
- empress:
Comprimere dei dati con l'ottimale codifica Huffman a lunghezza variabile.
Battò l'attuale campione dei tempi, compact,
e fu battuto da compress.
- life:
Eseguire il Gioco della Vita di Conway in assembler su uno schermo
bianco e nero a bitmap senza usare memoria aggiuntiva.
- mandel:
Calculare e visualizzare delle regioni del frattale di Mandelbrot,
implementato in C e in assembler VAX per usare il tempo libero
dei dieci VAX e Orion dell'Università.
- Monitorare l'utilizzo delle risorse di memoria del kernel Xenix
su un PDP/11 per saper allocare il giusto numero di ciascuna e
ricompilando il kernel per tener in funzione il business di una ditta.
- Velocizzare lo strato Unix di portabilità di un prodotto software.
La versione che scrissi aveva un sesto della dimensione del codice ed era
dieci volte più veloce.
Il programmatore precedente si licenziò.
- raster format:
Ancora un'altro formato per gli archivi d'immagine bitmap
con degli strumenti per fare l'import/export in altri formati
dei tempi e per fare delle operazioni su di loro, tra cui un
nuovo algoritmo per ruotare di novanta gradi un'immagine
di dimensione superiore alla memoria RAM a disposizione senza
mandare in tilt il sistema di memoria virtuale.
- genpoly:
Visualizzare in tutte le direzioni la sensibilità delle antenne
radio in progettazione, tracciando un grafico tredimensionale con
l'algoritmo di Leneert Ameraal per la rimozione delle linee nascoste.
- sqrt:
Un nuovo algoritmo ad interi per calcolare le radici quadrati
basato sul metodo di Mr. C. Woo per l'abaco.
Risultò sei volte più veloce della routine della
libreria matematica di BSD, che era stata scritta manualmente
in assembler VAX facendo le approssimazioni successive di Newton-Raphson
a virgola mobile.
- bigfloat:
Una libreria scientifica a precisione infinita in KRC, in Miranda e in
Haskell.
- Una base dati e l'interfaccia utente per gestire le segnalazione
dei difetti nei prodotti software di una ditta,
scritta in Informix 4GL, una specie di linguaggio sopra l'SQL
ma privo di costanti. Siamo stati costretti a passare i sorgenti
attraverso M4 per avere un lusso del genere.
- libwrite:
Una libreria in C per scrivere dei documenti nel formato di Write.
- recwav:
Mostrare i spettrogrammi degli archivi audio velocemente sull'hardware
lento per via dell'aritmetica in virgola fissa a precisione variabile.
- typeset:
Fare la tipografia di alta qualità sulle stampanti ad aghi
di documenti nei formati WordStar, TopCopy Plus e testuali,
compresa la crenazione automatica.
- Fare il profilo del tempo di esecuzione di programmi compilati con Turbo C
su MS/DOS.
- Eseguire un nuovo gioco di carte "Pot Poker" progettato per
una nuova serie televisiva.
- Recuperare i record medici di seimila pazienti da un sistema
fatto su misura per la gestione dell'ambulatorio di un medico
che era stata programmata con una bomba a tempo, versandoli in un
nuovo sistema molto migliore che girava sullo stesso hardaware.
Il racconto.
- Una lista di parole italiane fatta di sana pianta per anagram
e per fare i controlli ortografi, compresa la coniugazione automatica
dei verbi e delle varianti maschili, femminili e plurali dei sostantivi
e degli aggettivi.
- L'olografia acustica quadrofonica usando due schede sonore e
calcolando la distanza tra ogni cassa e il suono da
piazzare nello spazio bidimenzionale e facendo coincidere in un punto
i fronti d'onda dei segnali provenienti da ogni cassa.
- 4vol:
Un plugin per JACK che quadruplica la potenza monofonica di una scheda
sonora mandando la versione invertita ad una delle uscite e
connettendo una cassa tra i poli sinistro e destro.
- kickdirt:
Creare il mio unico pezzo di musica a qualità di studio
di registrazione, usando CSound sia come sintetizzatore sia come sequencer.
- simone:
Fornire il boot loader, il kernel Linux e il sistema base Debian ad un
single-board computer ARM a 200MHz e con 64MB RAM.
- armeabi:
Realizzare il primo cross-compilatore veramente open source per l'ARM EABI
e la maggior parte del bootstrap e del porting dei pacchetti software
per il nuovo port "armel" di Debian basato si du essa.
- crunch:
Sistemare il generatore di codice di GCC per il coprocessore a virgola
mobile MaverickCrunch della Cirrus Logic che non aveva mai funzionato
e fare dei repository di pacchetti Debian, compilati con esso,
rendendo il calcolo a virgola mobile circa quattro volte più veloce.
- Lua ed:
Portare GNU "ed" ad un microcontrollore, traducendolo
da C-per-Unix in Lua-per-eLua.
- Reimplementare un driver I2C "bit-banging" in assembler PIC24F
rendendolo dieci volte più veloce e capace di funzionare
alla piena velocità di 100MHz del bus (appena!)
- Minare le criptomonete su quattro server con ventiquattro GPU.
Alle prime prove tirà un profitto netto di circa 3.000
euro al mese. Quando, un mese dopo, il Silk Road fu chiuso,
il valore delle criptomonete si multiplicò per dieci.
- Linux KRC:
Resuscitare un'estinto linguaggio di programmazione dal 1982
traducendo il suo interprete da BCPL-per-EMAS in C-per-Unix
per via di un mucchio di #define
per rendere più simile a BCPL la sintassi del C.
- image:
Fare delle zoomate su un'immagine in una finestra con dieci toolkit
grafiche: Agar, Elm, Evas, Fltk, GTK2, GTK3, IUP, QT4, SDL1 e SDL2.
- spettro:
Suonare dei brani di musica, visualizzandone uno spettrogramma scorrevole
ad asse di frequenza logoritmica.
- cdvd:
Rippare, catalogare e comprimere una grande collezione di CD audio.
- issues:
Scaricare e caricare le segnalazioni da/in un'istanza di Forgejo.
|
I also maintain:
- fritzzz:
The first open-source ray tracer that made the above image
- rat:
A program to save disk space by making multiple links
to a single copy of identical files.
- xvi:
The smallest full-feature clone of the "vi" text editor
- sox_ng:
Sanitizing the Swiss Army Knife of command-line audio processing
after a nine year hiatus in its development.
|
Inoltre, faccio la manutenzione di:
- fritzzz:
Il primo tracciatore di raggi open-source, quel che fece l'immagine
in testa a questa pagine.
- rat:
Un programma per risparmiare lo spazio sul disco facendo
dei link multipli ad una sola copia degli archivi che sono identici.
- xvi:
Il più piccolo clono a piena funzionalitù
dell'editore di testi "vi".
- sox_ng:
Il coltello dell'Armata Svizzera del trattamento audio
a riga di comando dopo un'iato di nove anni nel suo sviluppo.
|
Hardware
I enjoy building usual computers,
or rather unusual computer cases, specializing in
totally silent ones for audio recording.
I know how to project and realize digital electronics and
grok analogue electronics up to the resistor-condenser-inductor level.
|
Hardware
Mi diverto a costruire dei computer poco usuali,
ovvero delle case piuttosto insolite, specializzandomi in quelli
totalmente silenziosi per le registrazioni audio.
So progettare e realizzare l'elettronica digitale e me la cavo
nell'elettronica analogica al livello delle resistenze, dei condensatori
e degli induttori.
|
I have digitized a lot of books
in English and
in Italian,
the bulk equivalent of about twenty-three novels,
first by correcting Gutenberg's texts then by digitising them myself
either as scanned facsimiles or typed in by hand
and proofread against the originals, never with OCR because
the Gutenberg Shakespeare had "He held the babe in his anus":
"nu" has four vertical bars like "rm"
and it goes past the spelling checker without a blip.
|
Ho digitalizzato molti libri
in inglese ed
in italiano,
un volume equivalente a ventitre romanzo,
prima correggendo i testi di Gutenberg, poi digitalizzandoli io stesso
o facendone dei facsimili o digitandoli manualmente e correggendoli
di fronte ai testi originali, mai con l'OCR perché il
Shakespeare di Gutenberg conteneva "He held the babe in his anus"
("Teneva il bambino nel suo ano"): "nu" ha quattro barre verticali come "rm"
e passa per il controllo ortografico senza un blip.
|
I have catalogued:
- The Auro social centre's collection of historic newspapers from 1930-1968.
- The Auro social centre's collection of political books.
- The Auro social centre's collection of a thousand schoolbooks
left over from their annual bring-and-buy events.
- The Vulkano social centre's collection of anarchic
and libertarian journals.
- The 5,500-volume contemporary newspaper library I created at Vulkano,
complete with a report that shows day by day which news item
each paper gave most importance to in its leading title.
- The Fondazione Marco Montalbano's library of 7,000 comic books,
devising appropriate categories; if I'd used the Dewey decimal system
I could simply have written 741.5 over the entrance.
- The religious library and papers of a 1920s Italian priest,
found in an abandoned house.
- 450 audio CDs found in an abandoned house,
mostly 2015 Italian and world pop and Sicilian and Napolitan canto
with some African specials, all ripped and MP3'd.
Of the paper libraries I now only have the catalogues though
I believe the Fondazione Marco Montalbano still has its comics.
|
Ho catalogato:
- La collezione di giornali storici dal 1930 al 1968 del Centro Sociale
Auro.
- La collezioni di libri politici del Centro Sociale Auro.
- La collezione di mille libri scolastici del Centro Sociale Auro,
rimasti dal loro mercatino annuale.
- La collezione di riviste anarchiche e libertarie del Centro Sociale Vulkano
- L'emeroteca contemporanea di 5.000 giornali che ho creato al
C.S.O. Vulkano, completo di un report che mostra, giorno per giorno,
a quale notizie ogni giornale dava maggior importanza nella prima testata.
- La fumettoteca di 7.000 volumi della Fondazione Marco Montalbano,
improvissando delle categorie idonee; se avessi utilizzato il sistema
decimale Dewey, avrei semplicemente potuto scrivere 741.5 sopra
la porta d'ingresso.
- La biblioteca ecclesiastica e le carte di un prete siciliano,
trovate in una casa abbandonata.
- 450 CD audio trovate in una casa abbandonata, perlopiù del
pop italiano e world del 2015 e del canto siciliano e napolitano
con alcune rarità africane, tutti digitalizzati e resi in MP3.
Delle biblioteche cartacee mi sono rimasti soltanto i cataloghi
ma credo che la Fondazione Marco Montalbano ha ancora i suoi fumetti.
|
Future projects
Future programming projects are:
- A harmonizer that lets you play a chord on a keyboard
and hear your voice singing all the notes at once,
either by you singing the bottom or the top note of the chord
or by it detecting your voice's pitch and adjusting it.
Let the tone deaf sing!
- A tool to speed Live CDs' boot times up
by reorganizing the position of the data blocks accessed during
a normal boot sequence so that they are accessed in linear order.
- An operating system written in a functional programming language.
|
Progetti futuri
Dei progetti futuri di programmazione sono:
- Un armonizzatore che ti permette di suonare un accordo su una tastiera
e sentire la tua voce che canta tutte le note simultaneamente,
o cantando la note più bassa o quella più alta del accordo
o rilevando la frequenza della tua voce e aggiustandola.
Che i sordi cantino!
- Uno strumento per ridurre il tempo d'avvio del Live CD
riordinando i blocchi di dati in modo che quelli letti
durante la sequenza d'avvio si trovino uno dietro all'altro.
- Un sistema operativo scritto in un linguaggio di programmazione funzionale.
|