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

Novas melhorias: RSS e mais 7 melhorias 🎉

Mais uma semana se passou desde a última publicação sobre as melhorias no TabNews e ao longo desse tempo 8 novas implementações foram feitas!

1) RSS das publicações mais recentes

Agora o TabNews possui oficialmente seu primeiro RSS e que pode ser acessado pelo seguinte endereço: https://www.tabnews.com.br/recentes/rss

Destaco que é o "primeiro", pois a idéia é que no futuro cada página importante possa ter seu próprio RSS, basta concatenar ao final da URL o sufixo /rss. Então hoje temos a página de Recentes e o seu RSS da seguinte forma:

E no futuro poderemos ter o RSS de cada usuário, por exemplo:

De qualquer forma, caso você queira fazer uma integração de sistema a sistema, isso já pode ser feito pela API e no caso dos conteúdos, basta concatenar o prefixo /api/v1/contents/, por exemplo:

Esta implementação foi realizada por coffee-is-power e as informações podem ser conferidas por essa Issue* 🎉

2) Páginas abrindo ainda mais rápidas

Uma publicação dentro do TabNews pode possuir um corpo com Markdown e sua sintaxe para criar títulos, imagens, tabelas, etc. Isso são informações ótimas para estilizar e formatar uma publicação, mas ruins para se colocar no campo description das tags meta que são enviadas no cabeçalho da página.

Então nós utilizávamos uma biblioteca chamada remove-markdown que simplesmente recebia um conteúdo com a sintaxe de Markdown e devolvia um texto puro, porém esta biblioteca possuía um bug onde se uma publicação continha muitos espaços em branco em seguida, a demora de processamento era exponencial, ao ponto de travar a página por completo (incluindo, travar os servidores da Vercel).

Encucado com a situação, o aprendendofelipe identificou onde exatamente acontecia esse problema, fez um PR na biblioteca original e trouxe de forma antecipada esse fix para o TabNews. As informações podem ser conferidas por essa Issue*, mas vou antecipar uma:

A imagem abaixo foi criada por aprendendofelipe onde na esquerda mostra a performance da Regex original que fazia essa transformação e demorava 4643 ms (4.6 segundos) e após o fix, a Regex nem aparece mais no gráfico e sendo processada em 0.1ms (0.0001 segundos):

Função originalNova função
antesdepois

3) Editor em Português e com menu de Ajuda

Agora o editor que utilizamos está em Português e possui um ícone de Ajuda que mostra um resumo sobre a sintaxe do Markdown e algumas Teclas de Atalho.

Editor Markdown em Português e com Ajuda

Esta implementação foi feita por mim e as informações podem ser conferidas por essa Issue* 🎉

4) Layout com erro ao cancelar publicação

O gatodeoculos reportou um bug no layout no momento que você cria uma publicação e cancela ela. Ele inclusive gravou um GIF mostrando o bug, olha que massa:

Bug no layout

Mas agora isso não acontece mais e a implementação desse ajuste foi realizada por aprendendofelipe e as informações podem ser conferidas por essa Issue* 🎉

5) Typo na lista blockedUsernames do model user

Por questões de segurança, nós bloqueamos de forma antecipada alguns usernames, como moderador, suporte, sysadmin e tudo isto está dentro de uma lista chamada blockedUsernames.

Mas esta lista também bloqueia nomes que possam ser úteis para URLs no TabNews, como por exemplo nós bloqueamos o username contato, pois no futuro poderemos querer utilizar a URL https://www.tabnews.com.br/contato. Isso porque cada usuário que se cadastrou possui sua própria URL e ela está disponível logo na raiz do site. Por exemplo, o meu username é filipedeschamps e automaticamente tenho para mim a URL https://www.tabnews.com.br/filipedeschamps.

Este é o problema de alguém registrar um username como contato, sobre, docs e nessa lista nós especulamos tudo que foi possível especular, mas ela continha um typo, um erro de ortografia numa das palavras:

Typo na palavra "anucios", que era para ser "anuncios"

Esta implementação foi realizada por kaique-soares e as informações podem ser conferidas por essa Issue* 🎉

6) CORS habilitado para todos os endpoints da API

O TabNews deve ser um porto seguro para desenvolvedores testarem suas habilidades com programação e isso inclui ter liberdade e flexibilidade de utilizar a nossa API em qualquer tipo de client. Um destes clients é o Navegador Web, que interpreta e utiliza os cabeçalhos relacionados a CORS para decidir se irá continuar com a request ou não e até então o TabNews não estava autorizando requisições externas (vindo de outras páginas).

Então não somente habilitamos CORS para todos os endpoints da API para que outros desenvolvedores possam criar sites e páginas que se integrem com a API do TabNews, como também implementamos o que se chama de Security Headers e isso traz uma camada adicional de proteção para quem acessa o TabNews.

Os Security Headers ajudam a prevenir certos ataques como XSS e também instruir o navegador a bloquear de forma permanente recursos como câmera, microfone e a geolocalização. Então mesmo que alguém consiga injetar aqui um código que abra sua webcam, por exemplo, o Navegador automaticamente irá bloquear esse comando.

Bom, voltando ao CORS, caso queira fazer um teste rápido usando JavaScript, basta utilizar o código abaixo para retornar as 3 últimas publicações feitas no TabNews:

const contentsResponse = await fetch('https://www.tabnews.com.br/api/v1/contents?strategy=new&per_page=3');
const contentsBody = await contentsResponse.json();
console.log(JSON.stringify(contentsBody, null, 2));

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

7) Remover configuração experimental nftTracing

Para ler as migrations através do file system e disponibilizar elas pelo endpoint /api/v1/migrations, nós utilizamos no passado uma opção experimental chamada nftTracing. Tudo funcionou perfeitamente, mas nas últimas versões do Next.js, esta feature deixou de ser experimental e foi renomeada para outputFileTracing, mas nós não nos atualizamos sobre isso e começou a causar o warning abaixo toda vez que o servidor do Next.js era inicializado:

Warning do "nftTracing" Next.js que foi renomeada para "outputFileTracing"

Esta mensagem inclusive aparecia duas vezes ao rodar o comando npm test e lotava a tela de ruído, mas agora não mais, pois o aprendendofelipe fez uma pesquisa sobre todo histórico do que aconteceu com esse parâmetro, fez o ajuste para o warning sumir, e as informações podem ser conferidas por essa Issue* 🎉

8) Altera ganho de tabcoins de 5 para 2 a cada publicação

Para uma economia mais saudável, alteramos o ganho por publicações de 5 tabcoins para 2 tabcoins. Sem isso, caso alguém publique um conteúdo sem valor concreto, era necessário que 10 tabcoins fossem utilizadas para zerar o ganho de 5 tabcoins que esse usuário teve, dado que para cada qualificação são utilizadas 2 tabcoins. Agora é necessário apenas 4 tabcoins.

Fora isso, ao deletar uma publicação que possui um número positivo de tabcoins, este valor será descontado do autor.

Mexer na economia de um ecossistema é algo difícil, e seguiremos com os testes para entender o que irá acontecer, mas continuaremos atentos e super abertos a qualquer retorno ou sugestão. Nada do que foi feito está escrito em pedra e tudo isto está sendo feito de forma open source no repositório. Eu pessoalmente suplico que todos participem com suas opiniões, principalmente nestes pontos delicados.

Esta implementação foi realizada por mim e as informações podem ser conferidas por essa Issue* 🎉

Conclusão

Eu não tinha pensado que o trabalho que estamos fazendo no TabNews poderia refletir em outras bibliotecas open source que estão disponíveis por aí, mas aconteceu! Então um parabéns extra ao aprendendofelipe por melhorar o ecossistema open source do mundo ao enviar um PR contra o remove-markdown para uma necessidade do TabNews! 🎉 🎉 🎉

Tenham todos uma excelente semana!


⚠️ O repositório Open Source do TabNews ainda está em Modo Privado. Caso queira receber um convite para participar, leia esta publicação.

6

Ótimar notícias! Sempre fico feliz ao ver quanta coisa é adicionada e corrigida a cada iteração do TabNews, inclusive os pequenos detalhes que eu nunca teria percebido.

Sobre o ponto 8, acredito que diminuir o ganho de TabCoins sem modificar o gasto para votar fará com que tenhamos bem menos feedback. Basicamente, para alguém dar um "voto positivo" numa publicação, a pessoa precisará comentar também (ou publicar algo). Mas eu concordo que é realmente difícil encontrar o ponto de equilíbrio. Isso leva tempo, será necessário analisar os dados e ter um pouco de feeling também 🧙‍♂️

Apesar da minha opinião ser "negativa" sobre essa mudança, eu sou a favor de testar e ver se na prática isso é algo realmente positivo ou negativo 🤝

5

Rafael concordo 100% com você, inclusive o Felipe Barso (aprendendofelipe) possui uma sugestão que é muito mais sofisticada e envolve analisar o histórico de contribuição da pessoa, é uma idéia muito massa. Iremos evoluir o modelo para o que precisar até se encaixar em todas as situações (pessoas que acabaram de entrar, pessoas com um histórico super positivo e pessoas tentando abusar).

Apesar da minha opinião ser "negativa" sobre essa mudança, eu sou a favor de testar e ver se na prática isso é algo realmente positivo ou negativo 🤝

Você fechou seu comentário com chave de ouro, pois acredito muito nessa postura. Cada passo que damos, mesmo que seja para trás, no final das contas é um passo para frente. Frase super confusa da minha parte, mas é isso aí mesmo 🤝

6

Eu sou fã total de RSS. Esse update é muito bem vindo.

Eu também não tinha pensado como o TabNews pode acabar contribuindo com outros projetos open source. Efeitos de segunda ordem inesperados!

3

Muito obrigado pelo RSS!! Ele simplemente deixa meu dia mais organizado com as principais notícias que preciso ler todas em um só lugar.

3
4

Um RSS é um formato padronizado para consumo de conteúdo. Por ter um formato padronizado, existem leitores de RSS que consomem esse tipo de formato e tentam lhe apresentar da melhor forma o que cada RSS publicou de novo.