Corsi di Algebra Lineare al MIT dal Prof. Gilbert Strang

L’algebra lineare è una disciplina matematica fondamentale per chiunque debba effettuare calcoli per science computazionali. È un formalismo importante e compatto per esprimere concetti e algoritmi preziosi per problemi di chimica, fisica, astronomia e molto altro.

Ho trovato queste preziose e chiare lezioni di Gilbert Strang, professore al MIT. Le lezioni sono disponibili al pubblico sotto l’iniziativa MIT OpenCourseWare. Sono certo di non dire nulla di eccessivo se ritengo tali iniziative patrimonio intangibile dell’umanità per il loro importante contributo al progresso scientifico e all’educazione.

Ecco la lista delle lezioni (in inglese) dal sito MIT OCW website:

  1. The geometry of linear equations
  2. Elimination with matrices
  3. Multiplication and inverse matrices
  4. Factorization into A=LU
  5. Transposes, permutation, spaces R^n
  6. Column space and nullspace
  7. Solving Ax=0: pivot variables, special solutions
  8. Solving Ax=b: row reduced form R
  9. Independence, basis and dimension
  10. The four fundamental subspaces
  11. Matrix spaces; rank 1; small world graphs
  12. Graphs, networks, incidence matrices
  13. Quiz 1 review
  14. Orthogonal vectors and subspaces
  15. Projections onto subspaces
  16. Projection matrices and least squares
  17. Orthogonal matrices and Gram-Schmidt
  18. Properties of determinants
  19. Determinant formulas and cofactors
  20. Cramer’s rule, inverse matrix, and volume
  21. Eigenvalues and Eigenvectors
  22. Diagonalization and powers of A
  23. Differential equations and exp(At)
  24. Markov matrices; Fourier seriesQuiz 2 review
  25. Symmetric matrices and positive definiteness
  26. Complex matrices; fast Fourier transform
  27. Positive definite matrices and minima
  28. Similar matrices and Jordan form
  29. Singular value decomposition
  30. Linear transformations and their matrices
  31. Change of basis; image compression
  32. Quiz 3 review
  33. Left and right inverses; pseudoinverse
  34. Final course review

Fusione nucleare e fusione del nucleo. Due cose diverse

Come probabilmente leggerete dai giornali, c’e’ una grossa confusione tra due termini che vogliono dire due cose molto diverse: “fusione nucleare” e “fusione del nucleo”. Notare che questa confusione non esiste in inglese, dove i due fenomeni sono chiamati rispettivamente “nuclear fusion” e “core meltdown”.

La fusione nucleare e’ un fenomeno con cui da atomi leggeri si ottengono atomi pesanti. Il nucleo degli atomi e’ fatto di protoni (e neutroni). A seconda del numero di protoni, cambia l’elemento chimico. Un protone: idrogeno. Due protoni: elio e via cosi’. Fusione nucleare e’ quel processo che combina (per esempio) idrogeno per fare elio, un processo pulito ed in pratica non radioattivo che produrrebbe quantita’ sterminate di energia. E’ lo stesso processo che avviene sul sole. Ottenerlo “in casa” risolverebbe molti dei problemi energetici dell’umanita’ senza i problemi del nucleare “tradizionale” (via fissione). E’ al momento in fase di design sperimentale nel progetto ITER, in Francia. Se funziona commercialmente, darebbe veramente energia pulita, sicura e rinnovabile.

La fusione del nucleo e’ invece quello che purtroppo si sta verificando a Fukushima. Durante la reazione di fissione (spaccamento) di nuclei pesanti, si genera calore. Questo calore, in condizioni normali, viene estratto da del refrigerante (acqua) e viene usato per fare elettricita’. Senza il refrigerante, la temperatura puo’ salire a livelli considerevoli, maggiori della temperatura a cui il metallo dei materiali usati passa da solido a liquido. Quando cio’ accade, non solo il supporto meccanico del reattore viene a mancare, ma data l’altissima temperatura e la reattivita’ chimica dei materiali usati, l’acqua presente viene sottratta dell’ossigeno per lasciare idrogeno, che poi puo’ esplodere. Non tutta la radioattivita’ rilasciata e’ pericolosa: dipende dal tempo di decadimento, ovvero il tempo per cui un atomo radioattivo rimane tale. Questo dipende dal tipo di atomo (in verita’ dal tipo di isotopo), ma puo’ andare da pochi secondi o meno, fino ai miliardi di anni.

Upgrade del mio Mac a disco SSD == Performance uniche

Ho recentemente acquistato 240 Gigabytes di potenza, convenientemente impacchettati in una scatoletta SATA 2.5″. È un Other World Computing Mercury Extreme Solid State Hard Drive. Non ha parti mobili, consuma meno batteria ed è veloce. Incredibilmente veloce. Questo coso è così veloce che apre le applicazioni ancora prima di sollevare il dito dal touchpad dopo il click. È anche incredibilmente caro.

Ho un MacBook 13″ unibody primo modello, conosciuto anche come MacBook5,1. Il disco rigido interno è facilmente accessibile, immediatamente a fianco della batteria.

Per effettuare la migrazione dei miei dati, ho avuto bisogno di quanto segue:

  1. Il disco SSD ovviiamente
  2. Un cacciavite piccolo, taglio Phillips
  3. Un cacciavite Torx (sono riuscito anche senza, usando una pinza)
  4. Un case esterno USB-to-SATA.
  5. Carbon Copy Cloner. Il software è gratuito ma considerate una donazione. Li vale.

Avevo due o tre opzioni per effettuare la migrazione. Non ho il disco OSX originale con me al momento (e in ogni caso non voglio effettuare una reinstallazione completa in ogni caso), ma avevo un OSX del mio iMac, che può essere utile come installazione d’emergenza nel caso faccia qualche errore fatale. Ho tuttavia appreso presto che l’iMac install DVD non funziona sul MacBook, anche se consente almeno di effettuare operazioni di base, come partizionare il disco.

Il mio primo tentativo si è basato sull’assunto che fosse necessario copiare fisicamente la partizione, a basso livello. La ragione è che desideravo non effettuare il trasferimento a sistema attivo (cosa che potrebbe dare origine a problemi), e in aggiunta non conosco esattamente come funziona il boot su Mac, quindi assumevo di dover copiare anche il boot record, come ho già fatto a suo tempo con Linux. In aggiunta, spostare dati via USB richiede molto tempo, e trasferire 160 GB mi avrebbe lasciato senza laptop per molto tempo. Di conseguenza, ho sviluppato la seguente strategia:

  1. Smontare il disco originale, e metterlo nel case esterno (confermo, il Mac può fare boot da USB, basta premere “C” al boot con il disco esterno USB alimentato e nessun DVD)
  2. Montare il disco OWC nel laptop. Partizionare in due parti: una della stessa dimensione del disco originale, l’altra con lo spazio rimanente
  3. Installare un sistema OSX minimale nello spazio rimanente, e iniziare a copiare a basso livello dal disco esterno con destinazione l’altra partizione dell’SSD, possibilmente usando la funzionalità restore di “Utility Disco”.
  4. Quando la copia è completata, fare il boot dalla prima partizione, cancellare la seconda partizione, e trovare un modo per allargare la partizione, includendo lo spazio vuoto.

Questo approccio si è dimostrato non fattibile, dal momento che il DVD di OSX che possiedo non mi consente l’installazione. Tecnicamente, avrei potuto effettuare più o meno lo stesso processo usando Utility Disco dal DVD (come già detto, funziona), ma non ho avuto risultati a causa di un errore di Utility Disco che dichiara di non essere in grado di allocare memoria. In aggiunta, non riuscivo più ad effettuare il boot da USB dopo questo evento. La ragione non mi è chiara. Per risolvere, ho ripristinato il disco originale nel laptop, e deciso per una diversa strategia, che si è poi rivelata efficace.

La strategia funzionante

1. Preparare il nuovo disco

Ho fatto il boot dal disco originale, e messo il disco SSD nel case esterno. Era chiaro che avrei dovuto trasferire il sistema “a caldo”, quindi per minimizzare i problemi, ho creato un nuovo account con privilegi di amministratore. Questo consente di non avere file attivi o FileVaults montati, che potrebbe causare problemi.

Ho collegato il disco USB esterno, creato una nuova partizione unica con Utility Disco, esattamente dello stesso formato del mio disco originale. Questa informazione è reperibile da Utility Disco o dalla linea di comando, con “diskutil info /dev/disk0s2″. Dovrebbe risultare Journaled HFS+, un tipo di partizione che consente il boot. NON ABILITATE case-sensitive. Causa molti problemi, in particolare con File Vault (workaround esistono, ma non li ho testati). Non mi piacciono i filesystem case-preserving/case-insensitive, ma purtroppo il Mac funziona così. Controllate inoltre che il tipo di partizionamento sia “GUID_partition_scheme” (dovrebbe esserlo).

2. Copiare il sistema

Una volta formattato, ho avviato Carbon Copy Cloner, specificato come sorgente il mio disco di sistema, la destinazione il disco SSD e selezionato “backup everything”. La documentazione di Carbon Copy Cloner è perfetta. Per maggiori dettagli, è utile leggere la sezione “typical usage cases” dove è disponibile una breve guida per il caso in esame. Fare particolare attenzione che Carbon Copy Cloner riporti la copia sulla partizione destinazione come bootable.

3. Scambiare i dischi

Carbon Copy Cloner copierà l’intero sistema sul disco esterno, richiedendo alcune ore. A copia completata ho spento il computer, ribaltato, e aperto il vano batteria. C’è una piccola vite Phillips che mantiene il disco fermo con una piccola barra di plastica. Ho rimosso la vite e la barra, quindi ruotato l’hard disk verso l’alto e staccato il cavo SATA (con cautela). Ho quindi smontato il disco SSD dal case esterno. Sui lati del disco originale ci sono quattro piccole viti Torx. La barra in plastica di cui sopra serve a tenere il disco fermo appoggiandosi a due di queste viti, mentre le altre due consentono al disco di appoggiarsi e ruotare a cardine per una buona estrazione dal vano batteria. Ho rimosso queste viti per trasferirle sul disco SSD, ma non avendo un cacciavite Torx, ho usato un paio di pinze. Ho quindi ricollegato il cavo SATA al disco SSD, posizionato nel comparto, riavvitato la barra di plastica e la vite Phillips, chiuso il laptop, girato e avviato. Nota Bene: la comune saggezza popolare dice “prima controlla, poi chiudi”, ma in questo caso l’operazione è relativamente semplice e ho preferito quindi rimettere tutto a posto subito. Inoltre, la batteria non è fissa senza il coperchio del vano batteria, che va chiuso in ogni caso (o la batteria va tenuta a parte temporaneamente).

4. Fare boot col nuovo disco

Il sistema si è avviato senza grossi problemi. Non veloce come speravo, ma decisamente più veloce che con il disco originale. La vera differenza è visibile al login e al lancio delle applicazioni. Mi servivano 10-15 secondi per avere il desktop, mentre ora il login è completo dopo solo un paio di secondi.

5. Conclusioni

Ho tenuto il disco originale nel case USB. Posso formattarlo e riutilizzarlo come disco esterno, o posso tenere un backup di sicurezza. Preferisco quest’ultima opzione.

Il batterio all’arsenico. Un caso di cattiva divulgazione scientifica ?

Come probabilmente avrete letto nelle notizie, due giorni fa c’era grande eccitazione per un annuncio curioso da parte della NASA. Una serie di speculazioni cominciarono su come la nuova scoperta avrebbe avuto “impatto sulla ricerca di evidenza per la vita extraterrestre.” Qualcuno ha trovato un pianeta abitabile ? Un messaggio col Seti@HOME? La composizione del brodo primordiale? Il chiacchierio risuona e si amplifica ad ogni passaggio, come in un gioco del telefono, distorcendosi a volte a causa della mancanza di esperienza scientifica di chi porta il messaggio, a volte per introdurre deliberatamente un po’ di “science-fiction”. Ora che l’annuncio è finalmente stato rilasciato, l’emozione principale è delusione, scontentezza.

Vorrei proporre di fare un passo indietro e vedere la cosa con un po’ di distanza. Vediamo i fatti. La vita (dal più piccolo batterio alla più grande balena) generalmente usa sei elementi fondamentali: carbonio, idrogeno, ossigeno, azoto, zolfo e fosforo. Da questi sei elementi principali, nascono la maggior parte delle molecole fondamentali per la vita: DNA, Acetil CoA (un trasportatore), ATP (per contenere energia) e molte altre. Altri elementi sono usati occasionalmente, ma solo in piccole quantità, e sebbene siano fondamentali per la vita, sono veramente un pizzico.

Sul pianeta terra, la vita ha conquistato luoghi considerati “estremi”. Esiste un’intera classe di batteri, chiamata “estremofili” che raccoglie quei batteri che vivono in condizioni altamente anomale. Ci sono batteri che vivono nell’acqua quasi bollente, o in altissime concentrazioni di acido. Le condizioni “estreme” sono, tuttavia, nel giudizio di chi osserva. Per questi batteri, le condizioni in cui vivono sono semplicemente la norma. Per noi umani, vivere in acqua bollente o in acidi velenosi è classificato come “estremo”, ma per quei batteri estremofili, vivere a 25 gradi e a pH neutro è altrettanto estremo. Infatti, sono ben adattati alla loro nicchia, e con recenti tecniche di analisi biologica e sequenziazione, iniziamo ad esplorare un numero sempre maggiore di queste nicchie, scoprendo nuovi batteri (o comunità batteriche) ben adattate a tali condizioni estreme.

C’è un lago in California chiamato Mono Lake. È appropriato considerarlo uno di quei posti estremi: altissima concentrazione di sali e basicità lo rendono probabilmente molto spiacevole per un bagno. I pesci sono d’accordo, e rapidamente si arrendono e muoiono, quindi l’unica cosa che riesce a vivere in quell’acqua sono alcuni piccoli gamberi, alcune alghe e batteri. Per completare l’immagine deliziosa, il lago ha tra le più alte concentrazioni di Arsenico, altamente velenoso per noi, e in genere per tutti gli organismi. Come già detto, qualsiasi batterio che viva in condizioni estreme viene classificato come “estremofilo”. GFAJ-1, il batterio annunciato dalla NASA appartiene di diritto a questa categoria, dato che vive nelle acque del lago Mono.

Questo batterio si è dimostrato veramente resistente come tolleranza all’arsenico. Quando è stato cresciuto in laboratorio, privo di fosforo e in altissime concentrazioni di arsenico, ha deciso di passare a quest ultimo e includerlo nei suoi composti fondamentali, rimpiazzando il fosforo nel DNA, nell’ATP e così via. In pratica, davanti a una mancanza di un elemento assolutamente importante quale è il fosforo, il batterio è come se avesse detto “chi se ne frega, uso l’arsenico, va bene lo stesso”. Questa è una grossa novità, ma non è esattamente rivoluzionaria. Resta in ogni caso una scoperta importante, perchè per la prima volta vediamo usare una strategia così fuori dal comune per continuare a vivere.

In conclusione il contenuto di questa scoperta è:

  1. per la prima volta, abbiamo sperimentalmente osservato un elemento diverso (Arsenico) utilizzato come sostituto di un altro elemento (fosforo) per costruire molecole biologicamente importanti, in-vivo.
  2. non c’è punto 2

Seriamente, è una scoperta importante, ma questo è ciò che dicono i fatti presentati. Niente alieni, niente forme di vita diverse, niente implicazioni per la ricerca spaziale… o forse qualcuna: non dobbiamo essere così categorici nell’assumere il fosforo come fondamentale per la vita, dal momento che può essere rimpiazzato, anche se in condizioni decisamente anomale. Un altro punto importante è rendersi conto di quanto resistente e adattabile sia la vita quando affronta condizioni estreme, e questo aumenta le possibilità che ci sia vita in luoghi inaspettati del nostro sistema solare.

Aspettative eccessive e speranze inattese

L’ annuncio della conferenza alla NASA ha dato origine a una valanga di speculazioni. Forse è stato di proposito, forse è stata follia collettiva prodotta da circostanze non intenzionali. Non so dirlo. Quello che è chiaro è che un buon numero di blog in rete  (1, 2, 3, 4, 5) hanno evidenziato le attese eccessive e l’intensa delusione a seguire. Come conseguenza, questo promuove “affaticamento”. Come ho già evidenziato in un post precedente (in inglese), questo affaticamento alimenta la errata comprensione, il distacco e l’apatia verso nuove scoperte. Vorremmo tutti che la NASA dicesse: “abbiamo avuto una telefonata da ET” ma in serietà, non è così che la scienza procede.

Quindi, qual è il modo corretto? Cosa occorre fare, o come vanno interpretate le notizie scientifiche, e quanto vanno corrette in peso rispetto alla realtà? Nel prossimo post, scriverò alcune regole per la lettura efficace delle notizie scientifiche utilizzando un occhio critico e realistico, direttamente dalla mia esperienza a scrivere articoli scientifici.

Codifica base32 in javascript

Ho avuto la necessità di fare base32 encoding in javascript, e non ho trovato niente di disponibile in rete, quindi ho scritto il codice da solo

var baseenc = baseenc || {};

baseenc.b32encode = function(s) {
 /* encodes a string s to base32 and returns the encoded string */
 var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";

 var parts = [];
 var quanta= Math.floor((s.length / 5));
 var leftover = s.length % 5;

 if (leftover != 0) {
  for (var i = 0; i < (5-leftover); i++) { s += '\x00'; }
  quanta += 1;
 }

 for (i = 0; i < quanta; i++) {
  parts.push(alphabet.charAt(s.charCodeAt(i*5) >> 3));
  parts.push(alphabet.charAt( ((s.charCodeAt(i*5) & 0x07) << 2)
                                   | (s.charCodeAt(i*5+1) >> 6)));
  parts.push(alphabet.charAt( ((s.charCodeAt(i*5+1) & 0x3F) >> 1) ));
  parts.push(alphabet.charAt( ((s.charCodeAt(i*5+1) & 0x01) << 4)
                                   | (s.charCodeAt(i*5+2) >> 4)));
  parts.push(alphabet.charAt( ((s.charCodeAt(i*5+2) & 0x0F) << 1)
                                   | (s.charCodeAt(i*5+3) >> 7)));
  parts.push(alphabet.charAt( ((s.charCodeAt(i*5+3) & 0x7F) >> 2)));
  parts.push(alphabet.charAt( ((s.charCodeAt(i*5+3) & 0x03) << 3)
                                   | (s.charCodeAt(i*5+4) >> 5)));
  parts.push(alphabet.charAt( ((s.charCodeAt(i*5+4) & 0x1F) )));
 }

 var replace = 0;
 if (leftover == 1) replace = 6;
 else if (leftover == 2) replace = 4;
 else if (leftover == 3) replace = 3;
 else if (leftover == 4) replace = 1;

 for (i = 0; i < replace; i++) parts.pop();
 for (i = 0; i < replace; i++) parts.push("=");

 return parts.join("");
}

Rilascio questo codice sotto la molto appropriata WTFPL license. Lascio la decodifica come si dice spesso, come esercizio per il lettore. Seriamente, non necessitavo di decode, quindi non ci ho investito tempo. Spiacente, forse in un altro post.

Il futuro dell’intrattenimento è arrivato

Vi chiedo cortesemente di guardare questo oggetto:

Book

Un libro

Questa tecnologia è con grossa probabilità il futuro dell’intrattenimento. Non necessita di batteria, ha un’ottima risoluzione sia per il testo che per le immagini, si possono mettere facilmente segnalibri o note a lato (anche se a volte non c’è abbastanza posto). Può essere comprato online e in un negozio, nuovo e usato. È relativamente semplice da usare.

Non ha alcuna forma di protezione digitale (Digital Rights Management), non obbliga a leggere la prefazione se non si vuole leggerla, non ci sono interruzioni pubblicitarie, lo si può leggere in Giappone anche se è stato acquistato in Europa, non sparisce da solo se si fa una pausa dal leggerlo, o dopo aver finito di leggerlo. Si può rileggere ogni volta che si vuole senza dover pagare nuovamente, non autorizza l’editore a entrare illegalmente nel tuo appartamento per controllare se sei un buon cittadino (tra l’altro lasciando la porta aperta a chiunque), non occorre acquistare occhiali e lampadine autorizzate per leggerlo. Non chiama e informa l’editore quando lo apri, e si può ancora leggere anche se l’editore va in bancarotta.

È economico, fatto di materiale 100 % riciclabile, e collezionabile per soddisfare tutti i propri bisogni di accumulo. È totalmente compatibile all’indietro, e c’è una immensa collezione di titoli già disponibile per essere utilizzata. Si può prestare o chiedere in prestito, dare ad amici o lasciare ai propri figli e sarà ancora fruibile. Esistono posti in cui si possono ottenere ed utilizzare in modo assolutamente gratuito o scambiato in modalità peer-to-peer senza violare la legge.

Sono fermamente convinto che questa tecnologia sia il futuro dell’intrattenimento e della disseminazione della conoscenza.

Craig Venter riprogramma un batterio da zero

Come avrete probabilmente sentito dalle recenti notizie, Craig Venter, il biologo americano famoso per aver fondato Celera Genomics e sequenziato per primo il genoma umano, ha ottenuto un nuovo, impressionante successo. Ha creato un batterio completamente funzionante, programmando e sintetizzando il suo DNA da zero.

Come un computer ha hardware e software, un batterio ha un set di componenti che eseguono il “software” scritto nel suo DNA per creare proteine. Per un certo periodo, la strategia utilizzata era di mettere piccoli pezzi di DNA addizionale all’interno di genomi esistenti, per aggiungere un nuovo pezzo di codice genetico e sintetizzare così una nuova proteina, tipicamente ad uso farmaceutico. Per esempio, persone che soffrono di diabete devono periodicamente utilizzare l’insulina, una piccola proteina che è prodotta, in soggetti sani, dal pancreas. Se il pancreas non produce insulina, ci si ammala di diabete, ovvero un eccesso di zucchero nel sangue. Una soluzione è quella di iniettare insulina dall’esterno, ma questa proteina deve essere prodotta in qualche modo. La tecnica per crearla si chiama DNA ricombinante: un piccolo frammento di DNA che specifica il codice per l’insulina viene introdotto in un normale batterio (Escherichia coli, lo stesso che vive nell’intestino e ci aiuta a digerire e assimilare i cibi). Il batterio così modificato duplica, e milioni e milioni di cellule figlie iniziano a produrre le proteine specificate dal loro codice genetico, come piccolissimi laboratori chimici. Dal momento che la specifica per l’insulina è stata introdotta nel loro DNA, questi milioni di cellule producono la preziosa proteina, che viene estratta, purificata e venduta come farmaco per il diabete.

Al Craig Venter Institute, hanno fatto un passo avanti. Non hanno aggiunto un piccolo frammento al DNA pre-esistente. Hanno invece preso il DNA di un batterio, buttato via, inserito un nuovo DNA completamente architettato al computer, e lasciato andare. Questo è stato fatto qualche tempo fa, ma questo batterio artificiale era incapace di riprodursi fino a poco tempo fa. Ieri la pubblicazione scientifica è stata finalmente rilasciata su Science: “Creation of a Bacterial Cell Controlled by a Chemically Synthesized Genome“, sottolineando il fatto che l’hardware (il meccanismo che sintetizza proteine) può essere programmato a piacere rimpiazzando il software (il DNA). Nel più sublime esempio di abilità di programmazione, il JCVI ora controlla un computer chimico. Venter percorre i passi di Wohler, dimostrando ancora una volta che la vita non ha niente di magico e misterioso, ma è un sistema che obbedisce le regole della chimica in un affascinante meccanismo in grado di copiarsi e sostenersi da solo, ottenuto dall’ordine e dal caos.

Quali sono le conseguenze di questo risultato? Cosa possiamo fare con un laboratorio chimico che si riproduce e che possiamo programmare a volontà? Non è così semplice dirlo. Questo obbiettivo raggiunto è senza precedenti, e frutterà sicuramente il Nobel a Venter, ma per passare da questo risultato ad usi pratici per l’umanità, la strada è lunga, anche se non molto. Avere questo tipo di controllo permette infinite possibilità, persino difficili da immaginare ora. Possiamo comunque dire:

  1. produzione di proteine ora costose a basso prezzo, similmente all’insulina, migliorando l’efficacia delle terapie.
  2. produzione di specie batteriche capaci di consumare e trasformare sostanze che sono tossiche per l’uomo.
  3. batteri in grado di rilasciare un farmaco nelle vicinanze della malattia. Oggi iniettiamo medicinali nel nostro corpo in maniera aspecifica, per esempio per uccidere il cancro, ma avveleniamo ogni singola cellula del nostro corpo, anche quelle sane. Si potrebbe invece avere una specie batterica capace di individuare e attaccarsi alle cellule cancerose, e rilasciare il farmaco solo su di esse.
  4. produzione di elettricità da fonti biologiche. A partire da legno o zuccheri, si utilizzano batteri per digerire queste sostanze e produrre elettricità in modo pulito, tecnicamente rinnovabile (basta ripiantare alberi) e facile da controllare. Qualcosa di simile è già esistente nei Biosensori, per esempio per valutare la quantità di glucosio nel sangue.
  5. produzione di carburanti da spazzatura o sostanze inquinanti, come plastica usata.
  6. comprendere come un sistema semplice funziona ci permette di comprendere sistemi più complessi.

Certo, qualcuno potrà temere questo impressionante livello di controllo: armi biologiche, superbugs… pericolo!… ma se ci si ferma un attimo a pensare, a leggere un po’ di storia, ci si rende conto che le armi biologiche non sono affatto una invenzione e pericolo recente: durante il medioevo, si lanciavano cadaveri infettati dalla peste oltre le mura del castello per uccidere il nemico attraverso agenti biologici; L’umanità non ha bisogno di creare un potente batterio come arma: esistono già in natura, pronti per essere raccolti e messi su un missile. Avere timore che questa nuova tecnologia possa essere usata da menti aggressive come armi non è un problema: le armi biologiche sono già a disposizione in natura da miliardi di anni. Questa è la ragione per cui accumulo e produzione di armi biologiche è proibita dal 1972 (Biological Weapon Convention) e solamente ricerca a scopo di difesa è consentita.

Infatti, a pensarci bene, comprendere come un batterio funziona è l’unico modo per trovare una protezione efficace, e non solo dalla potenziale follia umana… C’è una minaccia ben più grave di cui preoccuparsi: la pura, cristallina crudeltà della natura, che spazza via migliaia e migliaia di specie senza un briciolo di compassione da 4 miliardi di anni. Nel 1918, l’influenza spagnola uccise il 6% della popolazione umana mondiale di allora. Sei percento. Noi umani non accettiamo questo trattamento violento da parte della natura, e abbiamo trovato un modo per comprendere i suoi meccanismi ed utilizzarli a nostro vantaggio. La nostra vita oggi dura il doppio ed è molto più sicura di quella dei nostri antenati vissuti solo 100 anni fa. Pensate a vivere senza anestesia, senza penicillina, senza antitumorali, senza assistenza medica, e solo con fantastici rimedi come trapanazione del cranio, salassi, o sanguisughe.

Siete così spaventati dal 21esimo secolo? Io no.

Traduzione!

Ho deciso di aggiungere un fattore addizionale alle mie attività di blogging. Ho aggiunto supporto per più linguaggi. D’ora in avanti, ciò che scrivo sarà disponibile (quando tradotto) sia in italiano che in inglese, selezionando la casella in alto a destra nella pagina.

Non rilascerò nuovi post solo quando entrambe le traduzioni saranno disponibili. Continuerò a scrivere in inglese, e tradurrò i vecchi post a partire dall’inizio, finché non mi sincronizzo. Per nessuna ragione ritarderò un post per avere la traduzione in entrambi i linguaggi. La version inglese sarà sempre privilegiata e rilasciata il più presto possibile. Lo sforzo di traduzione sarà svolto nei periodi di bassa ispirazione.

Creare PostScript con Cairo

Sto cercando di creare grafica vettoriale con il canale alfa di trasparenza. Purtroppo, sembra che PostScript, anche Level 3, non supporti la trasparenza. Come conseguenza, per disegnare due oggetti sovrapposti (per esempio, cerchi) in PostScript con la necessità di trasparenza, è necessario qualche trucco:

  • disegnare il primo cerchio, poi il secondo (che si sovrappone e sovrascrive il secondo parzialmente) con colori opportuni, tenendo conto del colore di fondo
  • calcolare l’intersezione delle due aree (analiticamente: vector graphics)
  • calcolare il colore ottenuto dalla mescolanza dei due cerchi nell’area di sovrapposizione, tenendo conto del loro colore, del loro livello di trasparenza, e del colore dello sfondo
  • disegnare la parte di intersezione con il colore ottenuto al passo precedente

Questo ovviamente diventa sempre più complesso man mano che nuove figure si sovrappongono sull’asse z (come una linea, un cerchio, due rettangoli e una spline). Per ciascuno di essi, bisogna considerare come sono sovrapposti, in che ordine, ricavare l’area di sovrapposizione, calcolare il colore opportuno considerando tutti i partecipanti, disegnare le parti nell’ordine corretto. In poche parole, il caos.

Per questa ragione, ho pensato di non reinventare la ruota e di usare Cairo, assumendo che il problema fosse stato risolto e fosse disponibile come comoda libreria. Dopo un po’ di esperimenti, mi sono invece reso conto che anche Cairo si arrende durante il rendering di PostScript con trasparenza. Per esempio, questo codice produce cerchi senza trasparenza (alpha = 1.0), il che crea un file PostScript totalmente vettoriale

int main (int argc, char *argv[]) {
        cairo_surface_t *surface;
        cairo_t *cr;
        char *filename = "image.ps";

        surface = (cairo_surface_t *)cairo_ps_surface_create (filename, 80.0, 80.0);
        cr = cairo_create (surface);

        cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 1.0);
        cairo_set_line_width (cr, 1.0);
        cairo_set_fill_rule (cr, CAIRO_FILL_RULE_WINDING);

        cairo_arc(cr, 20.0, 20.0, 10.0, 0.0, 2*M_PI);
        cairo_fill(cr);
        cairo_stroke (cr);

        cairo_set_source_rgba (cr, 0.0, 0.0, 1.0, 1.0);
        cairo_arc(cr, 30.0, 20.0, 10.0, 0.0, 2*M_PI);
        cairo_fill(cr);
        cairo_stroke (cr);

        cairo_set_source_rgba (cr, 0.0, 1.0, 0.0, 1.0);
        cairo_arc(cr, 25.0, 28.6, 10.0, 0.0, 2*M_PI);
        cairo_fill(cr);
        cairo_stroke (cr);

        cairo_destroy (cr);
        cairo_surface_destroy (surface);

        return 0;
}

Tuttavia, rimpiazzando

cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 1.0);

con

cairo_set_source_rgba (cr, 1.0, 0.0, 0.0, 0.5);

e di conseguenza abilitando la necessità di canale alfa per la trasparenza, il PostScript finale contiene una immagine raster, non una vettoriale. Renderizzando con il backend PDF, l’immagine invece contiene grafica vettoriale con trasparenza. Non conosco il formato PDF nel dettaglio, ma sembra che questo indichi supporto nativo per l’alfa blending.

Questa immagine mostra i tre casi: da sinistra a destra PostScript backend senza alpha blending, PostScript backend con alpha blending, e PDF backend con alpha blending.

Rendering with different alpha blending levels and backend renderers

L’output PDF si ottiene cambiando

surface = (cairo_surface_t *)cairo_ps_surface_create (filename, 80.0, 80.0);

con

surface = (cairo_surface_t *)cairo_pdf_surface_create (filename, 80.0, 80.0);

e naturalmente cambiando il nome file in modo appropriato. Nota a parte, ho dovuto convertire entrambe le immagini PostScript images a PDF con ps2pdf prima di visualizzarle: a causa di problemi sul mio Mac non riesco ad aprire file PostScript direttamente (che sono convertiti a PDF da Anteprima.app in ogni caso). Ciò tuttavia non cambia la conclusione, che è anche confermata aprendo il file PostScript con un editor di testo.

La bassa qualità dell’immagine raster nel PostScript con alpha blending è evidente. Apparentemente Cairo crea quello che sembra una immagine JPEG, e quindi la include nel PostScript via DataSource (vedi PostScript reference manual, Sezione 4.10).

Concludendo, da quello che ho potuto sperimentare Cairo non è in grado di produrre una immagine PostScript puramente vettoriale con alfa blending. Deve passare a una rappresentazione raster, perdendo tutti i vantaggi di una rappresentazione vettoriale.

Nonostante ciò, penso che Cairo sia una libreria molto potente e ben fatta per creare grafica vettoriale via codice. Un applauso agli sviluppatori!

Orologio geologico ed evoluzione

Oggi guardavo con interesse questa pagina e in particolare l’orologio geologico

geological clock plot

Naturalmente, c’è incertezza sul periodo di ogni evento, ma assumendo questi valori come più o meno esatti è interessante osservare come siano serviti solo 500 milioni di anni per andare da un evento altamente distruttivo quale è stato la formazione della Luna (che pare sia avvenuta in seguito a un impatto) alla prima “vita primordiale” in grado di replicarsi e migliorarsi, decisamente qualcosa di complesso.

Solamente altri 500 milioni di anni sono necessari per evolvere la fotosintesi, un altro processo alquanto complicato. Avviata la fotosintesi, sono serviti circa 2 miliardi di anni per raggiungere un livello di ossigeno non trascurabile (a testimonianza della diffusione della vita sulla Terra) e per vedere i Procarioti collaborare e creare le prime cellule Eucariote: 2 miliardi di anni di pura evoluzione Procariota, da vita primordiale a qualcosa di sufficientemente complesso per creare un organismo superiore. Un’immensa quantità di tempo, in particolare considerando che sono servite solo alcune migliaia di anni affinché una nuova specie di Lactobacillus, il Bulgaricus, si specializzasse per fermentare il latte (vedi anche qui), e che molti batteri sviluppino resistenza agli antibiotici in un tempo molto breve, dando origine a una competizione tra uomo e patogeni, o meglio tra uomo ed evoluzione.

Ciò appare incredibile, e alquanto sorprendente. La nascita di un meccanismo complesso quale la fotosintesi o la generazione di vita autoreplicante ha richiesto meno di un terzo del tempo per il passaggio vita procariote/vita eucariote, un periodo durante il quale un numero incredibile di mutazioni, trasferimenti laterali di materiale genetico, riduzioni e riarrangiamenti sono avvenuti nel codice genetico.

A seguire, l’aggregazione di cellule eucariote in organismi multicellulari ha richiesto 700 milioni di anni. Dopo altri 800 milioni, compaiono i primi animali, e in 300 milioni di anni abbiamo l’esplosione Cambriana. Da questo momento, tutto accelera a velocità sorprendente. Nei rimanenti 600 milioni di anni abbiamo piante, insetti, rettili, mammiferi, e l’uomo.