;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

O que é Mastodon? Conheça o 'Twitter aberto' que inspira Elon Musk

Lucas Carvalho/Tilt
Imagem: Lucas Carvalho/Tilt

Thaime Lopes

Colaboração para Tilt

20/04/2022 11h36

Na última semana, o bilionário Elon Musk surpreendeu o mundo quando disse que queria comprar todas as ações do Twitter, se tornando, assim, dono da rede social. O Twitter, por sua vez, está tentando evitar que isso aconteça — e a troca de ofertas, medidas cautelares e fofoca nas redes sociais não para.

Acrescentando lenha na fogueira na discussão, o bilionário já deu a entender que, caso a compra de US$ 43 bilhões seja realizada, pretende abrir o código do algoritmo do Twitter, para que qualquer pessoa possa olhar e sugerir mudanças.

A questão é que, se a ideia se concretizasse, não seria nem um pouco nova: o Mastodon é um concorrente do Twitter que já funciona exatamente assim, com código aberto, conduzido pelos próprios usuários e sem publicidade.

Em vez de o controle estar concentrado nas mãos dos acionistas ou de uma empresa, como acontece com o Twitter e redes sociais como o Facebook, o Mastodon é dominado totalmente por quem o usa. Há moderadores para garantir a segurança da plataforma e ferramentas antiabuso, mas o esquema é de automoderação — algo similar ao funcionamento da Wikipédia.

Seu fundador, Eugen Rochko, revelou que o número de inscritos no principal servidor cresceu 9% na última semana, após Musk declarar seu interesse em comprar a rede rival. Como qualquer pessoa pode fazer sua própria versão do Mastodon, outros servidores podem ter crescido ainda mais.

Mas o que é esse Mastodon, como ele funciona e qual é a semelhança com o Twitter? Tilt explica.

Como o Mastodon funciona?

Apesar de ter um modelo de negócios distinto, o uso prático do Mastodon é bem parecido com o do Twitter: os usuários postam fotos, vídeos, emojis, mas com limitação de 500 caracteres.

mastodon - Mastodon - Mastodon
Feed inicial do Mastodon visto pelo computador
Imagem: Mastodon

Também é possível esconder informações num post por meio de um aviso de spoiler (bom para quem curte comentar séries e filmes) e escolher quem pode ver seus posts, como se fosse o recurso de "melhores amigos" do Instagram.

Tudo isso está estruturado em um código aberto que pode ser mexido por qualquer um que entende de programação. Isto significa que não existe só um Mastodon: qualquer desenvolvedor pode criar seu próprio app baseado no sistema.

No site oficial, inclusive, os criadores listam vários apps que funcionam com o código deles, incentivando que os usuários a colocarem mesmo a mão na massa. Mas, claro, tudo isso para quem estiver afim — se você não manja dos códigos e só quiser curtir a rede social, fique à vontade para usar a versão padrão.

Como ela é gratuita e sem publicidade, a plataforma só continua a funcionar graças à ajuda das empresas que apoiam o Mastodon. Dentre eles estão organização que lidam com criptomoedas, NFTs e VPNs.

Tudo isso parece agradar bastante gente: são 2,2 milhões de usuários do mundo. Apesar de o número parecer pequeno quando comparado com os 321 milhões do Twitter, já é uma quantidade expressiva de pessoas empenhadas em impulsionar uma rede social controlada por elas mesmas.

mastodon - Reprodução - Reprodução
Perfil de Eugen Rochko, fundador do Mastodon, na versão padrão da rede social: até visual lembra o do Twitter
Imagem: Reprodução

E por que isso é diferente do Twitter?

O controle do Twitter está nas mãos de uma empresa, com executivos e conselho istrativo — ou seja, é um controle centralizado. Uma consequência disso, por exemplo, é a constante mudança no conjunto de ferramentas da rede social.

Quando os Fleets apareceram, uma espécie de "Stories" do Twitter, não foram bem recebidos. Para celebrar a despedida da ferramenta, em agosto do ano ado, os usuários transformaram os conteúdos temporários em um grande espaço de nudes, mas nem mesmo esse último gesto foi suficiente para salvar o recurso — a decisão de matá-lo já tinha sido tomada pela istração.

Se o Twitter fosse descentralizado como o Mastodon, manter ou eliminar o recurso seria uma decisão dos usuários, e não dos diretores da empresa. Quem quisesse poderia usar uma versão do app com a função, e outros poderiam usar uma versão sem. Na rede centralizada, todo mundo é obrigado a ter a mesma experiência.

Além disso, o Twitter é pouco transparente sobre quais dados estão sendo coletados do usuário e como os algoritmos utilizam essas informações para manter o usuário mais tempo na rede e mais suscetível aos anunciantes.

Prós e contras

Como nem tudo são flores, tanto uma rede social descentralizada como o Mastodon como uma centralizada como o Twitter possuem seus prós e contras.

Por exemplo: o Mastodon recebeu, no ano ado, uma onda migratória de usuários de uma outra rede social, chamada Gab, muito utilizada por partidários da extrema-direita. Quando isso aconteceu, a comunidade não tinha uma autoridade concentrada para reclamar ou apresentar denúncias.

A maneira que os usuários encontraram para lidar com os neonazistas que estavam inundando a plataforma foi isolar os os deles por meio do código aberto, bem como contar com o apoio dos aplicativos de terceiros que também deixaram de permitir que os ex-Gabs utilizassem suas ferramentas.

Esse tipo de movimentação, em teoria, é mais eficiente no Twitter. Qualquer um pode denunciar contas que infrinjam as regras da comunidade, como ataques homofóbicos, racistas e que ameacem grupos ou indivíduos.

Nem sempre o resultado dessas denúncias é satisfatório. E, para piorar, às vezes pode acontecer o inverso: pessoas se organizando para denunciar contas que não fizeram nada demais.

Quais as chances de o Twitter virar um Mastodon?

Ninguém sabe ao certo. O próprio Elon Musk ainda não detalhou quais são seus planos para a rede social, mas já deu a entender que torná-lo totalmente descentralizado não é a ideia: quando questionado sobre a possibilidade, sugeriu que um Twitter descentralizado seria, basicamente, só um protocolo de email.

O que se sabe é que descentralizar o controle do conteúdo é um sonho antigo do Twitter. O fundador da rede, Jack Dorsey, que deixou o cargo de presidente executivo no ano ado, chegou a dar início a um projeto batizado de "bluesky", que tem a intenção de criar um protocolo de código aberto sobre o qual o Twitter deverá operar no futuro.

O desenvolvedor de criptomoedas Jay Graber chegou a ser contratado para liderar o projeto. Se Elon Musk assumir o controle, pode ser que o Bluesky seja acelerado e se torne o principal rival do Mastodon, ou totalmente esquecido. Mas, ao que tudo indica, o fim dessa novela ainda está longe.