
Feed decentralizzati che utilizzano il DHT di BitTorrent. Idea di Arvid e The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
Feed decentralizzati utilizzando il DHT di BitTorrent. Idea di Arvid e The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
Il DHT di BitTorrent è probabilmente una delle reti più resilienti e resistenti alla censura su internet. PeerTweet utilizza questa rete per permettere agli utenti di trasmettere tweet a chiunque stia ascoltando. Quando avvii PeerTweet, genera un hash @33cwte8iwWn7uhtj9MKCs4q5Ax7B che è simile al tuo nome utente Twitter (es. @lmatteis). La differenza è che hai il controllo totale su ciò che può essere pubblicato perché solo tu possiedi la chiave privata associata a tale indirizzo. Inoltre, grazie al DHT, ciò che pubblichi non può essere fermato da alcun governo o istituzione.
Una volta trovati altri indirizzi PeerTweet di cui ti fidi (e che non sono spam), puoi seguirli. Questo configura il tuo client per memorizzare i tweet di quell'utente e trasmetterli al DHT ogni tanto per mantenere vivo il loro feed. Questa cooperazione di seguire account permette ai feed di rimanere attivi nella rete DHT. Il protocollo PeerTweet pubblica anche le tue azioni come I just followed @919c.. o I just liked @9139.. e I just retweeted @5789... Questo offre la possibilità a nuovi utenti di trovare altri indirizzi di cui fidarsi; se mi fido dell'utente @6749.. e lui segue @9801.., allora posso segnare @9801.. come non spam. Questa idea di twittare pubblicamente le proprie azioni permette anche una potente analisi futura di crawling di questo grafo sociale.
PeerTweet segue la maggior parte delle linee guida di implementazione fornite dalla proposta DHT RSS feed http://libtorrent.org/dht_rss.html. Lo abbiamo implementato sopra l'attuale proposta BEP44 che fornisce funzionalità get() e put() sulla rete DHT. Ciò significa che, invece di usare il DHT solo per annunciare quali torrent si stanno scaricando, possiamo usarlo anche per mettere e ottenere piccole quantità di dati (circa 1000 byte).
PeerTweet distingue due tipi di elementi:
@lmattes). La testa del feed è approssimativamente strutturata come segue:{
"d": <unsigned int of minutes passed from epoch until head was modified>,
"next": <up to 80 bytes of the next 4 items in the feed, directly 1,2,3 and 4 hops away. 20 bytes each.>,
"n": <utf8 name of the feed>,
"a": <utf8 http url of an image to render as your avatar>,
"i": <utf8 description of your feed>
}
{
"d": <unsigned int of minutes passed from epoch until when item was created>,
"next": <up to 80 bytes of the next 4 items in the feed, 1, 2, 4 and 8 hops away. 20 bytes each.>,
"t": <utf8 contents of your tweet. up to 140 chars>
}
Il motivo per cui gli elementi hanno più puntatori ad altri elementi nella lista è per consentire ricerche parallele. La nostra implementazione della skip list differisce dalle implementazioni regolari ed è mirata alle ricerche di rete, dove ogni elemento contiene 4 puntatori in modo che quando riceviamo un elemento, possiamo emettere 4 richieste get() in parallelo verso altri elementi della lista. Questo è cruciale per accedere ai feed degli utenti in modo tempestivo perché le ricerche DHT hanno tempi di risposta imprevedibili.
Quando segui qualcuno, stai essenzialmente informando il tuo client di scaricare il suo feed e ripubblicarlo ogni tanto. La rete DHT non è persistente, e gli elementi escono rapidamente dalla rete dopo circa 30 minuti. Per mantenere le cose in vita, avere molti follower è cruciale per il tempo di attività del tuo feed. Altrimenti puoi comunque avere un server da qualche parte in esecuzione 24/7 che mantiene vivo il tuo feed ripubblicando gli elementi ogni 30 minuti.
Installa le dipendenze.
$ npm install
L'app viene fornita con alcuni binding nativi. Ho usato questo codice per farla funzionare sul mio computer:
Source: https://github.com/atom/electron/blob/master/docs/tutorial/using-native-node-modules.md
npm install --save-dev electron-rebuild
# Every time you run "npm install", run this
./node_modules/.bin/electron-rebuild
# On Windows if you have trouble, try:
.\node_modules\.bin\electron-rebuild.cmd
Per far funzionare ed25519-supercop su Windows ho anche dovuto installare node-gyp e tutto il materiale Python2.7 e Visual Studio di cui node-gyp ha bisogno: https://github.com/nodejs/node-gyp
Poi esegui questi comandi per compilarlo su Windows:
npm install -g node-gyp
cd ./node_modules/ed25519-supercop/
HOME=~/.electron-gyp node-gyp rebuild --target=0.36.9 --arch=x64 --dist-url=https://atom.io/download/atom-shell
Esegui questi due comandi simultaneamente in schede della console diverse.
$ npm run hot-server
$ npm run start-hot
Nota: richiede una versione di node >= 4 e una versione di npm >= 2.
Vedi electron-debug per maggiori informazioni.
Vedi redux-devtools-dock-monitor per maggiori informazioni.
Se usi librerie di terze parti che non possono essere costruite con webpack, devi elencarle nel tuo webpack.config.base.js:
externals: [
// put your node 3rd party libraries which can't be built with webpack here (mysql, mongodb, and so on..)
]
Puoi trovare quelle righe nel file.
Importa file css come css-modules usando .module.css.
$ npm run package
Per creare pacchetti per tutte le piattaforme:
$ npm run package-all
Usa electron-packager per creare il pacchetto della tua app con le opzioni --all per le piattaforme darwin (osx), linux e win32 (windows). Dopo la build, li troverai nella cartella release. Altrimenti, ne troverai solo uno per il tuo sistema operativo.
test, tools, release folder e devDependencies in package.json saranno ignorate per impostazione predefinita.
Aggiungiamo alcune peerDependencies dei moduli all'opzione di ignorare come predefinito per la riduzione delle dimensioni dell'applicazione.
babel-core è richiesto da babel-loader e la sua dimensione è ~19 MBnode-libs-browser è richiesto da webpack e la sua dimensione è ~3MB.Nota: Se vuoi usare uno dei moduli sopra in fase di esecuzione, ad esempio:
require('babel/register'), dovresti spostarli dadevDependenciesadependencies.
Consulta Building windows apps from non-windows platforms.
Se vuoi avere un'interfaccia utente simile a nativa (OS X El Capitan e Windows 10), react-desktop potrebbe fare al caso tuo.
Questo è un fork del progetto https://github.com/chentsulin/electron-react-boilerplate.
MIT