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

Eu tenho algumas sugestões:

Página de últimos posts

Acho até que o Filipe comentou sobre isso. Acho que é essencial ter uma página onde a gente possa ver os últimos posts sem a mudança de ordem do algoritmo.

Melhorar a forma como o algoritmo funciona na primeira página

Eu, como usuário, não acho que tá fazendo muito sentido. Publicações novas sempre aparecem por primeiro, mesmo tendo poucos TabCoins. Acho que deveriamos rever como é feito essa pontuação.

Possibilidade de fazer posts sem texto

Uma coisa que eu acho legal e prático no HackerNews é você postar apenas um link, sem ter que escrever algo sobre ele. Eu tenho essa vontade o tempo todo.

Mesmo eu entendendo que o objetivo do TabNews é compartilhar conteúdo de real valor, às vezes eu só queria jogar um link de um artigo legal que vi e que queria discutir com outras pessoas sobre isso nos comentários. Acho que isso ia evitar alguns posts onde a pessoa apenas copia o conteúdo do artigo pra poder fazer um post aqui no TabNews.

Se a pessoa for colocar um link que já foi publicado uma vez, o formulário dá um aviso antes dela continuar.

Possibilidade de ver quem deu up no post / comentário

Eu não sei se isso é algo que precisa estar pronto nessa Milestone, mas é uma sugestão de possível melhoria. Às vezes fico curioso sobre isso haha.

Carregando publicação patrocinada...
1

Publicações novas sempre aparecem por primeiro, mesmo tendo poucos TabCoins. Acho que deveriamos rever como é feito essa pontuação.

Justíssimo meu caro! Precisamos lapidar com certeza o algoritmo 🤝 Uma das minhas preocupações é balancear isso com a quantidade de novas publicações que estão surgindo atualmente no site, onde quanto menos publicações, maior a necessidade de fazer publicações novas aparecerem numa posição superior para dar "movimento" na lista.

Mas ao longo do crescimento do TabNews e da lapidação do algoritmo vamos com certeza encontrar o balanço correto 🤝 inclusive devemos mais para frente implementar uma "nota de corte", onde a publicação só aparecerá na Home se passar de um score x (como no Hacker News).

2

No falecido Chuvisco, eu fiz o "algoritmo" assim:

Cada comentário = 2 pontos
Cada upvote = 1 ponto
Pontos invisíveis = votos que o admin poderia dar para "upar" uma publicação

Pontos totais = (Pontos comentários + Pontos de upvote + Pontos invisíveis) - (tempo que passou da publicação em horas / 10)

Dessa forma, a cada 10 horas a publicação perdia pontuação no ranking e acabava tirando ela da página inicial caso ela não tivesse votos suficientes.

1

Show! No seu princípio, está próximo do TabNews que é uma briga entre os "pontos" e a "gravidade" (quanto tempo passou).

O algoritmo atual do TabNews abaixo foi ispirado nessa publicação: How Hacker News ranking algorithm works

  function getContentScore(contentObject) {
    const tabcoins = contentObject.tabcoins;
    const secondsSinceEpoch = Math.floor(new Date() / 1000);
    const publishedAtInSeconds = Math.floor(new Date(contentObject.published_at) / 1000);
    const ageInSeconds = secondsSinceEpoch - publishedAtInSeconds;
    const ageBase = 60 * 60 * 1; // 1 hour
    const boostPeriodInSeconds = 60 * 10; // 10 minutes
    const initialBoost = ageInSeconds < boostPeriodInSeconds ? 10 : 1;
    const tabcoinsAntiGravity = 1.5;
    const tabcoinsWithAntiGravity = Math.pow(Math.abs(tabcoins), tabcoinsAntiGravity);
    const tabcoinsWithCorrectSign = tabcoins > 0 ? tabcoinsWithAntiGravity : tabcoinsWithAntiGravity * -1;
    const gravity = 1.8;

    const scoreDecimals = (tabcoinsWithCorrectSign + initialBoost) / Math.pow(ageInSeconds + ageBase, gravity);
    const finalScore = scoreDecimals * 10000;
    return finalScore;
  }

Sendo que a regra principal é esta:

(tabcoinsWithCorrectSign + initialBoost) / Math.pow(ageInSeconds + ageBase, gravity)

Em resumo: uma força exponencial positiva das TabCoins contra uma força exponencial negativa da idade da publicação.

1
1

Esse é o maior problema do algoritmo, ele não faz o corte pelo banco de dados e não tem como "chegar na home".

O que se faz hoje é pegar as últimas 30 publicações (de forma decrescente) e nessa lista rodar o score e fazer a ordenação.

Como você fez isso no Chuvisco? Onde e quando acontece o rankeamento e a construção da lista final que vai para Home (e para a "Página 2)?

2

Como eu tinha poucos posts, e tava no começo, eu pegava todos os posts dos últimos 5 dias e ordenava, hahaha. Não era o mais performático...

Mas a minha ideia, quando começasse a ter muito post, era criar um Cron Job pra atualizar os pontos dos posts. Daí teria isso como um index no banco ou algo assim.

Eu tinha daí o link pra 3 "filtros" no site:

  • Home (os posts dos últimos 5 dias ranqueados)
  • Arquivo (posts com mais de 5 dias)
  • Novos (todos os posts dos últimos 2 dias ordenados por ondem de publicação)
1

Show! Gosto muito da ideia de anotar o score no próprio post, mas sempre que possível tento evitar o cron.

Vamos ver se vale a pena implementar isso de alguma forma num ambiente serverless 🤝