colorChain

Ecco la mia prima DApp: colorChain. Per realizzarla ho usato Meteorweb3.js e le API Etherscan; colorChain è una lista di cards colorate che rappresentano i cambiamenti di stato (colore) di uno smart contract in esecuzione sulla rete di test Ethereum (Ropsten Test Net) e permette la selezione di un nuovo colore da aggiungere alla lista; è solo il primo passo, ma contiene tutti gli ingredienti di base per realizzare la prossima generazione di applicazioni serverless, decentralizzate ed instoppabili :)

colorChain funziona sulla test net con Chrome e MetaMask o con il Mist browser, non è priva di bug e va intesa come PoC quindi la regola generica per questa release è che se qualcosa non dovesse funzionare… ricaricare la DApp.

2017 is the year when the ethereum conversation changes from being about the price of ETH, to “have you used the latest DApp?”
— PB

The DAO Hack

Si conclude così (-66%) la mia impulsiva partecipazione (e altrettanto impulsivo bail out) al più finanziato e discusso progetto di crowdfounding della storia, ($150 milioni) il DAO – Decentralized Autonomous Organization.

Già da tempo, un pò per lavoro ed un pò per cultura personale, seguo con grande interesse il fermento nel campo del fin-tech, in particolare Bitcoin e blockchain. Per toccare con mano l’inarrestabile evoluzione della sharing economy ed in particolare la rivoluzione in atto nel mondo della finanza ho voluto testare varie piattaforme di trading, di exchange e di crowdfounding; poco meno di due mesi fa poi, ho scoperto Ethereum e di conseguenza il DAO, la next-generation organisation that will change the way we create products and share profit.

Lo scopo di questo post è tener traccia – in uno dei miei soliti monologhi – della mia partecipazione ad un progetto avveniristico, globale, aperto e democratico, colpito a pochi giorni dalla nascita da un hack milionario al quale è seguito un contro-hack da film di fantascienza. Quello che mi ha spinto a partecipare è stato sia il meccanismo di generazione delle shares – sotto forma di smart contracts – sia (più importante) il manifesto del DAO: trasparenza, democrazia, decentralizzazione, non-esclusione, partecipazione volontaria e diritto all’anonimato, resi possibili dal fatto che il software – esattamente per come è scritto  – rappresenti una nuova forma di legge. Una legge comprensibile sia agli esseri umani che ai computers e per mezzo del quale definire, verificare ed eseguire contratti, regole e modalità di interazione tra individui, organizzazioni e smart objects.

The DAO consists of the sum of those holding the DAO’s representative tokens.

Questo nuovo tipo di contratto non può essere impugnato e discusso nei tribunali, le leggi che lo regolano non possono essere interpretate, è sempre uguale e sempre vero per tutti (è deterministico) e risiede sulla blockchain. Per questo ha caratteristiche uniche e impossibili da immaginare solo 10 anni fa: è immutabile, instoppabile e incensurabile. Non c’è intervento umano che possa cambiare lo stato del contratto, salvato in milioni di copie,  pubblico e decentralizzato, il cui risultato è sempre certo e tanto più indelebile quanto più passa il tempo.

Stiamo già vivendo la rivoluzione della sharing economy. Siamo sempre più connessi, dipendiamo sempre di più da ciò che Internet rende possibile in termini di servizi, comunicazione, finanza personale. Gli oggetti di uso comune (auto, droni, case, treni) acquisiranno sempre più autonomia, potranno comunicare tra loro e sfruttare dati aggregati da altri servizi per rendere il nostro mondo – finalmente – un po più equo, privo di intermediari e Big Co. Tutto questo però necessita di una Internet of Money, un sistema sicuro, anonimo, trasparente e decentralizzato che possa abilitare e garantire lo scambio di valuta e valore.

Money is simply the latest frontier for the Internet.

Bitcoin e la sua blockchain ($10.45B di capitalizzazione) sono in pole position per abilitare i prossimi 4 miliardi di non e under bancarizzati a partecipare a questo nuovo mondo;  Ethereum è più giovane ($1B di capitalizzazione), e a differenza di Bitcoin le transazioni non sono limitate al trasferimento di valore da A e B, ma servono anche a pagare l’esecuzione di codice e variazioni di dati in memoria sulla blockchain. Ethereum è un progetto open source mantenuto e sviluppato da una larghissima community che ha dimostrato – proprio in questi giorni – grande coesione, coordinazione e creatività.

Regolamentare tutto questo in termini giuridici e di diritto è una delle sfide più impellenti, oltre a quello di garantire la sicurezza dei sistemi decentralizzati; qualcuno anni fa mi disse che la professione del futuro sarebbe stata l’avvocato. Credo proprio avesse ragione.

a webcam toy

webcamExtruder
dd01
dd03
extruded PlaneGeometry. made with Three.js

color_imageLo ammetto, Three.js mi ha catturato.  In passato ho investigato nel ‘campo’ dell’estrusione con Processing ed è stato abbastanza semplice visto che tra le API figura un comodo metodo brightness(x,y); in  Three invece non c’è un metodo del genere, anche perchè leggere le componenti RGBA di un’immagine  non è il mestiere di un framework nato per fare 3D nel browser. Si tratta invece di usare un tag <canvas/>  – una regione 2D  disegnabile parametricamente … ma Three è scritto in JavaScript, quindi si possono usare insieme? Si possono, anzi di devono! Non è così immediato come con Processing e bisogna fare un pò di ricerca ma il risultato – in termini di performances – vale lo sbattimento, ed è solo l’inizio. Si prende una qualsiasi immagine, la si copia in un canvas, del canvas si ciclano le coordinate (x,y) per leggere (e memorizzare) il colore (RGBA) del singolo pixel, si converte il valore esadecimale in luminosità (range 0-255) e si usa questo valore per dare profondità ad un grid mesh modificando la componente z dei singoli vettori.

WebGL demo: pixel brightness extrusion

Fatto qualche test mi son detto: ma anche dalla webcam posso catturare un frame, copiarlo in un canvas, esaminarne la luminosità, eccetera-eccetera-eccetera…

WebGL demo: webcam extruder

Three.js

095707
G_dof_foggyScene

FilmFX | Nebbia + profondità di Campo ( DOF)
Mouse wheel per lo zoom, mouse click + drag per orbitare.

Seguiranno dettagli, intanto fatemi dire che anche se sto soltando grattandone la superficie, sono estremamente soddisfatto dei primi passi con Three.js e sono altrettanto entusiasta per la semplicità con la quale si possono ottenere effetti con risoluzione e framerates altissimi (il grosso della lavoro lo fa la GPU). Ora si tratta di aggiungere un pò di uteriore realismo con physijs o con cannon.

One of the great things about WebGL is that you don’t need to learn a whole new application platform to create 3D; the platform is the web browser.
— Tony Parisi

3dpathExtrusionSpline (the black thin line) extrusion.

WordPress 3.8.x

Eccomi qui, ci sono voluti un pò di giorni per fare il porting – manuale – di tutti i post dal 2006  ad oggi, sistemare le didascalie, le citazioni, le immagini. Porting manuale? La versione 1.5.2 su cui questo blog ha girato per otto anni non prevedeva la comoda funzione di export/import dei posts… quindi copia-incolla, spingere tasti.

E’ stato bello intraprendere questo viaggio a ritroso nel tempo e rileggere tutti i miei monologhi su jQuery o sulle estrusioni 3D basate sul tempo, sulla malapolitica italiana, sul computational design, sui web standards e sulla user experience e vedere come durante questo lungo viaggio siano cambiati i miei interessi, i miei punti di vista, di come e quanto io sia cresciuto.

Negli ultimi 17 mesi poi, molto è cambiato anche sul profilo professionale, ma per questo c’è la pagina apposita quindi non mi resta che augurarmi che questo blog possa continuare a raccontare le mie passioni e tracciare i miei progressi. Benvenuto 3.8!

H7N9: not If but When

Updates alla fine del post. Ultimo aggiornamento 17 maggio 2014.

dc6c405ee8
Influenzavirus visualization. Made with Processing.

Era il primo aprile quando su Twitter ho scoperto per caso che in Cina orientale, già dai primi di febbraio si segnalavano ricoveri e decessi dovuti ad una nuova forma atipica di polmonite virale aviaria (A H7N9). Da allora seguo quotidianamente l’evolversi degli eventi. @gcmingati

#H7N9 in China: These are the first-ever cases of H7N9 infection in humans. No indication so far of human-to-human transmission. #flu
— World Health Organization @WHO

Siamo al 7 maggio; in questo periodo tra Cina e Taiwan si sono verificati 130 casi confermati, di cui 31 decessi ed almeno 43 casi di pieno recupero.

Dal 7 maggio nessun nuovo caso. Nel tentativo di trovare la sorgente – ancora non identificata – e contenere i focolai di questa nuova infezione, si è pensato bene di chiudere tutti i mercati di polli vivi del paese; considerando anche l’approssimarsi della stagione estiva che certo non è idonea alla diffusione dei virus influenzali, la cosa ha temporaneamente funzionato. Tutti ricordiamo che nel 2003, ottocento persone persero la vita ammalandosi di influenza SARS coronavirus (SARS-CoV).

Dal 12 maggio però si è iniziato a riparlare di ricoveri dovuti ad un altro SARS-like virus negli Emirati Arabi (altri casi segnalati già a settembre 2012). Il nome dato a questo nuovo coronavirus è MERS-CoV (Middle East Respiratory Syndrome – CoronaVirus); ma perchè la comunità scientifica è così preoccupata e perchè il titolo di questo post è ‘non Se ma Quando’?

Questi sono virus con caratteristiche uniche e tra i più pericolosi che abbiamo mai avuto la sfortuna di dover combattere; sintomi quali febbre molto alta, polmoniti e complicazioni multi-organo sono piuttosto comuni, spesso risultanti da una “cytokine storm” (una risposta immunitaria sproporzionata e incontrollata verso un agente patogeno); un’altra caratteristica osservata in alcuni casi è la totale asintomaticità. Nessuna risposta immunitaria e invisibilità totale ai test serodiagnostici utili alla sua identificazione; si stima che in Cina i casi lievi (senza necessità di ricovero e quindi non rilevati) siano stati di alcune centinaia, superiori ai 400. Insomma ne sappiamo davvero poco, troppo poco.

W/ unprecedented numbers and densities of humans and other mammals, #H7N9 has many more chances to roll the dice than strains in past eras.
— A biologist ‏@influenza_bio

Effettivamente appare così bene adattato ai mammiferi da essere quasi perfettamente trasmissibile (ed in maniera sostenuta) tra esseri umani. Quando (non se) questo avverrà l’umanità potrebbe trovarsi di fronte ad una situazione apocalittica perchè basti considerare che nel 1918, il virus della cosidetta spagnola (coronavirus H1N1 probabilmente trasmesso dagli uccelli ai maiali e da questi ultimi all’uomo) aveva un tasso di mortalità del 1%; questi nuovi coronavirus invece hanno dimostrato di potersi avvicinare al 50% e aggiungerei che nel 1918 la popolazione globale era di poco inferiore ai due miliardi e mezzo e la velocità massima teoricamente raggiungibile su rotaia era inferiore ai 100Km/h. Oggi siamo più di sette miliardi e ci spostiamo facilmente ad otto volte la velocità del 1918. E con noi i virus.

Update 29 maggio 2013
Cinque nuovi casi certi di MERS in Saudi Arabia, tre già deceduti. Alcuni recentissimi studi dimostrano inoltre che l’incubazione potrebbe essere superiore ai 12 giorni, diversamente da quanto precedentemente stabilito; e c’è di più in merito alla regione. Nel prossimo mese di luglio, precisamente l’8 inizia il Ramadan e ci si aspetta un afflusso di 2 milioni di pellegrini alla Mecca oltre ad un milione di turisti. Grosse chances per i virus, in un luogo dove sembrano attivi diversi focolai e dove probabilmente i casi identificati o anche solo comunicati al world health organization sono solo una frazione di quelli reali.

The novel coronavirus is not a problem that any single affected country can keep to itself or manage all by itself. The novel coronavirus is a threat to the entire world. As the Chair of committee A succinctly stated: this virus is something that can kill us.
— Margaret Chan, World Health Organization

Update 4 giugno 2013
Con tutta l’atenzione che ho dedicato alla faccenda, mi sembra il minimo che in Italia ci siano 3 casi certi di MERS coronavirus. Sono tutti a Firenze; l’index case è un paziente giordano che ha trascorso nel suo paese d’orgine gli ultimi 40gg dove ha contratto il virus e lo ha trasmesso alla sua nipotina e ad un collega di lavoro (lavora in un albergo). Il Ministero della Salute comunica che i 45 contatti del paziente sono costantemente monitorati. Il mio biologist di fiducia twitta il seguente set di possibilità, sui casi italiani:

Have 3 possibilities: 1) many false pos tests of #MERS #coronavirus in Italy, 2) tests are right but outbreak dies out, 3) start of epidemic
— A biologist @influenza_bio

Update 16 ottobre 2013
La stagione invernale è alle porte dell’emisfero boreale e nella provincia dello Zhejiang ecco il primo caso di H7N9 dallo scorso agosto. L’attenzione tornerà a breve molto forte, probabilmente ci saranno altri contagi. Twitter come al solito è lo strumento col quale aggiornarsi.

Update 29 ottobre 2013
La Cina, con un comunicato ufficiale afferma di aver sviluppato un primo vaccino contro H7N9 ; certamente un primo passo ma il vaccino non è stato ancora mai testato sugli esseri umani e sopratutto in caso di pandemia non sarà disponibile per tutti: se funzionasse – il vaccino è prodotto sulla base del materiale genetico estratto dalla faringe di un caso dell’aprile scorso – la produzione non arriverebbe a superare le 700 milioni di dosi.

Update 12 dicembre 2013
Due casi accertati in Hong Kong e la certezza che il virus stia circolando in Cina. Analisi condotte a campione nei wet markets confermano la positività alla influenza aviaria – sempre asintomatica per i volatili – e una sconfortante ma altrettanto temuta conferma:

Influenza A(H7N9) virus gains neuraminidase inhibitor resistance without loss of in vivo virulence or transmissibility.
Nature

H7N9 è mutato ed è resistente al Tamiflu, l’unico farmaco in grado di contrastarlo. Iniziano ad essere uccelli per diabetici e cioè @zzi amari.

Update 22 aprile 2014
Poco meno di un anno dopo i primi casi di MERS ecco che l’attenzione torna altissima sulla sindrome respiratoria medio orientale. In soli 15 gg, dagli inizi di aprile ad oggi, siamo già oltre 300 casi, con clusters in Jeddah e altre città della Arabia Saudita. L’attenzione è massima poichè sembra che questi focolai abbiano avuto inizio proprio negli ospedali dove già si riportano le prime defezioni – medici che si rifiutano di prestare assistenza ai degenti – e c’è qualche dubbio sul fatto i 100 casi diagnosticati ufficilmente in un mese dipendano da migliori test serodiagnostici: qualcosa sta cambiando, potrebbe invece essere che il virus in un anno abbia mutato e che si stia trasmettendo in maniera efficiente e sostenuta tra esseri umani. L’host sembra sia il cammello, le sue escrezioni, il suo latte, il contatto negli allevamenti ma la situazione almeno su Twitter è seguita dai soliti noti con altissima preoccupazione. Ci vorranno ancora 5-10 gg per capire se ci troviamo di fronte all’inizio di una pericolosissima e letale pandemia. Questi intanto i numeri:

@MackayIM

Update 12 maggio 2014
Tinte fosche all’orizzonte. L’8 maggio è stato confermato che le 6 sequenze genetiche di differenti casi degli inizi di aprile in Jeddah, altri di fine aprile per la stessa città e due della Mecca coincidono al 99.9%. E’ un fatto di rilevanza eccezionale, la stessa situazione verificatasi con la SARS nel 2003, quando (virtualmente) tutti i casi identificati dopo il focolaio del Metrolpole Hotel ad Hong Kong avevano lo stesso marcatore mai identificato prima, neanche negli animali. Questo significa che è in atto quella che tecnicamente si definisce una espansione clonale e cioè il virus ha raggiunto un punto di evoluzione tale da permettergli di replicarsi ed infettare gli esseri umani partendo sempre dalla stessa copia;  è pronto per diffondersi su scala globale, in maniera efficiente e sostenuta. In più non poteva dirci più sfiga per quanto riguarda la nazione nel quale tutto sta succedendo e dalla quale si sta propagando. Dati non aggiornati, o aggiornati per difetto, mezze verità, controinformazione, responsabili del MOH Saudita continuamente sostituiti e la pericolosissima (e determinante) vicinanza con una serie di paesi che per vari motivi non possono che risultare totalmente impreparati a contenere gli outbreaks tra cui Giordania (già 5 morti e non dichiarato il numero di ammalati), Siria (dove è in corso una guerra civile), Iraq, Iran, Egitto e poi Sudan e l’intero continente Africano, fanno di questo inizio di epidemia il più grave thread alla salute di tutti gli esseri umani dal 1918 ad oggi. Inutile nascondersi dietro al dito, questa cosa si sta allargando e quello che filtra nel twitterverse potrebbe essere solo la micropunta dell’iceberg. Condizioni climatiche, geopolitiche e di pura coincidenza stanno lavorando contro di noi e a favore dell’insorgere di una pericolosissima ed inarrestabile pandemia. Di nuovo quando, non se. Quando? Entro giugno. Alcuni dati rispetto all’ultimo aggiornamento: ~560 casi, ~160 morti. Lo capite da soli: ~300 casi in più in sole 3 settimane più tutti gli altri possibili casi asintomatici e/o non rilevati e/o non comunicati. Potremmo essere a 1000 e se (come è inutile non credere) questa roba è già in Siria, prepariamoci perchè ci aspetta un’estate del cacchio.

Camel clowns are OUT – human clones are IN #MERS all about CLONAL expansion in HUMANS …
— Henry L Niman PhD ‏@hniman

Update 17 maggio 2014
Ormai ci siamo. Dopo la conferma di due casi importati negli US (Indiana e Florida) ecco che uno dei contatti casuali del primo paziente è stato confermato positivo al test (a Muster, in Indiana). La faccenda, inutile ripeterlo, si fa davvero preoccupante proprio per i dettagli che emergono dal CDC; i due si sono visti molto brevemente (meeting di lavoro di 40 minuti) restando a meno di due metri di distanza l’uno dall’altro e l’unico contatto fisico sembra essere stato una stretta di mano (forse due). Dal punto di vista tecnico si, anche il genoma combacia perfettamente con quello dei casi evidenziati nel precedente update e conferma l’espansione clonale, la trasmissione sostenuta tra esseri umani e mi fa sospettare che il virus possa essere trasmesso per via aerea (dato che ancora da dove venga e come si trasmetta nessuno lo ha scritto e controfirmato, nemmeno lo World Health Organization per il quale questo non è ancora un thread sanitario di livello globale) o che in ogni caso basti davvero pochissimo per trasmetterlo. Non so se prenotare le vacanze a questo punto o far finta di niente. Agosto è lontanissimo e questo virus è vicinissimo se non già qui, nella Metro che prendo ogni giorno.

Stippling


Stippling.

Applet and source: stippleVerletReplay.
Made with Processing.

Anche io, come Robert Hodgin (e qualche anno dopo, a dire il vero) ho voluto implementare il mio algoritmo per ricreare le immagini con un pattern di punti – in inglese stippling. Sono andato oltre le immagini statiche e lo ho fatto con un video feed: partendo dalla webcam analizzo la luminosità ed in base a questa modifico massa e raggio di 5000 particelle che si respingono fra loro. Maggior massa e maggior effetto repulsivo; come al solito trovate il sorgente su openprocessing, dal link sotto al video, anche se lì per ragioni di performance ho limitato il particle system a 1000 elementi. Enjoy the stippling effect.

gridTyper


231174
75121
26426

gridTyperSet
gridTyper.

Applet and source: gridTyper.
Made with Processing + HE_Mesh.

L’estrusione dei pixel font ha destato il mio interesse già in passato 123 ma gridTyper è l’implementazione di un’idea di Jan Vantomme (vormplus) sul cui blog due o tre settimane fa ho trovato un interessantissimo post sul processo utilizzato per realizzare delle bellissime lettere in plastica acrilica delle dimensioni di 40 × 50 × 20 mm usate per la corporate identity di cloudswimmers. Sfortunatamente, nonostante abbiano realizzato questo set di lettere con Processing ed HE_Mesh – ambedue opensource – non hanno diffuso il codice sorgente; mi sono quindi permesso di seguire il processo descritto nel post per realizzare io stesso un tool che potesse estrudere un pixel font (direttamente sul keyPress a runtime) e smussarlo (Catmull-Clark); questi oggetti – se suddvisi ulteriormente possono divenire molto lisci al tatto – e possono essere salvati in .stl per poi essere stampati in 3D con shapeways o i.materialise tramite processi di selective laser sintering (SLS). Full credits a vormplus quindi per l’idea ma sopratutto grazie a Frederik che mi ha supportato nella realizzazione del tool, chiarendomi dubbi e perplessità su come procedere.