2 pontos por GN⁺ 2024-11-17 | 1 comentários | Compartilhar no WhatsApp
  • Os dados públicos do Bluesky cresceram até a escala de 15 milhões de usuários, e com o Jetstream é possível receber todos os eventos da rede em tempo real para fazer experimentos
  • Como é um firehose no formato de feed JSON via WebSocket, dá até para se conectar pelo navegador, e experimentos simples com dados em tempo real podem começar de graça
  • O app de exemplo detecta eventos de delete e mostra por último, em um feed anônimo e efêmero, o texto de posts apagados há instantes
  • O ambiente de operação usa uma máquina shared-cpu-1x com 256 MB de RAM da Fly.io e um volume persistente de 2 GB, com custos de US$ 1,94 e US$ 0,30 por mês, respectivamente
  • Não dá para garantir que todo app de firehose rode com essa leveza, mas alguns apps de consumo em tempo real podem operar bem apenas com uma instância mínima

Recebendo o firehose do Bluesky com Jetstream

  • Os dados do Bluesky são muito públicos, e atualmente existe um volume de dados públicos na escala de 15 milhões de usuários
  • Usando o Jetstream, é possível receber tudo o que acontece na rede como um feed JSON via WebSocket em tempo real
  • Também dá para conectar direto ao firehose no navegador e fazer experimentos simples, como extrair palavras aleatórias dos posts publicados naquele momento

Um app pequeno que mostra eventos de exclusão

  • O app experimental deletions.bsky.bad-example.com escuta todos os eventos delete do firehose e exibe o texto recém-apagado em um feed anônimo e efêmero
  • Esse app foi criado quando a rede Bluesky era bem menor do que é hoje, e agora a velocidade da rede aumentou a ponto de ficar bem mais caótica
  • Ele roda na menor instância da Fly.io
    • Fly machine, shared-cpu-1x, 256MB RAM: US$ 1,94 por mês
    • Volume persistente de 2GB: US$ 0,30 por mês
  • O fluxo de funcionamento é composto por um cache simples e correspondência com eventos de exclusão
    • Recebe todos os novos eventos create-post da coleção app.bsky.feed.post
    • Filtra posts vazios e aplica ocultação (redaction) a menções e links
    • Salva o texto tratado no pebbledb com a chave did+rkey
    • A cada poucos segundos, remove em lote os textos armazenados há mais de 48 horas
    • Quando chega um evento delete-post, procura o texto no cache e, se existir, faz broadcast para os observadores atuais
  • O escopo funcional é pequeno, mas roda com estabilidade na instância mínima da Fly.io, e alguns apps mais interessantes também podem ser operados em uma escala parecida

1 comentários

 
GN⁺ 2024-11-17
Opiniões no Hacker News
  • Há duas coisas boas no BlueSky: dá para usar o domínio do meu site como nome de usuário, como @bradgessler.com, e a função de copiar e colar imagens em mensagens no iOS funciona bem
    No X/Twitter, isso estava quebrado havia muito tempo. Há mais vantagens, mas essas duas me chamam especialmente a atenção. Se você precisa de um caminho para começar, também criei um starter pack para hackers Ruby: https://go.bsky.app/HXB2cPh
    Há muitos outros starter packs e comunidades também

    • Mais importante: é preciso verificar que você é dono do domínio. Não dá para se cadastrar como google.com
    • Essa lógica também se aplica ao X. No BlueSky, a verificação de domínio é mapeada via DNS para um identificador did:plc, e os AppViews (bsky.app, o app do BlueSky para smartphone etc.) consultam apenas o plc.directory, o “banco de dados” de propriedade do BlueSky
      Para que o nome de usuário seja um nome de domínio de verdade, o BlueSky teria que oferecer suporte a identificadores do tipo did:web, o que atualmente não acontece. No fim, no sentido de que o nome de usuário é mapeado para um banco de dados interno, é igual ao X. O BlueSky se parece mais com o Twitter antes de ter que devolver dinheiro aos investidores, e dá para apostar que, daqui a 10 anos, mais recursos vão quebrar enquanto eles se concentram em recuperar o investimento. Tenho uma leve inclinação para o lado do ActivityPub, mas reconheço que a arquitetura do BlueSky é melhor
    • Entrei na lista de espera do BlueSky no início por causa do recurso de usar um domínio como nome de usuário
      Há 11 anos, criei um agregador de mídias sociais no qual o usuário precisava ter um domínio verificado para se cadastrar; a ideia era usar o domínio como nome de usuário e autenticar perfis de redes sociais por meio desse domínio. Show HN da época: https://news.ycombinator.com/item?id=6529523
      Pode parecer ridículo, mas o motivo pelo qual acabei não usando o BlueSky foi ele não oferecer suporte a domínios com emoji
    • Acho que vai seguir o caminho do Threads e do Mastodon. O resultado, na melhor das hipóteses, será morno, mas fico feliz que você esteja se divertindo
  • O firehose do bsky é realmente divertido e tem uma sensação nostálgica de estar de volta a 2005
    No fim de semana passado, usei isso para criar uma coisinha bem silly: https://bigmood.blue/

    • É bem legal, gostei. Acho que ficaria mais limpo se, em vez da tela preta e de imagens repetidas, houvesse algo como uma fila com backoff exponencial
      Supondo que seja um problema da forma de exibição, parece que a mesma imagem única se repete muitas vezes em um curto intervalo. Se a fila fosse esvaziada mais lentamente conforme ficasse vazia (por exemplo, 0,5s/numInQueue; o último elemento esperaria no mínimo 0,5 segundo e aguardaria o próximo elemento entrar na fila), o fluxo ficaria mais constante, com menos telas vazias e menos repetição. Também seria bom se as imagens mantivessem a proporção original
    • A ideia é boa, mas pisca rápido demais. Talvez fosse melhor escolher uma imagem aleatória a cada 1 segundo, em vez de mostrar o firehose diretamente
    • Há algum jeito de reduzir as piscadas? Não tenho epilepsia e agradeço por mostrar o aviso antes, mas depois de uns 2 segundos ainda fica bem desagradável
      Seria um experimento bacana se desse para olhar por um pouco mais de tempo
    • Há uma trilha sonora perfeita para isso (aviso de luzes piscando): https://www.youtube.com/watch?v=wNtxgxYY7sI&t=66s
    • Em vez de “uma sensação nostálgica de estar de volta a 2005”, isso parece mais um movimento para fazer as pessoas investirem na plataforma, prendê-las e depois cobrar
  • Parece que voltamos aos bons tempos do Twitter antigo. Naquela época dava para criar coisas e experimentar com a API
    Eu já tinha até feito um bot que ganhou uma competição: https://theexceptioncatcher.com/blog/2015/11/how-i-got-my-bo...

  • É um recurso bacana e, mesmo deixando posições políticas de lado, vira um grande motivo para torcer pelo BlueSky em vez do X
    Também fico curioso se o BlueSky ou terceiros oferecem vários tipos de dumps em arquivos zip. Acho que isso seria melhor para reduzir a carga nos servidores

  • Era divertido brincar com o firehose do Twitter na época em que desenvolvedores comuns também conseguiam acesso. Fico animado ao ver essa ideia voltando

  • Isso é legal. Contrasta de forma gritante com as novas regras de API fechada que o Twitter lançou depois do Elon

  • Ainda fico irritado com o Twitter por ter quebrado todas as minhas automações e me pedido US$ 100 por mês. Pelo que parece, agora subiu para US$ 200
    Isso é quase o valor da prestação do meu carro. Não é uma quantia que uma pessoa comum consiga justificar

  • Tenho a sensação de que, em um futuro próximo, esses dados vão virar algum tipo de dado de treinamento para AI/LLM

    • O resultado só pode ser um de dois: ou todo mundo tem acesso, ou apenas algumas grandes empresas têm. Não é ideal, mas a primeira opção é muito melhor
    • É melhor que os dados estejam abertos para todos do que o acesso ficar restrito a algumas grandes empresas
    • Para ser justo, só de andar por uma rua com câmeras de CFTV, é bem provável que você já esteja virando dado de treinamento de alguma AI
    • Acho que pesquisadores vão querer dados antigos que não estejam contaminados por vômito de LLM
  • A demonstração de firehose com uma única palavra é excelente. Acho que pessoas criativas podem criar muitas coisas realmente legais com isso

  • Tenho uma conta importante no Twitter e publico manualmente posts, pensamentos, links, anúncios etc. nela
    Procurei uma forma de fazer cross-post automático para Threads e Bluesky, mas não encontrei. Alguém recomenda algum método?

    • Acho que isso é outro problema. Não há um jeito prático de mover dados de redes sociais, porque, se houver, a maior parte será usada de forma abusiva
    • Existem apps que permitem publicar em vários lugares, como OpenVibe e Yup