Uma coisa típica de cultura corporativa disfuncional, e que conduz a pessoas que se viram bem acabarem se comunicando menos, é quando alguém fala "glr eu vou resolver o problema _____ na terça à tarde, quem tiver o mesmo problema e quiser participar, é só confirmar até segunda 17h"
aí chegam 3 respostas:
– só posso se for na quarta
– eu acho que isso tinha que ser de manhã
– posso confirmar no dia?
Impor condições a quem ofereceu apoio também é um tipo de desvalorização, que – caso aconteça ao seu redor – precisa ser percebido, prevenido e combatido, para que as pessoas com iniciativa não desistam de compartilhar espontaneamente a sua capacidade resolutiva.
Essa imagem exprime muito bem como funciona, em mim, a rigidez cogniva que é parte do meu autismo.
Uma pessoa de caiaque sobre um lago cuja superfície está congelada. Atrás dela há o rastro do caiaque e a marca dos pontos em que as remadas romperam a superfície de gelo.
Se tá na hora de andar de caiaque, tá na hora de andar de caiaque, e não importa se o lago congelou, ou o que a Britney anda fazendo na hípica.
(desconheço o autor, mas era esse tipo de historinha que circulava na Internet brasileira lá por 1995)
Aprender alemão é fácil
A língua alemã é relativamente fácil. Quem sabe algum idioma clássico e está habituado com as declinações, pode aprendê-la sem grandes dificuldades — ao menos é o que os professores de Alemão dizem em suas primeiras aulas.
Em seguida, quando começamos a estudar os der, des, den, dem, die, eles dizem que é moleza: tudo é apenas uma questão de lógica. Realmente é muito simples; podemos ver isso no exemplo que passamos a examinar.
Tomemos um honesto livro alemão: um volume magnífico, encadernado em couro, publicado em Dortmund, que descreve os usos e costumes dos hotentotes (em Alemão, hottentotten).
O livro nos conta que os cangurus (Beutelratten) são capturados e colocados em jaulas (Kotter) cobertas de um tecido (Lattengitter), para abrigá-los do mau tempo. Essas jaulas são chamadas, em Alemão, "jaulas cobertas de tecido" (Lattengitterkotter); assim que botam um canguru dentro delas, ele é chamado Lattengitterkotterbeutelratten, "o canguru da jaula coberta de tecido".
Um dias os hotentotes capturaram um assassino (Attentater), acusado de ter matado uma mãe (Mutter) hotentote - Hottentottermutter -, que tinha um filho tonto e gago (stottertrottel). Essa pobre mãe se chama, em Alemão, Hottentottenstottertrottelmutter, e seu assassino é chamado de Hottentottenstottertrottelmutterattentater. A polícia prendeu o assassino e o enfiou provisoriamente numa gaiola de canguru (Beutelrattenlattengitterkotter), mas o prisioneiro escapou. As buscas mal tinham começado, quando surgiu um guerreiro hotentote, gritando:
— Capturei o assassino! (Attentater).
— Sim? Qual? — perguntou o chefe.
— O Lattengitterkotterbeutelratterattentater! — respondeu o guerreiro.
— Como assim? O assassino que estava na jaula de cangurus coberta de tecido? — perguntou o chefe dos hotentotes.
— É, sim, é o Hottentottenstottertrottelmutteratentater (o assassino da mãe hotentote de um menino tonto e gago) — respondeu o nativo.
- Ora , respondeu o chefe, poderias ter me dito desde o início que tinhas capturado o Hottentotterstottertrottelmutterlattengitterkotterbeutelrattenattentater.
Como dá para ver, o Alemão é uma língua fácil; basta a gente se interessar um pouquinho...
Hoje veremos como criar scripts que buscam as informações de identificação de uma instância, e de que forma é possível identificar se ela é brasileira – ou, no mínimo, se suas informações estão em português.
O meu script de censo do Fediverso BR é executado aproximadamente uma vez por ano. Ele percorre as dezenas de milhares (mais de 100.000, neste momento) de servidores federados, buscando identificar quais correspondem a instâncias brasileiras, e quais as tendências em relação a elas.
Eu resisto a compartilhá-lo, porque como envolve mais de 100.000 servidores, eu não quero contribuir gerar ainda mais demandas e custos aos seus admins, ao facilitar que um monte de gente rode scripts que os contatem indiscriminadamente.
Compartilhando só a lógica central
Neste final de semana eu estou rodando essa rotina novamente (a vez anterior foi em fevereiro de 2025), e o Josir Gomes voltou a me pedir pra compartilhar o script. Eu tenho certeza de que a intenção dele é boa, pois sei que ele é pesquisador sobre esse tema, e que seu interesse (assim como o de outros pesquisadores e interessados) é legítimo.
Por isso,decidi compartilhar (só) o filé mignon do meu script: as rotinas que obtém os dados sobre um servidor, e a descrição do método que uso para identificar se são brasileiros (ou lusófonos, dependendo do critério). Ao final, faço um pedido especial de responsabilidade ao usar as técnicas aqui descritas.
Importante: Para rodar os scripts abaixo, você precisa ter uma shell Bash ou compatível, com o awk e o gron (para facilitar o consumo das respostas em formato JSON), instalados em um sistema compatível com o Posix (como a maior parte das distribuições Linux, o Mac e Unix em geral). Não incluirei as explicações detalhadas, mas todos os mecanismos que usei hoje já estão explicados no post anterior: “Programando bots para o Mastodon: listando usuários via API” (e nos seus antecessores)
Hoje veremos um método baseado no ActivityPub, e outro que usa especificamente a API do Mastodon.
Quase todos os serviços on-line interativos conectados ao Fediverso respondem a chamadas básicas de identificação "NodeInfo", que estão definidas no protocolo ActivityPub, e um grande número deles também responde a chamadas bem mais detalhadas que fazem parte do protocolo Mastodon (com o qual vários outros serviços são compatíveis).
Veremos hoje como identificar um servidor a partir de cada uma das duas chamadas de identificação acima: a básica (do ActivityPub) e a detalhada (do Mastodon e seus compatíveis).
Usarei a minha própria instância (arram.senta-la.cloud) nos exemplos, mas você pode substituir pela que desejar consultar.
Identificação básica usando o ActivityPub
Como dito, o tipo de identificação "NodeInfo" funciona na grande maioria dos servidores interativos conectados ao Fediverso (incluindo Mastodon, Misskey, Lemmy, GoToSocial, Snac, Ghost, WordPress e mais), e ela tem 2 passos: (1) obter qual a URL de informações do servidor; e (2) obter as informações do servidor.
Passo 1. Para obter a URL de informações do servidor, é necessário consultar a sua url /.well-known/nodeinfo, como no exemplo:
Na listagem acima, o comando que eu digitei na shell interativa está em negrito, e as demais linhas são a resposta recebida. A linha que nos interessa é a penúltima, que define o href do link.
No exemplo acima, portanto, descobrimos que a URL de informações do servidor é https://arram.senta-la.cloud/nodeinfo/2.0. Agora que a conhecemos, podemos consultá-la também:
gron "https://arram.senta-la.cloud/nodeinfo/2.0"
json = {};
json.metadata = {};
json.metadata.nodeDescription = "arram.senta-la.cloud - A instância das trends, tags, efemérides e estatísticas no Fediverso BR. Bem-vindos à federação!";
json.metadata.nodeName = "Arram, senta lá, Cloud!";
json.openRegistrations = false;
json.protocols = [];
json.protocols[0] = "activitypub";
(...)
Novamente, o comando que eu digitei na shell interativa está em negrito, e as demais linhas são o início da resposta recebida, que eu cortei pois é extensa.
Note que as linhas retornadas apresentam várias informações sobre a minha instância, que roda o serviço Mastodon.
Para outros serviços (mesmo que sejam compatíveis com o Mastodon), os nomes dos atributos serão os mesmos, mas podem ser retornadas outros atributos (a menos, ou a mais) – por exemplo, se você inspecionar uma instância PeerTube, ela também retornará os formatos e resoluções de vídeo que ela suporta, e se você consultar uma instância Sharkey, ela retornará também o contato de seu admin (que o Mastodon não retorna nessa chamada).
O script a seguir realiza as duas consultas à minha instância e mostra o conteúdo de alguns atributos selecionados (que não necessariamente todas as instâncias retornarão ao responder a essa chamada):
Note que no script acima são feitos dois acessos ao servidor: o primeiro é para descobrir qual a URL de informações, e o segundo para consultá-la, retornando a seguir o conteúdo de alguns de seus atributos: o nome e descrição da instância, o nome e versão do software que está rodando nela, e algumas estatísticas básicas.
Nem todo servidor responde a essa chamada, mas ela funciona com a ampla maioria deles.
Se desejar, você pode modificar o script para tornar parametrizável, suportar mais (ou outros) atributos, e incluir tratamento de erro, por exemplo.
Identificação mais ampla usando a API do Mastodon
Além do próprio Mastodon, vários outros serviços do Fediverso (como o Snac, GoToSocial, WordPress e muitos outros) respondem a chamadas da API do Mastodon, de uma forma similar à que vimos acima, mas às vezes retornando mais informações.
Diferente do caso que vimos acima, fazer a consulta pela API do Mastodon envolve apenas uma chamada ao servidor, pela sua URL /api/v1/instance, como no exemplo:
gron "https://arram.senta-la.cloud/api/v1/instance"
json = {};
json.approval_required = false;
json.short_description = "arram.senta-la.cloud - A instância das trends, tags, efemérides e estatísticas no Fediverso BR. Bem-vindos à federação!";
json.stats = {};
json.stats.domain_count = 11027;
json.stats.status_count = 15863;
json.stats.user_count = 9;
json.title = "Arram, senta lá, Cloud!";
json.uri = "arram.senta-la.cloud";
json.version = "4.5.4";
Mais uma vez, o comando que eu digitei na shell interativa está em negrito, e as demais linhas são partes da resposta recebida, que eu cortei pois é extensa.
Ao fazer essa chamada a um servidor Mastodon, a resposta trará várias dezenas de atributos, descrevendo a instância, todas as suas regras, os detalhes sobre a conta de seu admin, a sua política quanto a aceitar ou não novas contas, quantos caracteres podem ter os seus posts, quantas alternativas podem ter as suas enquetes, e mais.
Novamente, ao fazermos a mesma chamada a outros tipos de servidores (compatíveis, mas que não estejam rodando o software Mastodon), os atributos terão os mesmos nomes, mas o conjunto pode ser diferente – por exemplo, uma instância Sharkey pode não retornar detalhes sobre seu admin, e uma instância Snac pode não listar suas regras.
O script a seguir realiza a consulta à minha instância e mostra o conteúdo de alguns atributos selecionados (que não necessariamente todas as instâncias compatíveis retornarão ao responder a essa chamada):
#!/usr/bin/env bash
#
# instinfo_MAS.sh - obtém via API Mastodon informações sobre uma instância
#
# Copyright (c) 2026, Augusto Campos (https://augustocampos.net/).
# Licensed under the Apache License, Version 2.0.
inst="https://arram.senta-la.cloud"
curl -sL "$inst/api/v1/instance" | gron | awk -F" = " '
/[.]title/ { print "título",$2 }
/[.](short_)?description/ { print "descrição",$2 }
/[.]languages\[/ { print "idioma",$2 }
/[.]contact_account[.]display_name/ { print "admin - nome",$2 }
/[.]contact_account[.]note/ { print "admin - nota",$2 }
/[.]contact_account[.]url/ { print "admin - url",$2 }
/[.]rules\[[0-9]+\][.](text|hint)/ {
gsub(/[";]/, "", $2);
regras = regras " - " $2
}
END { if (regras) print "regras",regras }
'
O script consulta a instância e retorna o conteúdo de alguns de seus atributos: o título e descrição da instância, idiomas visíveis na API, alguns detalhes sobre o admin, e o texto das regras (sem formatação).
Esses atributos foram escolhidos porque demonstram (se você testar com outras instâncias) que a resposta de outros serviços são diferentes das do Mastodon: por exemplo, testei com uma instância Misskey e, da lista acima, ela retornou apenas título e descrição. Testei com Snac e veio quase tudo, mas não as regras. E assim por diante.
Só os servidores compatíveis com a API do Mastodon (versão 1) respondem a essa chamada.
Se desejar, você pode modificar o script para tornar parametrizável, suportar mais (ou outros) atributos, formatar texto e incluir tratamento de erro, por exemplo.
E como identificar se o servidor é brasileiro?
Dependendo do seu interesse, essa pode ser a pergunta de um milhão de dólares, e infelizmente não tem resposta direta, porque depende inclusive de definir o que significa o servidor ser brasileiro: é estar hospedado no Brasil? Ter admin brasileiro? Ter maioria de usuários brasileiros? Ter maioria de posts originados em português?
A minha abordagem geral para essa pergunta é identificar se o servidor ou a conta do seu admin são descritos em português, e aí (caso eu esteja procurando por servidores brasileiros, e não mais amplamente por servidores lusófonos) excluir da lista os servidores que possam ser identificados como sendo de outros países.
Dependendo do caso, os próprios protocolos oferecem informações sobre o idioma dos textos - no exemplo acima da chamada da API do Mastodon, eu incluí o acesso ao atributo "language", inclusive. Infelizmente isso ajuda pouco, porque é muito frequente essa informação estar errada ou incompleta - e ela não distingue entre o português brasileiro, o europeu e o da África.
Para lidar com isso, eu uso uma heurística, ou regra de padeiro, em que reúno todos os textos retornados pela API nas chamadas acima (a descrição da instância, suas regras, a mensagem sobre autorização pra criar novas contas, os detalhes da conta do admin, e até as URLs), e procuro neles algumas caraterísticas comuns nesses textos quando se trata de instâncias brasileiras, como por exemplo:
endereços que terminem com .br
menções a Brasil ou Brazil, a português ou a portuguese, ou a pt_BR ou 🇧🇷.
palavras como instância, comunidade, bem-vind, moderad, proibid, língua, regra, saiba
palavras como você, aqui, também, não
sufixos como ão, ões, inho, inha, ça, ço
Aplicar esse filtro é bastante eficaz, mas traz junto vários falsos positivos em italiano, francês, alemão, inglês, espanhol e galego (sendo que este último às vezes eu não desejo excluir, porque é uma língua tão próxima da nossa).
Antes de inspecionar manualmente, eu aplico um filtro que é eficaz para identificar a maior parte dos falsos positivos (i. e. servidores não-lusófonos identificados como brasileiros):
palavras como cuenta, (y|el|los|las), de la, de lo, (un|el) servidor, serán, ningún
palavras como información, hispano, contenido, habla, bienvenid, aplicables, proyecto
palavras como kommen kontakt, réseau, communiquez, votre
palavras como avéc, vous, lo, di, uno, unha, zum, wie, und, ein, zu, von
Note que as listas de palavras acima foram geradas empiricamente e a partir das estatísticas dos servidores reais do Fediverso, e podem não se aplicar a outros domínios.
Um pedido especial
A partir dos 2 scripts acima, e da heurística de identificação de origem/idioma, é possível implementar sistemas de coleta e análise de dados que responderão a questões interessantes sobre o Fediverso, e é por essa razão que eu os compartilho.
Porém, o Fediverso é composto de várias dezenas de milhares de servidores, muitos dos quais mantidos por voluntários que incorrem em custos de CPU e de tráfego. Respeite-os, não gere rotinas que os consultem com frequência exagerada, que os demandem de forma que os onere, e muito menos que tentem obter deles dados em desacordo com as suas políticas, termos e expectativas de privacidade.
Para saber mais sobre as ferramentas e técnicas aqui mencionadas, consulte os posts da tag Mastodon do meu blog.
Uma conversa leve é como um jogo de frescobol: o objetivo é manter a bolinha no ar, contribuindo para não fazer a outra pessoa derrubá-la.
Observando a chegada de várias centenas de novas pessoas a uma rede social desde a virada do ano, notei a repetição de padrões que já vi acontecerem, muitas vezes antes, nas tentativas de se enturmar.
Sou um observador de técnicas de conversação, pois o TEA sempre me demanda atenção extra à comunicação.
Alguns desses padrões funcionam, outros não - e eu observo isso do ponto de vista de alguém sempre atento a esse tema, pois o TEA me demanda atenção extra à comunicação.
O negócio é que uma conversa realmente boa é similar a uma partida de frescobol, em que lançamos a nossa contribuição de tal forma que o outro participante possa lançar também a dele, na expectativa de continuidade, com contribuição de ambas as partes, que não são adversárias entre si.
Assim, tenho duas sugestões a quem quer se enturmar e ter boas conversas nas redes (e, igualmente, fora delas):
1. Ao responder, comece concordando ou discordando explicitamente. Ideal: comece com "Sim! Além disso…"1
2. Pra puxar conversa, não responda a uma afirmação com uma pergunta. Exponha uma posição, e deixe as outras pessoas livres sobre como prosseguir. ESPECIALMENTE se estiver fazendo uma tentativa de humor.
Tende a dar mais certo se você deixar a outra pessoa livre para interagir como preferir (sem tentar colocá-la numa posição em que ela esteja sendo entrevistada ou chamada a confirmar, justificar ou refutar algo).
Pra manter a analogia, lembre-se que é completamente diferente de um debate de oponentes, que é como uma partida de tênis em que cada lado deseja lançar seu argumento para a quadra oposta, na expectativa de que o oponente não consiga lançar outro de volta.
Assim, se você perceber que está levantando a bola para o outro cortar contra você, aí a técnica simplesmente não funciona, e não vale a pena insistir nela, nem mencioná-la – e talvez nem seja possível ter uma conversa agradável sobre esse assunto, com essa pessoa, nesse momento.
“Sim, e...”, é uma dica extraída da comédia de improvisação (ou improv), que sugere que, para manter a cena rodando, um participante deve aceitar o que outro improvisador declarou (“sim”) e, em seguida, expandir a sua linha de pensamento (“e...”). ↩
Esses caras que gastaram milhões em bilhetes da mega da virada se achando espertões, na intenção de ganhar um bilhão – e no fim das contas fizeram só meia dúzia de quadras –, sublinham mais uma vez: jogo não é investimento.
Eu ocasionalmente jogo na mega, mas… é jogo. As probabilidades estão totalmente contra mim. A chance de ganhar o maior prêmio é parecida com a de jogar pro alto o valor do bilhete, e cair uma fortuna no meu pé.
Inclusive é chato estar em bolão com gente que acha que está investindo.
No primeiro dia do ano eu abri as caixas dos papeis que eram do meu pai, que se foi há pouco mais de 5 anos, pra separar o que ainda precisa ser guardado (por valor pessoal) e o que já podia ser descartado (por ter sido guardado por eventual razão tributária).
Certeza que foi a coisa mais difícil e extenuante que fiz nos últimos meses. Fiquei totalmente exausto, e precisei tomar um longo banho pra esvaziar até os pensamentos.
Mas antes do banho, levei tudo pro ponto de reciclagem, e abri espaço pro ano assim poder começar mais leve. Estou satisfeito.
O natal me trouxe um monitor maior, e pro ano novo eu troquei a configuração (e as teclinhas) do teclado, e mudei o Plex pelo Emby como solução pra clips, shows, séries e filmes.
Estamos no último domingo antes da virada de 2025 para 2026, e a minha estação de trabalho hoje está assim:
Meu ambiente de trabalho no final de dezembro de 2025
Já faz 20 anos que eu uso 2 monitores lado a lado, e a novidade principal veio como meu presente de natal pra mim mesmo: o monitor maiorzão, à esquerda, um LG 32UR500 com resolução de 3840x2160, porque trabalho com cada vez mais janelas abertas, ao contrário do que desejaria.
A terceira tela, bem menor e acima, não fica conectada ao mesmo computador que as outras duas. Ela é independente, e serve apenas para ficar tocando clips e shows musicais enquanto eu trabalho.
Essa telinha menor também tem novidade, porque após passar vários anos usando o Plex (nela e no servidor de mídia da casa), aproveitei a virada do ano pra fazer a troca do Plex pelo Emby, e estou satisfeitíssimo – coisa que já há algum tempo eu não podia dizer sobre o Plex, que vinha ficando cada vez mais antipático.
Print de uma tela do Emby mostrando uma coleção de séries
Eu testei Emby, Jellyfin e Kodi, e o Emby foi o que chegou mais perto do ponto de equilíbrio que eu curto entre flexibilidade e facilidade, e de ter suporte nativo nas plataformas em que eu quero usar pra assistir.
Migrar minha biblioteca de shows, clips, séries e filmes do Plex para o Emby foi bem fácil, e aproveitei pra reorganizar algumas coisas na coleção. Uma coisa que eu consegui fazer com facilidade no Emby e não conseguia no Plex1, foi colocar um script na crontab pra, todos os dias às 4 da manhã, gerar uma playlist com 200 clips da minha coleção (a coleção tem 900+ clips), selecionados aleatoriamente entre os 500 que estão há mais tempo sem serem assistidos, para ter diariamente uma programação variada.
Minhas teclinhas novas para 2026
Aproveitei a onda de mudanças e troquei o conjunto de teclas do meu teclado do dia a dia: agora instalei um conjunto chamado Rome, que é vintage na aparência, e muito confortável pra digitar.
Já está tudo definido: por aqui a resolução do ano novo será 3840x2160!
O Plex oferecia um recurso parecido nas suas smart playlists, mas não era exatamente o que eu queria. ↩