
Feeds descentralizados usando el DHT de BitTorrent. Idea de Arvid y The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
Feeds descentralizados usando el DHT de BitTorrent. Idea de Arvid y The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
El DHT de BitTorrent es probablemente una de las redes más resistentes y resistentes a la censura en Internet. PeerTweet utiliza esta red para permitir a los usuarios transmitir tweets a cualquiera que esté escuchando. Cuando inicias PeerTweet, genera un hash @33cwte8iwWn7uhtj9MKCs4q5Ax7B que es similar a tu nombre de usuario de Twitter (ej. @lmatteis). La diferencia es que tienes control total sobre lo que se puede publicar porque solo tú posees la clave privada asociada a dicha dirección. Además, gracias al DHT, lo que publiques no puede ser detenido por ningún gobierno o institución.
Una vez que encuentres otras direcciones de PeerTweet en las que confíes (y que no sean spam), puedes seguirlas. Esto configura tu cliente para almacenar los tweets de ese usuario y transmitirlos al DHT de vez en cuando para mantener su feed vivo. Esta cooperación al seguir cuentas permite que los feeds se mantengan activos en la red DHT. El protocolo PeerTweet también publica tus acciones como I just followed @919c.. o I just liked @9139.. y I just retweeted @5789... Esto permite la posibilidad de que nuevos usuarios encuentren otras direcciones en las que puedan confiar; si confío en el usuario @6749.. y él sigue a @9801.., entonces quizás pueda marcar @9801.. como no spam. Esta idea de tuitear públicamente sobre tus acciones también permite un poderoso análisis futuro de rastreo de este grafo social.
PeerTweet sigue la mayoría de las pautas de implementación proporcionadas por la propuesta de feed RSS del DHT http://libtorrent.org/dht_rss.html. Lo implementamos sobre la propuesta actual BEP44 que proporciona funcionalidad get() y put() sobre la red DHT. Esto significa que, en lugar de usar el DHT solo para anunciar qué torrents se están descargando, también podemos usarlo para poner y obtener pequeñas cantidades de datos (aproximadamente 1000 bytes).
PeerTweet diferencia entre dos tipos de elementos:
@lmattes). La cabeza del feed tiene la siguiente estructura aproximada:{
"d": <entero sin signo de minutos transcurridos desde la época hasta que la cabeza fue modificada>,
"next": <hasta 80 bytes de los siguientes 4 elementos del feed, directamente a 1,2,3 y 4 saltos de distancia. 20 bytes cada uno.>,
"n": <nombre utf8 del feed>,
"a": <url http utf8 de una imagen para renderizar como tu avatar>,
"i": <descripción utf8 de tu feed>
}
{
"d": <entero sin signo de minutos transcurridos desde la época hasta que el elemento fue creado>,
"next": <hasta 80 bytes de los siguientes 4 elementos del feed, a 1, 2, 4 y 8 saltos de distancia. 20 bytes cada uno.>,
"t": <contenido utf8 de tu tweet. hasta 140 caracteres>
}
La razón por la que los elementos tienen múltiples punteros a otros elementos en la lista es para permitir búsquedas paralelas. Nuestra implementación de lista de salto difiere de las implementaciones regulares y está orientada a búsquedas en red, donde cada elemento contiene 4 punteros para que cuando recibamos un elemento, podamos emitir 4 solicitudes get() en paralelo a otros elementos de la lista. Esto es crucial para acceder a los feeds de los usuarios de manera oportuna porque las búsquedas DHT tienen tiempos de respuesta impredecibles.
Cuando sigues a alguien, esencialmente estás informando a tu cliente para que descargue su feed y lo vuelva a publicar de vez en cuando. La red DHT no es persistente, y los elementos desaparecen rápidamente de la red después de aproximadamente 30 minutos. Para mantener las cosas vivas, tener muchos seguidores es crucial para el tiempo de actividad de tu feed. De lo contrario, aún puedes tener un servidor ejecutándose 24/7 que mantenga tu feed vivo republicando elementos cada 30 minutos.
Instalar dependencias.
$ npm install
La aplicación viene con algunos enlaces nativos. Yo usé este código para que funcione en mi computadora:
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
Para que ed25519-supercop funcione en Windows también tuve que instalar node-gyp y todo el material de Python2.7 y Visual Studio que node-gyp requiere: https://github.com/nodejs/node-gyp
Luego ejecuta estos comandos para construirlo en 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
Ejecuta estos dos comandos simultáneamente en diferentes pestañas de consola.
$ npm run hot-server
$ npm run start-hot
Nota: requiere una versión de node >= 4 y una versión de npm >= 2.
Consulta electron-debug para más información.
Consulta redux-devtools-dock-monitor para más información.
Si usas alguna librería de terceros que no se pueda construir con webpack, debes listarlas en tu webpack.config.base.js:
externals: [
// put your node 3rd party libraries which can't be built with webpack here (mysql, mongodb, and so on..)
]
Puedes encontrar esas líneas en el archivo.
Importa archivos css como css-modules usando .module.css.
$ npm run package
Para empaquetar aplicaciones para todas las plataformas:
$ npm run package-all
Usa electron-packager para empaquetar tu aplicación con las opciones --all para las plataformas darwin (osx), linux y win32 (windows). Después de la compilación, los encontrarás en la carpeta release. De lo contrario, solo encontrarás una para tu sistema operativo.
test, tools, release folder and devDependencies in package.json will be ignored by default.
Agregamos algunas peerDependencies de módulos a la opción de ignorar por defecto para reducir el tamaño de la aplicación.
babel-core es requerido por babel-loader y su tamaño es ~19 MBnode-libs-browser es requerido por webpack y su tamaño es ~3MB.Nota: Si quieres usar alguno de los módulos anteriores en tiempo de ejecución, por ejemplo:
require('babel/register'), debes moverlos dedevDependenciesadependencies.
Por favor, consulta Compilación de aplicaciones para Windows desde plataformas que no son Windows.
Si quieres tener una interfaz de usuario similar a la nativa (OS X El Capitan y Windows 10), react-desktop puede ser perfecto para ti.
Este es un fork del proyecto https://github.com/chentsulin/electron-react-boilerplate.
MIT