Site API 0.6.0
Novidades
- #1332 — Tres imagens por artigo, e fotografias para os artigos antigos
Decisao do dono a 02/09: tres imagens sempre, e substituir por fotografias as dez capas em SVG que trazem o titulo pintado em portugues dentro da imagem — o que estraga a pagina inglesa, porque a traducao reutiliza a fotografia da portuguesa.
O numero de imagens estava escrito a mao em dois sitios (a prosa da instrucao ao escritor e uma lista fixa no editor), e a variavel de configuracao que parecia controla-lo so era lida pela estimativa de custo. Ou seja, muda-la sozinha nao geraria mais imagem nenhuma: faria a estimativa mentir. Passa a mandar nos tres sitios. O leitor aceita as respostas antigas de duas imagens sem rebentar, e um artigo retido continua a comprar so a capa.
DEFEITO ENCONTRADO AO FAZER ISTO, e que custava dinheiro em silencio: o modelo do artigo tinha um campo para a imagem de corpo e NENHUM renderizador o usava. Todos os artigos que o motor escreveu desde 01/09 pagaram uma segunda fotografia que nunca chegou a uma pagina. Passa a haver uma lista de imagens de corpo, e o renderizador coloca-as ao longo do texto sem mexer nas posicoes dos anuncios.
O comando novo gera fotografias para artigos que ja existem. O plano e derivado do artigo guardado e nao de uma lista, portanto uma segunda corrida planeia zero; os bytes vao para disco antes de qualquer coisa poder falhar; o custo e estimado e o saldo verificado antes de gastar; e so uma opcao explicita compra. A direccao artistica e importada da instrucao do escritor, com um teste que falha se alguem a copiar — se divergirem, as dez fotografias antigas nao combinam com as que o motor gera semanalmente e nota-se no indice.
Duas premissas minhas que estavam erradas e foram corrigidas em vez de contornadas: o campo de lista de imagens nao existia, e os dez artigos nao tem zero imagens de corpo — tem uma cada, em SVG, dentro do proprio texto. Por isso a substituicao troca o endereco no sitio onde ele esta, e a fotografia fica onde o autor a pos. So as capas tem titulo pintado; os SVG de corpo nao tem texto.
Verificado sem gastar creditos: ensaio contra a API a serio com os 18 artigos semeados da exactamente 10 artigos, 20 imagens, 170 creditos; o caminho completo num artigo com gerador de substituicao troca a capa e a figura no lugar, mantem a data de publicacao e o estado, e regenera as paginas; a segunda corrida planeia zero. O briefing real de um artigo passou pelo modelo verdadeiro e produziu dois prompts validos, com legendas em portugues europeu e cenas genuinamente diferentes, a cerca de 0,70 USD por artigo.
267 -> 288 testes verdes no motor; 398 -> 408 no site-api.
- Servir as fontes tipograficas da nossa origem, em vez da Google
Fecha o ultimo caminho por onde a Google via o IP do visitante antes de ele responder ao aviso de cookies. O WI #1329 tirou a medicao; faltavam as fontes, que saiam em todas as paginas.
Sairam tambem as duas ligacoes antecipadas para os dominios de fontes: sem isso o IP continuava a ir para la, mesmo sem pedido visivel na aba de rede.
Sao os MESMOS ficheiros, nao equivalentes: comparados por SHA-256 com o que a gstatic servia, byte a byte identicos. A Fraunces e o ficheiro variavel com o eixo optico intacto, confirmado com fontTools, para os titulos grandes manterem o corte de display. Os intervalos de peso declarados sao os que a Google declarava, para um pedido de peso mais pesado cortar da mesma maneira.
Inventariados os 34 caracteres nao-ASCII das 39 paginas: todos cabem no subconjunto latino. O latin-ext vai na mesma como seguro — com unicode-range custa zero bytes ate uma pagina ter um carater desses.
Amostra de glifos: zero pixeis diferentes em 5,18 milhoes, com acentos, cedilha, aspas tipograficas, guilhemets e simbolos, em romano e italico, nas cinco familias. Cinco das seis paginas ficaram pixel-identicas; a sexta difere em 101 pixeis, mas duas capturas do MESMO servidor "antes" diferem em 4059 na mesma zona — e a animacao do painel, nao as fontes.
O QUE OS NUMEROS NAO CONFIRMAM, e vai dito porque a decisao foi tomada com o argumento de que seria mais rapido: em rede muito lenta a home paga cerca de 270 ms de atraso a pintar o primeiro texto. A causa foi isolada com uma terceira variante — e o custo e do PRELOAD, nao de servir as fontes daqui: sem preload, o depois empata com o antes. O que o preload compra e a fonte da marca a entrar um segundo mais cedo nos artigos em rede lenta. Nos artigos vale claramente a pena; na home e marginal. Ficou so na Inter, e e o botao reversivel deste trabalho.
O ganho incondicional e outro: medidos em producao, 437,7 ms de mediana gastos so a abrir ligacoes aos dois dominios da Google, e em serie — o browser so sabe o endereco do segundo depois de o primeiro responder. Isso desaparece. Origens de terceiros na home: 8 para 6; na pagina 404, de 2 para zero.
- #1335 — Traduzir para ingles na publicacao, com o portugues como fonte
Decisao do dono a 02/09: em vez de escrever artigos em ingles, o artigo portugues e a fonte unica e a versao inglesa e traduzida, gerando paginas reais e indexaveis. Rejeitou explicitamente a traducao no browser, que nao cria paginas que a Google indexe, e o abandono do ingles.
Traduz na PUBLICACAO e nao na aprovacao, por tres razoes, por ordem de peso. O texto portugues so e final quando publica: entre aprovar e sair, o dono ainda pode edita-lo, e traduzir na aprovacao traduziria uma versao que nunca existiu. Uma falha nunca pode atrasar o portugues, e aqui nao pode porque o artigo ja esta no ar quando a rotina comeca. E nao ha fila de trabalhos: o que falta e derivado do armazem em cada execucao, por isso uma execucao que morre nao deixa nada por limpar, e os 11 artigos antigos escoam pelo mesmo caminho que os de amanha. Custo assumido: a pagina inglesa aparece ate 24h depois da portuguesa.
O dono NAO aprova a versao inglesa. Ele ja aprovou o artigo; le-lo outra vez noutra lingua e a mesma revisao duas vezes sem nenhuma decisao editorial nova. E um "nao" nunca poderia despublicar o portugues — so poderia significar "nao espelhes este", que e o que reter a pagina inglesa no backoffice ja faz, depois e em segundos. O que substitui a aprovacao sao verificacoes que recusam ANTES de a API ser chamada (referencia perdida, marca [n] perdida, seoTitle cortado, slug em colisao), um aviso com o link no momento em que sai, e uma variavel que estaciona tudo em retido — uma variavel, nao um lancamento.
Gravar uma traducao liga os dois lados NUMA SO operacao na API. O renderizador e o sitemap ja sabiam emitir alternates, mas so quando ambos os documentos declaram o par: um chamador que tenha de se lembrar da segunda escrita publica, mais cedo ou mais tarde, um par com metade.
Duas impressoes digitais respondem sozinhas ao "e se o dono editar o portugues depois de traduzido": a do original diz que a traducao ficou desactualizada e refaz; a da propria pagina inglesa diz que alguem lhe mexeu a mao — e nesse caso NAO reescreve, avisa.
As 4 paginas inglesas que ja existem sao traducoes de 4 artigos portugueses e ja estao ligadas nos dois sentidos. Nao ha nada a migrar. E ficam intocaveis: substituir uma traducao humana por uma automatica e uma despromocao.
Custo medido nos 14 artigos: cerca de 6350 tokens de entrada e 2500 de saida por artigo, e ZERO creditos de imagem — a pagina inglesa reutiliza a fotografia da portuguesa, porque uma imagem nao tem lingua. Limpar o atraso dos 11 sao ~100k tokens de entrada; em regime, ~9k por semana.
Verificado com uma traducao a serio do artigo mais dificil do blog (literacia financeira, 8275 caracteres, 8 referencias, 7 percentagens), que passou o portao com zero desvios numericos. As citacoes de Klapper e Lusardi foram buscadas a fonte original em ingles, e isso virou regra do guia: retraduzir de volta inventaria uma terceira versao de palavras com o nome de uma pessoa ao lado.
Corrigido pelo caminho: a seccao aparecia em portugues na pagina inglesa, no caminho de navegacao e no cartao do indice. O rotulo ingles ja existia e a API nao o usava. Nao e campo para dar a um tradutor — e comparado letra a letra, e um "quase certo" faz o cartao desaparecer do indice.
398 -> 441 testes verdes no site-api; 267 -> 311 no motor. Guarda da CSP verde.
Correções
- #1329 — Nao contactar a medicao da Google antes do consentimento
Decisao do dono a 02/09. Ate agora, quem abria o site e ainda nao tinha respondido ao aviso de cookies gerava dois pedidos para a Google: o proprio gtag.js e um /g/collect com gcs=G100. Nao gravava cookies nem identificava ninguem, mas o pedido saia, com o IP.
Isso e o Consent Mode v2, o desenho recomendado pela Google, e existe para permitir a modelacao de conversoes. O dono aceita perde-la. O argumento que decidiu: a medicao nao registou nada de Maio a 01/09, portanto nao ha serie historica para partir ao meio, e mudar o mecanismo nunca sera mais barato do que hoje.
O tag da Google deixa de existir no HTML e passa a ser criado por codigo, so quando o consentimento e "all". Sairam tambem das 35 paginas o preconnect para o googletagmanager e o dns-prefetch para o google-analytics: nao aparecem como pedidos na aba de rede, mas o preconnect abre mesmo ligacao TCP e TLS a Google antes de haver resposta ao aviso.
O identificador de medicao vivia no endereco do tag da Google. Passa a ser um atributo do proprio ficheiro de analytics — continua a haver uma copia por pagina, continua a ser atributo de um script externo, portanto nenhum hash da politica de seguranca pode ser invalidado, e o script que reescreve os tokens no CI continua a apanha-lo.
Ao aceitar, a visita em curso conta sem recarregar a pagina. Isso importa mais do que parece: obrigar a recarregar perderia a primeira visita de toda a gente, que e justamente quando o leitor chega de uma pesquisa.
Medido no browser contra a imagem de producao, nao em ambiente local. Sem resposta ao aviso: zero pedidos ao googletagmanager e zero ao google-analytics, contra um de cada antes. Aceite, sem recarregar: gcs=G111 e um page_view. Recusado, na pagina seguinte: zero.
Uma guarda nova chumba o build se alguma pagina voltar a trazer um script, preconnect, dns-prefetch, imagem ou iframe para um host de medicao ou publicidade da Google, ou se algum dos carregadores perder a verificacao de consentimento. Testada com a regressao reintroduzida de proposito. Mais 13 testes sobre o portao, sem dependencias novas — o site continua sem cadeia de build.
O QUE ISTO NAO FAZ, e ficou documentado para nao ser mal lido: continuam a sair pedidos para hosts da Google sem consentimento — as fontes (fonts.googleapis.com e fonts.gstatic.com) em todas as paginas, e um logotipo servido a partir do Google Cloud Storage nas duas homepages. Nao medem nada, mas veem o IP. Auto-aloja-los tem custo real de desempenho e e decisao separada. Esta na lista de excepcoes da guarda para que "a guarda esta verde" nunca seja lido como "nenhum host da Google e contactado".
398 testes verdes no site-api, antes e depois. Guarda da CSP verde.