(espelho HTTP de gopher://carlos-cdb.top)

Sempre achei redes sociais meio chatas, quando comecei a ter acesso
a internet já era a época do Orkut, como era uma novidade acabei
criando uma conta lá. O comportamento das pessoas lá era meio 
bizarro, elas praticamente se cobravam explicitamente por atenção.

Quando começou a onda de migração para o Facebook eu acabei indo pra
lá, e no começo até que achei interessante, pelo menos no começo ele
passava uma imagem de algo mais sério, no fim deu na mesma, se tornou
uma rede de pessoas implorando por atenção, fazendo escândalo, postando
lixo e etc.

Eu segui por longos anos apenas "mantendo" minhas contas, ou seja, só
deixando lá parada e de vez em quando entrando pra ver se tinha algo
de interessante. Mas algo mudou no começo (ou meio) do ano passado:
conheci o NOSTR (Notes and Other Stuff Transmitted by Relays). O que
me chamou muita a atenção foi o fato de apresentar uma forma diferente
de distribuição de dados, pois acho que todo mundo deva conhecer o
Mastodon por exemplo, entre outras muitas redes que são federadas, mas
NOSTR é diferente (inclusive não é uma "rede", e sim um protocolo).

Basicamente o que temos no NOSTR é um par de chaves assimétricas, nada
de "contas" em servidor A, B ou C, você simplesmente gera suas chaves
(inclusive offline se você preferir) e começa a enviar notas para
qualquer relay disponível na internet, e até mesmo para algum relay
pessoal na sua rede interna (já tem um bom número de implementações de
relays pela internet). Inclusive nesse mesmo domínio do gopher estou
rodando um relay pessoal, mas vou falar disso mais adiante.

O protocolo foi definido para operar via websockets, então todos os
relays implementados que você encontrar se comunicarão dessa forma.
Você pode ver todos os detalhes do protocolo em: 
https://github.com/nostr-protocol/nips/blob/master/README.md
então não vou entrar em muitos detalhes além do que já disse
anteriormente. Como NOSTR é só um protocolo ele vai depender de que
pessoas mantenham relays públicos, e para o uso mais massivo que tenham
disponíveis clientes "user friendly".

Sobre relays públicos você pode encontrar diversos em https://nostr.watch/
inclusive com a opção de aplicar alguns filtros para achar os relays que
melhor te atendem. Sobre como ter seu próprio relay vou ficar devendo por
enquanto, talvez eu fale só disso em outro post.

Já sobre clientes, você pode encontrar uma lista em: https://nostr.com/clients
Os que eu mais uso via browser são Primal (https://primal.net) e Nostrudel
(https://nostrudel.ninja). Para dispositivo móvel (uso Android) o Amethyst,
esse está disponível na Google Play e Obtainium, então é só fazer uma busca.

Por enquanto é isso, depois vou editar essa parte e continuar mostrando
algumas coisas funcionando e qual a minha chave pública la.

Continuando...

Para começar a mostrar algumas coisas mais práticas sugiro para um primeiro
contato o "nostr-commander-rs" que pode ter seu código fonte baixado em:
https://github.com/8go/nostr-commander-rs
Ele é um cliente bem simples que salva um perfil na sua máquina e se comunica
com os relays que você adicionar, ele vai rodar via terminal mesmo, então só
baixar, compilar e testar. Na própria página eles explicam tudo isso, só vou
falar a respeito de como criar suas chaves locais usando esse cliente (tem uma
forma mais fácil com openssl, mas já vou aproveitar para mostrar esse cliente).

Baixado e compilado podemos criar um "perfil" da seguinte forma: 

nostr-commander-rs --create-user --name "Nome" \
    --display-name "usuario" --about "Sobre você" \
    --picture "https://carlos-cdb.top/server/upload/1718919490079-media-cache.png" \
    --add-relay "wss://carlos-cdb.top"

No comando acima (use o local correto do binário ou adicione ao path) estou criando
meu perfil com um nome qualquer, uma imagem minha e o meu relay, nesse momento você
pode usar os relays da listagem que falei anteriormente, inclusive você pode adicionar
mais de um, sendo que no geral as pessoas usam entre 5 - 10 relays, no caso coloquei
somente o meu para explicação somente. Rodando esse comando será oferecido uma opção
de configurar uma nip05, que é uma forma de associar um domínio seu a sua chave
pública, por enquanto não vamos ver isso, talvez em outro post, então somente
pressione enter.

Feito esse processo já podemos começar a usar NOSTR, verifique se foi gerado o arquivo
com suas chaves corretamente, para isso pode rodar:
cat ~/.local/share/nostr-commander-rs/credentials.json

Se o arquivo existir, estiver com as informações fornecidas no comando anterior +
chave privada e pública está tudo certo. Agora vamos "seguir" uma pessoa com o comando
nostr-commander-rs --subscribe-author ce4446d03e99590cc48ca58ecbbf476f161927cd28b96d7459466f420581579e

O parâmetro do comando acima é a chave pública do usuário que você vai seguir, no caso
essa é minha chave pública, mas poderia ser qualquer outra. Depois disso podemos ver
algumas notas com o comando: 
nostr-commander-rs --listen

depois de alguns segundos você verá algumas notas minhas, a exibição não é das melhores
mas é um bom começo. Via --help você verá várias opções, brinque um pouco com elas, como
por exemplo a criação de uma nova nota via --publish, será interessante enviar algo
para os relays para avançar para a próxima etapa. O próximo aplicativo da lista 
é o Nostcat, que pode ser baixado aqui:
https://github.com/blakejakopovic/nostcat

Diferente do que acabamos de ver, esse tem o único objetivo de facilitar as consultas via 
websocket em um relay específico. Um exemplo de uso seria: 
echo '["REQ", "id", {"authors": ["7576158e2ec72b617b8ae6e75ad3ebba3ba2085006c93b4d2aff747a1c819787"], "limit": 10}]' | nostcat wss://carlos-cdb.top

Veja que estamos redirecionando uma string com a consulta para o binário do nostcat que por sua
vez está se conectando ao meu relay mais uma vez, a chave que está no parâmetro authors
é uma chave aleatória de testes, você pode usar a mesma do aplicativo anterior, somente
pegando a chave pública do seu perfil (comando cat no arquivo credentials) e rodar
nostr-commander-rs --npub-to-hex npubaqui

essa chave no formato hex pode ser usada no Nostcat, lembre-se de trocar o relay caso no seu
teste você não tenha usado o mesmo relay que o meu. Você pode aprender mais sobre como
criar essas querys em: 
https://github.com/nostr-protocol/nips/blob/master/01.md#communication-between-clients-and-relays
Novamente fica a critério da sua criatividade usar isso para gerar suas
próprias consultas. Com isso já estamos usando NOSTR, agora caso queirar testar
via interface gráfica, volte na lista de clientes que coloquei mais acima e use sua
chave gerada no cliente via terminal, ou mesmo crie novas caso ache mais conveninente.
Lembrando que via nostcat você pode omitir a chave em authors e passar a
buscar por notas aleatórias, caso goste de alguma coisa pegue a pubkey e siga.
Por enquanto é isso, espero que seja um assunto que emplogue os leitores da mesma forma
que eu, até mais. o/