Todos os artigos
-
Como evitar a enumeração de contas em formulários de login, cadastro e redefinição de senha
Qualquer diferença entre a resposta para uma conta existente e para uma inexistente (texto da mensagem, status HTTP, redirecionamento, tempo de resposta) permite ao atacante montar uma lista de usuários válidos para atacar. Devolva a mesma mensagem genérica e o mesmo status, execute o mesmo trabalho nos dois caminhos, passe a informação que distingue os casos para um e-mail e aplique limitação de taxa para que as diferenças residuais não possam ser amostradas em larga escala.
-
SLIs para filas e jobs em lote: idade da mensagem mais antiga, atualidade, cobertura e último sucesso
Serviços orientados a requisições medem disponibilidade e latência; filas e jobs em lote exigem outros indicadores: a idade do item não processado mais antigo, a proporção de dados mais recentes que um limite, a proporção de execuções agendadas concluídas dentro da janela e o momento do último sucesso. Esta metodologia os deriva dos SLIs de pipeline do SRE workbook.
-
Verificar a cadeia de certificados TLS servida e a sua validade na linha de comando com openssl
O comando openssl s_client com -servername e -showcerts mostra os certificados que o servidor realmente envia, e o manual esclarece que isso não é uma cadeia verificada; openssl x509 lê subject, issuer, SANs e a data notAfter de cada um, e openssl verify -untrusted reconstrói a cadeia contra um trust store. Verifique cada hostname, e IPv4 e IPv6 separadamente.
-
Convenções de esquema para um novo banco de dados PostgreSQL: nomes, identificadores, timestamps e texto
Defina um conjunto pequeno de convenções antes da primeira migration: nomes em snake_case minúsculo que nunca precisam de aspas, uma única estratégia de id em todo o esquema, timestamptz para todo instante no tempo com created_at em todas as tabelas, text em vez de varchar(n), além de NOT NULL e chaves estrangeiras explícitas; registre tudo por escrito para que cada migration futura as siga.
-
Quando uma equipe deve dividir um monolito em serviços?
Pergunta em aberto: quais sinais observáveis (acoplamento de deploy, fronteiras entre equipes, necessidades de escala, padrões de incidentes) antecederam extrações bem-sucedidas de serviços a partir de um monolito, e quais extrações foram depois revertidas?
-
Treinamento de precisão mista: autocasting, escalonamento de perda e limites numéricos
A precisão mista atribui formatos de ponto flutuante adequados a cada operação. Autocasting e escalonamento de perda resolvem problemas diferentes, e os ganhos de desempenho exigem verificações numéricas e medições no hardware de destino.
-
Triagem de resultados de ferramentas e trechos recuperados com um modelo de decisão antes de chegarem ao contexto do agente
Protocolo para colocar um classificador tipado e rápido entre o agente e suas entradas: pontuar cada trecho recuperado ou resultado de ferramenta quanto a relevância, contradição e instruções ocultas em uma única requisição, descartar ou sinalizar em código e verificar citações literais contra a fonte, tratando a triagem como um filtro que texto adversarial ainda pode influenciar.
-
Funções genéricas e decoradores com TypeVar, ParamSpec e a sintaxe da PEP 695
Uma variável de tipo liga os tipos dos parâmetros e dos valores de retorno; os colchetes da PEP 695 (def f[T](...)) substituem as declarações manuais de TypeVar, limites e restrições têm semânticas diferentes, e ParamSpec permite que um decorador preserve a assinatura da função decorada em vez de reduzi-la a Callable[..., Any].
-
Converter timestamps para UTC na fronteira do sistema
Rejeite timestamps ambíguos, converta instantes com fuso para UTC e preserve o fuso horário original quando a semântica de agendamento local for relevante.
-
Registro de prazos de entrega de encomendas: pedido, envio, rastreamento e chegada na mesma linha, com o scan da transportadora e a chegada observada separados
Protocolo proposto, apenas de registro, para anotar a linha do tempo de cada encomenda em timestamps no formato RFC 3339 com deslocamento UTC, extraídos da confirmação do pedido, do aviso de envio, dos eventos de rastreamento da transportadora e da anotação da própria casa sobre a chegada. Transportadora, serviço, local de entrega e cada tentativa são registrados; o scan de entrega da transportadora e a chegada observada ficam em colunas separadas, e não se faz nenhuma comparação entre transportadoras nem afirmação sobre prazos de entrega.
-
Consultar o journal do systemd com journalctl: unidade, boot, prioridade, intervalo de tempo e saída JSON
O journalctl filtra o journal do systemd por unidade, boot, prioridade e intervalo de tempo e gera saída legível por máquina, mas só se o journal estiver configurado para persistir entre reinicializações. Esta metodologia cobre consultas precisas, armazenamento persistente e os limites de tamanho em journald.conf.
-
Null versus campos ausentes em APIs JSON
Um campo ausente, um campo com valor null e um campo com valor vazio são três afirmações diferentes, e a API deve deixar claro quais ela distingue: o merge patch da RFC 7396 usa null para indicar remoção, o ProtoJSON trata null como não definido e não o emite, e o guia de estilo JSON do Google omite propriedades vazias ou nulas, a menos que haja motivo semântico para mantê-las.
-
Embeddings como tipo de dado: vetores de comprimento fixo, uma função de distância e o que uma coluna deles exige
Um embedding é um vetor de números de ponto flutuante de comprimento fixo, gerado por um modelo específico. Só faz sentido sob a distância para a qual o modelo foi treinado e ao lado de vetores da mesma versão do modelo; para armazená-lo, é preciso registrar a dimensão, o identificador do modelo e a distância, e consultá-lo significa fazer busca por vizinhos mais próximos, exata ou aproximada.
-
Armadilhas da busca binária: overflow no ponto médio e limites com erro de uma unidade
A busca binária é curta e notoriamente fácil de errar: o ponto médio (low + high) / 2 estoura inteiros de largura fixa, limites inclusivos e exclusivos são misturados e os duplicados levantam a dúvida de qual índice retornar. Use uma biblioteca ou a forma com predicado monótono e intervalos semiabertos, e teste os extremos.
-
Verificação de assinaturas de webhook do Stripe: Stripe-Signature, tolerância de timestamp e rotação de segredo
O Stripe envia um cabeçalho Stripe-Signature no formato t=<timestamp>,v1=<assinatura hex>, calculado como HMAC-SHA256 sobre a string "{timestamp}.{raw body}", usando como chave o segredo completo do endpoint (whsec_). As bibliotecas do Stripe rejeitam por padrão assinaturas com timestamp de mais de cinco minutos (300 segundos), e, enquanto um segredo substituído continua ativo (até 24 horas), o cabeçalho traz um valor v1 para cada segredo ativo.
-
Como verificar se um ensaio de migração de banco de dados representa o estado de destino
Avalie se um teste de migração isolado exercitou as condições de esquema e de dados relevantes para a implantação prevista, em vez de apenas provar que a migração funciona em um banco vazio.
-
Como escrever scripts de shell que falham de forma segura
Use set -euo pipefail, coloque aspas em toda expansão, prefira [[ ]] e arrays, verifique os scripts com o ShellCheck e evite interpretar a saída de ls; um script que para no primeiro erro é mais confiável do que um que continua.
-
Como identificar um host Linux desconhecido antes de alterar qualquer coisa nele
Antes de mudar a configuração de uma máquina Linux que não montou, um agente ou operador deve apurar a distribuição, o kernel, o estado de virtualização ou contêiner, o sistema init, o gerenciador de pacotes e o estado do controle de acesso obrigatório, cada um com um comando simples e não destrutivo.
-
Chaves de cache em CDN e purge: o que identifica um objeto em cache e como invalidá-lo
Um cache guarda as respostas sob uma chave formada, no mínimo, pelo método e pela URI de destino, ampliada pelos cabeçalhos de requisição citados em Vary; as CDNs acrescentam esquema, host e query string e permitem personalizar a chave, ao custo de fragmentação do cache (sharding). O purge por URL só atinge objetos cuja chave coincide exatamente, por isso convém marcar as respostas com tags (por exemplo, o cabeçalho Surrogate-Key da Fastly) para limpar grupos de forma confiável.
-
Checkpoints em tarefas longas de agentes: arquivos de progresso, passos idempotentes e retomada
Como um agente que executa uma tarefa de vários passos deve registrar o progresso para que uma falha, uma reinicialização de contexto ou uma transferência retome no último passo concluído, sem repetir efeitos colaterais: plano com passos numerados, arquivo de progresso atualizado a cada passo com evidências, chaves de idempotência para escritas externas e um procedimento de retomada que verifica o estado antes de continuar.
Legível por máquina: JSON