giovedì 19 gennaio 2017

Pensiero Computazionale, Coding e quando proprio non ci siamo.

Facebook  è fondamentalmente un luogo di assoluto cazzeggio, perdonatemi il francesismo.
Ma capita di trovarci cose interessanti, magari attraverso una citazione ed un link che portano ad un'altra citazione ed ad un altro link...
(e qui, in un blog che ha come titolo un intero programma per PDP-11, mi viene in mente l'indirizzamento "Index deferred", quello con la @ davanti al nome del registro tra parentesi: il registro contiene un puntatore al puntatore del dato che ti serve. ma cessiamo di divagare).
E così oggi trovo sulla pagina (diario) di Facebook di Alfonso di Ambrosio un link a questa pagina dell'associazione ROARS che a sua volta contiene una citazione del libro "Coding in Your Classroom, Now!"  di Alessandro Bogliolo -edito da Giunti-, fatto che fa terminare la catena di redirezioni con una CheCavoloDiciWillisException. La citazione (da pagina 27) è questa:

«Coding non è programmazione, ma l’uso didattico di strumenti di programmazione visuale per favorire lo sviluppo del pensiero computazionale. Confondere i due piani provocherebbe danni da una parte e dall’altra»

No, mi dispiace. Non ci siamo.

Non me ne intendo di didattica, forse so condividere bene quello che so. E non mi dispiace farlo, che il sapere è quella ricchezza che puoi donare senza privartene.

Ma perdonate, so cosa vuole dire coding. E coding vuole dire programmare. Per gioco, per vedere una volta nella vita cosa è, ma vuoe dire proprio programmare

E lo so non perché me lo dice un vocabolario. Lo so perché, sia lodato il Grande GNU,  io SONO un programmatore - e non solo sul lavoro. 

È inutile, persino dannoso, inventarsi altri concetti. Scratch non è un giocattolino didattico, è un linguaggio di programmazione Turing Complete, termine tecnico dell'informatica che equivale a dire in due parole "Scratch è un cittadino a pieno diritto del mondo dei linguaggi di programazione". 

Perci favore, non rubatemi e, sopratutto, non rovinatemi un'altra parola del mio mondo dopo hacker

Far giocare a programmare non è insegnare a programmare -è una via lunga-, ma è sia programmazione sia un'attività (ci si augura) divertente che aiuta ad acquisire la forma mentale che serve anche a programmare e principalmente a capire come operano quelle dannate macchine che sono i computer. Ma è il modo di pensare che ti aiuta a formulare soluzioni attuabili ed a fornire una spiegazione chiara e comprensibile di come è fatta, cosa richiede e come si realizza questa soluzione attuabile.

Certo, alcuni bambini esposti al coding saranno più veloci ad esplorare e capire lo strumento di quanto lo sia il docente a spiegare. Alcuni impareranno persino a programmare veramente. Ma lasciate che gli altri "si limitino" ad imparare a risolvere problemi e sopratutto a spiegare le soluzioni ideate e come realizzarle. E scusate se è poco.

Se il pensiero computazionale è una capacità fondamentale del mondo futuro non significa che acquisirlo implichi imparare a programmare un computer, esattamente come imparare a scrivere non significa necessariamente imparare a scrivere romanzi o poesie. Serve a dare uno strumento che nel mondo di oggi serve. Almeno per scrivere un articolastro in un blog che nessuno conosce...

giovedì 7 agosto 2014

Solo con X11 (e con programmi progettati come lo GNU Emacs)

Si, sono monotono. X11 e Emacs.

Ieri sera mi sono venute in mente un paio di cose che dovevo fare nel sorgente che stavo editando quando sono uscito dall'ufficio. 

Sono sceso in biblioteca, mi sono collegato al mio iMac con su GNU/Linux, ho lanciato la VPN verso la rete dell'azienda dove lavoro, mi sono collegato con SSH al mio portatile. Fin qui niente di speciale, anche se ho usato l'opzione -X di ssh, cioè mi sono aperto un tunnel per X11 verso il mio iMac. Ma senza X11 non serve a nulla.

La cosa divertente è che a quel punto ho dato il comando

saint@quigley:~
22:09:59 [1] $ emacsclient --eval '(make-frame-on-display"'$DISPLAY'")'

Il comando emacsclient  permette di utilizzare una sessione esistente di emacs per effettuare dell'editing su file temporanei o, utilizzando il parametro --eval, di fare eseguire delle istruzioni Emas-Lisp ad una istanza di Emacs attiva. Queste cose non le permettono molti programmi.

In particolare la funzione make-frame-on-display viene usata per l'effetto collaterale di creare una nuova finestra (detta frame in Emacs) sul display messo a disposizione da un server X11 differente da quello di default.

In questo modo mi sono ritrovato davanti alla stessa sessione di editing di lavoro che c'era quando sono uscito dall'ufficio, visto che appunto era quello il sorgente su cui avevo appena smesso di lavorare quando ho lasciato l'ufficio . Ho fatto quello che dovevo fare, ho salvato - non si sa mai e poi ho chiuso il collegamento ssh e la VPN.

Senza X11 ci sarei ancora riuscito con un trucco (usare emacsclient per editare un file "dummy" per poi passare al 'buffer' contenente il sorgente che mi interessava), ma con X11 ho potuto sfruttare tutta una serie di cose che non ci sono via terminale a caratteri (set di colori leggibile per l'evidenziazione sintattica, mouse, visualizzazione chiara delle coppie di parentesi...). Senza un programma che si lascia pilotare dall'esterno per creare nuove viste dei documenti presenti in memoria no. 

Avrei dovuto sperare di aver salvato prima di andarmene, modificare il file e poi ricaricarlo una volta tornato al lavoro.

A onor del vero, nella notte l'istanza di Emacs è caduta, forse perché non avevo fatto in modo che si dimenticasse del server remoto. O forse perché mi ostino ad usare versioni non ancora stabili :).

Senza Emacs

domenica 6 luglio 2014

Orologi, Mele e cause, ovvero l'orologio Hilfker del 1944

Ricorderete tutti che Apple accettò di pagare venti milioni di franchi svizzeri per poter usare il look (ma non il comportamento) dell'orologio progettato da Hans Hilfker per le ferrovie federali svizzere (e adottato con qualche modifica anche dalle DB).
Per chi non si ricorda come è fatto l'orologio, ecco una foto presa sempre da Wikipedia:
Il design di questo orologio è sicuramente degno dei musei che lo ospitano a Londra e New York.
Ma cosa veramente particolare di questo orologio è la non-lancetta-dei-secondi. È una lancetta solamente e richiama la forma della paletta del capostazione. Non fa un giro completo in 60 secondi, ma in 58.5 secondi, rimanendo ferma sulle 12 per un secondo e mezzo in attesa del segnale di sincronismo dal master di stazione. Grazie a YouTube potete vedere questo effetto particolare qui senza dovervi recare in Svizzera:

Se il funzionamento di questo orologio vi pare assurdo, guardate per cominciare questi orologi di una stazione italiana (la fonte è sempre Wikipedia):
Qui non c'è nemmeno la lancetta dei secondi: dato che gli orari dei treni sono basati sul minuto intero, non su frazioni di minuto, una vera lancetta dei secondi non serve. Quella dell'orologio di Hilfker serve praticamene a prepararsi all'arrivo del minuto successivo e non a contare i secondi

Ovvio che questo orologio bello e particolare abbia interessato i più geek tra gli appassionati di computer. In fondo il termine hacker arriva dal gruppo ferromodellistico del MIT di Boston, tra i quali i patiti di computer non mancano, e originariamente non era collegato a furti e vandalismi informatici. E questo articolo è proprio nasce proprio dalla passione di molti geek per questo orologio dalle linee bellissime ed il comportamento strano.

Passione che dal 1989 ha portato all'esistenza un programma chiamato "swisswatch" (per Unix e GNU/Linux) il cui aspetto è più o meno questo: 

(lo sfondo sarebbe bianco pieno senza che si veda qualcosa in trasparenza)
Le lancette sono un'po scalettate, ma salvo questo particolare il look è riprodotto fedelmente la lancetta dei secondi fa un giro in 58.5 secondi. A tutt'oggi non mi pare che il MIT, titolare del copyleft, sia mai stato citato in causa per questo programma.

Quando svilupparono per GNU/Linux una libreria chiamata Cairo per permettere di tracciare linee con una qualità superiore grazie a effetti di antialiasing (in termini semplici: non fa le linee oblique scalettate), un ragazzo tedesco scrisse un programma per un orologio usando questa libreria e diede ad ogni utente la possibilità disegnarsi come più preferiva le varie componenti del tema grafico. Ovvio che qualcuno ha pensato pensato a disegnare un tema che imitano l'aspetto dell'orologio Hilfker:
Il tema viene distribuito qui insieme ad altri temi per questo ed altri programmi per GNU/Linux.
Il programma nasce con un "movimento" che imita quello degli orologi al quarzo, con la lancetta che si muove a scatti da una tacca alla successiva e non con movimento continuo. E fa il giro in 60 secondi e non 58.5. Se tutto ciò non vi soddisfa e avete una computer recente, vi basta una semplice modifica al codice del programma per avere un comportamento simile a quello degli orologi delle stazioni svizzere. Questo non garantirà che il regionale per tornare a casa abbia una puntualità elvetica, ma sul desktop può fare piacere. Ma fate attenzione che questa modifica "appesantisce" il programma. Ad esempio questa modifica è troppo pesante per i vecchi iMac lamp.

Dettagli tecnici per chi li vuole

Ecco il pezzetto di codice modificato per avere la lancetta che si muove come nell'orologio delle ferrovie Svizzere (o tedesche, anche le DB usano lo stesso orologio):
    /* take care of the clock-hands anim-vars */
/*  if (fFullSecond < 1.0f) */
/*      iFrames++; */
/*  else */
/*  {*/
        iFrames = 0;
        fLastFullSecond = fCurrentTimeStamp;

        if(g_iSeconds < 58)
            fAngleSecond = (double) g_iSeconds * 6.2f;
        else {
            fAngleSecond = 0.0;
            bAnimateMinute = g_iSeconds == 59;
        }
/*      if(fAngleSecondX < 230.0) */
/*          fAngleSecond =  */
/*      if (fAngleSecond == 360.0f) */
/*          fAngleSecond = 0.0f; */

(file cairo-clock.c, righe dalla 601 alla 618)
Purtroppo questa piattaforma non mi permette di pubblicare qui l'insieme dei sorgenti modificati o una patch. Ma il programma originale è distribuito sotto GNU GPL, quindi potete richiedermelo direttamente.

sabato 5 luglio 2014

Quando l'ufficio ti insegue (ovvero una storia di X11 e trasparenza al network)

Oggi mi è capitato di correggere un bug sul programma che sto sviluppando per lavoro, una applicazione web che staimo sviluppando in Java con Eclipse. Siccome il programma è proprietario e non è mio, ho mascherato ogni informazione relativa. Ma non è di questo che vi volevo parlare.Ho nascosto anche nomi e indirizzi di terzi.

Date un occhiata alla foto. Vi dico subito che nessuna delle tastiere che vedete è in uso, sto usando una cherry con tasti custom che non rientra nell'immagine, ci sono due computer ed un televisore. Non stupisce nessuno che il televisore sopra il portatile sia in multiheading con il portatile. Anche perché lavorare con più di un monitor è una cosa oggidì normalissima quando si programma. 

Una cosa che invece non si vede è che uso la stessa tastiera e lo stesso mouse per ambedue i computer senza usare hardware esterno. Un'altra cosa che non si vede è che il programma con cui leggo la posta (è sullo schermo dell'iMac Lamp) sta girando in realtà sul portatile in basso a sinistra. Sono due cose che accadono grazie alla "trasparenza al network" di X11, l'ambiente grafico di Unix e di GNU/Linux:
ho detto all'iMac (cyrano) che il suo server X11 -quello che offre alle applicazioni "il servizio di visualizzazione"- doveva accettare le richieste di connessione che venivano dal mio portatile (quigley). Poi ho detto al programma che stava girando su quigley "apri una nuova finestra per leggere la posta su cyrano".
Ma a questo punto avrei potuto usare il programma di posta solo con la tastiera ed il mouse di cyrano. Qui ho fatto entrare in campo un altro programmino che gira sul portatile, chiamato x2x. A x2x ho detto che quando "sentiva che il mouse usciva dalla destra del monitor" doveva fare in modo che fosse il server che gira su cyrano - e non quello che gira sul portatile - a venir informato degli spostamenti del mouse e delle pressioni dei tasti sulla tastiera.
Analogamente, quando il programma "sente che il mouse esce dalla parte sinistra dello schermo di cyrano" deve tornare a mandare a quigley sia le informazioni sui movimenti del mouse che quelle sui tasti e pulsanti premuti.
In pratica cyrano presta il suo schermo a quigley.Non è una soluzione priva di problemi, ma i vantaggi superano i problemi, sopratutto quando sai evitare questi ultimi.

Qualche dettaglio tecnico in più (per chi è interessato)

Ecco qui qualche dettaglio tecnico in più. 

Come prima cosa ho modificato il file /etc/X11/xserrverrc su quigley togliendo l'opzione "-nolisten tcp" dalla riga di comando di X. Questa opzione ha senso (molto senso?) se non si intende usare la trasparenza al network in quanto ne impedisce l'uso e quindi ne impedisce usi indesiderati e nocivi. Ma io 
  • ho bisogno della trasparenza al network
  • sono conscio dei rischi ed ho preso precauzioni per evitarli
  • ssh -X non funziona per quello che voglio fare io (vedi sezione "Perché non ho usato ssh" a fine post
  • so cosa faccio.
Fatta questa modifica si riavvia X (se è attivo) e si può usare al trasparenza al network. 

Per fare si che cyrano accettasse le connessioni da quigley avevo due strade (anzi 3, ma una come ho detto non l'ho voluta seguire).
La prima era usare il comando "xhost" nella forma "xhost quigley" che assegna i permessi al solo quigley. MAI, e ripeto MAI, usare la forma "xhost +" che permette la connessione a tutti i computer del pianeta che vedono il vostro. La seconda era ricopiare il file $HOME/.Xauthority da quigley a cyrano CON UN NUOVO nome - non dovete sovrasrcivere quello esistente! - e successivamente si dare su cyrano il comando "xauth merge copiaDiXauthority". Da anni uso il secondo metodo, più sicuro.

A questo punto posso avviare applicazioni su quigley ed avere la visualizzazione su cyrano o usando un'opzione che è comune a molte applicazioni per X (-d o -display o --display) oppure settando oppoprtunamente la variabile d'ambiente $DISPLAY. Alcuni programmi sono particolarmente ben fatti e permettono di scegliere il display su cui aprire una nuova finestra.

Rimane il comando per "condividere mouse e tastiera", ed è il vecchio caro x2x su qugley. La linea di comando usata è stata, data la situazione, "x2x -to cyrano:0 -from :0.0 -east" (il nord è l'alto, est destra, oves sinistra e sud è basso).

Perché non ho usato ssh

Per prima cosa non ho voluto usare "ssh -X",. il più sicuro, in quanto questo permette di avere "in locale" il display grafico di un programma che gira su una macchina "remota". In questo caso ho bisogno di comunicare con il server X di una macchina "remota", la direzione è opposta. 

Per usarlo avrei dovuto usare "ssh -X quigley" su cyrano, quindi dare il comando "echo $DISPLAY" ed usarne l'output nella linea di comando di x2x: "x2x -to `echo $DISPLAY` -from :0.0 -east". E questo usando o la tastiera di cyrano in posizione scomoda o un'ulteriore connessione ssh.


sabato 28 settembre 2013



Ringrazio Francesco Potortì per aver ricordato sulla mailing list "discussioni" di Assoli che oggi è il trentesimo compleanno del progetto GNU.


Se Richard  Stallman non avesse scritto questo articolo e sopratutto dato vita al progetto GNU, il post del 25 Agosto del 1991 da parte di un geniale giovane finlandese non sarebbe diventato quello che è oggi, io sarei contentissimo quando scrivo software proprietario per lavoro, non avrei uno Unix sui miei computer ed in generale il mondo sarebbe ancora peggio di come è adesso. Non ci sarebbero probabilmente nemmeno i blog e molta meno gente potrebbe pubblicare qualcosa in Internet perché i costi sarebbero più elevati e le incompatibilità tra i prodotti dei vari produttori, esattamente come era ai tempi del Commodore 64.

Quando Stallman scrisse quel post, io non conoscevo ancora il VIC20. Ci vollero alcuni anni perché potessi cominciare ad usare i primi prodotti del progetto GNU (GCC, bison, Emacs). Quando nel 1991 Linus Thorvalds cominciò a scrivere il suo kernel Linux, c'erano già tutta una serie di prodotto del progetto GNU che permisero di rendere quel kernel qualcosa di utilizzabile, magari solo da entusiasti con adeguate conoscenze tecniche, ma usabile. È continuando a scrivere il suo kernel in modo che quegli GNU-programmi che Thorvalds ha fatto diventare Linux un prodotto rivoluzionario (nel senso che la rivoluzione la ha fatta, Tanenbaum non aveva tutti i torti).

E oggi sono 30 anni ed un giorno che il progetto GNU è stato avviato. Ed in quei trent'anni ha reso possibile moltissime splendide cose compreso, è perdonate se per me è molto importante, permettermi di lavorare in modo intelligente e divertente anziché frustrante. Anche quando noi potei usare Linux, qualcuno era già stato libero di portare i programmi del progetto GNU sotto il sistema operativo che dovevo usare.

Grazie progetto GNU, grazie Richard M. Stallman per questi 10958 giorni di libertà e per gli altri che verranno. RMS mi aveva detto che era il caso tornassi nuovamente ad impegnarmi per il Software Libero. Riparto da qui.

P.S. : come concilio il Software Libero ed il mio iPad? Non c'è conciliazione, è una delle contraddizioni umane. E per me il mio iPad non è un computer, solo una periferica di input. Non ci programmo, e se mai dovessi programmare una app troverei il modo di renderla libera.

venerdì 20 settembre 2013

iOS7 passi avanti ed indietro

Ho appena fatto l'aggiornamento del mio iPad ad iOS7, principalmente per vedere com'è fatto.

Brutto. Esteticamente è dannatamente brutto.Sembra di essere tornati alla grafica delle pagine web dei primi anni '90 (ad esempio il calendar), delle workstation Unix con 256 colori se non addirittura da Commodore64 (vedi l'icona del Newsstand). Anche l'orologio, che aveva causato rogne con le ferrovie svizzere - il cui orologio è una icona famosissima, è tornato ai livelli della grafica delle workstation Unix con 256 colori disponibili. E l'animazione della comparsa della tastiera è un insulto a OpenGL.

Se si vuole essere minimalisti bisogna esserlo in tutto, non fare i minimalisti sul disegno ed andare a caccia di "angry fruit salads" coi colori.

Quello che è peggio è che questa grafica è così minimale da risultate a volte poco intuitiva, va a capire tu dall'icona che quella è l'applicazione Reminders. E anche quella del Newsstand non è proprio intuitiva, sembrano rappresentare delle scatolette di cereali da prima colazione, disegnate però sullo schermo del C=64.

Posso dire che da questo punto di vista il CEO di Apple ha approvato un'enorme cavolata?

Peccato, perché da una parte il minimalismo poteva essere valido a livello di prestazioni (bitmap più leggere da muovere e memorizzare) ed il sistema in se, chiudendo gli occhi sull'aspetto, è decisamente migliorato, specialmente per quello che riguarda la gestione del passaggio da una applicazione all'altra e la terminaizone di una applicazione attiva, anche se per scoprire come si fa bisogna aver visto il video della demo oppure farsi una ricerca in rete. Poteva prendere un gran bel voto, invece prende una sufficienza striminzita grazie alle ottime idee sul comportamento dell'interfaccia utente, veramente belle.

martedì 13 agosto 2013

Keep It Simple, Stupid!!!!

Alle volte i framework fanno scherzi strani.
Principalmente alla testa del programmatore: a furia di fare le cose COSÌ-COSÀ-COSÌ ripetutamente, la volta che non devi seguire quel pattern e non te ne accorgi ti impantani alla grande. Per mia fortuna mi impantano io è non il mio subconscio e quindi viene fuori la solizione giusta.
No, non è vero che sia il subconscio, mi è apparso il Grande GNU in tutto il suo splendore e mi ha detto con voce tonante "KEEP IT SIMPLE, STUPID! Thou shall not sue what is not required".
Facciamola breve. Nel momento in cui  mi sono reso conto che di tutto l'ambaradan del framework in quel momento ed in quel punto mi bastava un solo pulsantino, la cosa che temevo mi prendesse tanto tempo si è risolta in qualche decina di minuti.

E pensare che la giornata era cominciata bene, per alcune decine di minuti sono stato il miglior programmatore dell'open space. Peccato che non ci fosse nessuno con cui condividere la gioia per questo risultato.