30 luglio 2024

Perchè mi dispiace che sia morto JOHN WALKER

Il 2 febbraio 2024, a seguito delle ferite alla testa riportate in  una caduta, moriva all'età di soli 75 anni John Walker, co-fondatore e primo CEO di Autodesk, la software house produttrice di AutoCAD.

John Walker era un programmatore prima di essere un manager. Con le sue intuizioni e la sua visione ha profondamente caratterizzato l'evoluzione di AutoCAD quando era un 'acerbo' software già scritto (si chiamava Interact) da un altro programmatore e co-fondatore di Autodesk: Mike Riddle.

Nel 1986 è diventato CEO di Autodesk fino al quando, nel 1994, non ha lasciato l'azienda da lui fondata.

Verso la fine degli anni '80 e inizi '90 non esisteva ancora il Web (da noi), un po' di documentazione relativa ad AutoCAD la si trovava in file di testo (presenti su floppy e CD). 
Curiosando tra i file forniti in quelle che erano ancora le prime versioni di AutoCAD (release 9,10,11,12...) e tra quelli presenti nel materiale di supporto fornito ai dealer autorizzati, io ho potuto comprendere che tipo fosse John Walker.

È stato proprio attraverso quei documenti che ho apprezzato lo spirito che animava il suo lavoro e alcuni tratti distintivi del suo carattere:

  • insospettabile Ironia : Walker riusciva a infondere una buona dose di ironia anche nei documenti tecnici, dimostrando che si poteva essere informali anche in un contesto così tecnico.
  • la sua visione per favorire le architetture aperte perché gli stessi utenti potessero personalizzare e implementare facilmente il loro sw; nel loro piccolo già le prime versioni di AutoCAD  offrivano un ampio ventaglio di opzioni per customizzare il sw secondo le proprie esigenze (menu, layout della tavoletta grafica, font SHX,  tipilinea, tratteggi, script di comandi, macro nei menu, AutoLISP);
  • programmi di esempio non banali che mettevano in mostra un livello culturale un po' al di sopra della  media (almeno per quella che io pensavo fosse la 'media');
  • la passione per l'astronomia;
  • la passione per gli acronimi (forse un po' come tutti gli statunitensi...)
difficile non provare simpatia per un tizio del genere.

In questo articolo voglio solo ricordare alcune sue 'tracceperse tra le righe del codice e della documentazione che, a quei tempi, scoprivo con entusiasmo con gli occhi di un giovane programmatore.

Poi, per apprezzare le abilità di manager e il suo livello culturale esistono - per fortuna - ampie testimonianze sul suo sito web, creato dopo la fuoriuscita da Autodesk: www.fourmilab.ch in cui non mancano anche alcune email scambiate con colleghi e dipendenti in cui, ancora, spicca la sua elegante ironia.

LUI E' KELVIN R. THROOP

Molti scritti, comunicazioni interne ad Autodesk e programmi di John Walker, dopo una certa data, sono firmati anche con lo pseudonimo di Kelvin R. Throop.

Kelvin Robert Throop è un personaggio letterario comparso (per la prima volta nel 1964) in alcuni racconti su riviste di fantascienza statunitensi A fine 1984, la rivista Analog pubblicò un'edizione speciale umoristica di Kelvin Throop e nel corso di quel decennio numerosi epigrammi umoristici, attribuiti a Throop, furono pubblicati sulla rivista [fonte: https://en-academic.com/dic.nsf/enwiki/1166972 ] 

Credo che Walker si sia riconosciuto nel tipo di humor di quel personaggio e molto spesso qualche suo scritto contiene frasi lapidarie nello stesso stile di quanto attribuito a questo personaggio.  
Inoltre, probabilmente, è stata una maniera elegante per dissimulare le proprie competenze e non apparire il genio di turno.

PROGRAMMI IN BASIC

Nelle prime versioni di AutoCAD erano presenti 2 programmi scritti in BASIC da Walker. Rappresentano i primi 2 esempi di applicazioni esterne che elaborano dei file DWG tramite il file di interscambio DXF. Una prima significativa traccia per mostrare che quel CAD non era solo disegno ma anche gestione dei dati collegati al disegno.

Attext.bas

Questo programma, presente nella versione 2.5,  legge gli attributi del blocchi del disegno, estratti tramite il comando ATTEXT, e ne restituisce un report in ordine alfabetico e con le relative quantità.
l'intestazione del programma Attext.bas

Bilmat.bas

Questo programma, che fa la sua comparsa in AutoCAD 9, creava una distinta base. Tramite la lettura di un file DXF generato dal comando ATTEXT per la sola estrazione di attributi. Occorreva solo che i blocchi avessero l'attributo con il tag "COST".

Ma la cosa più bella in questo programma si trovava nel commento iniziale, dove si invitava a sfruttare quel lavoro per le proprie specifiche esigenze. Modificando, implementando il codice o usandolo come modello per scrivere applicazioni simili, anche in altri linguaggi.
Cosi scriveva Walker:
" ... is mainly intended to illustrate a serious application which processes a DXF format attribute extract file from AutoCAD, as well   as to serve as a jumping off point for your own attribute processing   applications, whether created by modifying this program or simply by using it as a model for programs written in other languages."

l'intestazione del file Billmat.bas

I PRIMI LISP

Tra i primi file in linguaggio AutoLISP che ho potuto consultare ci sono naturalmente quelli di esempio forniti con AutoCAD.  Tra questi parecchi erano scritti da Walker. Non sempre i programmi erano dedicati a risolvere problematiche specifiche di disegno ma più spesso erano una dimostrazione di soluzioni a problemi complessi utilizzando il semplice AutoLISP. 
Nell'intestazione del file, dopo la descrizione del programma, c'era quasi sempre il nome dell'autore e, nel caso di Walker, si poteva trovare spesso il suo pseudonimo: Kelvin Throop

Di seguito la descrizione di alcuni dei file in linguaggio AutoLISP prodotti da Walker:

- spiral.lsp: disegna una spirale con una polilinea. Disponibile sia comando che funzione richiamabile con parametri (Kelvin R. Throop nel gennaio 1985).  

- aflix.lsp : dato un percorso definito da una polilinea genera una Camera e le relative viste lungo il percorso creando uno script e dei fotogrammi utilizzabili con Autoflix (un altro programma Autodesk che proiettava in sequenza delle slide come in una animazione).  Il punto di visata della camera e l'altezza dell'osservatore erano configurabili.  (Kelvin R. Throop nel maggio 1987)

- ashade.lsp:  contiene i comandi per generare una scena con Luce e Camera da esportare per il primo prodotto di rendering di Autodesk: AutoShade

- sqr.lsp : una maniera alternativa per calcolare la radice quadrata rispetto alla funzione incorporata in AutoLISP per verificare (confrontando i risultati) la precisione dei calcoli in virgola mobile. (17 dicembre 1984)

- fplot.lsp : il file disegna una rappresentazione del risultato di una funzione matematica entro un determinato range x e y (Kelvin R. Throop nel giugno 1988)
il risultato del comando DEMO presente nel file fplot.lsp

- rpoly.lsp: approssima un poligono ad una figura avente i nuovi lati che partono dai punti medi dei lati originari.  (scritto da Kelvin R. Throop nell'ottobre del 1995)

- julian.lsp: comando per convertire la data in formato Giuliano (così è memorizzata nella variabile di sistema "DATE" ) in formato calendario gg/mm/aaaa. Il file viene ancora installato oggi nella cartella degli Express tools (progettato e implementato da Kelvin R. Throop)

- icd.lsp:  Interactive Colour Designer consente di selezionare in modo interattivo a video un colore da una gamma di colori agendo con cursori che controllano tonalità, luminosità e saturazione. 

- clock.lsp: disegna un orologio a pendolo che segna l'ora corrente completo di pendolo e lancetta dei secondi nel quadrante che si muovono in tempo reale. (Kelvin R. Throop nel febbraio 1986)

face.lsp: questo programma riprendendo uno studio fatto da Herman Chernoff  riguardo alla rappresentazione delle facce nei cartoon in base a 9 variabili indipendenti collegate a parti del viso. Il programma consente di creare delle facce con diverse espressioni all'interno del disegno (febbraio 1991).
- drawman.lsp: un programma che tramite l'utilizzo degli Handle (identificativo unico esadecimale) delle entità, implementa un sistema di controllo delle revisioni. Molto grezzo - come ammette l'autore  -ma con lo scopo di dimostrare l'utilizzo degli Handle e codice AutoLISP. (Kelvin R. Throop nel dicembre 1987)

- tower.lsp: un esempio grafico della soluzione del famoso problema di logica chiamato "la torre di Hanoi".

ALTRI PROGRAMMI

MC.exe

Il programma consentiva di generare un file menù (.MNU) in base alle istruzioni immesse in un file di definizioni .MND.
Praticamente consentiva di creare file di menù molto rapidamente soprattutto se si dovevano inserire comandi nell'area della tavoletta grafica in sezioni composte da più caselle.

Di seguito l'intestazione del documento esplicativo che accompagnava l'eseguibile con informazioni circa l'autore:

                        AutoCAD Menu Compiler 

                         by Kelvin R. Throop

                    Revision 2 --  October 22, 1985

Questo è il banner testuale che appare al lancio del programma. I credit ci dicono che è stato prodotto da una fantomatica  Throoput Ltd. :

Kelvinator.exe

Metà anni ottanta: in breve tempo le applicazioni AutoLISP commerciali aumentavano sempre più. Occorreva uno strumento per proteggere il lavoro intellettuale dei programmatori e software house.
La prima soluzione offerta da Walker fu Kelvinator: un offuscatore di codice che trasformava i nomi delle variabili in nomi poco comprensibili eliminando dai file .LSP commenti e spazi inutili.

Ecco un esempio di codice trasformato, anzi... Kelvinato:

(DEFUN C:COMPRES(/ Qj Q@ QQ Ql Q& Q1 Q# Q0 F)(IF(SETQ Qj(GETFILED"File da comprimere""""lsp"0))(SETQ Q@(GETFILED"Nuovo file da creare""""lsp"1)))(IF(AND Qj Q@(/= Qj Q@))(PROGN(SETQ QQ(OPEN Qj"r")Ql(OPEN Q@"w")Q$ 0 QO NIL)(PROMPT"\nAttendere...\n")(WHILE(SETQ Q&(READ-CHAR QQ))(COND((= Q& 34)(SETQ Q1 T)(WRITE-CHAR Q& Ql)(WHILE Q1(SETQ Q# Q& Q&(READ-CHAR QQ))(WRITE-CHAR Q& Ql)(IF(AND(= Q& 34)(/= Q# 92))(SETQ Q1 NIL))))((/= Q& 59)(IF(AND(/= Q& 9)(/= Q& 10))(IF(AND(= Q& 32)(OR(= Q$ 32)(= Q$ 9)))NIL(WRITE-CHAR Q& Ql))(IF(OR(/= Q$ 32)(/= Q$ 9))(WRITE-CHAR(SETQ Q& 32)Ql))))(T(WHILE(/= 10(SETQ Q0(READ-CHAR QQ))))))(SETQ Q$ Q&))(CLOSE QQ)(CLOSE Ql)))(PRINC))

è evidente che il nome di questo programma richiama lo pseudonimo utilizzato dal Walker ma anche la nota marca di frigoriferi, visto che il codice kelvinato appariva compatto come un qualcosa di congelato.

Questo è il banner testuale che appare al lancio del programma, con un simpatico messaggio per l'utente:
Anche questo programma ha un occhio attento per le implementazioni future.
Infatti, l'elenco dei nomi delle funzioni AutoLISP che, come è evidente, non devono essere trasformate, si trova in un file esterno: kelv.def. 
Semplicemente aggiungendo i nomi delle nuove funzioni al file di definizioni .def, per parecchie release di AutoCAD, Kelvinator ha potuto essere utilizzato .

PROGRAMMI IN C E ADS

Alcuni esempi di programmi dimostrativi scritti in C (High C della Phar Lap) per il nuovo sistema per la creazione di plug-in chiamato: ADS (Advanced Development System) introdotto con AutoCAD 11.

Magnets

Il programma simulava il comportamento di un pendolo influenzato da campi magnetici generati da magneti (posizionati nel disegno di AutoCAD), ottenendo una simulazione visuale interattiva

La fisica della simulazione è semplificata. La simulazione non tiene conto della complessità dei magneti reali. 

Il programma includeva comandi come:
MAGNET: Crea un nuovo magnete specificandone posizione e forza. La forza positiva attrae il pendolo, quella negativa lo respinge.
MAGEDIT: Modifica la forza di un magnete esistente selezionandolo e aggiornandone le proprietà tramite una finestra di dialogo.

Sviluppato da Walker nell'ottobre del 1989, del programma erano forniti anche i sorgenti e, come spesso avveniva, si potevano trovare al loro interno inaspettati commenti che strappavano qualche risata...

la parte finale del file magnets.c con un commento, anzi, imprecazione di Walker

Gravity

Gravity era un simulatore di interazione gravitazionale a N corpi per AutoCAD, sviluppato da Walker nell'agosto del 1989. Questo programma consentiva di simulare il moto di più masse sotto l'influenza della gravità reciproca. Come recitava la descrizione nel file sorgente "questi strumenti permettono di esplorare il comportamento dinamico di sistemi gravitazionali complessi, come il Sistema Solare, attraverso simulazioni visive interattive."

La fisica del simulatore è basata sui principi spiegati in un libro "The Armchair Universe" di A. K. Dewdney (1988). 
Il programma includeva vari comandi per creare, modificare e gestire le simulazioni:
FRAME: Consente di scegliere una massa di riferimento attorno alla quale visualizzare il moto, o tornare al frame inerziale predefinito.
MASS: Crea una nuova massa specificandone nome, posizione, velocità e massa in unità solari.
MASSEDIT: Modifica le proprietà di una massa esistente, come nome, velocità e massa.
RESET: Interrompe la simulazione e resetta le traiettorie delle masse, riportandole allo stato iniziale.
RUN: Avvia la simulazione, richiedendo di specificare la durata in passi o anni simulati. La simulazione può essere interrotta con il tasto Control C.
SETGRAV: Permette di modificare variabili di simulazione, come la modalità di output, la visualizzazione del numero di passi e del tempo, e la dimensione del passo.
UPDATE: Aggiorna le posizioni e le velocità delle masse nel database alla fine della simulazione.

Particolare la presenza nella parte iniziale del file sorgente di due citazioni: di Kepler e Newton



Mountain

Mountain era un generatore frattale di paesaggi di montagna. Fu sviluppato da Walker nel novembre del 1989.
Le coordinate degli oggetti PFACE, usati per rappresentare le montagne sono ottenute tramite il filtraggio di Fourier di dati casuali.

All'utente viene richiesto di specificare:
  • Dimensione della maglia (potenza di 2) 
  • Dimensione frattale (in genere tra 1 e 3)
  • Fattore di scala
La catena montuosa è modellata come una maglia quadrata.
Ogni volta che si richiama il comando Mountain il risultato generato è sempre diverso grazie alla generazione random.
Le facce della mesh, inoltre, sono colorate in base alle impostazioni di un altro comando (World) fornito da questo programma che consente 3 rappresentazioni per imitare paesaggi con laghi e cime innevate.

Sicuramente in plug-in molto spettacolare a quei tempi.


ATLAST

Ho visto questo programma ed il suo codice sorgente credo per la prima volta in AutoCAD 11. 
Il nome è un acronimo: A.T.L.A.S.T. - Autodesk Threaded Language Application System Toolkit.

ATLAST viene presentata come una soluzione che consente di costruire programmi aperti in meno tempo rispetto a quelli chiusi. Bisogna pensare ad ATLAST come a una libreria di routine che fornisce programmabilità. Waker lo descrive così:

Non pensare ad ATLAST come a FORTH. Non pensarlo nemmeno come a un linguaggio. Il modo migliore per pensare ad ATLAST è come a una routine di libreria che ti fornisce programmabilità, nello stesso senso in cui altre librerie forniscono accesso ai file, gestione delle finestre o funzionalità grafiche. L'intero concetto di "programmabilità in lattina" è strano - mi ci sono voluti due anni dal momento in cui ho cominciato a pensarci in relazione al Protocollo Leto fino a quando non l'ho davvero compreso e l'ho piegato alla mia volontà. Ti incoraggio a rifletterci, sperimentarla e esaminare come può essere applicata nei programmi potenziati da ATLAST.

In buona sostanza, linkando questa libreria all'eseguibile, era poi possibile tramite dei file esterni scritti dall'utente in linguaggio ATLAST, immettere istruzioni aggiuntive a quell'eseguibile.

Dopo che Walker nel 1991 ha acquisito per intero i diritti su questo programma (dall'Autodesk) lo ha reso di pubblico dominio ed implementato fino al 2014 : https://github.com/ForthHub/Atlast. 
Altri dettagli possono essere trovati sul suo sito (https://www.fourmilab.ch/atlast/ )

Ecco cosa scriveva al termine del documento che illustrava il suo ATLAST:

"Tutto dovrebbe essere programmabile. Qualunque cosa! Sono giunto alla conclusione che scrivere quasi tutti i programmi in modo chiuso è un errore che invita a spendere innumerevoli ore per “migliorarli” nel corso del loro ciclo di vita. Ulteriori modifiche, “funzionalità” e “correzioni” spesso danno come risultato un prodotto così massiccio e incomprensibile da diventare inapprendibile, non manutenibile e alla fine inutilizzabile.

Molto meglio investire gli sforzi in anticipo per creare un prodotto sufficientemente flessibile da poter essere adattato a piacimento, dagli utenti, alle loro esigenze immediate. Se il prodotto è programmabile in una forma portabile e aperta, le estensioni utente possono essere scambiate, confrontate, riviste dallo sviluppatore del prodotto ed eventualmente incorporate nel prodotto principale."

La licenza d'uso della versione di pubblico dominio, nello stile di Walker, è molto esplicita :

This program and all its components are in the public domain. You can do anything you like with it, without attribution or compensation of any kind.

If the above isn't clear enough, that's your problem, not mine.

John Walker

DXFIX

DXFIX è un primo esempio di utilizzo di ATLAST per rendere un programma guidabile dall'esterno.
Scritto da Walker e revisionato la seconda volta da Duff Kurland  nel febbraio del 1991.

DXFIX (Drawing  eXchange  File  Inter Xlator) era un programma che serviva a convertire i file DXF da una versione all'altra per garantire una retro compatibilità dei disegni.
Con l'aggiunta di nuovi oggetti e variabili i DXF creati dalla versione 11 non erano leggibili dalla versione 10 e precedenti.

DXFIX riusciva a convertire in maniera guidata le varie informazioni basandosi su una codifica contenuta in un file di supporto chiamato DXFIX.DXT.
Questo file di traduzione e di regole non era altro un file che conteneva delle istruzioni ATLAST che potevano essere cambiate dall'utente per ottenere DXF particolari.
La presenza e la modificabilità di questo file garantiva che DXFIX potesse essere utilizzato anche per release successive (io l'ho fatto e ha funzionato).

La documentazione che accompagna questo eseguibile illustrava le funzioni e le macro ATLAST per trattare l'articolata struttura del DXF.

la parte iniziale del file DXFIX.DXT con le istruzioni ATLAST


Un altra applicazione aperta e programmabile cosi come desiderava Walker.

CLASSWAR

Ancora un altro esempio di utilizzo di ATLAST. Walker racconta che in quegli anni andavano di moda i linguaggi Object Oriented. Alcuni sw CAD spacciavano di avere al loro interno funzionalità simili ed in particolare il CAD di Integtaph dichiarava di avere un database object oriented.

La cosa sembra irritare parecchio Walker in quanto quella era una palese falsità solo per seguire - a livello di marketing - il trend del momento.

Nasce così la volontà di scrivere un qualcosa davvero Object Oriented. Il plug-in dimostrativo in ADS CLASSWAR, acronimo di "Class Language Application Support System Within AutoCAD. Really!", era presente nella versione di AutoCAD 11.

ClassWar trasformava gli oggetti del database AutoCAD (entità) in oggetti programmabili, che potevano incorporare codice ATLAST ed estensioni ClassWar che implementavano tutti i pilastri dell'orientamento agli oggetti (Astrazione, Incapsulamento, Eredità, Polimorfismo). Consentiva agli utenti e agli sviluppatori di programmare nuovi oggetti con il proprio comportamento.

Il codice e la documentazione è presente su Github (https://github.com/Fourmilab/ClassWar ) solo per lasciare una traccia di questo lavoro di Walker che, comunque, l'Autodesk non implementò mai nel corso degli anni successivi alla sua presentazione.

DIESEL

Anche qui il nome del programma, o meglio una libreria in C (un kernel), inglobabile in qualsiasi programma. è un acronimo: D.I.E.S.E.L. Dumb Interpretively Executed String Expression Language.

Lo scopo di queste funzioni è eseguire operazione con stringhe.
Questa tecnologia è ancora oggi presente in AutoCAD e, essendo un programma di pubblico dominio, è presente in tutti gli altri CAD AutoCAD compatibili che non hanno esitato ad inglobarla nel loro codice.

Le espressioni Diesel le troviamo nelle macro di menù ma sono anche sfruttabili nei Campi Dati.
la finestra del comando CAMPODATI
Sul sito di Walker c'è la pagina che descrive questa libreria e include il link per scaricare i sorgenti : https://www.fourmilab.ch/diesel/

Conclusioni

Ironico e originale. Lui che, visto l'alto numero di idioti che lo contattavano via email, fu costetto a realizzare un form per i contatti in cui - per permettere l'invio - bisogna risolvere una equazione lineare.
Tra l'altro le email più stupide ricevute sono raccolte in una apposita pagina del suo sito con i suoi commenti.

Contavo di conttattarlo, di compilare anche io quel form, per chiedergli un paio di cose... ma non ho fatto in tempo. :-(

Nessun commento:

Posta un commento