Ir para o conteúdo

Blogue ·

Quando o título não pode ser o cabeçalho

Uma regra que diz que o título de um artigo é o seu cabeçalho colide com um limite de sessenta caracteres. Cinco línguas precisaram do padrão que já existia.

Por Provibr

Um dos nossos artigos tem no título uma palavra que importa: vulnerabilidade. É um texto sobre um scanner que envia zero bytes, e sem essa palavra o título descreve outra coisa.

Em cinco das nove línguas a palavra tinha desaparecido. Não do corpo do texto, mas do título e portanto do separador do navegador, do resultado de pesquisa e da pré-visualização nas redes sociais. A tarefa era repô-la nas nove.

Isso revelou-se impossível na forma em que estava escrito, e a parte interessante é porquê.

Duas regras que não podem valer as duas

A instrução era: o título, o título social e o cabeçalho são uma só cadeia de texto. Dizer a mesma coisa nos três sítios. É uma boa regra e é a regra que registámos depois de um leitor ter encontrado uma ligação que prometia uma coisa e uma página que afirmava outra.

A outra regra é uma banda de comprimento. O título de página gerado tem de ter entre vinte e sessenta caracteres, sufixo incluído, porque é o que cabe antes de um resultado de pesquisa o truncar. Essa banda não é uma preferência: o corpus inteiro de 850 ficheiros gerados estava dentro dela, sem nada de fora.

Reponha-se a palavra em falta e o cabeçalho completo tem 68 caracteres em neerlandês e italiano, 70 em português, 71 em espanhol e francês, e 75 em romeno. O inglês e o alemão ficam exatamente em 60, o que é uma coincidência que vale a pena notar: as duas línguas em que o cabeçalho honesto calha caber são também as duas em que a regra parece funcionar.

Portanto uma das duas regras tinha de ceder, e nenhuma delas é opcional. O cabeçalho tem de nomear o assunto e o título tem de caber.

O padrão já existia dentro de casa

A resolução não foi inventada para isto. Dos 850 artigos gerados, 197 já tinham um título diferente do cabeçalho. É uma coisa normal para um artigo fazer: o cabeçalho é uma frase e o título é um rótulo.

O francês já o fazia neste artigo exato. O seu título lê-se como um rótulo com dois pontos, o seu cabeçalho como uma pergunta a que o corpo do texto responde. Ninguém tinha registado isso como uma decisão: foi simplesmente o que alguém escreveu quando a frase não coube.

Portanto a correção é que cinco títulos adotam a forma que quase um quarto do corpus e uma das nove línguas já usavam, e os cabeçalhos levam a frase completa. A palavra está presente no título, no título social e no cabeçalho, e não tem de ser a mesma cadeia de texto nos três para ser a mesma afirmação.

A regra sobrevive, mas precisa de ser reformulada: o que tem de valer é que um leitor que chega por uma ligação reconheça a página. A igualdade byte a byte era uma maneira cómoda de impor isso nas línguas em que calhava ser possível.

Porque é que a guarda existente não podia ter encontrado isto

Acabáramos de construir uma guarda exatamente para esta família de problemas: um texto de ligação que nomeia um artigo de maneira diferente do próprio título do artigo. Aqui estava verde, e estava verde por uma razão estrutural e não por sorte.

Este é um defeito de título. Os títulos tinham perdido uma palavra, e os textos de ligação que apontavam para eles tinham sido encurtados para condizer durante a ronda que construiu a guarda. Os dois lados concordavam. Uma comparação entre duas coisas que foram alteradas em conjunto não consegue ver que ambas estão erradas.

O que o encontrou foi o controlo de versões. O commit que reparou os textos de ligação mostrava três a serem encurtados, em neerlandês, italiano e português. O relatório mencionava apenas dois. Ler uma diferença em vez de um resumo foi o que transformou uma tarefa de dois itens na forma verdadeira do problema.

Uma guarda que arrumou atrás de nós

Há no fim disto uma pequena sequência que vale a pena registar, porque é a guarda a portar-se melhor do que as pessoas que a usam.

Depois de os títulos serem alterados, a guarda dos nomes de ligação disparou uma vez, sobre uma ligação neerlandesa para outro artigo. Parecia dano colateral e foi registada uma exceção para ela, com uma razão.

Depois os títulos foram ajustados outra vez para os trazer para dentro da banda de comprimento, e o achado desapareceu. A exceção estava agora morta: uma linha numa lista de exceções que não correspondia a nada.

Há nessa guarda um teste cujo único trabalho é falhar quando uma exceção nunca é atingida. Falhou, e a linha saiu. A diferença final no diretório da guarda está vazia, o que é a afirmação mais forte que existe: a reparação não exigiu alteração nenhuma às regras.

Uma lista de exceções que só cresce é um documento de tudo aquilo de que alguém alguma vez desistiu. Uma lista de exceções que remove as suas próprias entradas mortas é uma lista que ainda se consegue ler daqui a um ano.

Pequenas coisas aprendidas de passagem

Dois pontos num título são uma forma e não uma decisão que tenha sido medida. O título passa a ler-se como um rótulo em vez de uma frase, encurta bem, e o francês já o tinha escolhido. Isso fica registado como uma escolha feita sobre a forma, porque fingir que saiu de uma medição seria desonesto quanto a que partes disto foram medidas e quais foram gosto.

Uma banda de comprimento é uma restrição por língua mesmo quando parece global. A mesma frase é oito caracteres mais comprida numa língua e quinze noutra, e qualquer regra formulada como «a mesma cadeia de texto em toda a parte» há de quebrar primeiro na língua que for mais prolixa. Aqui essa língua é normalmente o romeno.

E uma tarefa escrita como uma instrução de duas linhas pode conter um conflito que só aparece quando se tenta satisfazer as duas metades. A resposta certa não é satisfazer a metade que é mais fácil de verificar.

O que registaríamos

  1. Quando duas regras colidem, nenhuma delas está errada. Descubra qual é a garantia e qual era a maneira cómoda de a impor.
  2. A igualdade byte a byte é um substituto da reconhecibilidade. Enuncie aquilo que quer de facto.
  3. Procure o padrão no corpus antes de inventar um. O nosso já estava em 197 de 850 ficheiros.
  4. Uma língua já o fazer é prova, ainda que ninguém o tenha registado como decisão.
  5. Uma guarda não consegue ver um defeito em que os dois lados foram alterados em conjunto. Concordância não é correção.
  6. Leia o commit e não o resumo. A diferença tinha três entradas onde o relatório tinha duas.
  7. Um teste que falha sobre uma entrada morta de uma lista de exceções arruma atrás de si. O nosso removeu uma exceção que acabáramos de acrescentar.
  8. Uma diferença vazia nas suas regras é o resultado mais forte de uma reparação. Significa que as regras estavam certas.
  9. Os limites de comprimento são por língua. A mesma frase é quinze caracteres mais comprida nalgum sítio.
  10. Diga que decisões foram medidas e quais foram de forma. Misturá-las custa às medidas a sua credibilidade.

Para que fique claro o que isto é: a compilação de conteúdos produziu 850 artigos sem avisos onde antes produzia cinco, a verificação de conteúdo deu 851 de 851 ficheiros gerados idênticos byte a byte, a bateria de testes da web 4594 verdes, a verificação de tipos limpa, o analisador de código sem erros, a varredura de bytes sobre os 25 ficheiros tocados inalterada em todas as contagens, a diferença exatamente 174 linhas acrescentadas e 174 removidas, a varredura de disposição 27 de 27 a 390 píxeis sobre o artigo em nove línguas, o índice do blogue 54 de 54 e seis artigos ucranianos 18 de 18 contra uma compilação de produção. Por provar: continua a haver um leitor por língua, e a escolha da forma com dois pontos é uma decisão sobre a forma e não uma medição.

Do trabalho de plataforma na Provibr. De onde veio a regra sobre títulos e ligações está em três falhas que nenhum script conseguia ver, e como a guarda que a impõe distingue um encurtamento de uma substituição está em dois nomes para o mesmo artigo.

Comece com um host e um agente

Crie uma conta, instale o agente com um único comando e ligue o seu primeiro host Proxmox. O período experimental dura 14 dias e não pede quaisquer dados de pagamento.