Quando gli studenti scoprono i prossimi passi …


È quello che ho appena detto in pochi minuti di chiacchiere, qui ad una conferenza presso la IUL: in realtà io ho una traccia in mente, o meglio, una manciata di argomenti che vorrei tangere in qualche modo, ma non la dico, non la rivelo in un “programma” dichiarato a priori. Uso gli argomenti come delle pedine da giocare, ma non le metto in fila. Le tengo lì, pronte sul tavolo. Poi cerco di far sì che la blogoclasse si muova, più possibile autonomamente. Quando giunge il momento, calo la pedina che mi sembra appropriata. Nei momenti di stanca, mi può capitare di decidere da me quale sia la prossima pedina da giocare, ma di solito è la blogoclasse stessa che me mi dà il pretesto per calarla. Talvolta, può addirittura succedere che siano gli studenti a giocare le pedine che stanno sul mio tavolo! Questi sono i momenti migliori. Ieri ne avete giocate due.

Mvcarelli ieri ha segnalato un video molto famoso, di Michael Wesh, che complementa benissimo i nostri discorsi sul codice. Sono diversi anni che io lo utilizzo, dal 2007 a questa parte. Metto volentieri il link al post di Mvcarelli, invece di udare uno dei miei vecchi link. Nel video si parla anche della codifica XML. La riprenderemo successivamente.

L’altra pedina è stata giocata da Claude a proposito del catalogare e come catalogare. In pratica ha introdotto il tagging. Prendo quindi la pedina che chiamo tagging e la piazzo qui, per ora.


Tre marmellate su uno scaffale: more, prugne e mirtilli. Se non avessi messo delle etichette sui barattoli sarebbe un pasticcio, dovrei andare per tentativi perché sono tutte e tre più o meno blu scuro.

Buona idea quella di mettere le etichette. Continuo a fare marmellate.

Trenta marmellate di cinque tipi su più scaffali, messe tutte alla rinfusa. Dov’è finita quella di rosa canina? Ho fretta … mi arrabbio …

Faccio ordine: raggruppo tutte quelle di more su uno scaffale, poi quella di prugne su un altro e così via. Perfetto, ora non ho più problemi.

continua a leggere …

Non catalogare, organizzare bensì esplorare, scoprire, riconoscere


Oggi, devo andare ad una conferenza e forse poi ne dirò qualcosa. Domani devo andare ad un’altra conferenza e forse poi ne dirò qualcosa. Mercoledì parto per un viaggio che non ho potuto rimandare e tornerò Domenica. Continuerò ad essere reattivo qui ma con qualche ovvio impedimento. Per esempio, salvo inconvenienti, il prossimo incontro online, mercoledì alle 21, sarà condotto da Romina.

Pensando alle vostre reazioni, che ricevo attraverso vari canali e che sono la cosa più importante, trovo una grande varietà, che va dall’entusiasmo allo sconforto. Lo sconforto concerne la sensazione di non acchiappare tutto, il timore di disperdersi: “Devo organizzare, devo catalogare …”.

No no, almeno qui, almeno per questa volta, lasciate perdere, infischiatevene di organizzare e di catalogare. Accedete a questi spazi per “vedere che combinano oggi quei perditempo …” o qualcosa del genere. E invece provate a fare le piccolezze che vi suggeriamo – che a volte appaiono curiosamente difficili. Non scambiate alcuni vostri inevitabili fallimenti per un vostro problema. Come ho scritto in un commento stamani

Tu sapessi quante cose a me non riescono … diciamo che su 10 che ne provo ne azzecco forse 2 alla prima, 5 ce la faccio con un po’ di fatica, 3 proprio non mi riescono, e allora cerco un’escamotage, una via alternativa, e questi iniziali fallimenti si trasformano sempre nelle più feconde occasioni di crescita …

Fate come hanno fatto Gaetano e Claude nei commenti al post precedente, dove si vede che io ieri non ho risolto loro un bel niente!

Allora stamani ho un po’ esplorato, scoprendo che questa faccenda di quale codice HTML sia consentito inserire nei commenti ad un blog WordPress.com è un po’ fumosa.

In primo luogo, pare che l’autore del blog e i commentatori esterni abbiano diritti diversi, come Claude aveva ipotizzato a metà discussione, ma dico questo solo in base al fatto che io ho potuto inserire i titoli e gli altri no.

Inoltre ho trovato che la quantità di tag HTML che si possono inserire nei commenti dipende dal tema adottato nel blog. In questo, sembra, ma non sono sicuro, che possano essere usati i seguenti:

<a href="" title=""> 
<abbr title=""> 
<acronym title=""> 
<b> 
<blockquote cite=""> 
<cite> 
<code> 
<pre> 
<del datetime=""> 
<em> 
<i>
<q cite=""> 
<strike>
<strong> 

Fate delle prove, scrivetemi dei commenti giusto per provare questi tag. Alcuni non li conosco nemmeno io. Cercate voi, provateli qui e spiegateceli a tutti. Provateci tutti. Se trovate che alcuni tag sono stati già descritti, provate con altri. Senza ansia per carità, come in un gioco …

E fate questo anche con qualche blog in blogger, di qualcuno di voi, poi cerchiamo con il contributo di tutti, di mettere un punto fermo su questa faccenda.

Il codice gemmante


Prologo

Questo post continua il filone della paginetta sfrucugnata, che avevamo lasciato nel post del diario della nonna. Vi invito a frugare negli esempi che seguono con la solita tecnica per vedere la sorgente delle pagine html: tasto destro del mouse e Pagina sorgente o HTML, a seconda del tipo di browser.

Anche se ci dilungheremo mostrando alcuni spezzoni di codice, lo scopo non è quello di diventare programmatori. Non fatevi venire l’ansia di voler sapere tutto di HTML, CSS o altro. Noi qui vogliamo familiarizzare ulteriormente con il codice, semplicemente abituarsi a vederlo, senza chiudere l’occhio della mente quando lo sguardo cade su un pezzetto di codice, frammisto al testo. Noi qui vogliamo anche percepire, anzi toccare con mano la caratteristica gemmante del codice, una caratteristica che credo sia propria della lingua, in generale. Sarebbe interessante poter vedere in maniera visiva e dinamica, l’evoluzione dell’insieme delle lingue da diecimila anni a questa parte, contraendo la scala dei tempi a qualche minuto, forse qualcuno l’ha fatto. Assisteremmo a qualcosa di estremamente dinamico, una fantastica proliferazione fiammeggiante di lingue, dialetti e gerghi. Il codice fa parte di questo, credo, solo che evolva appunto in tempi molto più contratti di quelli caratteristici delle lingue parlate.

Il perseguimento di tali obiettivi generali non preclude la possibilità che qualcuno di voi finisca per manipolare effettivamente qualche frammento di codice, in pratica. Qualcuno lo sta già facendo, sulla scorta di esperienze pregresse. Per esempio, avete già visto che con pochi rudimenti di HTML si possono scrivere commenti più ornati ai post dei blog, o anche inserire link attivi. Ma nei vostri stessi blog si possono fare molte altre cose ancora, se si possiede una minima confidenza con il codice, per esempio potete personalizzare ampiamente il loro aspetto grafico, ma non precorriamo i tempi, non abbiamo alcuna fretta. Aggiungo invece che questa agilità che ci proponiamo di acquisire, può tornare molto utile nella vita pratica. Questa blogoclasse è popolata principalmente da insegnanti i quali sono interessati anche, e presumibilmente in modo non trascurabile, all’impiego delle tecnologie nella pratica didattica. Vi sono fra di voi persone che lo stanno già facendo, in maniera anche approfondita. È inevitabile, lavorando con questi strumenti, “sporcarsi le mani”, progressivamente, cambiando oggi una cosa qua, domani una là. Non ci si deve sentire soli, Internet è prodiga di consigli, esperienze, soluzioni, ma non va dimenticata l’eredità di un’esperienza come quella della blogoclasse. Potrà essere molto naturale chiedere ad un ex compagno di blogoclasse un consiglio su un problema che si sospetta lui abbia già affrontato.

C’è poi un aspetto molto interessante. Quando si insegna, si è a contatto con gli studenti, che talvolta possono avere delle competenze o delle capacità incredibili. Ricordo di uno studente che aveva scoperto delle gravi falle in un database di una grande organizzazione, alla quale io appartenevo. Mi disse: “Prof, dica qualcosa a questa gente perché chi ha fatto quel sistema non sa lavorare …”. E non era uno studente di informatica! Queste non sono circostanze da temere, sono colpi di fortuna, che possono essere volti a vantaggio di tutti, insegnante compreso. Io ho imparato molte cose da alcuni miei studenti.

Ultima osservazione, gli esempi qui sotto potrebbero essere svolti in molti altri modi. Il codice si può sempre scrivere in modi differenti, specialmente quando codici diversi si intrecciano in un’unica cosa. Il criterio che ho privilegiato qui è quello della massima semplicità, preferendo i costrutti più semplici e riducendo al massimo il numero di nuovi simboli.

Un testo codificato in HTML

Con tali premesse, partiamo da questa semplicissima pagina. Riporto la sorgente qui sotto per agevolare la lettura del post, anche se potete accedervi direttamente dalla pagina stessa, con il solito metodo. Anzi, vi invito a copiare le sorgenti di questi documenti in file sul vostro disco in modo da provare voi stessi a sperimentare delle varianti, tornando bambini, come si diceva in un commento precedente.

<html>
	<body>
		<h1>Animali</h1>
		<h2>Mammiferi</h2>
		<p>Cane</p>
		<p>Gatto</p>
		<h2>Uccelli</h2>
		<p>Passerotto</p>
		<p>Aquila</p>
	</body>
</html> 

… ornamentato …

Rendiamo ora la pagina più gaia, per esempio colorando un po’ il testo. L’avevate già visto fare nella paginetta sfrucugnata, ecco la versione colorata della nuova pagina. Già che ci siamo, introduciamo un minimo di nomenclatura. I codici HTML, tipo <p> o <h1>, si chiamano elementi o tag. I tag possono avere attributi. Per esempio, nel codice dell’ultimo link che ho scritto

<a href="http://lai.dfc.unifi.it/lab/p2.html">versione colorata della nuova pagina</a>

Abbiamo usato il tag <a> arricchito dall’attributo href al quale abbiamo dato il valore di http://lai.dfc.unifi.it/lab/p2.html. Ricordo, per chi vuole approfondire le meraviglie di HTML, la Scuola W3, che è veramente ottima. Può convenire rifarsi dalla prima pagina, leggendo e sperimentando con gli esercizi proposti, una dopo l’altra, almeno all’inizio.

Ebbene, nella versione colorata della nuova pagina abbiamo arricchito i tag <p>, <h1> e <h2> con l’attributo style, al quale abbiamo assegnato i valori color:red, color:blue e color:green, come si vede nel codice qui sotto:

<html>
	<body>
		<h1 style="color:red">Animali</h1>
		<h2 style="color:green">Mammiferi</h2>
		<p style="color:blue">Cane</p>
		<p style="color:blue">Gatto</p>
		<h2 style="color:green">Uccelli</h2>
		<p style="color:blue">Passerotto</p>
		<p style="color:blue">Aquila</p>
</body>
</html> 

Fin qui non molto di nuovo, rispetto alla paginetta. Siamo contenti di poter colorare il testo e ci rallegriamo di poter fare chissà quante altre cose – basta frugare fra i materiali della Scuola W3. Dobbiamo tuttavia ammettere che fino ad ora è stato facile perché abbiamo lavorato su di un documento molto breve, molto più breve dei documenti che manipoliamo quotidianamente. La prospettiva di editare un testo molto lungo per cambiare il colore di tutti i paragrafi non è molto piacevole. Sì, ci possiamo aiutare con gli automatismi che molti editori forniscono, ma si fa presto a combinare pasticci in un documento lungo e complesso. Ci vorrebbe una magia per poter dire in un colpo solo: “Colorami tutti i paragrafi con l’arancione!” Fortunatamente, questa magia è stata già fatta. Vediamola prima di darle un nome (qui la pagina in rete):

<html>
	<head>
		<style>
			h1{color:red;}
			h2{color:green;}
			p{color:blue;}
		</style>
	</head>
	<body>
		<h1>Animali</h1>	
		<h2>Mammiferi</h2>
		<p>Cane</p>
		<p>Gatto</p>
		<h2>Uccelli</h2>
		<p>Passerotto</p>
		<p>Aquila</p>
	</body>
</html> 

È facile vedere come sia stata attuata la magia invocata. Il testo codificato è stato separato in due parti, una racchiusa fra i tag <head> e </head>, che ho evidenziato mediante lo sfondo grigio, e l’altra fra i tag <body> e </body>. Nella sezione head troviamo tutte le specifiche relative agli ornamenti e nella sezione body troviamo il testo codificato in HTML.

In questo modo, se vogliamo cambiare il colore di tutti i paragrafi del documento, non abbiamo da fare altro che da alterare adeguatamente il codice opportuno nella sezione che descrive le ornamentazioni.

Questo, nel nostro racconto, è il punto nel quale gemma un nuovo codice, quello che si trova fra <head> e </head>. Anzi, occorre essere più precisi, la “buccia” della nuova gemma è costituita dai tag <style> e </style>, evidenziati in giallo, perché la sezione delimitata dal tag <head>, può ospitare anche altre gemme. Accenneremo ad un’altra di queste dopo. Il nuovo codice è appunto nuovo, ha un sintassi diversa anche se si riconosce facilmente la sua origine, dai simboli p, h1, e h2.

Il nuovo codice si chiama CSS (Cascading Style Sheet) e serve a formattare (io ho parlato di “ornare” fin qui) i vari elementi di un testo codificato in HTML (e non solo). La sintassi base di una codifica CSS è molto semplice e si può riassumere così:

selettore {
	una_proprietà:un_valore;
	altra_proprietà:altro_valore;
	eccetera:eccetera
}
altro_selettore {
	eccetera:ecetera;
	}

Anche con il CSS, per chi vuole approfondire c’è la relativa scuola W3.

La gemmazione, nella sostanza è avvenuta, ma può essere perfezionata con un passo ulteriore. È vero che i due codici, HTML e CSS, sono stati completamente separati nell’esempio che abbiamo mostrato, ma continuano a risiedere in uno stesso documento, e come tale anche in uno stesso file. Il passo successivo è breve, eccolo (qui la pagina in rete):

<html>
	<head>
		<link rel="stylesheet" href="p4.css" type="text/css">
	</head>
	<body>
		<h1>Animali</h1>
		<h2>Mammiferi</h2>
		<p>Cane</p>
		<p>Gatto</p>
		<h2>Uccelli</h2>
		<p>Passerotto</p>
		<p>Aquila</p>
	</body>
</html> 

Anche qui c’è un “luogo” per il codice destinato all’ornamentazione, ovvero alla formattazione, ma è stato ridotto ad un mero riferimento, espresso dal tag <link> i cui attributi, ci dicono che il documento è collegato ad un altro che descrive lo stile (stylesheet), che si trova in un file di nome p4.css il quale contiene testo codificato in CSS. Ovviamente, affinché la cosa funzioni, il file p4.css deve esistere, eccolo (qui la pagina in rete):

h1 {color:red;}
h2 {color:green;}
p {color:yellow;}

… dinamizzato …

Senza spingersi troppo in là, può valer la pena di intravedere un’altra gemmazione, che negli ultimi anni ha ampliato molto le potenzialità del Web. Introduciamola questa volta bruscamente, alterando di poco i documenti precedenti:

<html>
	<head>
		<link rel="stylesheet" href="p5.css" type="text/css">
		<script type="text/javascript">
			document.getElementByClass('changeMe').onmouseover.style;
		</script>
	</head>
	<body>
		<h1>Animali</h1>	
		<h2>Mammiferi</h2>
		<p class="ChangeMe">Cane</p>
		<p class="ChangeMe">Gatto</p>
		<h2>Uccelli</h2>
		<p class="ChangeMe">Passerotto</p>
		<p class="ChangeMe">Aquila</p>
	</body>
</html>
h1 {color:red;}
h2 {color:green;}
p.changeMe {color:blue;}
p.changeMe:hover {color:yellow;}

Effettivamente una nuova gemma è spuntata fra i tag <head>;, e la sua “buccia” si chiama <script>. In generale il termine script designa una un insieme di istruzioni, ovvero, se vogliamo, un programma, un frammento di codice da eseguire. Questo è un fatto assai rilevante. Ci stavamo occupando della codifica di un documento ed eventualmente della sua ornamentazione, e ora all’improvviso scopriamo che nel nostro documento è emerso un frammento di codice da eseguire, ma per fare cosa? Provate voi stessi viaggiando con il mouse sulle parole dell’ennesima versione della nostra pagina (e qui la corrispondente pagina CSS in rete).

Visto l’effetto? È così che le pagine web divengono dinamiche. Il codice in questione, nel nostro semplice esempio una sola riga (la riga numero 5), è codice Javascript (qui la scuola W3. Con questo semplice esempio, vi potete rendere conto com’è che, quando caricate nel browser una pagina Web, in realtà non state caricando solo informazioni ma anche funzionalità, e questo ha anche varie altre implicazioni, che forse riprenderemo in qualche discorso successivo.

Il codice mutante


Il blocco della rete dell’Università di Firenze (!) mi impedisce di accedere al server dove si trovano i balocchi della blogoclasse. Forse facevo meglio a pagare un server esterno? Magari americano?

Sta di fatto che ora non posso piazzarci niente di nuovo: aspettando, la mente vaga. Maria Grazia ha aperto la soffitta dei ricordi e, si sa, guardando una cosa se ne vede un’altra. Il codice per l’appunto. E m’è venuto fatto di ripensare a tutte le mutazioni di codice per le quali sono passato in tutti questi anni, quale semplice operatore del settore. E allora poi mi sono rammentato di ciò che avevo scritto l’altro giorno:

Espressioni come quella di Marvi (credo)

Prof ci sono riuscita anch’io con la combinazione dei tasti ctrl+u. Quante cose che si ignorano…,

di Gaetano Non sono mai riuscito a imparare a memoria il linguaggio HTML, e credo che non ci riuscirò mai, ma riesco in buona parte a riconoscerlo, capirlo e ad intervenire per apportare delle piccole modifiche

o di Stefano Non ho imparato bene l’html, riuscivo solo a modificare il codice generato da Fronte Page

mi stuzzicano: cosa vuol dire saper fare qualcosa? Cosa vuol dire essere produttivi in un mondo nel quale strumenti e informazioni proliferano a ritmo esponenziale? Che vuol dire oggi essere “preparati”? Quasi quasi ci torniamo domani …

Io nel codice sono inciampato a 22 anni, mi pare. A fisica di computer non ci aveva parlato nessuno, anche se ormai era già entrato di prepotenza nella ricerca, e internet era già fiorente presso gli ambienti accademici scientifici. Ma avevo scoperto che a matematica qualunque studente poteva esercitarsi in una molto faticosa tenzone con quelle misteriose, affascinanti, grandi macchine. Ecco una di quelle schede ...Scoprii che chiunque poteva sedersi ad una di quelle grosse macchine da scrivere che con frastuono meccanografico sputavano una scheda perforata per ogni riga di codice battuta. Poi il pacco di schede stampate si consegnava all’apposito servizio e il giorno dopo si andava a prendere lo stampato con i risultati, 9 volte su dieci sbagliati per i troppi errori. Fu una grande scuola che mi appassionò e per la quale credo di avere trascurato un esame o due, facendo anche arrabbiare molto un prof potente che me la fece pagare, a suo modo. Ma non mi pento di avere pagato quel prezzo, so di averci guadagnato.

Fu così che conobbi il Fortran, linguaggio nato per il calcolo scientifico, pur essendo grosso modo mio coetaneo, ancora oggi è molto usato, primariamente nel calcolo ad elevate prestazioni sui supercomputer. Infatti successivamente, negli anni 90, lo utilizzai su di un super computer Cray T3E del Cineca, macchine usate per esempio per i calcoli che servono alle previsioni metereologiche.

Il Fortran mi servì già per la tesi. In nessun esame del corso di laurea in fisica ci avevano parlato di computer, ma già nella tesi mi resi conto che sarebbe stato il mio principale strumento di lavoro! Imparai quindi a parlare alle macchine per laurearmi, a furia di tentativi ed errori, consultando alcuni manuali che avevo scovato in un armadio della medicina nucleare di Firenze.

Non avrei mai immaginato di passare la vita saltando da un linguaggio a un altro, nessuno lo avrebbe immaginato a quei tempi. Provo a fare un lista di quelli con i quali ho prodotto lavori di una certa consistenza, alcuni dei quali mi sono valsi proposte di lavoro. Saltate la lista se vi annoiate, al fine del post può essere sufficiente giusto percepirne la varietà. Tendenzialmente ho messo i link alle voci inglesi di Wikipedia. Per avere le versioni italiane, se esistenti, non avete che da cliccare, in ciascuna pagina Wikipedia, su Italiano fra le lingue nella colonna di sinistra.

  • Il Fortran appunto.
  • L’assembly,  linguaggio strettamente imparentato con il tipo di computer che si usa. Si dice di basso livello, come se per chiedere ad uno studente di venire alla cattedra, si dicesse: “Alzati, gira su te stesso di 90 gradi a sinistra, fai un passo, gira su te stesso di 90 gradi a destra, fai 10 passi, ecc. Ne ho usati di due tipi, uno per computer veri e propri e uno per schede di calcolo superveloci da infilare in altri computer.
  •  Il linguaggio macchina. Peggio dell’assembly. In pratica la stessa cosa ma dove le istruzioni sono espresse proprio in 0 e 1, quelle che capisce la CPU del computer. Capita di dover lavorare con questi oggetti quando si deve decifrare quello che un software fa, conoscendo solo i numeri binari che esprimono le istruzioni. Io potevo fare questo guardando il display fatto di 16 lucine rosse, che rappresentavano, ad ogni istante, quello che faceva il computer, ad ogni istante (era proprio questo, in alto a destra si vedono 3 lucine e posso dire che sta eseguendo l’istruzione 1001001000000000, che non so più cosa significhi 😀 ).
  • Il C. Nato negli anni 70, è diventato il più diffuso linguaggio, utilizzato moltissimo per costruire i sistemi operativi. Il fenomeno del software open source, tipo Linux e tutto il resto, galleggia sul C.
  • Un misto dei precedenti: per certe applicazioni era necessario mescolare Fortran, C e assembly.
  • Matlab, inizialmente per risolvere problemi di algebra lineare, oggi è diffusissimo nel mondo matematico ma anche ingegneristico per fare tutto ciò che richiede calcolo numerico. Al contrario dell’assembly è di alto livello, una semplice istruzione come a=b/c può inglobare una quantità di matematica che sta in un libro intero.
  • Interactive Data Language, anche questo un linguaggio matematico di alto livello orientato alla manipolazione delle immagini, piace molto agli astronomi ma anche a chi fa imaging medico.
  • Bash Unix Shell, è un linguaggio con il quale, mettendo insieme comandi del sistema operativo Unix, quindi anche Linux, si costruiscono veri e propri programmi. Uno dei vantaggi del sistema operativo Linux è che in questo modo ci si può fare praticamente tutto quello che si vuole.
  • Ruby. Un linguaggio tuttofare messo in circolazione a metà degli anni 90 da un trentenne giapponese, Yukihiro “Matz” Matsumoto. Con questo linguaggio avevo incollato i vari servizi web (Google Docs, Google Reader, Dropbox …) per la gestione delle blogoclassi degli anni precedenti.
  • L’ambiente R è qualcosa di simile a Matlab ma orientato alle elaborazioni statistiche. Ci ho costruito i sociogrammi nelle blogoclassi dell’anno scorso.
  • Il LaTeX non  è un linguaggio bensì un codice di marcatura, proprio come l’HTML, solo che serve per la preparazione di documenti – PDF ma non solo – di qualità tipografica professionale. È lo standard de facto per la scrittura di documenti scientifici, ma ha anche schemi per scrivere poesie – qui un piccolo esempio. Come filosofia è l’opposto dei word processor più noti, di tipo WYSIWYG (What You See Is What You Get), e si descrive con la formuletta WYSIWYM (What You See Is What You Mean), proprio per il fatto che se necessario si può arrivare a controllare ogni particolare del proprio documento. Se conoscete uno studente di matematica o fisica è molto probabile che preferisca di gran lunga LaTeX a Word.
  • HTML
  • CSS. Serve a controllare gli stili nei documenti HTML ed altri ancora. Vedremo qualcosa.
  • Javascript. Serve a rendere dinamica una pagina HTML. Si tratta di pezzetti di codice appesi al documento HTML che quando vengono caricati dal browser conferiscono funzionalità varie alla pagina. Vedremo qualcosa, forse.
  • MySQL. Sistema di gestione di database basato sul cosiddetto Structured Query Language. I dati della blogoclasse sono conservati e gestiti in un database MySQL, che risiede in un server, quello a cui stasera non si accede, appunto.
  • PHP. Ci si scrive il software che, sul server, consente di controllare il database MySQL (o anche di altro tipo, ce ne sono altri) e di comunicare con il computer richiedente. Ricapitolando un attimo, quando voi vi iscrivete alla blogoclasse, per esempio, e inviate la vostra scheda di iscrizione, succedono, semplificando, le seguenti cose:
    • voi introducete i vostri dati e molte delle vostre azioni sono immediatamente processate, nel vostro computer, da pezzetti di codice scritti in Javascript, per esempio per dire: “Hai scritto un indirizzo di email non valido!”
    • quando avete riempito la scheda, il vostro browser, mettiamo Firefox, spedisce la richiesta con i dati che avete introdotto al server (che stasera non è raggiungibile …)
    • qui un modulo scritto in PHP, utilizzando dei comandi SQL, accede al database MySQL per introdurre i nuovi dati e magari estrarne di altri, poi spedisce eventuali risultati, al minimo una notifica del successo dell’operazione, rinfrescando la pagina che state vedendo sul browser.
  • Ajax. È un insieme di funzioni scritte in Javascript che serve a rendere più fluide, in particolare asincrone le comunicazioni fra client, la macchina dove voi navigate con il vostro browser, e server, la macchina dove risiede il database. In pratica può servire a far sì che, per esempio, quando riempite un lungo modulo e il browser o altro collassa a metà del lavoro, voi non perdiate i dati già introdotti, che così ritroverete quando ripartirete. Questo succede perché con Ajax i dati vengono inviati al server via via e non alla fine quando cliccate Invio, o qualcosa del genere.
  • jQuery. Un insieme di funzioni che semplifica molto la scrittura dei programmi in Javascript. Utilizza un modo molto intelligente di individuare gli elementi HTML presenti nella pagina, per lavorarci. L’ha inventato nel 2006 un giovanotto che si chiama John Resig, ora ventisettenne, già una star del software. Le funzioni jQuery sono usate già nel 50% dei siti più importanti del mondo. Vale a dire, che la metà delle volte che fate click siete serviti da un web server dove c’è dentro un prodotto messo in circolazione cinque anni fa da un ragazzo di 23 anni …
  • Le espressioni regolari. Non è di per se un linguaggio autosufficiente, ma un insieme di regole che consentono di cercare in un testo qualsiasi insieme di caratteri e di farci qualsiasi manipolazione. In pratica è integrato in quasi tutti gli altri linguaggi, e in ognuno di questi in un particolare dialetto! Quindi quando si usano in un comando Unix, o in un istruzione PHP o in un istruzione Javascript – tutte cose molto frequenti – le espressioni regolari cambiano un pochino. Se uno non le conosce un po’,  sembrano un rompicapo assurdo. Per esempio questo può essere un modo per “frugare” dentro a un indirizzo internet:  /^(http:\/\/)?([^\.\/]+)\./ Perché si usano? Perché consentono di risolvere in maniera estremamente concisa complessi problemi di ricerca e manipolazione di testo.

Per inciso, eccetto Matlab e IDL, tutta questa roba è open source: si scarica dalla rete. Documentazione, innumerevoli tutorial e discussioni su tutti i problemi possibili immaginabili sono tutti liberamente accessibili in rete.

Credo che ce ne sia abbastanza per avere un’idea della vitalità e della ricchezza della lingua con la quale si parla alle macchine, cioè del codice. Ma c’è un altro aspetto, più importante, che voglio mettere in luce.

Non immaginerete mica che io sappia tutta questa roba a memoria? A casa mia non ci crederebbe nessuno … Ho una pessima memoria o meglio, ho una memoria spiccatamente affettiva, emozionale (ma forse molti altri …). Vale a dire che mi ricordo se mi emoziono. È raro emozionarsi leggendo un manuale software, eccetto forse in qualche introduzione, dove si scoprono delle nuove idee interessanti. Il resto è mortalmente noioso. Infatti, non leggo mai i manuali ma prendo qualche esempio in rete, lo osservo, provo a farlo rifunzionare cambiando qualcosa,  inizio a fare i cambiamenti che mi interessano, poi costruisco su su, dando un’occhiata ai manuali solo quando serve, piazzando i codici di errore in Google per trovare subito chi e come ha risolto il problema, nove volte su dieci si trova subito. E tutti quelli che scrivono software fanno così.

Ma a pensarci bene, anche il lavoro scientifico in laboratorio, al di là della parte informatica, è così. Anche il lavoro del matematico silenziosamente seduto al suo tavolo, coperto di fogli pieni di formule – computer acceso perché oggi mezza matematica è fatta di software. Questa è tutta gente che con un occhio deve guardare al problema che ha in mano e con l’altro a quello che sta accadendo nel resto del mondo, perché un altro potrebbe avere trovato ieri una soluzione migliore di quella alla quale stai giusto per arrivare oggi, oppure perché qualcuno ha scoperto un marchingegno che ti può far fare cinque passi avanti gratis come nel gioco dell’oca.

Ma a pensarci bene, anche quando parlo con il mio amico elettricista, o il mio amico idraulico, ho la stessa sensazione. Stai finendo di montare il tuo impianto solare, anzi, sei a 2/3 del lavoro ed ecco che compare un nuovo tipo di pannello solare, che ti cambierebbe molto le cose, e devi imparare cosa cambia e come …

Che vuol dire quindi oggi “possedere le competenze”?

Che vuol dire oggi insegnare ad “avere le competenze”?

La neomacchina e il codice


Leggo dal Webster’s Ninth New Collegiate Dictionary:

code: a system of signals or symbols for communication. Ovvero, codice: un sistema di segnali e simboli per la comunicazione, in generale.

Per esempio, il numero di telefono è un codice, inserito nel contesto giusto e nel modo giusto dà vita a un contatto telefonico, mentre se lo vediamo scritto su un muro è solo un numero. Potrebbe anche non sembrarci un numero di telefono, se per esempio fosse scritto in maniera un po’ scompaginata. L’IBAN è un codice, un indirizzo email è un codice. I codici funzionano se vengono inseriti nel contesto giusto e nel modo giusto. Noi usiamo codici per dare istruzioni alle macchine che popolano la nostra vita. Un numero di telefono consente di dare luogo ad una precisa sequenza di accadimenti in una rete telefonica. Il numerino stampato su un biglietto di un parcheggio (caro) di Firenze Parcheggi può essere digitato su di una tastiera che consente di accedere alla toilette (sporca) del parcheggio.

Anche Internet è una macchina, una macchina complicatissima sparpagliata per tutto il pianeta, composta da un gran numero di macchine diverse, computer, telefoni, tablet e tanti altri tipi e ibridi possibili immaginabili. Forse molto presto, oppure già ora, anche frigoferi, forni, magari orologi o parti di indumenti … E queste macchine sono tutte collegate fra loro mediante una miriade di connessioni diverse, realizzate con cavi di rame, fibre ottiche, canali radio, anche questi in una grande varietà.  Come non chiamare macchina tutto ciò? In fin dei conti tutte le macchine sono composte da tante sottomacchine. Internet è solo tanto tanto più complicata ed eccezionalmente sterminata.

A pensarci bene però non è proprio così. Un’automobile, che è innegabilmente una macchina, funziona se c’è un conducente che la guida, ovviamente. Poi può essere parcheggiata e dimenticata per ore, giorni – mesi no perché la batteria si scarica – per essere poi ripresa e usata. Tutte le macchine sono così. Il decespugliatore ora se ne sta buono in cantina, come inutile e stupidamente aggrovigliata composizione di metalli, cavi e plastiche. Tuttavia, quando lo riprenderò in mano, in primavera, lui ripartirà docile, spero.

Internet non è così. Internet funziona sempre. Se all’improvviso cessasse di funzionare, cioè se improvvisamente, tutti questi nostri browser si congelassero e così tutti i cellulari e tutte queste finestre e finestrine divenissero come la finestra che, qui davanti a me dà sul buio della notte, allora penseremmo che sarebbe successo qualcosa di terribile, penseremmo ad una qualche catastrofe planetaria, un conflitto nucleare,  un grande meteorite. In altre parole, noi attribuiamo ad Internet la stessa certezza di esistenza che attribuiamo all’umanità, nel senso che se Internet improvvisamente sparisse, immediatamente paventeremmo un grande pericolo per l’umanità intera, per come noi la conosciamo, per come noi siamo ormai abituati a starci dentro, a questa umanità.

E questo accade perché Internet dà luogo ad un nuovo spazio, che è uno spazio immateriale, ma che gli umani possono colonizzare, esattamente come gli spazi fisici, perché gli umani vivono di materialità ma anche e forse più di immaterialità, generata dai loro pensieri e dai loro sentimenti. Gli umani hanno colonizzato il cyberspazio, substrato immateriale ospitato dal substrato fisico di Internet, come i pensieri popolano la mente, substrato immateriale ospitato dal substrato fisico della rete neuronale del cervello.

Internet quindi non è una macchina e lo è allo stesso tempo. Diciamo che non è solo una macchina, ma qualcosa di più. Molto di più. È una neomacchina. Poiché la neomacchina è nuova, nel senso che non se ne era mai vista una simile prima, essa genera tutta una serie di prospettive nuove. Per esempio presenta molte delle caratteristiche delle cose vive. Parti di essa nascono, crescono, maturano, interagiscono in maniera complessa, spesso solo in parte prevedibile, con altre parti, si indeboliscono, muoiono. Internet è viva ed ha due nature che non possono essere isolate, quella umana e quella della macchina. Se si toglie una di queste due parti dal sistema essa scompare come una bolla di sapone.

Essendo una macchina ci aspettiamo che ad essa si possano comunicare delle cose, come siamo abituati a comporre il numero di telefono all’apparecchio telefonico. Tuttavia, non essendo, allo stesso tempo, una macchina, ci aspettiamo di poterci comunicare come comunichiamo fra di noi, per esempio scrivendo una lettera al direttore di un’organizzazione, o intervenendo a Prima Pagina, Su Radio 3. Ovvero ci aspettiamo di poter scrivere lettere, pronunciare discorsi e così via.

Ma come possiamo fare questo? Come possiamo esprimerci naturalmente attraverso una macchina. Beh, direte come il telefono. Quando si fa una telefonata si instaurano due tipi di comunicazione, la prima banale, con la macchina, che necessita solo l’inserimento del numero di telefono, essa ci risponde attraverso sequenze di toni – libero, occupato … – e, se le cose vanno bene, stabilisce il contatto con la persona che vogliamo chiamare. Da qui in poi parte una comunicazione normale, anche se limitata alla sola voce.

I tecnici chiamano questo modo di comunicare a commutazione di circuito. La macchina si limita a stabilire un contatto, se questo funziona si crea un micromondo virtuale popolato da due persone. La neomacchina è completamente diversa sotto questo aspetto. I tecnici dicono che funziona mediante la commutazione di pacchetto. Con questo sistema l’informazione viene segmentata in tanti piccoli pacchetti che grazie a ciò che è stato “scritto sul loro involucro” trovano autonomamente la loro strada nella rete, anche se questa è sterminata e aggrovigliata. Così, in ogni istante di tempo, lungo un qualsiasi tratto di linea della rete, si trovano una miriade di pacchetti appartenenti a comunicazioni diverse, un pezzo di questo post che sto caricando sui server wordpress, un frammento di voce di una mamma che parla con un figlio dall’altra parte del mondo, una scheggia di un tutorial sulla realizzazione di un calzino e via e via … tutto insieme mescolato in un caotico mostruoso bazar. Come si fa a comunicare a questa cosa senza poter usare un numero di telefono?

Grazie al codice, che è mutato velocemente nel corso del tempo, diversificandosi, stratificandosi e apparentandosi in una varietà di modi con il testo. Le mutazioni del codice stanno avendo luogo ad una velocità crescente, credo in modo esponenziale. Nuovi strati di codice nel giro di pochi mesi dilagano e dopo pochi anni vengono usati da milioni di persone nel mondo.

Ecco perché ci siamo messi a fare dei piccoli esercizi con i quali si può vedere l’HTML. La scrittura in HTML non è certo un obiettivo di un corso del genere, ma qualche semplice esempio di questo tipo di codice è ottimo per dare sostanza ai discorsi che andiamo facendo. Poi, se qualcuno, grazie a questi banali esempi, finisce che riesce a scrivere commenti inserendo parole in grassetto o a confezionare qualche link in un qualsiasi luogo del cyberspazio, tanto di guadagnato.

Ho detto “questo tipo di codice” ma è scorretto. È proprio questo il punto, un documento scritto in HTML non è né testo puro né codice puro, è tutti e due.

Il testo HTML di questa frase dove la parola grassetto è scritta in grassetto è questo:

Il testo HTML di questa frase dove la parola <b>grassetto</b> è scritta in <b>grassetto</b> è questo:

Questa riga è composta da testo, trattandosi di una normalissima frase, ma vi sono degli elementi estranei, <b> e </b>, che non avrei mai incluso in una lettera alla mia nonna. L’insieme di tali elementi costituisce il codice di questo piccolo documento, fatto di una riga sola. Per inciso, il codice che istruisce i browser a rappresentare in grassetto i caratteri è <b> … </b> perché in inglese grassetto si dice bold.

I comandi HTML non concernono solo la rappresentazione del testo ma possono conferirgli funzionalità.

Ecco come si rappresenta il link a questo preciso punto di questa pagina:

<a name="QUESTO_PUNTO">Ecco</a> come si rappresenta il <a href="https://iamarf.org/2011/11/21/la-neomacchina-e-il-codice#QUESTO_PUNTO">link a questo preciso punto</a> di questa pagina:

La parola ecco è circondata dal codice che le assegna il nome QUESTO_PUNTO e la parola link è circondata dal codice che dice dove deve finire chi clicca su di essa.

Così si comunica con la neomacchina: inviando commistioni di testo e di codice.

L’HTML non è l’unico esempio di scrittura codificata. Noi lo usiamo qui perché è molto pertinente, essendo destinato a rappresentare i testi nelle pagine dei browser. Ve ne sono altri e di almeno uno di questi vorrei dire qualcosa, in seguito. Soprattutto, daremo un’occhiata con la stessa semplicità ma con altrettanta attenzione a qualche successiva stratificazione di codice, emersa su HTML. Per ora basta. Meglio magari andare a fare qualche balocco con i link, sulla paginetta sfrucugnata.

Il potere del codice

Google e Twitter scavalcano la censura e ridanno voce agli egiziani
Google e Twitter scavalcano la censura e ridanno voce agli egiziani

Flattr thisEnglish version

Il discorso che avevo fatto sulla colonizzazione di internet era era teso a mettere in luce il potere del codice – codice software. Dicevo:

Qui compare l’argomento fondamentale di Lessig: le leggi che sono scritte per regolamentare la vita nella realtà fisica, si rivelano insufficienti nel cyberspazio, dove la regolamentazione si attua principalmente attraverso il modo con cui esso è costruito, vale a dire attraverso il “codice”.

Occorre dire che il vocabolo “codice” è usato qui nella suo significato tecnologico, vale a dire di codice software: il cyberspazio è regolamentato attraverso il software (il codice) che lo fa funzionare.

Questo potere lo tocchiamo ora con mano seguendo gli eventi nordafricani. Carla Rumor ci racconta in maniera chiara e concisa come Google e Twitter scavalcano la censura e ridanno voce agli egiziani.

Se avete ancora un attimo di tempo, può valer la pena di approfondire il tema leggendo il racconto Scroogled (originale in inglese) di Cory Doctorow, da cui …

Se Google avesse speso quindici miliardi di dollari per prendere i cattivi alla frontiera, ci si poteva scommettere che li avrebbero presi… è che i governi proprio non sono attrezzati per Effettuare Ricerche Appropriate.

If Google had spent $15 billion on a program to catch bad guys at the border, you can bet they would have caught them–governments just aren’t equipped to Do Search Right.

Non è questione di demonizzare il cyberspazio e nemmeno di considerarlo un paradiso. È invece auspicabile uno sforzo congiunto e illuminato per imparare a regolamentare il cyberspazio con un’armonica composizione di legislazione e codice (software), al fine di mettere a frutto le straordinarie proprietà del suo ecosistema e salvaguardare i diritti e la libertà, secondo la Dichiarazione universale dei diritti umani e secondo le costituzioni delle democrazie.

È da qui che passa la gestazione della società della conoscenza ed è da qui che deve necessariamente passare qualsiasi progetto politico che voglia essere veramente proiettato nel futuro.

%d blogger hanno fatto clic su Mi Piace per questo: