Executando verificação de segurança...
15

[TabNews] Mudanças nos TabCoins e mais melhorias 🎉

Fala turma, tudo bem? Mais uma publicação sobre novidades, e parte delas parece invisível, mas são importantes para darmos conta do crescimento de usuários sem impactar na qualidade e disponibilidade do TabNews.

Ganho de Tabcoins ao publicar

Estamos animados em anunciar uma atualização importante em nosso sistema de recompensa por criação de conteúdo com valor concreto. Com base em muitas sugestões e feedbacks, realizamos uma mudanças que visa tornar o processo de ganho de TabCoins mais justo.

A partir de agora o ganho de TabCoins será baseado nas qualificações dos conteúdos já publicados do mesmo usuário. No momento da publicação será computada a média das qualificações de até 10 conteúdos do mesmo usuário. E em cima da média será aplicado um fator que determina o ganho. Mais detalhes podem ser vistos no PR #1366 e na issue #1381 em que expliquei toda a mecânica atual de TabCoins.

Limitar publicações não relevantes

A partir de agora a permissão para publicar também considera os conteúdos já publicados. Caso um usuário tenha muitas publicações classificadas como não relevantes, ele será avisado para excluir esses conteúdos antes de publicar novamente.

Isso garante que o sistema continue recompensando aqueles que produzem conteúdo de qualidade e diminui as chances de publicações não relevantes afetarem negativamente a experiência no TabNews.

Apesar de não haver mudanças recentes na regra de exclusão de conteúdos, vale a pena lembrar resumidamente como ela funciona:

Se o conteúdo estiver classificado como relevante, o usuário devolve tudo que ganhou com esse conteúdo, somando o que ganhou ao publicar e o saldo resultante das qualificações.

Já se o conteúdo estiver zerado ou negativo, a devolução será apenas da quantidade de TabCoins que ganhou ao fazer a publicação. Se um usuário não ganhou nada, ele também não devolve nada na exclusão.

Alterações em conteúdos já publicados

Aqui não houve nenhuma mudança para os usuários das versão web do TabNews, mas pela API é possível usar algumas funcionalidades extras (e não totalmente implementadas), como salvar uma publicação como rascunho.

Então foi preciso criar dois bloqueios de funcionalidades que estavam presentes na API, mas que poderiam ser utilizados para manipular a economia do sistema:

  • Não é mais possível alterar o parent_id de um conteúdo. Com isso não é possível criar um comentário em uma publicação e depois de um tempo mudar esse mesmo comentário para outras publicações.

  • Não é mais possível mudar o status published para draft. O padrão ao publicar pela API continua sendo o status rascunho, mas após tornar o conteúdo público, só será possível editar ou excluir, mas não voltar para rascunho.

Cache da API

Foi configurado cache em todos os endpoints que devolvem dados públicos. Todos estão com a estratégia de mostrar o dado obsoleto enquanto ocorre a revalidação (SWR - Stale While Revalidate).

Assim as respostas da API se tornam mais rápidas, e requisições subsequentes não precisam ser processadas em duplicidade pelo backend.

E o fato de não precisar processar requisições subsequentes já nos ajudou demais nessa semana, pois o TabNews foi citado novamente no vídeo do Programador Chaves, no canal do Filipe Deschamps, e isso explodiu mais uma vez os acessos ao sistema.

Vejam no gráfico a seguir, que compara o uso dos endpoints de conteúdos na API com os acessos na home, onde todos os acessos subiram bastante logo após o lançamento do vídeo, mas o uso da API caiu para abaixo do patamar anterior logo após a implantação do cache:

requisições com cache swr

A Cloudflare também nos ajuda bastante com essa configuração de cache na API, pois ela nem repasa as requisições para a Vercel.

No gráfico acima eu comparei a API com os acessos apenas da home ("/"), pois ficava mais fácil de ver a mudança que ocorreu, mas se ficaram curiosos sobre o volume de acessos para todas as páginas estáticas após o lançamento do vídeo, então vejam no gráfico abaixo 🚀:

requisições com cache swr

Revalidação dos dados obsoletos

A versão web já utilizava a estratégia SWR em que as páginas prioritariamente são carregadas com os dados disponíveis em cache e isso dispara a revalidação do cache no servidor. Mas essa estratégia faz com que às vezes vejamos dados que já tenham sofrido modificações no backend, mas que ainda não foram propagadas para o cache.

Uma estratégia bastante utilizada é carregar os dados obsoletos e logo em seguida fazer uma requisição que busca os dados mais atualizados. Incialmente o TabNews utilizava a biblioteca swr e fazia isso para todas as páginas que poderiam ter dados obsoletos, mas essa revalidação aumenta consideravelmente a utilização de recursos, então desde o lançamento do TabNews não foi possível manter isso em todas as páginas. Do lançamento até agora, essa configuração foi mantida apenas na página dos conteúdos.

Só que agora foi preciso usar a estratégia SWR também na API, o que inviabiliza utilizá-la para recuperar dados atualizados em tempo real. Então a nova estratégia é mostrar os dados em cache, e se eles forem obsoletos, aguardar a revalidação e requisitar os dados atualizados, tudo sem precisar da API, apenas utilizando o Next.js e a biblioteca next-swr.

E isso nos permitiu voltar a fazer essa revalidação em todas as páginas, então se você ver os dados mudando pouco depois da página carregar, era porque estava vendo dados obsoletos. 🎉

Bug de sessão expirada

Dias atrás, em uma modificação feita às pressas quando o TabNews estava sofrendo um ataque, eu acabei criando um bug que fazia com que sessões expiradas não fossem revalidadas sem a exclusão manual dos dados do usuário no localStorage, com isso o usuário parecia estar logado, mas não conseguia executar nenhuma ação que precisasse de autorização.

O @RomildoRocha e o @pab-h nos alertaram que não estavam conseguindo publicar, e o @pab-h conseguiu ajudar ainda mais ao passar os detalhes do que estava ocorrendo e nos ajudou a identificar e consertar o bug no useUser(). Muito obrigado! 💪

Conclusão

A Turma está comprometida em tornar o TabNews o mais justo e transparente possível. Agradecemos a todos pelo apoio contínuo e esperamos que essas mudanças beneficiem a todos os usuários. 🚀

4

É muito legar ver que a Milestone de Performance e Segurança está avançando e tratando de itens que vão ser fundamentais para a Milestone de Revenue Share.

Uma delas é esta dinâmica de agora não ser mais possível criar contas novas para no tempo zero conseguir gerar TabCoins, e com elas ir retroalimentando outras contas. Com certeza ainda é possível abusar do sistema, mas para isso as movimentações artificais começam a ficar cada vez mais perceptíveis, mais forçadas.

Vai ser muito, mas MUITO bom quando chegarmos na Milestone de Revenue Share e o TabNews começar a dar retorno concreto para quem gera conteúdo de valor concreto 🤝

Parabéns a todos os envolvidos nas últimas implementações 🎉

2

Uma duvida me ocorreu hoje, aconteceu algo com as tabcoins geradas pelos comentarios? Somente hoje vim reparar que tinha algo errado. Ai hoje depois de alguns comentarios vi que apenas perdi tabcoins, já que positivei alguns conteudos, mas não ganhei nada pelos comentarios?
Essa será a nova politica de tabcoins? Comentarios agora valem zero? Isso não seria um desincentivo para comentarios bem elaborados?

[edit]: vi agora os comentarios no PR #1366, sinceramente achei bem desmotivador pra quem não quer chamar atenção, eu mesmo tenho uma rotina de abrir varias guias no navegador e ir lendo tabs que acho interessantes, o numero de tabs que abro tem caído bastante a cada dia, fiquei alguns dias sem acessar direito o site pois tive uns problemas de ordem pessoal, ai hoje quando acesso vi muito conteudo clickbait, assim como o @maniero comenta lá no PR, sinceramente pra mim essa nova mecanica desfavorece quem quiser fazer comentarios, até porque nem todo mundo lê os comentarios nos posts, e reply ou qoute de comentario entao fica algo como suicida. Porque fazer um comentario que mesmo que esteja bem feito se ele vai me bater de volta? Pra que dar um upvote se o mesmo custa 2 pontos, e pra eu conseguir esses mesmo 2 pontos agora tenho que fazer uns 10-20 comentarios relevantes?
(na verdade no momento que escrevo esse post, eu vi aqui que fiz uns 10 comentarios e meu ganho foi zero 💀)
(pelo menos essa foi a conta mediana que entendi pelas contas explicadas no PR em questão).
Espero que o sistema venha a melhorar, pois esse atual tá bem ruim. Perdi totalmente o tesão pelo site, já que NÃO quero chamar atenção via clickbait e gosto mais de participar via comentarios do que criando posts, até porque não sou escritor/blogueiro/youtuber e sim só um dev que gosta de interagir e dar upvotes nos outros.

E sim, eu dei downvote nesse post, podem me julgar 🤐

2

Tenho evitado mas vou dar reply para você. De fato o que vou escrever aqui não é da maior utilidade do mundo, mas tem sua importância.

Eu não tenho muito mais a dizer. Eu tenho experiência com gamificação e já era claro o que está acontecendo, praticamente acabou a gamificação. Se é o que desejam, então tá ok, tem lugares que preferem assim, mas parece ser um efeito colateral indesejado, se é para ser assim nem deveria criar a sistemática.

Ela ainda existe só para o conteúdo mais chamariz, para o que sempre se convencionou chamar de conteúdo que lacra. Em geral as postagens secundárias são comentários, respostas para a original, muitas vezes mais importante que a original, mas quase sempre desprezada pela maioria, até porque não vai mudar a ordem de postagens relevantes.

O que eu decidi fazer é postar o que eu acho que devo, não vou receber pontos, não vou poder dar muitos pontos, assim como acontecerá com a esmagadora maioria das pessoas, e aí quem dominar mais a arte de conseguir pontos serão os que também distribuíram pontos. Eu acho ruim, já expressei isso, mas não tenho controle sobre a situação. Só posso me adaptar ou desistir da plataforma.

Não sei se entendeu que há uma separação das postagens raiz e das secundárias, que você chama de comentários. Não Precisa fazer nada root, pode ficar só nos comentários, mas se quiser ganhar pontos tem que fazer lacrações, das bem populares, claro, tem as impopulares, mesmo nos comentários.

E acho que desperdiçou o down :) porque não muda quase nada, entendo que seja um statement apenas.

Não tem sistema perfeito. Gamificação é assim, mas precisa fazer a economia circular. Inteligência de massas não existe. As pessoas continuarão em sua maioria gastando tabcoins com postagens curiosas, muito eventualmente algo realmente bom, vão economizar cada vez mais em coisas secundárias, e postagens extremamente útis, mas não divertidas, não modinha, serão ainda mais ignoradas.

O meu conselho é postar o que acha relevante, se as pessoas não gostarem muito (não pode ficar tomando negativos, mas também não tomará porque está todo mundo pobre, eu mesmo não negativo mais nada, inclusive várias coisas completamente erradas e que são desserviço para todos) deixa pra lá, a consequência será só que não poderá contribuir com a classificação do conteúdo relevante para você, ficará concentrado nas mãos de um grupo bem pequeno, e que tende a diminuir mais. Trate como um fórum, não como algo gamificado. Ou você vai desistir mesmo, o que será uma pena.

1
2

Boa noite. Interessantes mudanças. Só que tive uma dúvida a respeito dessa nova mecânica para definir a relevância do usuário. Pelas informações que constam na PR e na issue publicada, o sistema pegará as dez últimas publicações que tive (sejam comentários, sejam publicações), somar os tabcoins, dividir por 10 e descontar o fator definido por vocês.

Se o resultado da conta for acima de 1, ganharei 1 tabcoin a cada nova publicação (enquanto que a média continuar acima de 1), se o resultado da conta for abaixo de 0, estou impedido de publicar. Isso está correto? Desde já grato.

1

opa! Salve \o)

Desde já, excelente trabalho da equipe. Estão de parabéns.

Uma das coisas que incomoda é que sempre que clico nos relevantes, imaginava ver as publicações com mais "likes" e na verdade mostra uma listagem simples.

Se pudessem apurar tão ponto, seria bom ..

0

Muito massa. Eu criei um blog pessoal para exibir as minhas publicações (fazendo requisições para a API), utilizando React com Typescript, e utilizei o React Query para adicionar esse recurso do SWR. Isso quer dizer que para este objetivo, o React Query na minha aplicação deixa de ser necessário, visto que este comportamento de SWR foi incorporado pelo servidor. Estou correto ?