
Flux décentralisés utilisant le DHT de BitTorrent. Idée d'Arvid et The_8472 « DHT RSS feeds » http://libtorrent.org/dht_rss.html
Flux décentralisés utilisant le DHT de BitTorrent. Idée d'Arvid et The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
Le DHT de BitTorrent est probablement l'un des réseaux les plus résilients et résistants à la censure sur Internet. PeerTweet utilise ce réseau pour permettre aux utilisateurs de diffuser des tweets à quiconque écoute. Lorsque vous démarrez PeerTweet, il génère un hachage @33cwte8iwWn7uhtj9MKCs4q5Ax7B qui est similaire à votre nom d'utilisateur Twitter (ex. @lmatteis). La différence est que vous avez un contrôle total sur ce qui peut être publié, car vous seul possédez la clé privée associée à cette adresse. De plus, grâce au DHT, ce que vous publiez ne peut être arrêté par aucun gouvernement ou institution.
Une fois que vous trouvez d'autres adresses PeerTweet auxquelles vous faites confiance (et qui ne sont pas du spam), vous pouvez les suivre. Cela configure votre client pour stocker les tweets de cet utilisateur et les rediffuser sur le DHT de temps en temps pour maintenir leur flux actif. Cette coopération de comptes suivis permet aux flux de rester vivants sur le réseau DHT. Le protocole PeerTweet publie également vos actions comme I just followed @919c.. ou I just liked @9139.. et I just retweeted @5789... Cela permet aux nouveaux utilisateurs de trouver d'autres adresses fiables ; si je fais confiance à l'utilisateur @6749.. et qu'il suit @9801.., alors je peux peut-être marquer @9801.. comme non-spam. Cette idée de tweeter publiquement vos actions permet également une future analyse puissante de ce graphe social via le crawling.
PeerTweet suit la plupart des directives d'implémentation fournies par la proposition de flux RSS DHT http://libtorrent.org/dht_rss.html. Nous l'avons implémentée par-dessus la proposition actuelle BEP44 qui fournit des fonctionnalités get() et put() sur le réseau DHT. Cela signifie que, plutôt que d'utiliser uniquement le DHT pour annoncer quels torrents on est en train de télécharger, nous pouvons également l'utiliser pour mettre et obtenir de petites quantités de données (environ 1000 octets).
PeerTweet distingue deux types d'éléments :
@lmattes). L'en-tête du flux est structuré approximativement comme suit :{
"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>
}
La raison pour laquelle les éléments ont plusieurs pointeurs vers d'autres éléments de la liste est de permettre des recherches parallèles. Notre implémentation de liste à saut diffère des implémentations régulières et est conçue pour les recherches réseau, où chaque élément contient 4 pointeurs de sorte que lorsque nous recevons un élément, nous pouvons lancer 4 requêtes get() en parallèle vers d'autres éléments de la liste. Ceci est crucial pour accéder aux flux des utilisateurs en temps opportun car les recherches DHT ont des temps de réponse imprévisibles.
Lorsque vous suivez quelqu'un, vous informez essentiellement votre client de télécharger son flux et de le republier de temps en temps. Le réseau DHT n'est pas persistant, et les éléments disparaissent rapidement du réseau après environ 30 minutes. Pour maintenir les choses en vie, avoir de nombreux abonnés est crucial pour la disponibilité de votre flux. Sinon, vous pouvez toujours avoir un serveur quelque part fonctionnant 24h/24 et 7j/7 qui maintient votre flux en vie en republiant les éléments toutes les 30 minutes.
Installer les dépendances.
$ npm install
L'application est livrée avec certaines liaisons natives. J'ai utilisé ce code pour la faire fonctionner sur mon ordinateur :
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
To get ed25519-supercop to work on Windows I also had to install node-gyp and all the Python2.7 and Visual Studio stuff which node-gyp requires: https://github.com/nodejs/node-gyp
Then run these commands to build it on 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
Exécutez ces deux commandes simultanément dans différents onglets de console.
$ npm run hot-server
$ npm run start-hot
Remarque : nécessite une version de node >= 4 et une version de npm >= 2.
Voir electron-debug pour plus d'informations.
Voir redux-devtools-dock-monitor pour plus d'informations.
Si vous utilisez des bibliothèques tierces qui ne peuvent pas être construites avec webpack, vous devez les lister dans votre webpack.config.base.js :
externals: [
// put your node 3rd party libraries which can't be built with webpack here (mysql, mongodb, and so on..)
]
Vous pouvez trouver ces lignes dans le fichier.
Importez le fichier CSS en tant que css-modules en utilisant .module.css.
$ npm run package
Pour empaqueter des applications pour toutes les plateformes :
$ npm run package-all
Utilisez electron-packager pour empaqueter votre application avec l'option --all pour les plateformes darwin (osx), linux et win32 (windows). Après la construction, vous les trouverez dans le dossier release. Sinon, vous n'en trouverez qu'un pour votre système d'exploitation.
Les dossiers test, tools, release et les devDependencies dans package.json seront ignorés par défaut.
Nous ajoutons les peerDependencies de certains modules à l'option d'ignorance par défaut pour réduire la taille de l'application.
babel-core est requis par babel-loader et sa taille est d'environ 19 Monode-libs-browser est requis par webpack et sa taille est d'environ 3 Mo.Remarque : Si vous souhaitez utiliser l'un des modules ci-dessus au moment de l'exécution, par exemple :
require('babel/register'), vous devez les déplacer dedevDependenciesversdependencies.
Veuillez consulter Construire des applications Windows depuis des plateformes non Windows.
Si vous souhaitez avoir une interface utilisateur d'apparence native (OS X El Capitan et Windows 10), react-desktop pourrait vous convenir parfaitement.
Ceci est un fork du projet https://github.com/chentsulin/electron-react-boilerplate.
MIT