Log/VIOinteractive

Perchè la gente impazzisce per Apple (e tanti la odiano)
- Vincenzo Stira
- 0 comment
Spesso mi capita di vedere tanta gente provare una profonda “antipatia” verso qualsiasi cosa abbia sopra un marchio Apple. Questa fatto che sia Apple a dirigere il mercato mobile con prodotti che sono eccessivamente costosi e che a volte fanno meno di altri prodotti che costano meno della metà proprio non va a genio a tante persone.
Al contrario un fan Apple difende la sua “religione” adducendo presunte superiorità tecniche che i competitor non hanno.
In realtà, un attento e vecchio osservatore di robe Apple sa benissimo che il motivo sta un pò più nel mezzo.
L’incipit di scrivere questo breve post mi è nato dopo aver visto un breve video di Montemagno sul tema che riporto in calce e in cui cita uno dei libri che ultimamente ho letto anch’io sull’argomento.
Scott Galloway in “The Four” ha messo per iscritto ciò che ogni attento – e maturo – osservatore Apple già sà:
L’azienda di Cupertino continua ad avere così successo nonostante abbia abbandonato da anni quel filone che lo vedeva come un “Think Different”, perchè non è più una azienda del mondo tecnologico ma è diventata negli anni a tutti gli effetti una azienda del settore del lusso tecnologico.
Hanno contribuito vari fattori nel renderla ciò che è oggi:
1) Prima di tutto il passato. Steve Jobs in primis, era, e con la sua morte prematura lo è ancor di più, una icona. Una persona che ha infuso le sue idee “piratesche” e ispiratrici nel DNA della sua azienda. Un pò come lo è Elon Musk oggi per Tesla o Nadella per la nuova Miscrosoft. Ma essendo stato uno dei primi è l’Elvis Prisley della tecnologia che con la sua fine prematura ha elevato ancor di più l’aurea mistica della casa discografica che ha fondato.
2) Eredità di Jobs è anche una attenzione particolare alla presentazione del prodotto che ha trovato una delle sue realizzazioni anche in una importante eredità: la peculiare presenza di centinaia di Apple Store sparsi per il mondo. Negozi –di lusso– che sono stati quella marcia in più nel progetto di convincere la gente che lì si trovasse un attenzione particolare sia per il cliente che per il prodotto e che oggi sempre più spesso si sta cercando di imitare tentando di ridurre questo gap “attrattivo-emozionale”.
Gli ultimi Google Pixel con i loro alti prezzi o gli svariati Samsung top di gamma o i primi store Windows vanno verso questa direzione.
3) Il mercato a cui si rivolge Apple è un mercato di gente che dispone, di gente col grano per dirla alla Montemagno nel video sotto.
4) La gente al di fuori del mondo chiuso degli addetti ai lavori, aspira alla semplicità. Vuole prodotti semplici da usare perchè è ignorante. Allora c’è la gente che non intende disporre così tanto per prodotti tecnologici e viaggia su aeromobili ryanair e gli va bene lo stesso perchè arriva comunque a destinazione nonostante le code all’imbarco e c’è gente che viaggia in prima classe sulla Emirates.
5) Completa il quadro una attenzione maniacale e una cura per il design del prodotto quasi artigianale, anche se il prodotto è un prodotto su grossa scala. Questa attenzione particolare solletica alcuni percettori inconsci nell’essere umano per cui toccando un prodotto Apple ci sembra di avere per le mani un prodotto quasi fatto a mano.
6) Concludo con l’ultimo punto ma non meno importante. Forse l’unico dei punti tecnologici che vale la pena menzionare che caratterizza Apple e che la fa stare due anni avanti rispetto ai concorrenti ( ma che i concorrenti stanno cercando di colmare). L’avere il controllo sia sul software sia sull’hardware sia sul retail è quel quid in più che in un progetto informatico può farti fare la differenza.
Non tanto perchè grazie a questo mix riesci ad avere tecnologie mai viste (come gli utenti Android sostengono molte delle tecnologie immesse sugli iphone sono roba vecchia per i dispositivi Android, non è sempre così vedi le CPU, questo però apre ad altri discorsi) ma più che altro perchè potendo gestire entrambi gli aspetti riesci a produrre in generale prodotti finali più funzionali, che rispondono meglio e più semplici da usare che è poi quello per cui ho parlato nel precedente punto 4.
Riprendendo il video di Montemagno, come dice Don Norman, uno dei big del design, un prodotto attraente è un prodotto che ti sembra funzioni meglio! Ma Montemagno, da utente Android qual’è si dimentica una cosa: non sembra che funzioni meglio, è solo che è così semplice che funziona davvero meglio!

Ethereum For Developers – Hello World
[Articolo Aggiornato al 22.03.2018]
Bene, eccoci arrivati alla parte che forse molti attendevano di più, quella dove vedremo in concreto come sviluppare qualcosa che realmente funzioni su di una blockchain!
Freno però un pò il vostro entusiasmo, così come avviene ad esempio per gli hello world delle app mobile questo esempio che vedremo sarà solo un primo passo per capire meglio come unire alcuni pezzi del puzzle. Le Dapp, quelle vere, vengono realizzate seguendo un’altra procedura, ma arriveremo anche a quello e vedremo come realizzarle più avanti. Per ora è utile procedere per passi e non rischiare di non capirci poi un tubo.
Quello che qui andremo a sviluppare è una applicazione estremamente semplice. Una delle tante applicazioni della blockchain è quella di poter mettere su, in un tempo relativamente breve, un sistema di votazione. Perchè il voto ? Beh perchè questo tipo di applicazione richiede alcune caratteristiche tipiche ed uniche che ritroviamo nella blockchain.
Il voto:
- deve essere anonimo
- deve svolgersi in sicurezza
- non deve essere ripetuto due volte
- non deve contenere azioni fraudolente
- non deve essere costoso
- non deve avere un controllo centrale e/o manuale
- deve essere garantito contro gli attacchi informatici di qualsiasi tipo
Bene, adesso trovatemi una tecnologia che soddisfi tutti i punti sopra esposti. Non la troverete se non nella blockchain che è stata ideata in maniera matematica con l’obiettivo di soddisfare tutti questi punti.
Tornando al nostro Hello World, l’applicazione di voto non dovrà fare altro che inizializzare un insieme di costanti, permettere a chiunque di votare i candidati e visualizzare i voti totali per ogni candidato. L’obiettivo in questa parte non è tanto soffermarci sul come codare una applicazione del genere ma imparare il processo di compilazione, deploy ed interazione.
Ho deliberatamente lasciato da parte l’uso dei framework dapp per costruire l’applicazione in quanto l’astrazione del framework nasconde alcuni dettagli che è utile all’inizio capire e comprendere.
Quindi lo scopo di questa 3 parte sarà:
- Effettuare il setup dell’ambiente di sviluppo
- Imparare il processo attraverso cui si scrive un “contratto”, come lo si compila e come lo si deploya
- Interagire con il contratto su di una blockchain attraverso una console nodejs
- Interagire con il contratto attraverso una semplice pagina web per visualizzare il numero di voti per ogni candidato.
Il setup dell’intera applicazione è stato costruito su una virtual machine vergine di ubuntu 16.04 xenial ma gli stessi precetti valgono su macos.
Questo è uno schema della app che andremo a costruire:

Setup
Su ethereum esistono varie blockchain. Una soltanto è la live cioè quella dove girano le transazioni reali e che viene chiamata “Ethereum Main Net”, mentre altre sono blockchain per i test di sviluppo dove è possibile effettuare il deploy di applicazioni che si vogliono testare prima di mandarle in produzione.
Oltre a queste ultime che “simulano” la main net reale è possibile anche testare le app in blockchain costruite ad hoc che girano sulla macchina dello sviluppatore quindi scollegate agli altri nodi della blockchain oppure utilizzare la cosiddetta in-memory blockchain (pensala come un simulatore di blockchain) chiamata ganache. Nelle successive parti di questa guida interagiremo con blockchain reali ma nella fase di sviluppo è utilissimo, se non un obbligo, sviluppare su blockchain di test o su sue simulazioni in quanto a noi non interessa avere l’intera blockchain sincronizzata (più di 20GB) ma soltanto sfruttare il metodo più veloce per poter scrivere codice e testare la nostra app su di una blockchain.
L’intero setup dell’applicazione è stato effettuato su una installazione pulita di Ubuntu desktop 16.04 xenial.
Nelle istruzioni a seguire provvederemo ad installare sulla nostra macchina ganache appunto, web3js che è la libreria javascript che ci consente di comunicare con la blockchain locale e avvieremo la test blockchain.
Nota: Questo tutorial gira con web3js nella versione 0.20.2. Aggiornerò il tutorial quando la versione 1.0 stable di web3js sarà disponibile
A questo punto procediamo con questi comandi che sono autoesplicativi e non hanno bisogno di spiegazioni:
$ sudo apt-get update
$ sudo apt-get install build-essential libssl-dev
$ sudo apt install curl
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
$ source ~/.profile
$ nvm install 7.4.0
$ node -v
$ npm install -g npm
$ sudo apt-get install git
$ sudo apt-get install build-essential python
$ mkdir hello_world_voting
$ cd hello_world_voting/
$ npm install ganache-cli web3@0.20.2
Una volta effettuato il setup iniziale diamo il comando
$ node_modules/.bin/ganache-cli
Avremo una schermata simile a questa:
Nota: ganache crea 10 account di test con cui è possibile giocare. Ognuno di quei codici esadecimali rappresenta quindi un wallet, un indirizzo pubblico di portafoglio con le relative Private Keys. Questi accounts vengono automaticamente precaricati con 100 fake ethers (moneta digitale) che ci serviranno in seguito.
Il primo smart contract
Per sviluppare smart contracts su ethereum si utilizza un linguaggio che si chiama “Solidity”. Se hai familiarità con l’object oriented programming imparare a scrivere contratti solidity dovrebbe risultarti semplice. Noi scriveremo un contratto che chiameremo Voting con un constructor che inizializza un array di candidati.
Scriveremo 2 metodi, uno che ritorna i voti totali che un candidato ha ricevuto e un altro metodo che incrementa il conteggio del voto per ogni candidato.
Nota: Il constructor è invocato soltanto una volta e soltanto quando il contratto verrà deployato sulla blockchain. A differenza di ciò che accade nel mondo web dove ad ogni deploy del codice si sovrascrive il codice scritto precedentemente, il codice deployato su di una blockchain è immutabile quindi ogni volta che aggiorniamo il contratto e lo deployamo, il vecchio contratto rimarrà sempre nella blockchain senza essere modificato con tutti i dati memorizzati in esso e il nuovo deploy creerà una nuova instanza del contratto (in realtà è possibile estendere i contratti ma quelli sono argomenti già un pò più avanzati che in questa serie non tratteremo).
Sotto potete vedere l’esempio del contratto di voto che utilizzeremo insieme delle spiegazioni inline. Per il momento non è importante tanto capire il codice solidity quindi prendete per buono tutto quello che c’è scritto.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.4.18; | |
// We have to specify what version of compiler this code will compile with | |
contract Voting { | |
/* mapping field below is equivalent to an associative array or hash. | |
The key of the mapping is candidate name stored as type bytes32 and value is | |
an unsigned integer to store the vote count | |
*/ | |
mapping (bytes32 => uint8) public votesReceived; | |
/* Solidity doesn't let you pass in an array of strings in the constructor (yet). | |
We will use an array of bytes32 instead to store the list of candidates | |
*/ | |
bytes32[] public candidateList; | |
/* This is the constructor which will be called once when you | |
deploy the contract to the blockchain. When we deploy the contract, | |
we will pass an array of candidates who will be contesting in the election | |
*/ | |
function Voting(bytes32[] candidateNames) public { | |
candidateList = candidateNames; | |
} | |
// This function returns the total votes a candidate has received so far | |
function totalVotesFor(bytes32 candidate) view public returns (uint8) { | |
require(validCandidate(candidate)); | |
return votesReceived[candidate]; | |
} | |
// This function increments the vote count for the specified candidate. This | |
// is equivalent to casting a vote | |
function voteForCandidate(bytes32 candidate) public { | |
require(validCandidate(candidate)); | |
votesReceived[candidate] += 1; | |
} | |
function validCandidate(bytes32 candidate) view public returns (bool) { | |
for(uint i = 0; i < candidateList.length; i++) { | |
if (candidateList[i] == candidate) { | |
return true; | |
} | |
} | |
return false; | |
} | |
} |
Copiamo il codice sopra descritto in un file e chiamiamo il file Voting.sol nella cartella hello_world_voting.
Adesso compileremo il codice e effettueremo il deploy sulla blockchain ganache.
Per compilare il codice Solidity installiamo il modulo npm chiamato solc
$ npm install solc
Se ricordi dal precedente articolo, web3js è una libreria che ci permette di interagire con la blockchain attraverso RPC. Useremo quindi questa libreria all’interno della console node per compilare e deployare la nostra applicazione ed interagire con la blockchain.
Apriamo adesso un nuovo terminale rechiamoci all’interno della cartella hello_world_voting e apriamo la console di node
$ node
successivamente inizializziamo gli oggetti web3 e solc
> Web3 = require('web3')
> web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
Per essere sicuri che web3 sia correttamente inizializzato e possa comunicare con la blockchain, chiediamo a quest’ultima di fornirci una lista di tutti gli accounts. Riceverai una risposta simile a questa
> web3.eth.accounts
['0x2d093c77800f6c2c32a59ee718a793ad85f45527',
'0x23835ef9509784d4656bbfc924f3606ec921ccca',
'0x4dc958aa099f9a724f2ad97668e13dd870c72613',
'0x244e4e8e7173104611f31bfda34eec7e050c3f1c',
'0x7b1dbd4e0cbee187c3943f3fa0d777734c9305e5',
'0x5194393700b09571d78425a119e0657ad92264e1',
'0xfd39e835b48d5e703f2ef894c1036fc57da827fe',
'0xe9851b766dd4d03a70423a267234708569120e49',
'0x24f7cff1422e166d5d89b0f58a3e8e08f5169f01',
'0xa69f12716cbcec87daac160559cdca832b67cdee',]
Dico simile perchè ovviamente gli indirizzi dei wallets saranno diversi in quanto sono creati randomicamente
Bene. Hai appena effettuato la tua prima operazione su di una blockchain!
Per compilare il contratto, carica il codice dal Voting.sol in una variabile stringa e compila in questo modo
>code = fs.readFileSync('Voting.sol').toString()
>solc = require('solc')
>compiledCode = solc.compile(code)
Quando compiliamo il codice e stampiamo l’oggetto contract (basta scrivere contract nella node console per vederne il contenuto), vi sono due campi importanti al quale prestare attenzione:
- contract.code: Questo è lo bytecode del codice compilato di Voting.sol. Questo è il codice che verrà deployato nella blockchain
- contract.info.abiDefinition: Questa è l’interfaccia o il template del contratto che dice all’utente del contratto quali metodi sono disponibili nel contratto. Ogni qual volta vuoi interagire con il contratto in futuro, avrai bisogno di questa abiDefinition. Puoi leggere qualcosa in più riguardo l’ ABI qui
Adesso andiamo a deployare il contratto sulla blockchain.
Innanzitutto creiamo un contract object (VotingContract) che è usato per il deploy e per inizializzare i contratti nella blockchain
> abiDefinition = JSON.parse(compiledCode.contracts[':Voting'].interface)
> VotingContract = web3.eth.contract(abiDefinition)
> byteCode = compiledCode.contracts[':Voting'].bytecode
> deployedContract = VotingContract.new(['Orlando','Ferrandelli','Trump'],{data: byteCode, from: web3.eth.accounts[0], gas: 4700000})
> deployedContract.address
> contractInstance = VotingContract.at(deployedContract.address)
VotingContract.new effettua il deploy del contratto sulla blockchain.
Il primo argomento è un array di candidati che competono alle elezioni.
Focalizziamo l’attenzione sul secondo parametro. Abbiamo:
- data: Questo è il bytecode compilato del contratto sulla blockchain
- from: La blockchain deve mantenere traccia di chi effettua il deploy del contratto. In questo caso noi stiamo dando il primo account che abbiamo ricevuto dalla chiamata web3.eth.accounts e questo account sarà l’owner del contratto. Ricordati che web3.eth.accounts ritorna un array di 10 test account creati quando abbiamo avviato la blockchain testrpc. Nella Main Net non è possibile utilizzare qualsiasi account. ma soltanto quegli account che possiedi e sbloccarli prima di effettuare la transazione. Quando creerai un account ti verra richiesto una passphrase e la passphrase è ciò che proverà il possesso del tuo account. Ganache di default sblocca tutti e dieci gli account per convenienza.
- gas: E qui c’è la genialata. Per interagire con la blockchain è necessario spendere money! A me la prima volta che l’ho saputo ha fatto storcere il naso questa cosa, ma in realtà è proprio qui che sta una delle rivoluzioni della blockchain rispetto agli altri ambienti di sviluppo. Questi soldi, pochi spicci in realtà, andranno ai miners che effettueranno tutto il lavoro per includere il codice nella blockchain validando la transazione del deploy del contratto e validando i blocchi con i loro algoritmi. Questo fa si che nessuno abbia l’interesse all’interno di questo giro, di comportarsi come non dovrebbe…in realtà su ethereum si sta pensando di implementare un’altro tipo di validazione basato sul proof of stake ma questo è un’altro discorso di cui spero potrò parlare in qualche successivo articolo. Tornando al nostro caso, in questo parametro andremo a specificare quanti soldi vorresti pagare per includere il codice nella blockchain. Questa cifra è espressa in ‘gas’. Il bilancio del tuo ether wallet specificato prima verrà utilizzato per comprare ‘gas’. Il prezzo del gas è un prezzo settato dalla rete (che è possibile consultare con dei tools), qualsiasi eccedenza ti verrà restituita nell’account. Il gas dovrà essere pagato soltanto per ogni transazione che cambia lo stato di un contratto. In questo articolo essendo che stiamo interagendo con testrpc non ci dovremmo preoccupare di questo in quanto testrpc ha il suo default gas price già settato.
Bene, adesso abbiamo effettuato il deploy del nostro contratto e abbiamo una istanza del contratto (la variabile contractInstance) che possiamo utilizzare per interagire con esso.
Vi sono centinaia di migliaia di contratti sviluppati sulla blockchain, quindi come identificare il nostro contratto sulla blockchain? La risposta la troviamo in deployedContract.address.
Quando dovrai interagire con il tuo contratto, avremo bisogno di questo indirizzo e della definizione abi di cui abbiamo parlato poc’anzi
Come Interagire con il contratto in una console nodejs
> contractInstance.totalVotesFor.call('Orlando')
{ [String: '0'] s: 1, e: 0, c: [ 0 ] }
> contractInstance.voteForCandidate('Orlando', {from: web3.eth.accounts[0]})
'0xdedc7ae544c3dde74ab5a0b07422c5a51b5240603d31074f5b75c0ebc786bf53'
> contractInstance.voteForCandidate('Orlando', {from: web3.eth.accounts[0]})
'0x02c054d238038d68b65d55770fabfca592a5cf6590229ab91bbe7cd72da46de9'
> contractInstance.voteForCandidate('Orlando', {from: web3.eth.accounts[0]})
'0x3da069a09577514f2baaa11bc3015a16edf26aad28dffbcd126bde2e71f2b76f'
> contractInstance.totalVotesFor.call('Orlando').toLocaleString()
'3'
Prova i comandi scritti sopra nella tua node console e dovresti vedere il conteggio dei voti incrementarsi. Ogni qualvolta voti per un candidato, il sistema torna indietro un id di transazione: Esempio: ‘0xdedc7ae544c3dde74ab5a0b07422c5a51b5240603d31074f5b75c0ebc786bf53’
Questo id di transazione è la conferma che la transazione è avvenuta con successo e questa conferma rimarrà per sempre sulla blockchain come testimonianza dell’avvenuto voto. Questa transazione infatti è immutabile e l’immutabilità è uno dei vantaggi delle blockchains come Ethereum.
Connettere la blockchain e il voto ad una webpage
Adesso che la maggior parte del lavoro è fatto, ciò che ci rimane da fare è semplicemente scrivere un html con i nomi dei candidati e invocare i comandi per il voto che abbiamo visto in precedenza in un file js.
Sotto potete trovare il codice html e il file js. Inserisci entrambi i file nella root della nostra cartella e apri index.html nel tuo browser.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Hello World DApp</title> | |
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'> | |
<link href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' rel='stylesheet' type='text/css'> | |
</head> | |
<body class="container"> | |
<h1>A Simple Hello World Voting Application</h1> | |
<div class="table-responsive"> | |
<table class="table table-bordered"> | |
<thead> | |
<tr> | |
<th>Candidati</th> | |
<th>Voti</th> | |
</tr> | |
</thead> | |
<tbody> | |
<tr> | |
<td>Orlando</td> | |
<td id="candidate-1"></td> | |
</tr> | |
<tr> | |
<td>Ferrandelli</td> | |
<td id="candidate-2"></td> | |
</tr> | |
<tr> | |
<td>Trump</td> | |
<td id="candidate-3"></td> | |
</tr> | |
</tbody> | |
</table> | |
</div> | |
<input type="text" id="candidate" /> | |
<a href="#" onclick="voteForCandidate()" class="btn btn-primary">Vota</a> | |
</body> | |
<script src="https://cdn.rawgit.com/ethereum/web3.js/develop/dist/web3.js"></script> | |
<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js"></script> | |
<script src="./index.js"></script> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); | |
abi = JSON.parse('[{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"totalVotesFor","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"validCandidate","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"votesReceived","outputs":[{"name":"","type":"uint8"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"x","type":"bytes32"}],"name":"bytes32ToString","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"candidateList","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"candidate","type":"bytes32"}],"name":"voteForCandidate","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"contractOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[{"name":"candidateNames","type":"bytes32[]"}],"payable":false,"type":"constructor"}]') | |
VotingContract = web3.eth.contract(abi); | |
// In your nodejs console, execute contractInstance.address to get the address at which the contract is deployed and change the line below to use your deployed address | |
contractInstance = VotingContract.at('0x2d093c77800f6c2c32a59ee718a793ad85f45527'); | |
candidates = {"Orlando": "candidate-1", "Ferrandelli": "candidate-2", "Trump": "candidate-3"} | |
function voteForCandidate(candidate) { | |
candidateName = $("#candidate").val(); | |
contractInstance.voteForCandidate(candidateName, {from: web3.eth.accounts[0]}, function() { | |
let div_id = candidates[candidateName]; | |
$("#" + div_id).html(contractInstance.totalVotesFor.call(candidateName).toString()); | |
}); | |
} | |
$(document).ready(function() { | |
candidateNames = Object.keys(candidates); | |
for (var i = 0; i < candidateNames.length; i++) { | |
let name = candidateNames[i]; | |
let val = contractInstance.totalVotesFor.call(name).toString() | |
$("#" + candidates[name]).html(val); | |
} | |
}); |
Nota: sostituisci VotingContract.at(‘0x2d093c77800f6c2c32a59ee718a793ad85f45527’); con l’indirizzo del wallet proprietario del contratto.
Questo è ciò che vedrai quando aprirai il file index.html nel browser

Congratulazioni!
Nella parte successiva effettueremo il deploy di questo contratto nella public test network in maniera tale che tutto il mondo potrà vederlo e votare per un candidato!
Inoltre c’è da dire che ovviamente questo passo è stato soltanto un primo timido passo verso lo sviluppo sulla blockchain. In realtà quando si sviluppa sulla blockhain si preferiscono utilizzare dei framework senza interagire con una console nodejs. I framework sono numerosi ma ne riparleremo nel prossimo articolo!
Altra cosa interessante prima di lasciarvi e che forse i più attenti avranno notato. Avete visto che la dapp viene eseguita in locale. Se avessimo messo il codice html e javascript su di un server, anche se questo avesse avuto la sua copia della blockchain, non saremmo stati in grado di votare in quanto il server non conosce il nostro indirizzo wallet attraverso cui votare! Ecco spiegate perché vengono chiamate decentralized apps, perché (in teoria) queste web app, si comportano più come le app mobile che hanno bisogno di essere installate sul nostro dispositivo, quindi ognuno ha la sua dapp (che si interfaccia alla sua copia della blockchain..). Ovviamente è impensabile costringere un utente al download della intera blockchain e per questo esistono varie soluzioni che vanno dall’installazione di particolari browser che sono in grado come un App Store di far visualizzare le varie dapp disponibili e di far girare dapps interfacciandole alle live net o plugin che si installano su chrome. Ma di questo avremo modo di parlarne meglio in articoli successivi.
Spero che questo articolo intanto vi abbia dato una idea pratica di come iniziare con lo sviluppo delle applicazioni decentralizzate su piattaforma Ethereum, ma c’è ancora moolto da dire! 😉

Ethereum For Developers – Architecture
Partiamo dalla classica architettura web client server.
Abbiamo diversi browser che fungono da client con un frontend in HTML/CSS etc ed un codice server scritto in php, java etc che si collega a un database il tutto hostato su di un server

Quando un client effettua delle richieste al server il server fa la “magia”, parla con il database o la cache, scrive legge e aggiorna il database e restituisce il dato al client.
Questa architettura funziona bene per la maggior parte delle applicazioni, tuttavia vi sono certe applicazioni che trarrebbero vantaggio dall’avere un database pubblico, accessibile in sicurezza da chiunque e in cui i tuoi dati non sono affidati al proprietario dell’applicazione.
Per esempio, diamo un occhiata ad eBay. Sei un power seller che ha guadagnato una moltitudine di reviews positive e per un motivo x eBay ad un certo punto decide di sospendere il tuo account.
Sicuramente questo avrebbe un impatto significativo sul tuo business. Addio review, addio rating, addio alla reputazione che ti sei gudagnato in lunghi anni di carriera. Nel frattempo però è nata una nuova piattaforma gemella: non detiene i tuoi dati, ne prende commissioni tra buyer e seller.
Non detiene i tuoi dati ne prende commissioni
Storci subito il naso. Sei scettico. Impossibile. Come può una piattaforma del genere far soldi, sostenersi e mantenersi? Potere delle applicazioni decentralizzate amico mio, ma non essere frettoloso, lo capirai tu stesso alla fine del tuo percorso all’interno di questa rivoluzione.
Torniamo all’archiettura Ethereum.
Ethereum rende relativamente semplice la costruzione di queste app decentralizzate o Dapps (decentralized applications).
Questo è uno schema di come è costituita ad alto livello una Ethereum Dapp:

Alcune cose che vorrei mettere in risalto:
- Ogni Client (Web Browser) comunica con la propria istanza di applicazione DApp che si trova quindi in locale sulla macchina dell’utente.
-
Non esiste un server centrale al quale tutti i client si connettono. Esiste invece la blockchain che è una struttura dati distribuita (una specie di libro mastro dove vengono memorizzate diverse informazioni) dove ognuno che vuole fare da nodo ha la sua copia che si sincronizza con le altre.
Il secondo punto appena descritto (e qui sta la genialata che a primo acchitto sembrerà una stupidata) implica che ogni persona che vuole interagire con una Dapp (decentralized application) ha bisogno della copia intera della blockchain in running sulla proprio pc o smartphone.
Ciò significa che prima di poter usare un applicazione si avrà la necessità di scaricare l’intera blockchain e quindi successivamente usare l’applicazione.
So cosa vi state chiedendo: è ridicolo tutto ciò. E’ la stessa domanda che mi sono fatto io. Impensabile che un utente prima di usare una webapp debba scaricarsi (o se già l’ha fatto, sincronizzarsi) l’intera blockchain (che attualmente è di diverse decine di giga e cresce sempre di più!!).
Ovviamente gli sviluppatori che hanno ideato il sistema non sono così cretini e fuori dal mondo e hanno pensato ad una soluzione che tra non molto leggerete. Esistono infatti i cosiddetti light client che non necessitano di avere in locale l’intera blockchain, ma intanto capiamo un vantaggio di questa soluzione:
I DATI NON VENGONO RELEGATI A UN SINGOLO SERVER CENTRALE CHE POTREBBE SCOMPARIRE DOMANI
Ma cosa è esattamente questa blockchain?
- Database: Un paio di transazioni che avvengono nel network Ethereum sono impacchettati in blocchi ed ogni blocco è linkato al prossimo blocco. Questa serie di blocchi collegati è la blockchain. Per essere sicuri che ogni nodo della rete abbia la stessa copia di dati e non abbia dati invalidi Ethereum usa un algoritmo preso in prestito dal protocollo Bitocoin, l’algoritmo Proof of Work (http://ethereum.stackexchange.com/questions/14/what-proof-of-work-function-does-ethereum-use). Ethereum passerà ad un certo punto della sua storia ad un’altro tipo di algoritmo, un algoritmo di tipo Proof of Stake chiamato Casper, ma questo discorso esula dal nostro tema principale perciò invito chi interessato a trovare informazioni in merito via google.
-
Codice: Il Database visto nel primo punto è la parte della blockchain atta allo store dei dati. Ma dove sta la logica per comprare, vendere, cancellare e riassegnare tutto quanto? Nel mondo Ethereum la logica sta nel codice che tu sviluppatore scrivi per l’applicazione che vuoi creare. Questa logica si chiama contratto (o smart contract) e lo fai in un linguaggio chiamato Solidity. Una volta scritto il tuo smart contract, il compilatore solidity compila il codice in Ethereum Byte Code ed effettua il deploy sulla blockchain.
Quindi riassumendo, la blockchain memorizza i dati, memorizza il codice ed esegue il codice nella Ethereum Virtual Machine.
Per costruire dapps web based (ma ho intenzione in una seconda serie di questi tutorial introdurre allo sviluppo di dapps native per mobile iOS), Ethereum dispone di una comoda libreria javascript chiamata web3.js la quale permette di connetterti al tuo nodo della blockchain.
E’ possibile quindi includere tale libreria in un qualsiasi js framework come reactjs, angularjs etc e iniziare a programmare.
Per ultimo volevo lasciarvi al termine di questa seconda parte, accennando ad un’altra importante feature e cioè alle capacità finanziarie della piattaforma. Sai che non appena inizi ad utilizzare una dapp è come se aviassi un conto bancario virtuale e che puoi creare quanti conti bancari desideri nella frazione di un secondo? Questi conti bancari vengono chiamati wallet e nei wallet puoi depositare moneta (Ether, la moneta utilizzata nell’ecosistema Ethereum) o effettuare transazioni.
Ci sono innumerevoli dettagli che si potrebbero spulciare riguardo la blockchain ma mi fermo qui per continuare la nostra discussione sulla costruizione di una dapp. Spero che questa seconda parte ti abbia dato una idea di massima ad alto livello dell’architettura di Ethereum e del fatto che con esso sia possibile sviluppare applicazioni decentralizzate.
Ma dopo questo excursus necessario, adesso possiamo passare finalmente alle cose pratiche!
Nella 3 parte inizieremo a mettere mano sul codice e a sviluppare il nostro primo hello world!

Ethereum For Developers – Introduction
Da un pò di tempo mi interesso di sviluppo su piattaforma blockchain anche se lo sviluppo iOS rimane comunque al momento la mia mansione principale.
Sin da quando sono venuto a conoscenza di questa nuova tecnologia sempre più in auge sono rimasto da subito entusiasta. Sul web si trovano numerose discussioni sul tema e numerosi elogi (ma anche alcune critiche) quindi se avete già una infarinatura sull’argomento e conoscete già le potenzialità di quello di cui stiamo parlando e vi interessa subito andare al sodo potete saltare questo paragrafo immediatamente. Per tutti gli altri vorrei spendere qualche parola in più per consentirvi di “acclimatarvi” dicendovi ciò che mi ha più entusiasmato di tutta questa strana vicenda.

Introduzione per neofiti
Se diamo una occhiata ai trends tecnologici degli ultimi decenni noteremo una certa evoluzione dei sistemi analogici verso sistemi più efficienti e digitali.
Per esempio la posta da cartacea (vi ricordate i francobolli, e chi li usa più?) è diventata elettronica, l’enciclopedia composta da numerosi volumi è diventata wikipedia e internet, la musica e i film da analogici hanno attraversato la fase di digitalizzazione…bene, adesso si stanno concretizzando delle convergenze per cui l’intero sistema finanziario che per la verità già ha attraversato una prima fase di digitalizzazione pur rimanendo indietro in alcuni aspetti per questo generale senso di diffidenza e affidabilità verso la tecnologia, sta per evolversi in un sistema più efficiente in cui i dati verranno scambiati con un costo marginale praticamente nullo…
Se per esempio adesso io posso mandarvi un video girato con il mio smartphone, un video di diversi GB e questo mi costa praticamente nulla lo stesso non si può dire per le transazioni bancarie. Se infatti voglio mandarvi dei soldi per muovere i pochi byte che rappresentano la mia ricchezza e farvi un bonifico, potrò farlo soltanto dalle 9 alle 17 o da lunedì a venerdì e i soldi vi arriverebbero nel giro di 1-2 giorni lavorativi…
Bene, tra 10 anni ci volgeremo indietro e guarderemo a questo sistema come ad un qualcosa di preistorico, non conveniente ed estremamente inefficente.
A questo punto molti di voi staranno pensando che questa strana cosa di cui vi sto per parlare sia un qualche gioco da programmatori informatici ancora ai suoi albori e che al momento rimane ristretta nell’ambito della ricerca e degli esperimenti.
In realtà a tutt’oggi in questo sistema trasitano già numeri estremamente significativi. Il bitcoin, la prima moneta digitale che si basa su questo nuovo sistema, valeva nell’aprile 2011 qualcosa come 1$ adesso ne vale 1500$… Non conosciamo nient’altro al mondo che si sia apprezzato 1500 volte negli ultimi 10 anni, niente in ambito finanziario e niente in ambito industriale e la capitalizzazione di mercato delle cryptovalute sta raggiungendo cifre ragguardavelovi dell’ordine di diverse decine di milioni di dollari.
Ai più questo eccessivo interesse sembra piuttosto esagerato e sembrerebbe delineare una qualche forma di bolla speculativa. Secondo il mio parere in parte è così, un pò come fu nei primi anni 90 la bolla delle dot-com, ma così come fu negli anni 90, da quella bolla nacquero numerose società che in seguito hanno rivoluzionato alcuni aspetti della nostra vita.
La cosa che più mi entusiasma di questa tecnologia, oltre all’aspetto finanziario che alimenta la nascita di una nuova branca di sviluppo, la cosiddetta fintech, è il fatto che in ambito digitale sta accadendo una rivoluzione. Infatti fino all’invenzione della blockchain (una struttura dati così come lo è un array, una list etc) non si conosceva nulla che poteva essere trasferito senza essere duplicato, nulla. Tutto ciò cambia con l’avvento della blockchain.
La criptovaluta, che rappresenta una delle possibili applicazioni di questo nuovo protocollo, rappresenta l’invenzione, per la prima volta, di qualcosa che in ambito digitale non può essere duplicato. Se ci pensate, questo è un qualcosa che è realmente sconvolgente perchè null’altro è come la blockchain in ambito digitale.
Già solo per questa sua unicità, la tecnologia meriterebbe un posto in prima fila così come sta pian piano accadendo. Queste invenzioni, di così tale portata, avvengono poche volte nel giro di decenni ed è per questo che il mio interesse, così come quello di tanti altri, è andato sempre più crescendo.
Di solito la maggior parte della gente si avvicina alla blockchain grazie alla popolarità di una delle sue applicazioni, il bitcoin.
In questi primi anni di sviluppo ci troviamo di fronte ad una forma di corsa all’oro e sicuramente molti di voi (me compreso) si saranno avvicinati a questo mondo inizialmente attratti dalle notizie di facili guadagni. Ma se siete sviluppatori come me, questo interesse che parte con una prima fase di scetticismo pian piano si trasformerà in un desiderio di capirne di più, entrandoci dentro per comprendere come tutta questa “magia” sia possibile, ed è quello di cui parleremo in questa serie di tutorial pratici in cui viaggeremo in nuovo mondo dove la programmazione incontra e può camminare a braccetto con il ricco mondo della finanza.
Introduzione per sviluppatori
Troviamo numerose risorse su internet riguardo l’argomento Ethereum (video, articoli e documentazioni). Ma, per mia esperienza personale, molte di queste risultano nel giro di poco tempo datate a causa del fatto che la piattaforma è in continua e veloce evoluzione.
Perchè Ethereum?
Beh, perchè nella rivoluzione descritta in precedenza, è nata, da una costola, una ulteriore rivoluzione.
Attualmente vedo nascere sempre più progetti che promettono di portare qualche novità e linfa nuova a ciò che già c’è, magari nasceranno nuovi linguaggi ognuna con caratteristiche peculiari, ma Ethereum è stata la prima ad avventurarsi in questo che sto per dirvi, e quindi risulta la madre di tutti gli altri.
Ethereum ha portato con se una semplice ma potente novità: la possibilità di introdurre una piattaforma di sviluppo che facesse uso della blockchain. Con il Bitcoin ciò non era possibile in quanto il bitcoin nasce con l’intento esclusivo di fornire soltanto una applicazione del protocollo che funzionasse esclusivamente da moneta digitale di scambio e nulla più.
In Ethereum, grazie alle gesta di Vitalik Buterin e del suo manipolo di 20 sviluppatori che avevano accumulato 18 milioni di dollari in bitcoin invece il discorso cambia. La struttura dati sottostante, la blockchain, diventa programmabile.
Una blockchain, detta in parole povere, è un modo per organizzare dei computer insieme e fargli fare una stessa cosa. Così come Dropbox o Google Docs o qualsiasi altra tecnologia utilizzata per sincronizzare le foto del pc o dello smartphone. La differenza è che questa sincronizzazione non avviene tra due punti ma tra centinaia di computer sparsi per il mondo.
Se qualcuno di questi punti o nodi va offline o viene hackerato da qualche malintenzionato, il network della blockchain non ne risente minimamente.
Vi sono due curiosità rilevanti riguardo a questo sistema:
- La prima è che la blockchain stessa, questa struttura dati, paga i suoi nodi per mantenerla attiva. La paga nel vero senso della parola. La paga con una delle sue applicazioni, il bitcoin (nel caso della blockchain del Bitcoin) o nel nostro caso in ethereum (nel caso della rete Ethereum). Questa attività di reward viene chiamata Mining e queste criptomonete hanno un controvalore in moneta fiat (monete correnti come USD o EUR) grazie a degli exchanger che così come nella finanza reale forniscono delle piattaforme online dove è possibile fare attività di scambio a livello globale.
-
La seconda curiosità, e forse quella che ci interessa più da vicino, è che Ethereum introduce la programmabilità di questo sistema tramite un linguaggio Turing completo.
Per la prima volta, e questa è una delle grosse novità di cui ho accennato prima, la moneta e gli scambi finanziari diventano programmabili.
Ma non solo quella, si possono infatti pensare altri campi di applicazione dove può intervenire il concetto di non replicabilità descritto prima, come ad esempio un contratto notarile, un voto, ma anche sulle proprietà intellettuali dando per esempio l’opportunità di far pagare esattamente bit dopo bit la quantità di dati scambiati e quindi del costo di fruizione di un servizio in streaming man mano che i dati fruiscono all’utente e non più in maniera forfettaria come avviene oggi ad esempio su Netflix.
Svariati sono i campi di sviluppo e ogni giorno nascono nuove idee che si concretizzano in nuove ICO, nuovi token ognuna delle quali rappresenta una declinazione del protocollo e quindi di una idea…ma di questo ne parleremo successivamente. Ritorniamo al nostro tema principale.
Ho impiegato diverso tempo a mettere i pezzi del puzzle insieme ed avere un quadro chiaro e completo di ciò che è Ethereum e di come funziona a livello di sviluppo. Quello che cercherò di fare quindi in questa serie di tutorial è presentare un quadro organico di come uno sviluppatore può immediatamente iniziare a giocarci. In alcuni punti non mi soffermerò tanto sulle spiegazioni, rimandando per questo ai riferimenti che lo spiegano in maniera più dettagliata.
Ovviamente tutto ciò che è scritto qui è frutto di ricerche e riferimenti trovati in rete. Ho preso quindi spunto qui e lì anche per scrivere alcune parti di questi tutorial. Il mio scopo è quello di poter leggere in un unico posto ciò che si trova spezzettato qui e lì, eliminando le strade che portano ad errori o incompatibilità e che per questo non funzionano e integrando ciò che invece ha dato risultati immediati e pratici.
Nel secondo episodio finalmente ci sporcheremo le mani e dopo una breve introduzione necessaria dell’archiettura Ethereum inizieremo a sviluppare la nostra prima Decentralized App!
—
[If you want to read an english version send me a message!]

Io Sono. Intelligenza Artificiale Negli Assistenti Virtuali
Quanti articoli, quante notizie quante parole abbiamo letto e continuano ad essere pubblicate in rete che stanno cercando di renderci consapevoli dell’ uso più massiccio dell’intelligenza artificiale nella vita quotidiana che ci aspetta? Tutte le piu’ importanti aziende mondiali che operano in campo tecnologico come IBM, Tesla, Apple, Amazon, Google e Microsoft si stanno rincorrendo a vicenda per raggiungere un salto generazionale nella semplificazione sempre piu’ spinta dell’interazione uomo-macchina.
Tra un pò sembra che lasceremo le dita a far altro perchè ciò che farà capire alle macchine ciò che vogliamo sarà soltanto la nostra voce..
Occhio, in questo articolo che stai per leggere non troverai scritto il solito papello delle profezie di un Nostradamus, ma quello che leggerai sono tesi scientifiche sulla stato della conoscenza umana sull’argomento.
Leggendo fino in fondo tutto l’articolo, vedrai, saprai di più su tutta questa euforia che noi addetti ai lavori abbiamo attorno a questa storia. Vedrai la questione sotto un’altro punto di vista e ti si aprirà un mondo di domande a cui ancora non avevi pensato.
In questo momento dietro lo smartphone che acquistiamo o dentro l’ultimo sistema operativo che aggiorniamo si stanno compiendo ricerche sul come migliorare ed implementare al meglio le intelligenze artificiali finalizzate fondamentalmente non a risolvere l’ultimo teorema di Fermat ma all’ incremento della user experience, una parola trendy per dire che si sta cercando di far comunicare, nel modo più naturale possibile, l’uomo con i calcolatori automatici senza avere un libretto di istruzioni.
Qui, si parla di intelligenza e già da diversi anni molte sono le ricerche che stanno cercando di riprodurre questo aspetto dell’essere umano. Ma, un attimo, vi ricordate quanto ancora possono essere scemi questi intelligentoni di assistentoni?
Adesso seguitemi un attimo in questo che sembra una menata tra “filosofi a cena” ma che se riletto più di una volta non sembra poi così campata in aria.

Nel 1965 il matematico inglese Irvine J. Good collega di quel nerd di Alan Turing, uno dei padri dell’informatica, scrive che la prima macchina ultra intelligente è l’ultima invenzione che l’uomo dovrà fare. Una tale macchina infatti sarebbe per definizione più intelligente di qualunque altro uomo e poiché tra le attività intellettuali umane vi è anche l’invenzione di macchine intelligenti essa sarebbe in grado di progettare macchine ancora più intelligenti. Senza dubbio a quel punto vi sarebbe una esplosione di intelligenza…!
Ora qui solo da questa frase si potrebbe aprire un mondo. A partire da questo concetto si fanno le canne da tempo immemore una certa letteratura la quale definisce un tale speciale momento, logicamente plausibile concediamoglielo, come la cosiddetta singolarità tecnologica ma per il momento vi risparmio i fumi di quello che effettivamente succederà se andiamo avanti di questo passo per poi riprendere il concetto verso la fine..
Infatti dall’inizio del 900 è in corso un progetto grandioso forse il piu’ rivoluzionario tra quelli intrapresi dall’umanità cioè il tentativo di comprendere come funziona il nostro cervello ed emularlo creando una intelligenza artificiale. E’ chiaro che la comparsa di intelligenze artificiali di livello umano o addirittura superiore cambierebbe per sempre il corso della storia e un simile obiettivo potrebbe ormai essere a portata di mano o quanto meno lo vediamo all’orizzonte.

Questa almeno è l’opinione di un certo Raymond Kurzweil secondo cui la prima intelligenza artificiale di livello umano dovrebbe venire alla luce tra una ventina di anni. No, non è il Nostradamus di cui sopra.
Kurzweil è considerato quasi universalmente uno dei padri dell’intelligenza artificiale. I suoi algoritmi sono alla base dei sistemi piu’ diffusi al mondo per il riconoscimento di caratteri scritti ( OCR ) e per l’interpretazione del parlato. Toh! Software come Siri, l’assistente vocale di Apple o Dragon Dictation sono tutti basati sugli studi di Kurzweil.
Kurzweil è anche un grande studioso di trend tecnologici. In un libro degli anni ‘90 intitolato “The Edge Of Intelligence Machine” aveva fatto 147 previsioni per il 2009 e di queste, 115 si rivelarono esatte, 12 quasi esatte cioè sbagliò decennio azzeccando però la previsione e solo il 3% di queste previsioni si rivelarono completamente sbagliate. Insomma non tutti siamo perfetti!
In un libro intitolato invece “Come Creare Una Mente” del 2012, Kurzweil spiega perchè è convinto che la comparsa della prima intelligenza artificiale di livello umano sia dietro l’angolo.
L’anatomia del cervello è nota da decenni nei dettagli così come il fatto che il cervello è diviso in aree dedicate a funzioni diverse, aree dedicate alla vista, all’udito, all’attivazione dei muscoli motori e diverse altre. Ma in che modo tutto ciò si traduce in quanto ognuno di noi sperimenta e cioè una mente cosciente e la capacità di pensare?
Che cos’è un ricordo nel nostro cervello ?
In che cosa consiste un pensiero?
E’ quasi impossibile pensare di replicare l’intelligenza artificiale senza prima rispondere a queste domande.
Ray Kurzweil è convinto sostenitore della cosiddetta “Patter Recognition Theory Of Mind” (no tranquilli, nulla di complicato se spiegato in parole più semplici) cioè della tesi secondo cui l’algoritmo fondamentale del cervello sia il “riconoscimento di forme.”
Ogni volta che il cervello incontra una nuova forma è in grado di memorizzarla e collegarla in senso gerarchico cioè secondo un qualche rapporto logico con le altre forme già memorizzate.
Ok, ma che cosa è una forma?
Una forma può essere un oggetto qualunque reale ma anche astratto. Per esempio una mela è una forma ma anche alcune sue parti come i semi o il concetto del tutto astratto di superficie curva sono delle forme.
A sua volta la mela rimanda ad altre forme come per esempio la forma relativa alla torta di mele o la forma collegata al concetto di dolce, anche concetti etici filosofici matematici hanno le proprie forme di riferimento.
Inoltre il cervello ha un alto livello di ridondanza per le forme che incontriamo piu’ di frequente. Per esempio, per la lettera A in tutte le sue variante o per il viso di una persona cara, possono esistere migliaia riconoscitori di forma diversi nel nostro cervello e ogni volta che una forma viene riconosciuta, per esempio quando vediamo la mela di cui sopra, tutti i riconoscitori di forme collegati si mettono in allerta mentre si indebolisce l’attività di altri riconoscitori di forma: la vista di una paio di baffi ecciterà tutti i riconoscitori di forma collegati ai vostri conoscenti di sesso maschile, li allerterà, potrebbe essere una di queste persone e contemporaneamente indebolirà tutti quelli collegati alle vostre conoscenze di sesso femminile…
…anche se guardando meglio, questo non vi impedirebbe di riconoscere vostra moglie, magari truccata da uomo per esempio a partire da altri riconoscitori di forma che individuano il portamento femminile.
Cosa scrive Kurzweil a proposito di cosa sia, secondo questa tesi, un ricordo?
“..Dobbiamo tenere conto a questo punto anche dell’idea che le forme che abbiamo imparato a riconoscere, per esempio un particolare cane o l’idea generale di un cane, una nota o un brano musicale, sono esattamente lo stesso meccanismo che sta alla base dei nostri ricordi.I nostri ricordi sono di fatto forme organizzate come liste che abbiamo appreso e che riconosciamo quando ci vengono presentate con lo stimolo opportuno.
Se dovessimo leggere la mente di qualcuno e dare una occhiata a quello che accade esattamente alla sua neo corteccia sarebbe difficilissimo interpretare i suoi ricordi. Quello che vedremmo è l’attivazione simultanea di milioni di riconoscitori di forme. Un centesimo di secondo piu’ tardi vedremmo un insieme diverso ma altrettanto numeroso di riconoscitori di forme attivati, ciascuna di queste forme sarebbe una lista di altre forme, ciascuna delle quali sarebbe una lista di altre forme e così via fino a raggiungere le forme semplici piu’ elementari a livello piu’ basso.
Ciascuna forma nella neo corteccia è dotata di significato solo alla luce di tutte le informazioni veicolate nei livelli che stanno al di sotto di essa. Una vera lettura della mente quindi comporterebbe necessariamente non solo identificare le attivazioni degli assoli pertinenti all’interno del cervello di una persona ma anche esaminare sostanzialmente tutta la sua neo corteccia con tutti i suoi ricordi per capire quelle attivazioni..”
“ I nostri ricordi sono di fatto forme organizzate come liste che abbiamo appreso e che riconosciamo quando ci vengono presentate con lo stimolo opportuno.”
Insomma secondo Kurzweil e gli altri sostenitori della teoria del cervello come riconoscitore di forma questo accendersi e spegnersi di milioni di riconoscitori di forma a ritmo di 100 volte al secondo, questa specie di albero di natale stroboscopico sarebbe in ultima analisi ciò che chiamiamo pensiero.
A questo punto però sorge spontanea una domanda: c’è qualche prova che la struttura del cervello sia consistente con questa visione? Ebbene la risposta è SI SI SI.
E’ una risposta che possiamo dare da pochissimo tempo perchè è quanto emerge da studi recentissimi resi possibili dalle piu’ recenti tecnologie di indagine del cervello. In particolare parliamo degli studi condotti dal neuro scienziato svizzero Henry Markram (batti 5!) i quali non solo danno conforto a questa tesi ma permettono anche di stimare il numero di riconoscitori di forma presenti nel nostro cervello.
Infatti Markram ha trovato evidenze di una struttura ripetitiva. Una sorta di circuito di base che con poche modifiche è presente in tutte le aree del cervello.
Avete 10 min ? Ascoltate cosa ha di bello (sperimentato e plausibile) da dire il prof Markram sull’argomento in uno dei TED che hanno dato IDEAS WORTH SPREADING ( TIPS: è piacevole e scorrevole da seguire e per chi lo desidera ha i sottotitoli in italiano che si possono attivare)
Ma torniamo al nostro Kurzweil, secondo lui una buona stima del numero di neuroni di cui mediamente è composto un riconoscitore di forme cioè uno di questi mattoncini lego è di circa 100 neuroni. E poichè ci sono piu’ o meno 30 miliardi di neuroni nel cervello umano i riconoscitori di forma presenti nella testa di ognuno di noi sarebbero circa 300 milioni.
Ora poichè negli ultimi anni sono stati sviluppati vari software come quelli per il riconoscimento di caratteri scritti e più recentemente per il riconoscimento del parlato e anche vari componenti hardware che nei rispettivi campi di applicazione agiscono esattamente come dei riconoscitori di forma gerarchici, resta aperta a questo punto una sola domanda ovvero:
Cosa serve per emulare
tutti questi 300 milioni
di riconoscitori di forma ?
Una domanda a cui Kurzweil ed altri studiosi hanno trovato una risposta e che riprenderemo al termine dell’articolo.
I riconoscitori di forma sono quindi alla base dei software come quelli sviluppati da Apple, Microsoft e Google.
Ma non andiamo troppo ai piani alti del palazzo, andiamo al mercatino. Ho sviluppato tempo fa un piccolo bot per Telegram (il rivale di WhatsApp) che faceva uso di AIML un markup language di tipo XML. Non si può considerare un tipo intelligente quanto suo compare WATSON ( IBM ) o “intelligenza artificiale” in senso stretto (la quale richiede capacità di ragionamento logico e abilità di pensiero), ma questi bot fanno se alcuni concetti descritti in precedenza come quello del riconoscimento di forme (in questo caso grammaticale) e del pattern recognition largamenti usati dagli assistenti virtuali attuali come Siri di Apple o Cortana di Microsoft.
Il sistema sviluppato utilizzava per comodità come mezzo di comunicazione con l’utente, il servizio gratuito di messagistica “Telegram”, applicazione scaricabile su qualsiasi smartphone o computer ma lo stesso potrebbe essere implementato su qualsiasi sistema proprietario di messagistica sviluppato ad hoc o su di un server web che agisce da backend fornendo delle API apposite.
Su Telegram il test che feci prese “vita” sotto forma quindi di BOT il quale era in grado di interpretare alcuni comandi in linguaggio naturale impartiti dall’utente e che a differenza dei classici BOT potrebbe agire anche come “servizio” consentendo di effettuare delle azioni come potrebbe essere quello di acquisto di biglietti, impostazione di allarmi etc..
Adesso i bot di questo tipo dilagano su diverse piattaforme, ma quello che stanno cercando di mettere su i pachidermi come IBM Microsoft Apple e compagnia bella è qualcosa di più.
Ho sviluppato bot per Telegram quando ancora non avevo la fissa per i dispositivi iOS. Da quando sviluppo per i dispositivi Apple ho scritto per diletto diversi prototipi tra cui uno che riguarda il visual recognition che fa uso dell’intelligenza di WATSON di IBM, un tizio meccanico di cui abbiamo già accennato prima. Non mi dilungo molto su WATSON in quanto soltanto lui richiederebbe un articolo a parte, quindi vi rimando alle ricerche su google se non lo conoscete.
Ho registrato un video di questo sciocco prototipo che ho sviluppato per iphone. Nel test le immagini vengono caricate da un servizio di free stock photos ma lo stesso si potrebbe trasferire facilmente al capturing della fotocamera di uno smartphone.
In sostanza, l’intelligenza artificiale collegata a WATSON riesce a “capire” che foto stiamo guardando e a categorizzarla in base al contenuto. Ma forse il video è auto esplicativo più di mille parole..
Ritorniamo sui nostri passi. Se è vero che il cervello è un riconoscitore di forma gerarchico e che la mente ha questa origine e se è vero che siamo in grado realizzare dei software che eseguono le stesse attività di base dei riconoscitori di forma allora siamo in grado di realizzare una intelligenza artificiale.
Tutto si riduce
a una questione di
potenza di calcolo.
Quanto deve essere potente un computer per simulare un cervello umano ? Bhe una risposta potrebbe essere: dipende da quanto è effetivamente complesso.
Non vi sorprenderà scoprire che l’opinione di Kurzweil in merito è molto netta:
“..Riflettendo un attimo su che cosa significa complessità potremmo chiederci una foresta è complessa ? La risposta dipende dalla prospettiva che si sceglie. Si potrebbe notare che esistono migliaia di alberi nella foresta e che tutti sono diversi tra loro.Poi si potrebbe continuare notando che ciascun albero ha migliaia di rami e che ciascun ramo è del tutto diverso dagli altri. Poi si potrebbe continuare descrivendo le contorte peculiarità di ciascun singolo ramo, la conclusione a quel punto sarebbe che la foresta ha una complessità che va al di là della nostra più sfrenata immaginazione. Ma questo approccio significherebbe letteralmente concentrarsi sugli alberi senza vedere la foresta.
Sarebbe corretto dire che il concetto di foresta è piu’ semplice del concetto di albero. Lo stesso vale per il cervello che ha una anologa enorme ridondanza in particolare nella neo corteccia. Sarebbe corretto dire che c’è piu’ complessità in un singolo neurone che nella struttura complessiva della neo corteccia…”
Com’è del tutto evidente il ragionamento di Kurzweil ha delle conseguenze sul livello di profondità a cui è necessario spingere una simulazione del cervello perchè essa possa manifestare intelligenza.
Non è necessario simulare il cervello
in tutti i suoi dettagli per ottenere
una intelligenza artificiale.
Secondo Kurzweil, ebbene, per simulare l’intelligenza basterebbe una simulazione del cervello molto meno raffinata, per esempio non sarebbe affatto necessario riprodurre tutte le attività metaboliche dei neuroni perchè non c’entrano nulla con l’intelligenza!
Ma allora quanto deve essere potente un computer affinchè possa esibire intelligenza ?
L’idea di Kurzweil è che quanto dobbiamo simulare assomigli molto ad un calcolatore formato da 300 milioni di processori quindi tantissimi i quali però lavorano a una velocità abbastanza bassa circa 100 cicli al secondo ma con un livello di parallelismo molto molto spinto dato che i 300 milioni di riconoscitori di forma del nostro cervello sono tutti operativi contemporaneamente.
Se traduciamo tutto questo nelle specifiche di un ipotetico computer che cosa troviamo? Troviamo che dovrebbe essere in grado di svolgere circa 10 alla 16 calcoli al secondo, che sono piu o meno quanti ne eseguono oggi i piu’ grandi supercomputer esistenti.
E dovrebbe avere una capacità di memoria di circa 20 miliardi di byte un numero tutto sommato abbastanza modesto già oggi.
Ma c’è di piu’.
Infatti sulla base dei trend a cui per decenni è soggetto il costo della capacità di calcolo tutto ciò nel 2020 costerà circa 1000$, è il risultato della ben nota legge di Moore secondo cui le prestazione dei componenti elettronici raddoppiano ogni 18 mesi a parità di prezzo.
E’ uno scenario incredibile per le conseguenze che potrebbe avere e ancor piu’ incredibile è che tutto questo stia accadendo senza che quasi ce ne accorgiamo.
Infatti le ricadute della comparsa di esseri intelligenti e artificiali sarebbero impressionanti, dall’economia fino all’etica.
Adesso entriamo per un attimo nella parte etica della vicenda.
Come ci comporteremmo di fronte ad entità artificiali intelligenti ? Leggiamo cosa scrive Kurzweil in proposito:
“..Immaginate in futuro di incontrare un ente robot o un avatar completamente convincente nelle sue reazioni emotive. Ride in modo convincente alle vostre battute di spirito e per parte sua vi fa ridere e piangere.Vi convince della sua sincerità quando parla delle sue paure e dei suoi desideri. Sotto ogni punto di vista sembra cosciente.
Sembra in effetti come una persona.
L’accettereste come persona cosciente?
L’idea di conscenza è alla base del nostro sistema morale e il nostro sistema legale a sua volta è codificato sia pure non rigidamente su quelle convinzioni morali. Se una persona estingue una coscienza di qualcuno come nel caso di un assisninio questo per noi è un atto immorale e con qualche eccezione un crimine grave.
Se distruggo la mia proprietà probabilmente è accettabile invece se la mia proprietà comprende un essere cosciente come un animale in quanto proprietario di quell’animale non ho necessariamente la libertà morale o legale di farne quello che voglio.
Esistono per esempio leggi che sanzionano la crudeltà nei confronti degli animali. Poichè gran parte del nostro sistema morale e lagale si basa sulla protezione dell’esistenza e sulla prevenzione di sofferenze non necessarie a enti coscienti, per effettuare giudizi responsabili dobbiamo rispondere alla domanda:
chi è cosciente ?
Questa domanda non è semplicemente materia di dibattito intellettuale.
Nessuno si preoccupa molto oggi della possibilità di provocare dolore e sofferenza al software del nostro calcolatore ma quando il software del futuro avrà l’intelligenza intellettuale emotiva e morale degli esseri umani biologici anche questa diventerà una preoccupazione genuina.
La mia posizione è che accetterò come persone coscienti enti non biologici che siano pienamente convincenti nelle loro reazioni emotive e la mia previsione e che in genere anche il resto della società li accetterà…”
Ebbene è chiaro che la comparsa di forme di vita artificiale di robot o di avatar dotati di consapevolezza avrebbe certo delle conseguenze inimagginabili sul nostro stile di vita e forse anche sulle nostre convinzioni piu’ profonde.
Ma secondo Kurzwail questo sarebbe in realtà solo il primo passo di un processo destinato a modificare l’uomo ancora piu’ in profondità.
Se infatti il tipo di tecnologie che stiamo sviluppando per ricreare l’intelligenza sono coerenti con il modo in cui l’intelligenza si è sviluppata nel mondo biologico non c’è motivo di pensare che prima o poi le due intelligenze non possano essere fuse.
Moment, moment! Perchè qui viene il bello!
Torniamo da Kurzwail per leggere che cosa ci dice in proposito:
“..L’intelligenza che creeremo grazie alla retro ingegnerizzazione del cervello sarà in grado di migliorarsi rapidamente in un ciclo di progettazione interattivo e accellerato.
Anche se il cervello umano biologico è dotato di notevole plasticità ha una architettura relativamente fissa che non può essere modificata significativamente e una capacità limitata. Non possiamo aumentare i suoi 300 milioni di riconoscitori di forme portandoli poniamo a 400 milioni se non per via non biologica.
Una volta raggiunto quel risultato non ci sarà motivo per fermarsi a un particolare livello di capacità.
Potremmo proseguire e dotarlo di un miliardo di riconoscitori di forme o di mille miliardi, dai miglioramenti quantitavi derivano passi avanti qualitativi, il passo piu’ importante nell’evoluzione di homo sapiens è stato di tipo quantitativo, lo sviluppo di una fronte piu’ ampia per fare spazio ad una maggior quantità di neo corteccia, una maggior capacità neo corticale ha consentito a questa nuova specie di creare e analizzare pensieri a livelli concettuali piu’ elevati e il risultato è stata l’apertura dei molti campi dell’arte e della scienza.
Aggiungendo altra neo corteccia in forma non biologica possiamo attenderci livelli qualitativi di astrazione ancora piu’ alti…”
Insomma i mammiferi hanno inventato la neo corteccia qualche decina di milioni di anni fa. E’ stata questa la loro principale innovazione evolutiva, poi i primati parecchi milioni di anni dopo hanno inventato come mettere tanta neo corteccia in poco spazio cioè ripiegandola su se stessa facendo si che il cervello assumesse l’aspetto che noi tutti conosciamo e ora l’essere umano sta studiando come ampliare la propria neo corteccia aggiungendo neo corteccia artificiale.
E’ un processo che pare inarrestabile e il risultato finale come scrisse Irvine J Good non potrà che essere una esplosione di intelligenza……..

Crypto Currency Dotcom
Mi interesso dello sviluppo sulle blockchain da un pò di tempo e più in particolare dello sviluppo in linguaggio Solidity di Smart Contracts sulla EVM.
Da un pò più di tempo seguo il trading sulle cryptovalute e da entrambe queste osservazioni ho percepito alcune conclusioni.
“Qui faccio questa congettura che può sembrare ancora prematura ma se la storia si ripete, in genere lo fa con schemi e attori a prima vista irriconoscibili.
Siamo portati a pensare che le prossime dotcom dovrebbero essere delle aziende registrate a qualche camera di commercio e non delle community. E invece parte della rivoluzione sta proprio qui.
Partiamo dalla tecnologia. Così come il web negli anni 90 era nient’altro che un protocollo, decentralizzato ed efficace per trasferire l’informazione fra i computer, il protocollo che governa la block chain (d’ora in poi la chiamerò blockchain, termine mai usato da Satoshi, ma comunemente usato oggi e forse un po’ inflazionato) è esso stesso un modo decentralizzato ed efficace per creare e trasferire un’attestazione notarile attraverso la rete ma senza un notaio. Da qui la creazione di moneta, o forse l’equivoco della creazione di moneta.
Satoshi Nakamoto ha definito il concetto, l’ha creato e poi ha regalato l’embrione che si è successivamente sviluppato all’interno della comunità Bitcoin che come spesso accade nel mondo del software assume i connotati dei movimenti religiosi, con correnti più o meno fondamentaliste ed altre più tolleranti.
Fa un po’ paura vedere come i brani del paper di Satoshi vengano a volte citati come verità incontrovertibili, una specie di vangelo, una redutio ad satoshium (come la hitlerium ma al contrario) che dovrebbe mettere a tacere le dispute.
Vitalik Buterin è il traditore (ok anche Mike Hearn, ma il tradimento è meno interessante), l’anticristo, colui che ha sfidato il Verbo con la creazione di Ethereum.
Se con Bitcoin non era ancora chiaro che le cripto sono le nuove dotcom, Ethereum fornisce i primi segnali di questa trasformazione del concetto di comunità open source in cripto azienda.
Ethereum non vuole essere una startup o un unicorno ma promette una piattaforma di calcolo decentralizzato e vuole farsi finanziare attraverso i bitcoin. Vitalik e soci vendono con la cosiddetta presale le quote della nuova società (o cripto azienda) che si chiamano ether, dicendo appunto che questi sarebbero stati la benzina della nuova piattaforma. Ma gli ether sono anch’essi in realtà le share dell’azienda Ethereum.
Il caso di Ethereum non è il primo e neanche l’ultimo, è forse solo il più importante ed emblematico. In realtà ogni altcoin è una nuova azienda. In alcuni casi viene fondata attraverso una ICO o crowdsale come Ethereum, Synereo, Melonport mentre in altri no, è semplicemente uno sforzo di una team che poi riesce a ottenere una massa critica di utenti e poi vengono quotati in qualche grande exchange.
Ci sono centinaia di altcoin. Se si mettono in ordine di capitalizzazione Bitcoin risulta più grande della somma di tutte le altre messe insieme, e varie volte. Ma questo è normale. E’ la power law, una legge naturale che regola molti aspetti della nostra vita.
E’ un mercato in cui l’incumbent è Bitcoin, gli altri devono trovare i loro spazi, questi spazi sono pochi e le alt devono veramente trovare una value proposition convincente. Si è cominciato con Litecoin. Value proposition = tempo di blocco più breve e mining con PC. Non è stata una value proposition così convincente anche se ha avuto il suo momento di gloria.
Quando guardiamo la pagina di coinmarketcap.com stiamo assistendo in realtà ad uno stock exchange naturale di un nuovo settore industriale, senza autorità di controllo e che risponde direttamente alle forze naturali del mercato.
La cosa interessante è che chiunque può acquisire le quote di queste nuove società comprando direttamente i loro coin.
Cosa producono queste cripto aziende?
Producono un servizio notarile globale e decentralizzato. E questo sicuramente è un valore.
Pensiamo ad esempio quanto ci costa un notaio per un semplice avvallo di un contratto. Bene, in questo caso il contratto è quello che dei crediti sono riconosciuti ai possessori di determinate chiavi crittografiche e che questi crediti possono essere movimentati all’interno di un registro che nessuno è in grado di manomettere e che nessuno “di fatto” controlla.
Bitcoin e i suoi piccoli fratelli quindi non sono dei protocolli informatici, o meglio non sono solo dei protocolli informatici come lo è ad esempio HTTP, sono invece dei sistemi in equilibrio economico analizzabili attraverso la teoria dei giochi.
Mantenere questo equilibrio costa, in particolare nel caso di Bitcoin costa energia elettrica che in modo più o meno indiretto è convertita in integrità del sistema. Senza l’incentivo economico sparisce l’integrità, sparisce l’utilità, sparisce la blockchain.
Non c’è blockchain senza coin e non c’è coin senza blockchain.
Il modello di attacco che ha reso Bitcoin e i suoi piccoli fratelli unico è quello di un mondo in cui nessuno è autenticato, nessuno è incaricato di mantenere la master copy del registro, dove tutti possono accedere con identità multiple e dove tutti sono potenzialmente intenzionati ad imbrogliare creando copie non regolari della blockchain per trarne profitto.
Questo modello di attacco non può allo stato dell’arte essere sostenuto se non con una blockchain basata su proof of work e, forse, proof of stake. Se il modello di attacco è più mite di quello descritto sopra, allora basterebbe un database transazionale.
Il CEO della cripto dotcom è il capo del software.
O meglio il board delle cripto dotcom è quel manipolo di developer che controlla il protocollo. Infatti la decentralizzazione è un concetto a volte citato a sproposito.
Chiariamo subito che “decentralizzato” è un attributo più forte di “distribuito”. Anche Google ha un sistema di server distribuito, ma dato che sono tutti suoi non c’è nessuna decentralizzazione.
La decentralizzazione è legata al controllo e alla proprietà della rete. In realtà nel caso di Bitcoin e di altre cripto ci sono almeno due livelli, un livello di diciamo esecutivo fatto da chi applica il protocollo.
Poi c’è un livello strategico o di governance, ossia chi decide come deve essere cambiato il protocollo e quindi quali saranno le sue evoluzioni. Chi controlla la reference implementation in termini di codice di fatto controlla la rete, ha in mano la governance ed è di fatto equivalente al board of executive di un’azienda tradizionale. Bitcoin Core è il l’attuale board della cripto dotcom Bitcoin.
Bitcoin è un’azienda B2B (business to business) ed i suoi clienti diretti sono i miner. I miner per definizione minano, sono i fruitori del protocollo, e traggono profitti dal mining stesso e dalle fee.
I detentori dei bitcoin sono i proprietari pro quota dell’azienda Bitcoin. Ogni satoshi una share. Ma nel caso di Bitcoin come esercitano il diritto di voto questi proprietari di share? Non esiste in Bitcoin un meccanismo diretto con cui eleggono ad esempio il nuovo board o approvano il bilancio.
I miner invece hanno più possibilità di influenzare il core team. Se ai miner non piace il core team i miner possono decidere di cambiare core team, ad esempio mettendo in funzione un nuovo software per il nodo, con un protocollo diverso, un blocco più largo o più stretto.
La scalata ostile a Bitcoin
Bitcoin Unlimited è iniziato come la scalata all’azienda Bitcoin. Gli attuali manager ovviamente non l’hanno presa bene. Solo il core team decide quanto si fa grande il blocco. Non m’interessa qui stabilire se è meglio Segwit o il blocco grande subito o qualunque altra soluzione tecnica. Mi interessa invece mettere in evidenza come l’attuale guerra sul blocco è in pratica una mozione di sfiducia verso l’attuale core team da parte di un altro team che vuole prendere il controllo.
Questa scalata ostile non è la prima e non sarà l’ultima. Anche Ethereum ha avuto i suoi bei trascorsi. Ricordiamo il famigerato theDAO hack. Una discreta percentuale di ether sifonati per un banale errore di programmazione di un contratto, non del mining software.
Perché Vitalik e co. hanno voluto a tutti i costi vandalizzare la blockchain dimostrando che l’immutabilità è in realtà derogabile se si dispone di una sufficiente forza di governance sul protocollo? Ma perché forse c’era in ballo molto più dei tanti ether sifonati, c’era in ballo la roadmap stessa di Ethereum che volendo passare ad un modello basato su proof-of-stake si sarebbe trovata con un grande e brutto cliente in grado di mettere la stake più alta, ovvero l’hacker.
Fare o non fare un hard fork porta delle conseguenze perché in tutt’e due i casi si tratta di scelte. Nel caso di Ethereum ha generato una sub cripto, l’Ethereum Classic che si acclama custode dell’immutabilità e che nei suoi giorni migliori ha sfiorato il 30% della capitalizzazione di ether. Nel caso di Bitcoin al contrario non si vuole fare l’hard fork e questo fa sì che qualcun altro magari lo faccia e si porti via i clienti, cioè i miner.
Anche la neonata e finora poco capitalizzata Zcash ha avuto il suo fork, con una subcommunity che apprezza sì il protocollo ma non vuole la company a gestirlo. Tutto molto legittimo e interessante ma anch’esso una scalata ostile.
Le élite.
Così come nelle startup chi mette un piccolo gettone all’inizio diventa miliardario quando queste si trasformano in unicorni, anche nelle cripto dotcom succede la stessa cosa. Chi ha minato i bitcoin nel 2010, o chi li ha comprati in massa nel 2011 oggi ha in mano una significativa porzione dell’azienda Bitcoin senza però i mezzi per poter controllare cosa fanno i suoi amministratori.
Ci saranno ad oggi un manipolo di bitcoiner early adopter che possiedono il 95% di tutti i bitcoin in circolazione. Se i bitcoin fossero veramente tutti i soldi del mondo questo configurerebbe forse lo scenario di maggiore diseguaglianza sociale mai visto nella storia dell’umanità.
Ma allora che cos’è la rivoluzione sociale e libertaria promossa dalle criptovalute? Rimpiazzare l’attuale sistema iniquo di creazione di denaro, di schiavitù liquida basata sul debito e sul credito con un nuovo sistema anch’esso iniquo in cui pochissimi attori possiedono la maggior parte della ricchezza?
In realtà la guerra su Bitcoin è una guerra per il controllo della più importante cripto. Ma se il valore ed il beneficio delle cripto nella loro interezza non dovesse essere quello prospettato allora meglio la bolla.
Meglio l’esplosione subito. Meglio che immediatamente si trovi o si ritrovi il senso della meravigliosa invenzione tecnica del Bitcoin ma che porti beneficio a tutti e non sia una mega speculazione ai danni di chi arriverà dopo.
In fondo dopo la bolla delle dotcom è nato il web come lo conosciamo oggi. Per il resto, l’élite ci sarà sempre e comunque per via della power law, ma alla base la sotto deve arrivare qualcosa di buono e non solo la cacca di piccione.”
Articolo tratto da digital.davide
Acquistate il libro qui