levxyca / diciotech

Um dicionário tech para pessoas que querem aprender mais sobre termos técnicos dentro da tecnologia 📖
https://diciotech.netlify.app/
GNU General Public License v3.0
339 stars 65 forks source link

fix: adiciona uma função de hash para gerar o id do card #136

Closed rwietter closed 3 months ago

rwietter commented 9 months ago

Descrição

Fixes #100

Esse PR resolve o problema de colisão de IDs, onde se utiliza o título do card como ID, e quando há dois cards com o mesmo título, o ID é duplicado, causando problemas para favoritar cards.

Esse PR adiciona o algoritmo djb2 (http://www.cse.yorku.ca/~oz/hash.html) para calcular o hash de uma string, e assim, evitar que IDs sejam duplicados. Embora colisões de hash sejam possíveis, a probabilidade de colisão é baixa.

Ele recebe a descrição e título do card como parâmetro, limita a string a 32 caracteres, para não criar um loop O(n) caso a descrição seja muito grande. Então itera sobre cada caractere da string, e faz uma operação utilizando o operador left-shift somado com o código ASCII do caractere. No final, converte o número para base 36, e retorna o ID. Esse ID é sempre o mesmo para a mesma string, e diferente para strings diferentes.

Também já trabalha com o uso de UUID gerado quando usado a CLI, proposto no pr #112.

function generateContentId(content = '', salt = '', hash = 5381) {
  const data = (salt + content).slice(0, 32).split(' ').join('')

  for (let i = 0; i < data.length; i++) {
    // hash * 33 + ASCII char code
    hash = ((hash << 5) + hash) + data.charCodeAt(i);
  }
  const hashString = Math.abs(hash).toString(36); // Convert to base-36 string
  return hashString;
}

[!IMPORTANT]
Remove um dos termos Python que estava duplicado.

1699553187

Tipo de mudança

Checklist:

Screenshots

1699552430

Referências:

netlify[bot] commented 9 months ago

Deploy Preview for diciotech ready!

Name Link
Latest commit 0ca9c336ff692ea067b1c7195dc26cb110fcf6c1
Latest deploy log https://app.netlify.com/sites/diciotech/deploys/654d201131f5db0009cdce16
Deploy Preview https://deploy-preview-136--diciotech.netlify.app
Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.