Monday, July 23, 2012

How Emacs changed my life

Yukihiro "Matz" Matzumoto spiega How Emacs Changed my Life.

La cambiò anche a me nel 1978, quando imparai ad usarlo all'AI Lab del MIT, lavorando a fianco sulla stessa tastiera della Lisp Machine con Richard Stallman.

Emacs era l'editore che si usava su qualunque terminale del laboratorio, molti dei quali erano collegati con un peculiare meccanismo di video switch al DEC-10 su cui girava il sistema operativo ITS (Incompatible Time Sharing), le cui prerogative di sicurezza erano descritte dal motto "Security by obscurity".

Il video switch era tale che chiunque poteva switchare una delle uscite sul proprio display, e in questo modo poteva vedere quello che qualcun altro stava facendo.

Il principio era quello che in un laboratorio universitario nulla doveva essere segreto.
Naturalmente era buona educazione non usare questo meccanismo per fini malevoli.
Uno degli scopi utili era quello di fare mentoring. Una persona più esperta, per esempio, poteva "osservare da dietro le spalle" quello che faceva un giovane, e suggerirgli modi di migliorare il suo lavoro.

Io lavoravo nel gruppo dell'Actor Model di Carl Hewitt ed ero un convinto fautore della programmazione a oggetti. Poche persone del gruppo si occupavano di implementare qualcosa di utilizzabile con quella metafora di programmazione e al MIT il linguaggio preferito era il Mac Lisp, che non aveva meccanismi di programmazione a oggetti.

Per dimostrare l'utilità della programmazione a oggetti decisi di implementare un sistema grafico a finestre sulla Lisp Machine, che aveva uno dei primi schermi a bitmap ad alta risoluzione.

Con Gianfranco Prini e Carlo Montangero, avevamo fatto una proposta per un linguaggio intermedio per supportare linguaggi ad oggetti, che avevamo chiamato SMOM (Structured Memory Oriented Machine).
Sostituite "Structured Memory Oriented" con "Object Oriented" e capite di cosa si trattava: il termine "object" non era ancora diventato di uso comune.

Comunque, per fare in fretta, partii da una bozza di linguaggio a oggetti su cui Richard Greenblatt stava lavorando, che forniva i costrutti defclass e defmethod, scritti usando il meccanismo di macro del MacLisp. Imparai così costrutti strani come il backquote (`), il comma (,) che annulla il backquote, e il comma-ampersand (,@) per fare list splicing, concetti di meta-programmazione che ancora oggi pochi linguaggi suportano,  il cui utilizzo è mind-boggling, specie se i costrutti si annidano uno dentro l'altro.
Con queste primitive a oggetti scrissi un primo prototipo di sistema a finestre, con una sua gerarchia di classi derivate dalla classe Window, con specializzazioni per Menu, PopupMenu, Scroller, etc.
Per convincere la gente ad usarlo, mancava una killer application.
Siccome tutti usavano Emacs, decisi che avrei datto una versione di Emacs, che lavorasse su finestre e potesse usare il mouse per selezionare, fare apparire menu, spostare pezzi di testo, ecc.

Incominciai a lavorarci e quando fui a buon punto, chiamai Richard Stallman per completare il lavoro.
Ci mettemmo a fianco alla stessa tastiera (anticipando il pair-programming della metodologia di Extreme Programming).
Io scrivevo e lui osservava, ogni tanto dandomi dei consigli.
Per esempio, notava che spesso dovevo cancellare tutti gli spazi per spostare un testo a sinista e lui mi suggerì il comando Emacs apposta per questo: M-\.

Arrivammo al punto in cui bisognava entrare all'interno del codice di Emacs.
Quello sulla Lisp Machine era una versione interamente scritta in Lisp, diversamente da quella usata sugli altri terminali che era scritta in TECO, emulando E, l'editore di Stanford, da cui il nome E-macs, o E macros.
Quindi ci scambiammo di posto e lui cominciò a manipolare il codice di Emacs, usando ovviamente Emacs.
Ogni tanto decideva: "questo codice non deve star qui" e prendeva intere pagine di codice e le spostava da un file all'altro.
Usava Emacs a una velocità impressionante, dato che in pratica la sua mente e Emacs erano un tutt'uno e ciò che lui pensava si trasformava direttamente in emissione di comandi attraverso le sue dita.
Per chi conosce Emacs, questo non sorprende, perché si possono gestire più buffer e spostarsi da uno all'altro con semplice C-x-b.
Poi con C-M-x poteva compilare ed eseguire immediatmente i pezzi di codice che aveva modificato e questi entravano immediatamente in funzione.

Attenzione, le modifiche che effettuava diventavo immediatemante esecutive, per cui cambiava il funzionamento dello stesso editore che stava usando per fare le modifiche.
Capite bene che se avesse commesso un errore, sarebbe stato un disastro, perché avrebbe reso inutilizzabile lo strumento per programmare.

Richard non fece errori e in meno di un paio d'ore Emacs a finestre era in funzione e disponibile per tutti.
Tutti si fa per dire: a quel tempo c'erano solo due Lisp Machine in tutto e la gente se le contendeva.
Spesso bisognava aspettare fino a tarda notte, e infatti questo episodio si svolse di notte, credo ben oltre la mezzanotte.

Questo non era insolito, infatti molti degli hacker del MIT lavoravano fino alle ore piccole, e di frequente verso le 3 qualcuno faceva il giro a chiedere (foodp), e si partiva tutti per andare a China Town a Boston a mangiare cibo cinese in uno dei ristoranti cinesi favoriti. Qualcuno infatti decretò che "You can't get a degree from MIT if you don't learn how to eat with chopsticks".

Pur avendomi aiutato a metter in funzione Emacs a finestre, Richard disse che non lo riteneva molto importante, e che si poteva fare tutto con la tastiera senza bisogno del mouse.
Ne nacque una discussione in cui sostenevo che l'uso del mouse era molto più intuitivo, e si evitava di dover ricordare tutti i comandi, facendo uso del mouse e svolgendo certe operazioni direttamente con il mouse.

Richard decise quindi di sfidarmi. Avremmo dovuto svolgere a turno delle funzioni per verificare chi faceva prima.
Cominciò lui a suggerire di spostare un certo testo da un posto all'altro. Lui lo fece con pochi comandi da tastiera, facendo una search incrementale per andare al posto giusto e poi tornando indietro con C-x-C-x.
Io mi spostai col mouse, arrivando rapidamente nella zona da selezionare, ma poi dovendo rallentare per sceglire il punto preciso di inizio. Poi feci apparire il pop-up con i comandi di Cut/Paste/Copy, mi spostai al punto di arrivo e feci di nuovo riapparire il menu.
1-0 per lui. Poi toccò a me suggerire dei task. Su qualcuno riusci a batterlo, ma in generale vinse lui.

Comunque io rimasi convinto che la strada delle interfacce grafiche sarebbe stata determinante per rendere le macchine più adatte al vasto pubblico dei non informatici.

Poco dopo proseguii, con Maria Simi, a sviluppare un sistema di Form attive, ossia finestre suddivise per tabelle di campi, tra i quali erano indicate delle relazioni, espresse nel linguaggio di descrizione Omega.
Come esempio facemmo vedere come si poteva compilare una fattura, in cui si inserivano le cifre nei campi e venivano calcolati automaticamente i totali.
La soluzione piacque moltissimo, e ricordo che la facemmo vedere a molti rappresentanti di aziende che passavano dal MIT a vedere le ultime novità tecnologiche.
A quei tempi si parlava di Office Automation, come insieme di tecniche e strumenti che avrebbero potuto migliorare lo svolgimento dei compiti di un ufficio.

Per mostrare la nostra realizzazione, decidemmo di fare un video, che mostrasse varie funzioni di Office Automation che si potevano svolgere con la Lisp Machine, tra cui l'editing di testi e la stampa laser ad alta risoluzione, un editore di immagini chiamato Picturesque (fatto da me con un undergrauate), la posta elettronica con Bolio, un'estensione di Emacs il cui nome derivava dalla gelateria Emac&Bolio, che si trovava in Massachusetts Avenue. E poi c'erano le grafiche accattivanti dei clover colorati e animati di Bill Gosper.

Il filmato era a colori e con una colonna sonora fatta con brani di Mozart e con commenti a voce su ciò che si vedeva.
Era il primo video multimediale del tempo (i rari video a quei tempi al massimo erano muti) ed ebbe molto successo, per cui venni chiamato a farlo vedere in varie università, tra cui il Rensselaer Polytechnic.
Mi vennero richieste copie da entrambe le aziende nate per commercializzare la Lisp Machine (Symbolics e LM Inc., che oggi si chiamerebbero startup) che lo presentarono in occasione di vari congressi, come il AAAI a Stanford nel 1980.

Anche il sistema di Active Form si rivelò un precursore. Pochi mesi dopo, Dan Bricklin e Bob Frankston, due studenti di Harvard, a poca distanza da noi, annuciarono lo sviluppo di Visicalc, uno strumento per PC che consentiva di gestire quelli che oggi si chiamano fogli elettronici.
Visicalc aprì la rivoluzione del personal computing, lanciando l'Apple II da giocattolo per hobbyisti a strumento per uso aziendale.

Per chiudere il cerchio, qualche anno dopo feci fare al mio studente Luigi Madella, un clone di Visicalc dentro Emacs, programmato completamente in elisp, il Lisp di Emacs.

L'architettura del sistema a finestre della Lisp Machine non era secondo me molto elegante.
Si basava sull'uso di processi, e in ogni finestra risiedeva un processo distinto.
Uno dei processi si occupava di gestire il mouse, ed operava indipendentemente dagli altri.
L'interazione con il mouse era alquanto complicata: per potere ottenere informazioni dal mouse, occorreva impossessarsene. C'era una funzione per fare eseguire codice all'interno del mouse (process-mouse-run) e una il cui nome era all'incirca seize-mouse, che consentiva di impossessarsi del mouse, per esempio se uno doveva fare un drag&drop.
Il tutto rendeva la programmazione molto complicata, per esempio nella process-mouse-run non si poteva acccedere ai dati dell'applicazione, in quanto girava in un altro processo, e quindi per comunicare col mouse si doveva usare interprocess-communication, in pratica leggere e scrivere da uno stream.
Tutto era poi molto fragile, perché se un'applicazione non rilasciava il mouse rapidamente, il mouse sarebbe rimasto congelato, e nemmeno il tracking dei movimenti avrebbe proseguito.

Pertanto decisi di proporre un'architettura software diversa.
Siccome ero nel gruppo del Message Passing Semantics, l'idea fu semplicemente di fare diventare il mouse un Actor con cui si comunicava attraverso message passing.
Chi voleva leggere la posizione del mouse, poteva inviargli una richiesta.
Il problema era che in molti casi, l'applicazione deve reagire a operazioni dell'utente col mouse, piuttosto che viceversa.
Pertanto proposi che il mouse gestisse una lista di notifiche, in modo da segnalare alle applicazioni quando un evento di loro interesse si era verificato e fosse il mouse a invocare l'applicazione.
Provai a parlare a Carl Hewitt di questa mia idea e ci fu un confronto serratissimo, con lui nettamente contrario. Io ero sbalordito, perché mi pareva che la soluzione fosse proprio l'ideale per una visione ad Actor, e il fatto che lo stesso fautore degli Actor la bocciasse mi pareva un tradimento.
Fu una esperienza molto triste per me e uscii dalla discussione letteralmente in lacrime.

Avevo in pratica inventato il modello a eventi con callback, che divenne popolare qualche tempo dopo con X Window System, sviluppato da Bob Scheifler, un collega del MIT 4 piani più sotto.

PS.
Grazie ai commentatori che hanno segnalato alcune sviste.

Tuesday, July 10, 2012

Internet diritto di fatto

L'HRC dell'Onu è stato abilissimo ad aggirare ogni diatriba scolastica sulla questione se Internet debba essere considerata un diritto umano o no.
Tra coloro che si era espresso negativamente c'è Vint Cerf, proprio uno dei padri di Internet, con qui questa volta mi ero trovato in disaccordo.

L'astuzia del HRC è stata di asserire che:
the Internet can be an important tool for development and for exercising human rights
In altri termini, come commenta Fulvio Sarzana:
la sostanza non cambia: se qualcuno lede il mio diritto di accedere a Internet o di usarla liberamente, io posso sostenere di aver subito la lesione di un diritto dell'uomo ...
 
Quindi la formulazione taglia la testa al toro alle disquisizioni e produce gli stessi effetti pratici che se fosse stato affermato che il libero accesso alle reti di comucazione è un diritto civile fondamentale.

Monday, July 09, 2012

UnicoOnline ahi ahi

Altro caso di bug in un servizio pubblico.
Il software per la compilazione di Unico 2012, fornito dall'Agenzia delle Entrate e sviluppato da Sogei, va in tilt quando si tenta di inviare il file che lui stesso ha prodotto, con questa segnalazione:

IL FILE: C:UNICOONLINEARCTTRGPP50H09G224I_UNI12.UPF NON ESISTE!

A parte che il messaggio stampa malamente il path, perdendosi tutti i '\', il file in realtà esiste.
(Per i non informatici, il carattere '\' nelle stringhe viene usato come escape quindi se lo si vuole stampare, bisogna raddoppiarlo in '\\').

Guardando il log degli errori, ci trovo:

java.lang.NullPointerException
 at finanze.IDAC.gui.DialogCheckBox.getCheckValue(DialogCheckBox.java:34)
 at finanze.IDAC.structUNI.ControllerUNI12.showWizardFor(ControllerUNI12.java:1144)
 at finanze.IDAC.struct.Controller.opViewNodeInContainer(Controller.java:1523)
 at finanze.IDAC.struct.Controller$3.run(Controller.java:1628)
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException

Altro problema è che risulta impossibile spostare i dati su una cartella diversa da quella impostata fissa come:

     C:\UnicoOnline

In rete ci sono diversi utenti che chiedono come fare, ma nessuno ha trovato una soluzione.

Dopo aver cercato a lungo una soluzione, a questo punto erao arrivate le 3 di notte e mi restavano due possibilità:
  1. prendere i dati prodotti dal programma per il modulo F24 e sottometterlo attraverso un servizio di online banking. Questo però risolveva solo il problema contingente del pagamento ma non quello della sottomissione della dichiarazione.
  2. tentare di usare un altro programma per preparare i file per la trasmissione.
Negli anni scorsi si usava un programma chiamato File Internet.
Si noti che da nessuna parte nelle istruzioni di quest'anno per l'utilizzo del servizio, il programma viene mai menzionato. E del resto se ne potrebbe fare a meno e non ho mai capito perché la Sogei abbia usato una soluzione tanto complicata di usare due programmi diversi, uno per creare la dichiarazione e uno per "prepararla per l'invio".
Oltretutto ci sarebbe alquanto da ridire sull'utilizzo di formati crittici e non estendibili, che cambiano ogni anno. Di ogni documento prodotto esistono da 2 a 4 versioni, in una combinazione perversa di formati UPF, PDF, DIZ, F24, FCF, CCF.
Questo comporta che 3 volte su quattro uno dei programmi si lamenti che non riconosce il formato, e vattelapesca a capire quale versione di formato gli serve.

Di file Internet ho la versione usata negli anni scorsi, ma siccome i formati sembrano cambiare ogni anno, ho preferito cercare una versione aggiornata.
Ho provato a cercarlo tra il software sul sito dell'Agenzia delle Entrate, in tutti i modi, ricerca per chiave, per titolo, scorrendo la lista alfabetica di tutti i software.
Alla fine l'ho trovato, non mi ricordo come, attraverso un motore di ricerca esterno, che mi ha portato nel posto giusto del sito dell'Agenzia.
Viene distribuita la versione del 3/7/2012 e quindi mi sono tranquillizzato pensando di aver trovato la soluzione.
Dopo averlo scaricato però l'installazioe falliva, perché il programma di installazione InstallAnywhere (bel nome se lo facesse davvero) si bloccava dicendo che mancava la versione di Java 1.15.20. Nella mia macchina è installata la versione più recente che è la 1.6.
Allora sono andato sul sito dove distribuiscono Java, che una volta era Sun e adesso è Oracle.
Sono dovuto andare alla ricerca delle vecchie versioni in archivio e ho provato a scaricarla.
Per fare il download è però richiesta l'iscrizione. Un tempo ero iscritto alla developer network di Sun
e ho provato a entrare col mio nome. Mi è stato detto che non esisteva e ho dovuto fare una nuova iscrizione.
Dopo aver riempito una form lunghissima, i cui mi chiedeva di tutto, compreso la misura delle mie scarpe, mi è stato detto che una login con quell'indirizzo mail esisteva già.
Allora ho ritentato a entrare con l'indirizzo mail anziché col mio nome e dopo tre tentativi, finalmente ho ritrovato la passoword che usavo 15 anni fa.
Così sono riuscito a installare File Internet e a preparare i file per la trasmissione.
A questo punto sono andato sul sito dell'Agenzia per inviarli e mi sono di nuovo imbattuto con un problema di password.
La password che usavo era scaduta: il solito mantra dei sistemisti che pretendono che gli utentu cambino frequentemente le password. È una sciocchezza di cui ho dibattuto altre volte.
Siccome la dichiarazione dei redditi si fa una volta l'anno, la password la uso solo una volta l'anno e pensare che debba scadere dopo 90 giorni ha poco senso.
Avrebbe più senso se si chiedesse di cambiarla dopo un certo numero di utilizzi, che appunto potrebbe tenere conto di tentativi di accesso illegali.
Comunque, dopo averla cambiata e averci rimesso quella di due anni fa, con buona pace dei sistemisti, sono riuscito a completare la trasmissione della dichiarazione.
Poi ho fatto logout e sono entrato col login di mia madre, per sottomettere anche la sua.
L'operazione di invio richiede di indicare di nuovo la password, ma mi segnala che non ero autorizzato a compiere quell'operazione.
Non capivo il perché, visto che l'avevo fatta poco prima.
Allora ho chiuso e poi riaperto il browser, e questa volta ho potuto concludere l'operazione.

A questo punto erano arrivate le 5 del mattino e mi sono chiesto quante altre persone in Italia avranno avuto la stessa pazienza e determinazione per fare la loro dichiarazione dei redditi online.

Mi spiace molto anche perché il programma è stato sviluppato da Sogei ispirandosi alla mia versione di Unico98, che gli mandai su loro richiesta.
La mia versione non richiedeva alcuna installazione e operava usando una Applet Jave in un browser.
Oggi si potrebbe fare con AJAX.

PS.
In realtà non ci sarebbe stata necessità di fare alcuna sottomissione di F24, perché dalla dichiarazione risultava un credito.
Tuttavia, per un motivo misterioso, nel foglio RX per la compensazione, il programma indicava una cifra decimale.
Se indicavo per la compensazione una cifra arrotodata per eccesso, produceva un F24 per un importo di qualche centesimo negativo, se per difetto, positivo.
Naturalmente era impossibile indicare un importo decimale nei campi per la compensazione, perché tutti gli importi devono essere arritondati all'Euro e il programma non accetta le virgole.
Sapevo anche che gli importi inferiori a 20 Euro non vanno pagati, quindi la logica del comportamento del programma mi sfugge.

Wednesday, July 04, 2012

democrazia liquida

Quello che suggerivo in mio precedente post come una possibile rivoluzione del modo di fare politica diventa possibile attraverso lo strumento di Liquid Feedback.
Lo hano adottato i Pirates Italiani.

In questo articolo si analizzano gli aspetti matematici della raccolta del consenso e distribuione del consenso:

Paolo Boldi, Francesco Bonchi, Carlos Castillo, and Sebastiano Vigna. Viscous democracy for social networks. Commun. ACM, 54:129−137, June 2011.

no ACTA

Giuseppe,
This just in -- the European Parliament, in a landslide vote, has voted down ACTA, with 478 votes against and only 39 in favor! As one of the 380,000 people who called on MEPs to vote "No," (attraverso Acces Now, ndr) congratulations to you and all the other organizations, communities, and Members of Parliament who have fought to defeat this dangerous international treaty.

Chissà se i politici italiani la vorranno capire una volta per tutte  che non devono nemmeno mai pensare a leggi che interferiscono con la libertà di espressione.
Mi piace molto il First Amendment della Costituzione USA, che recita proprio:
Congress shall make no law respecting an establishment of religion, or prohibiting the free exercise thereof; or abridging the freedom of speech, or of the press ...

spending o spanding

Da ciò che trapela dai risultati della Spending Review, Monti sta preparando una riduzione dei dipendenti pubblici attraverso prepensionamenti.

I prepensionamenti sono una soluzione per le imprese private, che spostano i costi dei salari sull'INPS, ma per il pubblico sono solo una partita di giro.

Sui tagli alle spese gonfiate e a quelle inutili, sono perfettamente d'accordo: nel mio ambito lotto tutti i giorni contro questo.
Un caso eclatante riguarda il sistema di verbalizzazione elettronica degli esami, che mi ingegnai di sviluppare totalmente gratis per la mia Università, la quale invece fino a pochi giorni fa ha preferito usare un sistema che è costato intorno ai 500 mila Euro.
Perché abbiano agito cosi un rettore e un Senato Accademico, che pur sapevano che c'era una alternativa migliore e più economica, è qualcosa che sfugge alla mia comprensione.

Uno dei principali problemi delle amministrazioni pubbliche in Italia è la mancanza di una cultura di efficienza e di servizio e poi la deresponsabilizzazione dei dirigenti.
Chi opera nel pubblico ritiene spesso che il suo compito sia insostituibile e pertanto che spetti ad altri coprire le spese, i buchi di bilancio, ecc.
Dovrebbero invece essere soggetti alle stesse responsabilità di una azienda privata rispetto sia ai soci che al codice civile. I dirigenti che non gestiscono in maniera efficiente i propri compiti, vanno cacciati, senza ammortizzatori e senza pensioni d'oro.

Come segnala il Washington Post, un'altra grave difficoltà dell'Italia è la scarsa produttività.
In Italia si lavora molto di più che all'estero in termini di ore/anno: mediamente 1.817 contro le 1.431 della Germania e le 1.553 della Francia.
Ma la produttività è più bassa.
Campioni mondiali di produttività sono gli Stati Uniti con 60,9 dollari all'ora, seguono Germania e Francia sopra quota 55, poi la Svezia a 52 e l'Inghilterra a 47,8. L'Italia è in fondo alla classifica, con 45 dollari di Pil per ogni ora lavorata.

La produttività dipende da tantissimi fattori, uno dei quali sono proprio le inefficienze dei servizi pubblici.
Un altro sono gli scarsi investimenti in tecnologie e innovazione, paradossalmente dovuti proprio al basso costo del lavoro
L'Italia è un paese di vecchi, (Prandelli), in tutti i campi, non solo in quelli di calcio.

Googlopoly

Neanche la deep pocket di M$ rischia di bastare per contrastare lo strapotere di Google.

L'articolo riporta una penetrazione di Bing del 15% e di Google al 66%.

Ma la situazione in Europa è ben diversa:

Italia

Google: 98%
Virgilo: 1%
Bing: 0.7%

Francia

Google: 90.6%
Bing: 3.3%
Yahoo!: 1.6%
Orange: 1.1%

UK
Google: 92%

Quale soglia bisogna superare perché sia considerato un monopolio?

La Commissione UE ha in aperto una procedura contro Google per infrazione delle norme sulla concorrenza, dove rischia una multa di $38 miliardi, ma pare che l'atteggiamento sia di accettare un compromesso.

Si tratterebbe di circa un terzo di quanto previsto nel summit del 28/6/2012 per finanziare la crescita Europea.
Se fossi Monti, ex commissario europeo alla concorrenza, non avrei dubbi.
E li investirei tutti nello stimolare lo sviluppo di servizi innovativi sul Web.