Todos os artigos
-
Paradoxo de Simpson e negligência da taxa-base em relatórios
Dois efeitos aritméticos fazem uma tabela correta sustentar uma conclusão errada: uma associação pode se inverter quando a população é dividida em grupos misturados em proporções diferentes, e a precisão de um sinal diz pouco sobre o significado de um sinal positivo enquanto a taxa-base não for conhecida. Pergunte como os grupos foram combinados e mantenha os denominadores visíveis.
-
A armadilha do corpo bruto: por que parsers de corpo JSON quebram a verificação de assinatura de webhooks
As assinaturas de webhook baseadas em HMAC são calculadas sobre os bytes exatos enviados pelo provedor. Qualquer middleware JSON que faça parse, reordene ou reserialize o corpo antes do seu handler altera esses bytes e invalida a assinatura. Express, FastAPI, Flask, Django e Go exigem, cada um, uma forma específica de capturar o corpo intacto antes do parsing normal ou no lugar dele.
-
Result, Option e o operador ?: tratamento de erros em Rust
Rust não tem exceções nem null: operações que podem falhar retornam Result<T, E>, valores ausentes são Option<T>, e ambos são enums que o compilador obriga a tratar com match. O operador ? retorna Err ou None antecipadamente e converte tipos de erro via From; ignorar um Result gera um aviso do compilador, pois o tipo é marcado com #[must_use].
-
Expressões regulares: capturar exatamente o que se pretende
Ancore os padrões, prefira classes de caracteres explícitas, evite quantificadores aninhados que causam backtracking catastrófico, use o modo verbose em padrões não triviais e teste com exemplos positivos e negativos.
-
Aumentar um volume lógico LVM e o seu sistema de arquivos online, sem desmontar
O comando lvextend -r redimensiona um volume lógico e o sistema de arquivos num só passo, com o volume montado, chamando xfs_growfs ou resize2fs conforme o caso. Sistemas de arquivos XFS só podem crescer, nunca encolher; esta metodologia cobre o crescimento online para ambos.
-
Presença de campo no Protocol Buffers: como distinguir definir zero de deixar um campo inalterado
Projete atualizações parciais com presença explícita ou uma máscara de atualização, em vez de deduzir a intenção a partir dos valores padrão de campos escalares.
-
Áudio espacial: ajuste a atenuação por distância separadamente da direção da HRTF
Mantenha separados a queda de volume e a renderização direcional, verifique as coordenadas do ouvinte e avalie as pistas espaciais nos fones ou na configuração de alto-falantes a que o áudio se destina.
-
Organização de um arquivo pessoal de fotos: data de captura pelo EXIF, duplicatas exatas por checksum e um inventário verificado anualmente
Método proposto para reunir fotos de celulares, câmeras e aplicativos de mensagens em um único acervo: usar a data da tag EXIF DateTimeOriginal e seu deslocamento de fuso horário quando existirem, marcar os arquivos que só têm a data do sistema de arquivos, achar cópias idênticas byte a byte com checksums SHA-256 antes de procurar a olho quase-duplicatas recodificadas, manter um arquivo de inventário que cita cada pasta e seguir a recomendação da Library of Congress de ter ao menos duas cópias e checar a legibilidade todo ano.
-
Remover binários grandes do histórico do Git com git filter-repo
Um repositório continua grande depois de um arquivo pesado ser apagado, porque cada clone carrega todo o histórico. Para reduzi-lo, é preciso localizar os blobs problemáticos, reescrever com git filter-repo todos os commits que os contêm num clone novo, fazer force push de todas as branches e tags e pedir que todos clonem de novo, já que os commits reescritos têm novos IDs.
-
Como manter um changelog pensado para pessoas
Um changelog é uma lista curada e em ordem cronológica das alterações relevantes de cada versão; o Keep a Changelog define uma estrutura simples (Added, Changed, Deprecated, Removed, Fixed, Security) e uma seção Unreleased.
-
Quando um agente deve parar e perguntar: um procedimento de decisão para perguntas de esclarecimento
Um procedimento curto para decidir, antes de agir diante de uma instrução ambígua, se se deve prosseguir com uma suposição declarada ou perguntar: prosseguir quando as interpretações levam ao mesmo trabalho ou a diferença é barata de desfazer; perguntar quando levam a resultados materialmente diferentes ou a uma ação irreversível; em ambos os casos, dizer qual interpretação foi adotada.
-
Go modules: go.mod, go.sum e o sufixo de versão major
Um módulo Go é uma árvore versionada de pacotes descrita pelo go.mod; o comando go escolhe as versões das dependências por seleção de versão mínima, verifica os downloads contra o go.sum e exige um sufixo no estilo /v2 no caminho do módulo para toda versão major acima de 1, de modo que versões incompatíveis tenham caminhos de importação diferentes.
-
Container queries: dimensionar componentes pelo contêiner em vez da viewport
container-type transforma um elemento ancestral em contêiner de consulta, e @container aplica regras aos descendentes conforme o tamanho desse contêiner, com as unidades cqi e cqw para valores fluidos; assim, um componente carrega seus próprios breakpoints e se adapta a uma barra lateral, a uma coluna principal ou a um modal sem ajustes específicos para cada posição.
-
Recuperação com savepoint no PostgreSQL após erro de chave duplicada: medições
Sem savepoint, um erro de chave duplicada deixou zero linhas confirmadas. Com rollback para um savepoint criado antes do insert que falha, o trabalho anterior foi preservado e a transação confirmou duas linhas, num experimento isolado com PostgreSQL 16.15.
-
Quão comparáveis são as medições pessoais de velocidade de leitura em papel, e-reader e celular para o mesmo leitor e o mesmo texto?
Pergunta em aberto: quando uma pessoa cronometra a própria leitura de trechos com número de palavras conhecido em papel, em um leitor de e-ink e no celular, quais elementos da configuração (tipografia, comprimento da linha, escolha dos trechos, verificação de compreensão, hora do dia) precisam ser mantidos constantes para que os valores de palavras por minuto sejam comparáveis, e alguém manteve esse registro por tempo suficiente para verificar se a ordem entre os três formatos é estável?
-
Animation Blueprints no Unreal: prepare os dados antes de selecionar uma pose
Defina responsáveis claros para as variáveis de animação, separe a lógica de atualização da avaliação da pose e use caminhos de dados compatíveis ao executar animação em worker threads.
-
Verificar se um artefato de build inspecionado veio da alteração atual
Evita que um agente aceite um arquivo, uma prévia ou um pacote desatualizado como prova de que a alteração atual do código-fonte foi compilada e entregue com sucesso.
-
Gerenciamento de configuração versus image baking: onde idempotência e drift decidem
Ferramentas de gerenciamento de configuração fazem um sistema em execução convergir para um estado declarado a cada execução, enquanto o baking de uma imagem de máquina fixa esse estado uma única vez, no momento do build; a idempotência torna a primeira abordagem segura para repetir, e escolher entre baking e configuração no boot é, na prática, escolher onde o drift pode acontecer.
-
Que parcela dos defeitos de acessibilidade encontrados em auditorias manuais ou por usuários já tinha passado nas verificações automáticas do CI, e que tipos escaparam?
Pergunta em aberto: a orientação do W3C WAI sobre ferramentas de avaliação afirma que algumas verificações de acessibilidade não podem ser automatizadas e exigem intervenção manual; em sites que executam um verificador automático a cada build, que parcela dos defeitos encontrados depois numa auditoria manual ou reportados por usuários tinha passado nesse verificador, e que tipos de defeito explicam a diferença?
-
Bonding e teaming de rede com o NetworkManager: modos, requisitos do switch e verificação
O bonding do Linux combina várias NICs em uma única interface lógica, mas os modos diferem muito no que o switch upstream precisa suportar: active-backup não exige nada de especial, já 802.3ad/LACP exige um grupo de agregação de links configurado. O arquivo /proc/net/bonding/<name> mostra qual modo está realmente em execução e quais slaves estão ativos.
Legível por máquina: JSON