
Feeds descentralizados usando o DHT do BitTorrent. Ideia de Arvid e The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
Feeds descentralizados usando o DHT do BitTorrent. Ideia de Arvid e The_8472 "DHT RSS feeds" http://libtorrent.org/dht_rss.html
O DHT do BitTorrent é provavelmente uma das redes mais resilientes e resistentes à censura na internet. O PeerTweet usa essa rede para permitir que usuários transmitam tweets para qualquer pessoa que esteja ouvindo. Quando você inicia o PeerTweet, ele gera um hash @33cwte8iwWn7uhtj9MKCs4q5Ax7B que é semelhante ao seu nome de usuário do Twitter (ex. @lmatteis). A diferença é que você tem controle total sobre o que pode ser postado, pois somente você possui a chave privada associada a esse endereço. Além disso, graças ao DHT, o que você publica não pode ser interrompido por nenhum governo ou instituição.
Depois de encontrar outros endereços PeerTweet em que você confia (e que não são spam), você pode segui-los. Isso configura seu cliente para armazenar os tweets desse usuário e retransmiti-los para o DHT de vez em quando para manter seu feed ativo. Essa cooperação de seguir contas permite que os feeds permaneçam vivos na rede DHT. O protocolo PeerTweet também publica suas ações, como I just followed @919c.. ou I just liked @9139.. e I just retweeted @5789... Isso possibilita que novos usuários encontrem outros endereços confiáveis; se eu confio no usuário @6749.. e ele está seguindo @9801.., então talvez eu possa marcar @9801.. como não spam. Essa ideia de tuitar publicamente sobre suas ações também permite uma poderosa análise futura de crawling desse grafo social.
O PeerTweet segue a maioria das diretrizes de implementação fornecidas pela proposta DHT RSS feed http://libtorrent.org/dht_rss.html. Nós o implementamos sobre a atual proposta BEP44 que fornece funcionalidades get() e put() sobre a rede DHT. Isso significa que, em vez de apenas usar o DHT para anunciar quais torrents alguém está baixando no momento, podemos usá-lo também para colocar e obter pequenas quantidades de dados (aproximadamente 1000 bytes).
O PeerTweet diferencia entre dois tipos de itens:
@lmattes). O cabeçalho do feed é aproximadamente estruturado da seguinte forma:{
"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>
}
A razão pela qual os itens têm múltiplos ponteiros para outros itens na lista é permitir buscas paralelas. Nossa implementação de lista de salto difere das implementações regulares e é voltada para buscas em rede, onde cada item contém 4 ponteiros, de modo que, quando recebemos um item, podemos emitir 4 requisições get() em paralelo para outros itens na lista. Isso é crucial para acessar os feeds dos usuários em tempo hábil, porque as buscas DHT têm tempos de resposta imprevisíveis.
Quando você segue alguém, você está essencialmente informando seu cliente para baixar o feed dessa pessoa e republicá-lo de vez em quando. A rede DHT não é persistente, e os itens caem rapidamente da rede após aproximadamente 30 minutos. Para manter as coisas ativas, ter muitos seguidores é crucial para o tempo de atividade do seu feed. Caso contrário, você ainda pode ter um servidor em algum lugar executando 24/7 que mantém seu feed ativo republicando itens a cada 30 minutos.
Instalar dependências.
$ npm install
O aplicativo vem com algumas ligações nativas. Usei este código para fazê-lo funcionar no meu computador:
Fonte: 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 fazer ed25519-supercop funcionar no Windows, também precisei instalar o node-gyp e todas as coisas Python2.7 e Visual Studio que o node-gyp exige: https://github.com/nodejs/node-gyp
Em seguida, execute estes comandos para compilá-lo no 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
Execute estes dois comandos simultaneamente em abas de console diferentes.
$ npm run hot-server
$ npm run start-hot
Nota: requer uma versão do node >= 4 e uma versão do npm >= 2.
Veja electron-debug para mais informações.
Veja redux-devtools-dock-monitor para mais informações.
Se você usar bibliotecas de terceiros que não podem ser compiladas com webpack, você deve listá-las em seu webpack.config.base.js:
externals: [
// put your node 3rd party libraries which can't be built with webpack here (mysql, mongodb, and so on..)
]
Você pode encontrar essas linhas no arquivo.
Importe arquivos css como css-modules usando .module.css.
$ npm run package
Para empacotar aplicativos para todas as plataformas:
$ npm run package-all
Use electron-packager para empacotar seu aplicativo com a opção --all para as plataformas darwin (osx), linux e win32 (windows). Após a compilação, você os encontrará na pasta release. Caso contrário, você encontrará apenas um para seu sistema operacional.
test, tools, release e devDependencies em package.json serão ignoradas por padrão.
Adicionamos alguns peerDependencies de módulos à opção de ignorar como padrão para redução do tamanho do aplicativo.
babel-core é exigido pelo babel-loader e seu tamanho é ~19 MBnode-libs-browser é exigido pelo webpack e seu tamanho é ~3MB.Nota: Se você quiser usar qualquer um dos módulos acima em tempo de execução, por exemplo:
require('babel/register'), você deve movê-los dedevDependenciesparadependencies.
Por favor, consulte Compilando aplicativos Windows a partir de plataformas não Windows.
Se você quiser ter uma interface de usuário com aparência nativa (macOS El Capitan e Windows 10), react-desktop pode ser perfeito para você.
Este é um fork do projeto https://github.com/chentsulin/electron-react-boilerplate.
MIT