Category: Desenvolvimento

Alinhando recursos polinomiais com a distribuição de dados: O problema de atenção-alinhamento em ML

2025-08-26
Alinhando recursos polinomiais com a distribuição de dados: O problema de atenção-alinhamento em ML

Esta publicação explora o alinhamento de recursos polinomiais com a distribuição de dados para melhorar o desempenho do modelo de aprendizado de máquina. Bases ortogonais produzem recursos informativos quando os dados são distribuídos uniformemente, mas os dados do mundo real não são. Duas abordagens são apresentadas: um truque de mapeamento, transformando dados em uma distribuição uniforme antes de aplicar uma base ortogonal; e multiplicando por uma função cuidadosamente escolhida para ajustar a função de peso da base ortogonal para se alinhar com a distribuição de dados. A primeira é mais prática, atingível com o QuantileTransformer do Scikit-Learn. A segunda é mais complexa, exigindo um conhecimento matemático mais profundo e ajustes finos. Experimentos no conjunto de dados de moradias da Califórnia mostram que recursos quase ortogonais do primeiro método superam o dimensionamento mínimo-máximo tradicional na regressão linear.

Conselhos de carreira perigosos: uma ferramenta poderosa para engenheiros fortes

2025-08-26

Este artigo argumenta que conselhos de carreira eficazes, como ferramentas afiadas, podem ser imensamente úteis ou incrivelmente prejudiciais, dependendo do seu uso. Muitos conselhos de carreira são superficiais e carecem de aplicação prática. O autor incentiva os engenheiros a abraçarem 'conselhos perigosos', quebrando convenções para alcançar alta eficiência. Embora arriscado, as recompensas superam os riscos para engenheiros fortes. O autor adverte que este conselho não é adequado para engenheiros mais fracos.

Desenvolvimento

De Ruby para Python: A Mudança de Preferência de um Programador

2025-08-26

Um programador experiente em Ruby compartilha sua jornada de mudança de preferências em relação a linguagens de programação. Inicialmente, ele apreciava a elegância e concisão do Ruby, mas com o tempo, as melhorias do Python, especialmente a introdução de dicas de tipo e correspondência de padrões, mudaram sua perspectiva. Ele descobriu as vantagens do Python em colaboração em equipe e, finalmente, o escolheu como sua linguagem principal, destacando a importância da praticidade e da dinâmica da equipe na escolha da linguagem de um programador.

Desenvolvimento

timep: Um perfilador Bash ultrarrápido com flamegraphs integrados

2025-08-26
timep: Um perfilador Bash ultrarrápido com flamegraphs integrados

timep é um perfilador baseado em traps de última geração para código bash. Ele gera perfis de tempo de execução por comando, registrando hierarquicamente os tempos de execução de comandos e metadados com base na profundidade de aninhamento de funções e subshells. A versão mais recente (v1.3) é totalmente autônoma, incluindo um binário compactado e um gerador de flamegraphs. Reestruturações importantes melhoraram dramaticamente o desempenho; um teste com ~67.000 comandos agora leva 5 minutos (antes 20!). O timep oferece perfis detalhados e resumidos, além de flamegraphs visualmente perspicazes, simplificando a análise e otimização de código Bash.

Desenvolvimento perfilhamento Bash

Fenster: Uma Biblioteca Minimalista de Canvas 2D Multiplataforma

2025-08-26
Fenster: Uma Biblioteca Minimalista de Canvas 2D Multiplataforma

Fenster é uma biblioteca minimalista de canvas 2D multiplataforma que lembra os gráficos do Borland BGI ou QBASIC. Oferece uma janela de aplicativo única, um framebuffer RGB de 24 bits, entrada de teclado/mouse multiplataforma e reprodução de áudio — tudo com código mínimo. Uma API de sondagem simples evita callbacks ou multithreading. Possui bindings para C99, Go, Zig e Lua, e sim, pode até executar o Doom!

Desenvolvimento gráficos 2D

A Defesa Multicamadas do RubyGems.org Contra Gems Maliciosas

2025-08-26

O RubyGems.org recentemente frustrou um ataque envolvendo gems maliciosas projetadas para roubar credenciais de mídia social. Seu sucesso decorre de uma abordagem de segurança multicamadas: detecção automatizada (análise de código estático e dinâmico), pontuação de risco, varredura retroativa e inteligência externa. Após a detecção, gems suspeitas são submetidas a revisão manual; gems maliciosas confirmadas são removidas e documentadas. Em um incidente recente, o RubyGems.org removeu a maioria dos pacotes maliciosos antes do relatório da Socket.dev e colaborou ativamente na investigação, demonstrando uma resposta de segurança eficaz. O artigo incentiva a participação da comunidade na manutenção da segurança e solicita o apoio corporativo aos esforços de segurança do RubyGems.org.

Desenvolvimento Gems Maliciosas

DeepWiki: Sua ferramenta de codificação com IA

2025-08-26
DeepWiki: Sua ferramenta de codificação com IA

DeepWiki transforma instantaneamente qualquer repositório GitHub em uma wiki navegável, aumentando dramaticamente a eficiência da codificação assistida por IA. Ele oferece modos de pesquisa rápida e profunda, fornecendo respostas precisas com links para o código-fonte. O servidor DeepWiki MCP integra-se perfeitamente a IDEs de IA como Claude e Cursor para consultas de contexto em tempo real. DeepWiki ajuda a entender bases de código, gerar trechos de código, avaliar a segurança e as licenças de bibliotecas de código aberto e até mesmo auxiliar na revisão de código. Seja você iniciante ou especialista, o DeepWiki é uma ferramenta poderosa para codificação eficiente.

Desenvolvimento

Detecção e Visualização 3D em Tempo Real de Movimento Humano usando CSI de Wi-Fi

2025-08-26
Detecção e Visualização 3D em Tempo Real de Movimento Humano usando CSI de Wi-Fi

O WiFi-3D-Fusion é um projeto de código aberto que utiliza Informações de Estado do Canal (CSI) de Wi-Fi local para detectar movimento humano em tempo real e visualizá-lo em 3D. Suporta aquisição de dados via ESP32-CSI e Nexmon, empregando CNNs avançadas para detecção e rastreamento de pessoas, incluindo identificação e reidentificação de múltiplas pessoas. Um pipeline de aprendizado contínuo permite que o modelo melhore automaticamente durante a operação. A visualização é oferecida por meio de uma interface web e um pipeline baseado em terminal. Integrações opcionais com Person-in-WiFi-3D, NeRF² e 3D Wi-Fi Scanner também são fornecidas.

Transformer Anotado: Uma Implementação Linha por Linha

2025-08-26

Este documento apresenta uma implementação anotada, linha por linha em PyTorch, do artigo do Transformer. Ele reorganiza e remove algumas seções do artigo original e adiciona comentários em todo o processo. O notebook fornece uma implementação completa e executável, explicando a arquitetura do Transformer (codificador, decodificador, atenção, codificação posicional, etc.), o processo de treinamento e um exemplo do mundo real (tradução alemão-inglês Multi30k).

Desenvolvimento

Verificação de Captura do Scala: A Tecnologia por Trás de uma Apresentação Falida

2025-08-26

Este artigo relata a apresentação malsucedida do autor sobre verificação de captura no Scala Days 2025 e a subsequente imersão profunda na tecnologia. A verificação de captura visa resolver o problema de valores escapando de seus escopos pretendidos, como o fechamento prematuro de recursos em padrões try-with-resource. Scala implementa a verificação de captura introduzindo 'conjuntos de captura', um recurso do sistema de tipos que permite marcar um tipo e todos os valores que ele captura. O artigo detalha conjuntos de captura, subtipagem, açúcar sintático e os mecanismos para capturar funções e classes, explorando o comportamento do conjunto de captura em parâmetros de tipo. Por fim, o autor argumenta que, embora a verificação de captura envolva muitos detalhes, é um recurso amplamente invisível para a maioria dos desenvolvedores, melhorando a segurança do Scala e permitindo um uso mais amplo das funcionalidades.

Desenvolvimento Verificação de Captura

Otimização da estrutura de dados leva a um aumento inesperado do desempenho da CPU

2025-08-26

Um programa que processa um grande conjunto de dados encontrou gargalos de desempenho de memória e CPU. Inicialmente, o uso de uma única matriz para armazenar dados resultou em até 1 GB de consumo de memória. Empregando programação orientada a dados, a divisão dos dados em várias matrizes economizou aproximadamente 200 MB de memória. Uma otimização adicional envolveu a substituição de uma matriz de strings por índices de matriz de bytes para nomes de campos, reduzindo ainda mais o uso de memória. Surpreendentemente, essa alteração também diminuiu significativamente o uso da CPU. A razão reside no mecanismo de coleta de lixo: o processamento de uma matriz de strings requer que o GC percorra todos os objetos de string, enquanto o processamento de uma matriz de bytes não, reduzindo drasticamente a sobrecarga do GC.

xv6-riscv-net: Implementando Rede TCP/IP no xv6 RISC-V

2025-08-26
xv6-riscv-net: Implementando Rede TCP/IP no xv6 RISC-V

Este projeto integra uma pilha de protocolos TCP/IP ao sistema operacional xv6 para RISC-V, habilitando funcionalidades de rede. Inclui uma porta para o espaço do kernel do microps, uma pilha TCP/IP em modo usuário, um driver virtio-net para emulação de dispositivo de rede no QEMU, uma API de socket padrão e um comando ifconfig simples. Com alguns comandos, você pode construir e iniciar o QEMU, configurar endereços IP e fazer ping no convidado xv6 a partir do host, além de testar aplicativos de eco TCP/UDP.

Desenvolvimento

Empurrando os Limites da Sincronização de Tempo no Linux: Um Desafio de Precisão de 500ns

2025-08-26
Empurrando os Limites da Sincronização de Tempo no Linux: Um Desafio de Precisão de 500ns

Esta publicação detalha a busca de um mês do autor para alcançar sincronização de tempo de alta precisão em vários sistemas Linux em uma rede local. O objetivo era precisão submicrossegundos para rastreamento distribuído. Apesar do uso de GPS e Chrony, o autor descobriu que alcançar a precisão ideal era desafiador. Jitter do receptor GPS, latência da rede e assimetria introduziram centenas de nanossegundos de erro. Por fim, uma precisão de sincronização de cerca de 500 ns foi alcançada na maioria dos sistemas — não exatamente o alvo, mas suficiente para rastreamento distribuído.

Desenvolvimento

Ferramentas de linha de comando macOS: Pare de usar ~/Library/Application Support!

2025-08-26
Ferramentas de linha de comando macOS: Pare de usar ~/Library/Application Support!

Muitas ferramentas de linha de comando macOS armazenam incorretamente arquivos de configuração em ~/Library/Application Support, contradizendo as expectativas do usuário e a especificação XDG. O artigo argumenta que bibliotecas e gerenciadores de arquivos de configuração populares aderem à especificação XDG, colocando arquivos de configuração em ~/.config. O autor defende que as ferramentas de linha de comando devem seguir essa convenção para melhorar a experiência do usuário e a consistência; apenas aplicativos GUI devem usar ~/Library/Application Support.

Compreendendo a Notação Big O: Um Guia Prático

2025-08-25
Compreendendo a Notação Big O: Um Guia Prático

Este artigo fornece uma explicação clara e concisa da notação Big O, um método para descrever o desempenho de algoritmos. Usando a função `sum` do JavaScript como exemplo, ele compara as diferenças entre as complexidades de tempo O(1) constante, O(log n) logarítmica, O(n) linear e O(n²) quadrática. Visualizações e exemplos de código ilustram as complexidades de tempo de vários algoritmos, incluindo ordenação por bolha e busca binária. O artigo também explora técnicas para melhorar o desempenho do código, como evitar `indexOf` dentro de loops e usar o cache para reduzir cálculos redundantes. Finalmente, ele enfatiza a importância dos testes empíricos, alertando contra a confiança cega nos resultados teóricos.

Desenvolvimento complexidade de tempo

Domando o Pico de Demanda Sincronizada: Uma Abordagem Fundamentada

2025-08-25
Domando o Pico de Demanda Sincronizada: Uma Abordagem Fundamentada

Demanda sincronizada, onde um grande número de clientes solicita serviço quase simultaneamente, pode sobrecarregar até mesmo sistemas com bons recursos. Este artigo apresenta uma abordagem fundamentada para mitigar isso usando jitter aleatório para distribuir solicitações ao longo do tempo. Calculando um tamanho de janela seguro (W), as solicitações são distribuídas uniformemente, reduzindo assim a taxa de chegada de pico. O artigo também discute o uso de dicas do lado do servidor (como cabeçalhos Retry-After) e limitação de taxa para refinar a estratégia, equilibrando a estabilidade e a justiça do sistema. A abordagem é enquadrada como um problema de controle, enfatizando a necessidade de tomada de decisão e verificação orientadas por telemetria.

Desenvolvimento

PEP: Um novo formato de compressão ultraeficiente para pixel art

2025-08-25
PEP: Um novo formato de compressão ultraeficiente para pixel art

PEP é um novo formato de compressão de imagem projetado especificamente para pixel art com poucas cores (≤16 cores é o ideal, suporta até 256 cores). Ele usa a compressão "Previsão por Correspondência Parcial, Ordem 2", que é 2 a 10 vezes mais lenta que GIF, PNG e QOI, mas frequentemente comprime imagens 20 a 50% menores que GIF/PNG (e várias vezes menores que QOI). Se o tamanho da imagem comprimida for importante, PEP é para você. Ele fica entre GIF e WEBP em termos de equilíbrio entre velocidade e compressão. Atualmente está em fase experimental, mas um cabeçalho C é fornecido para uso.

Desenvolvimento

decode-kit: Biblioteca leve de validação de dados em tempo de execução para TypeScript

2025-08-25
decode-kit: Biblioteca leve de validação de dados em tempo de execução para TypeScript

decode-kit é uma biblioteca TypeScript leve e sem dependências para validar dados arbitrários em tempo de execução. Ela usa validação baseada em asserções que refina seus tipos no local — sem clonagem, sem transformações e com sobrecarga mínima em tempo de execução. decode-kit valida seus dados e estreita seu tipo diretamente; seus valores originais permanecem inalterados. Ela emprega uma abordagem de falha rápida, lançando um erro detalhado na primeira falha de validação, incluindo a localização e o esquema esperado. Suporta vários tipos de dados (strings, números, booleanos, arrays, objetos) com regras configuráveis, decode-kit supera bibliotecas como Zod devido à sua asserção de tipo no local, tornando-a ideal para aplicativos críticos de desempenho.

Desenvolvimento

Extensão Firefox: Clique com Enter em Elementos Destacados para Navegação Aprimorada por Teclado

2025-08-25

Um desenvolvedor, h43z, criou uma pequena extensão para o Firefox para resolver as deficiências da navegação por teclado em sites modernos. A extensão permite que os usuários cliquem em elementos destacados com a tecla Enter após usar o recurso de busca do navegador, melhorando significativamente a eficiência, especialmente em sites que usam botões e divs em vez de links para navegação. Isso é conseguido monitorando eventos de teclado, obtendo o elemento pai do texto selecionado e simulando um clique.

Desenvolvimento navegação por teclado

OAuth 2.0: Autorizando com Segurança o Acesso de Aplicativos de Terceiros aos seus Dados

2025-08-25
OAuth 2.0: Autorizando com Segurança o Acesso de Aplicativos de Terceiros aos seus Dados

OAuth 2.0 é um protocolo de autorização que permite aos usuários conceder a aplicativos de terceiros acesso aos seus dados de conta sem compartilhar senhas. Este artigo detalha o fluxo de trabalho do OAuth 2.0, incluindo a autorização do usuário, a recuperação do código de autorização, a troca do token de acesso e destaca medidas de segurança, como evitar a transmissão direta do token de acesso em URLs. A terminologia chave do OAuth 2.0 é explicada, como proprietário do recurso, cliente OAuth, servidor de autorização e servidor de recursos, juntamente com os conceitos de canal frontal e canal traseiro. O artigo também abrange o PKCE para aplicativos sem back-end.

Desenvolvimento

Agente de IA ultraleve de 4,4 KB executa comandos shell via API OpenRouter

2025-08-25
Agente de IA ultraleve de 4,4 KB executa comandos shell via API OpenRouter

Um agente de IA ultraleve escrito em C que se comunica com a API OpenRouter e executa comandos shell. Recursos principais incluem: execução direta de comandos shell por meio de respostas de IA; binários otimizados (4,4 KB no macOS, ~16 KB no Linux); gerenciamento de memória de janela deslizante para eficiência; suporte multiplataforma para macOS e Linux. Requer GCC, curl e uma chave de API OpenRouter. O sistema de compilação detecta automaticamente sua plataforma e aplica a melhor compressão (GZEXE para macOS, UPX para Linux). O código é de domínio público, sem licença.

Desenvolvimento comandos shell

Cache CAS independente de provedor com codecs e armazenamento de geração plugáveis

2025-08-25
Cache CAS independente de provedor com codecs e armazenamento de geração plugáveis

cascache é um cache Compare-And-Set (CAS) independente de provedor com codecs e armazenamento de geração plugáveis. Ele oferece leituras seguras de chave única (sem valores desatualizados), cache em massa opcional com validação do lado da leitura e um modo distribuído opt-in para implantações com várias réplicas. O cascache garante a segurança do CAS usando snapshots de geração, suporta vários armazenamentos subjacentes (Ristretto, BigCache, Redis) e codecs (JSON, Msgpack, CBOR, Proto) e fornece modos de armazenamento de geração local e distribuído para alto desempenho e disponibilidade.

Desenvolvimento

SmallJS: Um Compilador Smalltalk-80 Elegante para JavaScript

2025-08-25

SmallJS é uma implementação gratuita e de código aberto da elegante e poderosa linguagem Smalltalk-80, compilando para JavaScript que roda em navegadores modernos ou em Node.js. Sua arquitetura baseada em arquivos permite o desenvolvimento em seu IDE favorito, com suporte padrão para o Visual Studio Code, incluindo destaque de sintaxe e depuração. Totalmente orientado a objetos e altamente personalizável, o SmallJS mantém equivalentes JS familiares para nomes de classes e métodos. Ele possui bibliotecas integradas para ambientes de navegador (manipulação de DOM, eventos, CSS) e Node.js (servidor HTTP, Express, bancos de dados, sistema de arquivos, multithreading). Vários projetos de exemplo são fornecidos para ajudá-lo a começar rapidamente.

Desenvolvimento

A Arte do Design de APIs: Equilibrando Simplicidade e Flexibilidade

2025-08-25

Este artigo mergulha nos princípios cruciais do design de APIs, enfatizando a importância de evitar mudanças que quebrem o código existente dos usuários. O autor argumenta que boas APIs devem ser simples e fáceis de usar, mas também devem manter flexibilidade a longo prazo. O artigo detalha aspectos técnicos como versionamento de APIs, idempotência, limitação de taxa e paginação, e recomenda o uso de chaves de API para autenticação, para facilitar o uso por usuários não engenheiros. Conclui que um ótimo produto supera uma API perfeita, mas um produto mal projetado inevitavelmente levará a uma API ruim.

Desenvolvimento

Python 2025: Ciência de Dados Domina, Assimetria e Rust Crescem

2025-08-25
Python 2025: Ciência de Dados Domina, Assimetria e Rust Crescem

A Pesquisa de Desenvolvedores Python de 2025 revela que a ciência de dados agora representa mais da metade do desenvolvimento Python, com Pandas e NumPy liderando o caminho. Apesar de muitos usarem versões mais antigas do Python, ganhos de desempenho significativos (até 42%) estão disponíveis nas versões mais recentes. O desenvolvimento web mostra ressurgimento, com a estrutura FastAPI crescendo em popularidade. A linguagem Rust está cada vez mais integrada para aumentar o desempenho. A programação assíncrona e a tecnologia multithreading estão ganhando tração, com o Python 3.14 oferecendo suporte total para threads livres de GIL. A documentação é o principal recurso de aprendizado, e as ferramentas de IA estão ganhando adoção rapidamente.

Desenvolvimento

O Design Inteligente e as Falhas do std::adjacent_difference do C++

2025-08-25

Este artigo investiga a filosofia de design do algoritmo `std::adjacent_difference` na biblioteca padrão do C++. Este algoritmo calcula as diferenças entre elementos adjacentes de uma sequência de entrada, copiando o primeiro elemento para a saída. Embora este design garanta simetria com `std::partial_sum`, espelhando a diferenciação e integração no cálculo, ele também limita sua genericidade, pois a diferença entre elementos de um tipo arbitrário pode ter um tipo diferente. O artigo traça ainda paralelos com derivadas e integrais no cálculo, explicando a razão de ser do algoritmo e contrastando-o com a função `deltas` mais flexível do Q. A conclusão é que, embora a intenção original de Stepanov fosse sólida, o algoritmo carece de genericidade; o `pairwise_transform` do C++23 oferece uma alternativa mais flexível.

Desenvolvimento programação genérica

Pesadelo de Algoritmo: Uma solução O(EV+VlogVlogK) para contar caminhos de comprimento K

2025-08-25

Este artigo aborda um problema algorítmico aparentemente simples: encontrar o número de caminhos de comprimento K entre os nós A e B em um grafo direcionado não ponderado. Começando com BFS básico e programação dinâmica, o autor mergulha em técnicas mais avançadas, incluindo exponenciação de matrizes, recorrências lineares, funções geradoras, polinômios aniquiladores e o algoritmo Berlekamp-Massey. O resultado é uma solução impressionante O(EV+VlogVlogK), significativamente mais rápida do que as abordagens tradicionais O(EK) ou O(V³logK). O autor explica claramente os princípios e conexões entre esses algoritmos, destacando a complexidade do problema e a elegância da solução.

Desenvolvimento recorrências lineares

Parquet v2: Ganhos de desempenho vs. desafios de adoção do ecossistema

2025-08-25

O Parquet versão 2 oferece melhorias significativas de desempenho, reduzindo o tamanho dos arquivos e acelerando os tempos de leitura/escrita, especialmente para conjuntos de dados com muitos valores numéricos. No entanto, o suporte limitado do ecossistema significa que muitas ferramentas permanecem incompatíveis, dificultando a realização desses ganhos. O autor encontrou problemas de compatibilidade em primeira mão, destacando que as vantagens da v2 beneficiam principalmente sistemas autônomos, enquanto a integração de terceiros continua sendo um desafio. Embora o Parquet v2 mostre melhorias de desempenho, sua baixa adoção atualmente limita seus benefícios práticos. Considere adotar a especificação mais recente apenas se você controlar todo o pipeline de processamento de dados.

Desenvolvimento

Desempenho do sistema de arquivos em memória Rust: surpreendentemente, não importa

2025-08-25

Ao construir uma ferramenta de linha de comando em Rust, o autor tentou usar um sistema de arquivos em memória para testes de gerenciamento de arquivos mais rápidos. Após explorar crates como `vfs` e `rsfs`, a conclusão surpreendente foi que SSDs modernos e o cache do sistema de arquivos do SO são tão eficientes que praticamente não há ganho de desempenho ao usar um sistema de arquivos em memória. Benchmarks mostraram consistentemente cerca de 45 ms para testes usando sistemas de arquivos em memória, sistemas de arquivos regulares e até mesmo um ramdisk — um contraste marcante com as expectativas. O autor convida os leitores a compartilhar exemplos em que o uso de um sistema de arquivos em memória produz diferenças de desempenho perceptíveis.

Sping: Monitor de Latência HTTP/TCP para Terminal Moderno

2025-08-25

Sping é uma ferramenta moderna de linha de comando para monitoramento de latência HTTP/TCP com visualização em tempo real, temporização de fases e análise avançada. Ele suporta protocolos HTTP e TCP, exibindo tempos de resposta, detecção de outliers e estatísticas em uma interface de usuário de terminal interativa ou por meio de saída de texto simples e JSON. Recursos incluem intervalos personalizáveis, contagens, limites e várias paletas de cores. Fácil de instalar via pip e produz capturas de tela atraentes para colaboração, sping ajuda a diagnosticar problemas de latência de rede nas camadas 4+.

1 2 3 5 7 8 9 198 199