
Dezentrale Feeds, die BitTorrents DHT nutzen. Idee von Arvid und The_8472 „DHT RSS feeds" http://libtorrent.org/dht_rss.html
Dezentrale Feeds unter Verwendung des BitTorrent DHT. Idee von Arvid und The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
Das DHT von BitTorrent ist wahrscheinlich eines der widerstandsfähigsten und zensurresistentesten Netzwerke im Internet. PeerTweet verwendet dieses Netzwerk, um Nutzern das Senden von Tweets an alle zu ermöglichen, die zuhören. Wenn Sie PeerTweet starten, wird ein Hash @33cwte8iwWn7uhtj9MKCs4q5Ax7B generiert, der Ihrem Twitter-Benutzernamen (z.B. @lmatteis) ähnelt. Der Unterschied besteht darin, dass Sie die vollständige Kontrolle darüber haben, was gepostet werden kann, da nur Sie den privaten Schlüssel besitzen, der mit dieser Adresse verbunden ist. Darüber hinaus kann das, was Sie posten, dank des DHT von keiner Regierung oder Institution gestoppt werden.
Sobald Sie andere PeerTweet-Adressen gefunden haben, denen Sie vertrauen (und die kein Spam sind), können Sie ihnen folgen. Dadurch wird Ihr Client konfiguriert, die Tweets dieses Benutzers zu speichern und sie von Zeit zu Zeit an das DHT zu senden, um deren Feed am Leben zu erhalten. Diese Kooperation beim Folgen von Konten ermöglicht es, dass Feeds im DHT-Netzwerk aktiv bleiben. Das PeerTweet-Protokoll veröffentlicht auch Ihre Aktionen wie Ich bin @919c.. gefolgt oder Ich habe @9139.. geliked und Ich habe @5789.. retweetet. Dadurch können neue Benutzer andere Adressen finden, denen sie vertrauen können; wenn ich dem Benutzer @6749.. vertraue und dieser @9801.. folgt, kann ich @9801.. möglicherweise als nicht Spam markieren. Diese Idee, öffentlich über Ihre Aktionen zu twittern, ermöglicht auch leistungsstarke zukünftige Crawling-Analysen dieses sozialen Graphen.
PeerTweet folgt den meisten Implementierungsrichtlinien des DHT RSS Feed Vorschlags http://libtorrent.org/dht_rss.html. Wir haben es auf Basis des aktuellen BEP44 Vorschlags implementiert, der get()- und put()-Funktionalität über das DHT-Netzwerk bereitstellt. Das bedeutet, dass wir das DHT nicht nur verwenden, um anzukündigen, welche Torrents man gerade herunterlädt, sondern auch, um kleine Datenmengen (ca. 1000 Bytes) abzulegen und abzurufen.
PeerTweet unterscheidet zwischen zwei Arten von Elementen:
@lmattes-Handle). Der Feed-Head ist grob wie folgt strukturiert:{
"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>
}
Der Grund, warum Elemente mehrere Zeiger auf andere Elemente in der Liste haben, ist, parallele Lookups zu ermöglichen. Unsere Skip-Liste-Implementierung unterscheidet sich von regulären Implementierungen und ist für Netzwerk-Lookups ausgelegt. Dabei enthält jedes Element 4 Zeiger, sodass wir beim Empfang eines Elements vier get()-Anfragen parallel an andere Elemente in der Liste senden können. Dies ist entscheidend für den zeitnahen Zugriff auf Benutzerfeeds, da DHT-Lookups unvorhersehbare Antwortzeiten haben.
Wenn Sie jemandem folgen, weisen Sie Ihren Client im Wesentlichen an, dessen Feed herunterzuladen und von Zeit zu Zeit erneut zu veröffentlichen. Das DHT-Netzwerk ist nicht persistent, und Elemente verschwinden nach etwa 30 Minuten aus dem Netzwerk. Um Dinge am Leben zu erhalten, ist eine hohe Anzahl von Followern entscheidend für die Betriebszeit Ihres Feeds. Alternativ können Sie einen Server haben, der rund um die Uhr läuft und Ihren Feed am Leben erhält, indem er Elemente alle 30 Minuten neu veröffentlicht.
Installieren Sie Abhängigkeiten.
$ npm install
Die App enthält einige native Bindungen. Ich habe diesen Code verwendet, um sie auf meinem Computer zum Laufen zu bringen:
Quelle: 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
Um ed25519-supercop unter Windows zum Laufen zu bringen, musste ich auch node-gyp und all die Python2.7- und Visual Studio-Sachen installieren, die node-gyp benötigt: https://github.com/nodejs/node-gyp
Führen Sie dann diese Befehle aus, um es unter Windows zu bauen:
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
Führen Sie diese beiden Befehle gleichzeitig in verschiedenen Konsolen-Tabs aus.
$ npm run hot-server
$ npm run start-hot
Hinweis: Erfordert node Version >= 4 und npm Version >= 2.
Weitere Informationen finden Sie unter electron-debug.
Weitere Informationen finden Sie unter redux-devtools-dock-monitor.
Wenn Sie Bibliotheken von Drittanbietern verwenden, die nicht mit webpack gebaut werden können, müssen Sie sie in Ihrer webpack.config.base.js auflisten:
externals: [
// put your node 3rd party libraries which can't be built with webpack here (mysql, mongodb, and so on..)
]
Sie finden diese Zeilen in der Datei.
Importieren Sie CSS-Dateien als css-modules mit .module.css.
$ npm run package
Um Apps für alle Plattformen zu paketieren:
$ npm run package-all
Verwenden Sie electron-packager, um Ihre App mit der --all-Option für die Plattformen darwin (osx), linux und win32 (windows) zu paketieren. Nach dem Bau finden Sie sie im Ordner release. Andernfalls finden Sie nur eine für Ihr Betriebssystem.
Die Ordner test, tools, release und devDependencies in package.json werden standardmäßig ignoriert.
Wir fügen die peerDependencies einiger Module standardmäßig zur Ignorier-Option hinzu, um die Anwendungsgröße zu reduzieren.
babel-core wird von babel-loader benötigt und ist etwa 19 MB großnode-libs-browser wird von webpack benötigt und ist etwa 3 MB groß.Hinweis: Wenn Sie eines der oben genannten Module zur Laufzeit verwenden möchten, z.B.
require('babel/register'), sollten Sie sie vondevDependencieszudependenciesverschieben.
Bitte lesen Sie Building windows apps from non-windows platforms.
Wenn Sie eine natives Benutzeroberfläche (OS X El Capitan und Windows 10) wünschen, ist react-desktop möglicherweise ideal für Sie.
Dies ist ein Fork des Projekts https://github.com/chentsulin/electron-react-boilerplate.
MIT