Todos os artigos
-
Números de ponto flutuante: por que 0.1 + 0.2 não é 0.3
O ponto flutuante binário representa a maioria das frações decimais apenas de forma aproximada, e por isso a aritmética acumula erros de arredondamento. Compare com tolerância, some com cuidado, use inteiros ou tipos decimais para dinheiro e contagens e imprima com dígitos suficientes para que o valor possa ser convertido de volta sem perdas (round-trip).
-
Chamando a API TypeSafe a partir de um agente: formato da requisição, erros, novas tentativas e fixação de versão
O contrato documentado de que um agente precisa para chamar o Jev sem camada de chat: POST /v1/systemone com chave Bearer, um estado, o nome do modelo e um mapa de perguntas tipadas; respostas com as mesmas chaves das perguntas mais um bloco usage; os status 401, 422, 429 e 529 com backoff exponencial; aliases que mudam e IDs versionados que não mudam; padrões dos SDKs para novas tentativas e a skill do agente para agentes de programação.
-
Projetando um dashboard operacional: uma pergunta por painel, uma tela por público
Parta das perguntas que quem responde ao incidente precisa responder, dê a cada pergunta um painel, ordene do geral ao específico, normalize unidades e eixos, use variáveis de template em vez de cópias, vincule cada alerta de paging ao dashboard de que ele precisa e mantenha a definição do dashboard em controle de versão.
-
Modos dry-run para ações de agentes: mostrar o plano antes da alteração
Dê a toda ferramenta que altera estado um modo que calcula e devolve o plano concreto (quais objetos, quais campos, quantos) sem aplicá-lo; valide o plano no servidor quando o sistema permitir, exija que o plano seja produzido e revisado antes da chamada real e compare depois o resultado real com ele.
-
Bancos de dados efêmeros em contêineres para testes de integração
Suba o motor de banco de dados real em um contêiner descartável a cada execução de testes, mantenha os dados em memória, aplique as migrações uma só vez em um banco-modelo e copie-o para cada arquivo de teste. Assim, os testes exercitam o planejador, as constraints e o comportamento de isolamento reais, em vez de um substituto em memória.
-
Encerramento gracioso: tratando SIGTERM em serviços
Os runtimes de contêiner enviam SIGTERM e aguardam um período de tolerância antes do SIGKILL; o serviço deve parar de aceitar novo trabalho, concluir ou devolver o trabalho em andamento, fechar conexões e encerrar dentro desse período. Ignorar o sinal transforma cada deploy em uma indisponibilidade.
-
Formulários com restrições HTML nativas geram menos rejeições de validação no servidor por envio do que formulários validados apenas com JavaScript personalizado
Hipótese: o navegador bloqueia o envio interativo de um formulário cujas restrições nativas (required, pattern, type, min e max) falham, embora a MDN note que chamar submit() contorna isso e novalidate o desativa. A proposta é que formulários com restrições nativas que espelham as regras do servidor chegam a ele com menos rejeições por envio do que formulários cujas verificações estão só em scripts personalizados, porque as verificações nativas continuam a funcionar quando o script não carrega ou dá erro; propõe-se um teste A/B, sem alegar resultado.
-
Upsert, row limits and identifier quoting across PostgreSQL, MySQL, SQLite and SQL Server
PostgreSQL's ON CONFLICT, MySQL's ON DUPLICATE KEY UPDATE, SQLite's PostgreSQL-style ON CONFLICT and SQL Server's MERGE are three families of upsert syntax, LIMIT/OFFSET has at least three shapes, and a quoted identifier means double quotes, backticks or square brackets depending on the engine.
-
Códigos de saída de find e xargs: o 0/>0 grosseiro do find versus a escala 123-127 do xargs
O find só garante 0 para sucesso total e qualquer valor acima de 0 para erro, de propósito sem mais detalhes, enquanto o xargs define uma escala específica para indicar como o comando invocado falhou: 123 para saída não zero comum, 124 para saída 255, 125 para morte por sinal, 126 para comando não executável e 127 para comando não encontrado. Encadear find com xargs num pipe significa verificar duas filosofias diferentes de código de saída no mesmo pipeline.
-
Ensinar de volta como verificação de compreensão: explicar a um leitor definido e comparar com a fonte
Escrever ou dizer uma explicação para um leitor específico, que sabe menos, revela lacunas que a releitura esconde; um experimento relatado em 2014 constatou que apenas esperar ter de ensinar um texto levou a uma recordação mais completa e mais bem organizada do que esperar uma prova, e a explicação escrita pode ser conferida frase a frase com a fonte.
-
Onde ficam, numa máquina de desenvolvimento, as credenciais que um processo de agente consegue ler
Um agente executado com a conta do usuário consegue ler tudo o que esse usuário consegue ler: variáveis de ambiente, arquivos de credenciais de CLIs, logins de registries de contêineres, chaves SSH, histórico do shell e repositórios de dados próximos ao navegador. Conhecer esses locais permite ao operador decidir o que manter fora do alcance do agente e o que rotacionar após um incidente.
-
Dependency confusion: quando um pacote público se sobrepõe a um privado
Se uma build resolve nomes de pacotes entre um índice privado e um público, um atacante pode publicar o nome privado no índice público com uma versão mais alta e conseguir que o seu código seja instalado; a documentação do pip considera inseguro usar --extra-index-url para pacotes privados exatamente por isso. As defesas são namespaces associados a um único registro, um índice único com proxy, fixação por hash e reserva de nomes.
-
Como carregar YAML com segurança
Os loaders completos de YAML podem instanciar objetos arbitrários a partir de nós com tags; use sempre um loader seguro, fixe a semântica da versão do YAML e valide o resultado com um schema antes de usá-lo.
-
Glob pattern dialects: what * and ** mean in .gitignore, .dockerignore, bash, Python and GitHub Actions
The same star and double-star characters mean different things depending on where the pattern is evaluated: a slash-less .gitignore pattern matches at every depth while the same line in .dockerignore only matches at the context root, bash's globstar recursion is opt-in, and Python's fnmatch is not even path-aware.
-
O cabeçalho Link e os tipos de relação de link
A RFC 8288 permite que qualquer resposta HTTP leve links tipados num cabeçalho Link: <destino>; rel="relação", com os parâmetros opcionais anchor, hreflang, type, title e media. Os nomes de relação vêm do registro da IANA (next, prev, canonical, alternate, describedby, preload) ou são URIs absolutas, no caso de extensões privadas. É assim que respostas que não são HTML apontam para recursos vizinhos e que o 103 Early Hints indica ao navegador o que buscar antecipadamente.
-
Como adicionar um repositório APT de terceiros da forma atual: arquivos .sources deb822 e keyrings com Signed-By
O apt-key está obsoleto. A forma suportada de adicionar um repositório assinado de terceiros é um arquivo de keyring em /etc/apt/keyrings referenciado pela opção Signed-By, escrita no formato clássico de uma linha ou no formato mais novo deb822 (.sources), que tanto o Debian 12/13 quanto as versões atuais do Ubuntu interpretam.
-
Revisão de wrappers de comandos com um substituto que registra argumentos
Verifique como o wrapper de comandos de um agente de programação transforma valores controlados pelo usuário em intenção executável. Este método original substitui o programa real por um registrador de argumentos inofensivo e examina diretamente essa fronteira.
-
Planejamento de uma atualização in-place de versão major do RHEL com o Leapp
O Leapp atualiza o RHEL 8 para o 9, ou o 9 para o 10, in-place, mas só depois de resolvidos todos os itens que bloqueiam a atualização no relatório de preupgrade. Esta metodologia cobre a execução da avaliação, o registro das respostas aos seus prompts e o motivo de o backup vir antes da etapa de atualização propriamente dita.
-
Renderização indireta orientada por GPU: montando cargas de desenho no dispositivo
Use os resultados de visibilidade da GPU para gerar draws indiretos, com capacidade de buffer explícita, reinício de contadores, sincronização e uma referência em CPU para validação.
-
Uma pequena área de swap com swappiness baixo reduz as mortes por OOM do serviço principal em servidores com pouca memória sobrando
Hipótese: em servidores de finalidade única cujo working set quase preenche a RAM, uma área de swap modesta combinada com um vm.swappiness baixo permite ao kernel paginar para o disco a memória anônima fria durante picos curtos. Assim, o serviço principal sofre menos OOM kills do que no mesmo host sem swap, ao custo de alguma latência ocasional.
Legível por máquina: JSON