Category: Desenvolvimento

Pahole: Uma Ferramenta Poderosa para Inspeção de Layouts de Memória de Estruturas de Dados C/C++

2025-04-19

Este post de blog apresenta o pahole, uma ferramenta poderosa para analisar o layout de memória de estruturas de dados C/C++, incluindo detalhes de preenchimento e alinhamento. Lendo as informações de depuração DWARF geradas pelo compilador, o pahole exibe visualmente como as estruturas de dados são organizadas na memória e aponta os "buracos" inseridos pelo compilador para atender aos requisitos de alinhamento de memória. Isso é crucial para otimizar o uso do cache de código e reduzir o compartilhamento falso de linhas de cache. O post também demonstra como instalar o pahole e como usar suas opções de linha de comando para analisar tamanhos de structs, ajustar a ordem dos membros para otimizar o layout de memória e explorar diferenças de layout de memória em tamanhos diferentes de linha de cache.

Desenvolvimento layout de memória

Construindo Visões JavaScript do Jeito Difícil

2025-04-19
Construindo Visões JavaScript do Jeito Difícil

Este artigo apresenta um padrão para construir visões em JavaScript puro, enfatizando a manutenibilidade, o desempenho e a diversão, evitando as complexidades de frameworks como React, Vue ou lit-html. Essa abordagem usa código imperativo direto para alto desempenho, não requer nenhuma dependência, possui excelente portabilidade e manutenibilidade e suporta todos os navegadores. O artigo detalha a estrutura de um componente de visão, incluindo modelo, função de clonagem, função de inicialização, variáveis DOM, visões DOM, variáveis de estado, funções de atualização DOM e funções de atualização de estado, juntamente com convenções de nomenclatura e melhores práticas para garantir a legibilidade e a manutenibilidade do código.

Desenvolvimento Visões

EdgeBit: Agentes de IA de disparo único para correção automática eficiente de dependências

2025-04-18

O EdgeBit é uma plataforma de segurança que ajuda as equipes de engenharia de aplicativos a encontrar e corrigir vulnerabilidades de segurança. Seu recurso de correção automática de dependências contém um mecanismo de alcance extremamente preciso para identificar o impacto em seu aplicativo. A maioria das atualizações não tem impacto, portanto, os engenheiros que usam o EdgeBit podem dedicar esforços a atualizações impactantes. Isso se traduz em mais tempo gasto “em missão” em vez de gerenciar dependências. Esta publicação abordará como identificar áreas que podem 1) usar ferramentas focadas, 2) lidar com erros de forma inteligente e 3) aproveitar a persistência de um agente de IA para desbloquear ganhos de eficiência maciços, como fizemos para a correção automática de dependências, com alguns dados para comprovar isso.

Desenvolvimento

PDCurses: Uma biblioteca Curses de domínio público multiplataforma

2025-04-18
PDCurses: Uma biblioteca Curses de domínio público multiplataforma

PDCurses é uma biblioteca curses de domínio público que suporta DOS, OS/2, console do Windows, X11 e SDL. Implementa a maioria das funções do X/Open e System V R4 curses, permitindo a recompilação de programas curses em modo texto em aplicativos GUI através de suas portas X11 e SDL. Distribuído principalmente como código-fonte, bibliotecas pré-compiladas também podem estar disponíveis. Encontre a versão mais recente em https://pdcurses.org/.

Lembrando Bram Moolenaar: Uma História do Vi e Vim

2025-04-18
Lembrando Bram Moolenaar: Uma História do Vi e Vim

A morte de Bram Moolenaar, criador do Vim, leva a uma reflexão sobre a rica história dos editores de texto UNIX. Este artigo traça a evolução do ed para o Vim, contando as histórias do ed de Ken Thompson, do em de George Coulouris, do vi de Bill Joy e de vários clones do vi como Stevie e Elvis. Seu desenvolvimento está interligado com a evolução do UNIX e da computação em si, mostrando o espírito duradouro do software de código aberto. O Vim, inicialmente uma porta Amiga do Stevie, cresceu e se tornou um editor poderoso ainda amplamente usado hoje.

Desenvolvimento editores UNIX

Python Integra Biblioteca Criptográfica Verificada Formalmente HACL*

2025-04-18

Após 2,5 anos de trabalho, o Python integrou com sucesso a biblioteca criptográfica verificada formalmente HACL* em suas implementações de hash e HMAC. Essa atualização substitui a implementação anterior do SHA3, que continha uma vulnerabilidade CVE, e abrange vários algoritmos, incluindo Blake2, SHA3 e HMAC, melhorando significativamente a segurança do Python. O projeto superou desafios na implementação de APIs de streaming e na construção do sistema, e também implementou o tratamento de falhas de alocação de memória. Isso demonstra o potencial da verificação formal em projetos de grande escala do mundo real.

Desenvolvimento

Kit de Bom Karma: Doe seu poder de computação não utilizado para o bem

2025-04-18

O Good Karma Kit é um projeto Docker Compose que utiliza CPU, disco e largura de banda ociosos em servidores para contribuir com poder de computação para mais de dez projetos de bem público. Inclui projetos de rede como Tor e i2p, projetos de computação distribuída como BOINC e Folding@home, projetos de arquivamento na internet como ArchiveBox e Kiwix, e projetos de armazenamento distribuído como IPFS e Storj. Os usuários podem escolher em quais projetos participar e ajustar a alocação de recursos. O projeto visa colocar recursos ociosos a trabalhar para causas benéficas, oferecendo tabelas de classificação para incentivar a participação. Alguns projetos são sem fins lucrativos, enquanto outros oferecem recompensas em criptomoedas.

Desenvolvimento

Diagramas UML Desconstruindo o Exemplo de Envio de Carga DDD de Evans

2025-04-18
Diagramas UML Desconstruindo o Exemplo de Envio de Carga DDD de Evans

Este projeto visualiza o exemplo de envio de carga DDD do livro de Eric Evans usando diagramas UML. Gerados a partir do projeto dddsample-core do GitHub, esses diagramas - incluindo diagramas de classe, sequência, objeto e comunicação - iluminam a arquitetura e o comportamento do sistema, mostrando a interação entre os componentes e a estrutura do modelo de domínio. Um grafo direcionado, criado com o Astah Professional, esclarece ainda mais as relações entre os elementos. Este recurso fornece uma compreensão prática e visual dos princípios DDD em ação.

Desenvolvimento Sistema de Envio de Carga

Loglan'82: Uma Linguagem de Programação para Programação Orientada a Objetos e Distribuída

2025-04-18

Loglan'82 é uma linguagem de programação projetada para programação orientada a objetos e distribuída, com recursos que superam outras linguagens. Seu sistema de gerenciamento de objetos exclusivo, seguro e eficiente, suporte para classes modulares, corrotinas e threads, e capacidade de distribuir computações em uma rede de máquinas virtuais o diferenciam. Loglan'82 oferece um protocolo original de comunicação e sincronização baseado em objetos, chamado 'alien call', e resolve problemas complexos em gerenciamento de objetos, semântica de corrotinas e computação distribuída. É adequada para programadores ambiciosos, educadores e pesquisadores.

Programação GPU com Zig: Uma Abordagem Moderna

2025-04-18

Programação GPU costumava significar lidar com compiladores C++, SDKs grandes e cadeias de ferramentas específicas do fornecedor. Isso está mudando. Agora você pode escrever código GPU em linguagens modernas como Rust e Zig com menos camadas de abstração. Esta postagem explora o estado atual dos backends GPU do Zig e seu desempenho em Vulkan, OpenCL e ISAs nativas. O Zig suporta SPIR-V, PTX e AMDGCN, permitindo a geração de binários nativos carregáveis em tempo de execução, eliminando a necessidade de CUDA, HIP ou HLSL. Embora Vulkan e OpenCL sejam os principais ambientes SPIR-V, as diferenças entre eles afetam as taxas de aprovação dos testes de comportamento do backend SPIR-V do Zig. Planos futuros incluem amadurecer o backend SPIR-V, fornecer vinculações de tempo de execução CUDA/HIP e adicionar mais algoritmos de GPU à biblioteca padrão.

Desenvolvimento

arXivLabs: Projetos experimentais com colaboradores da comunidade

2025-04-18
arXivLabs: Projetos experimentais com colaboradores da comunidade

arXivLabs é uma estrutura que permite que colaboradores desenvolvam e compartilhem novos recursos do arXiv diretamente em nosso site. Indivíduos e organizações que trabalham com o arXivLabs adotaram e aceitaram nossos valores de abertura, comunidade, excelência e privacidade dos dados do usuário. O arXiv está comprometido com esses valores e trabalha apenas com parceiros que os respeitam. Tem uma ideia para um projeto que agregará valor à comunidade do arXiv? Saiba mais sobre o arXivLabs.

Desenvolvimento

Sistema de Restrições Revolucionário: Superando Desafios em Mídias Dinâmicas

2025-04-18
Sistema de Restrições Revolucionário: Superando Desafios em Mídias Dinâmicas

Na fase dois, a equipe superou com sucesso desafios como "flutuabilidade", "explosões" e baixo desempenho em sistemas de restrições. As técnicas empregadas incluíram a propagação de conhecidos, o uso de relações lineares para reduzir as dimensões das variáveis do solucionador e o agrupamento de restrições em clusters solucionáveis de forma independente. Isso melhorou significativamente a estabilidade e o desempenho do sistema. A equipe experimentou vários solucionadores e otimizou ainda mais o sistema alterando a forma como os valores eram representados (por exemplo, usando coordenadas polares). Essas melhorias permitiram a construção de estruturas mecânicas fisicamente precisas e computação bidirecional verdadeira, lançando uma base sólida para a construção de mídias dinâmicas.

Attune: Hospedagem Segura e Rápida de Pacotes Linux

2025-04-18
Attune: Hospedagem Segura e Rápida de Pacotes Linux

Attune é uma ferramenta para publicar e hospedar pacotes Linux de forma segura, oferecendo opções de implantação auto-hospedada e em nuvem gerenciada. Seu CLI realiza assinatura de índice de repositório local, garantindo a segurança das chaves. As reconstruções incrementais de índice o tornam incrivelmente rápido. Atualmente, suporta repositórios APT (Debian e Ubuntu), com mais a caminho. Configure um repositório APT em cerca de 5 minutos usando Docker e GnuPG.

Objective-C: O Legado Inesperado de uma Linguagem Controversa

2025-04-18
Objective-C: O Legado Inesperado de uma Linguagem Controversa

O sonho de Leibniz de uma 'characteristica universalis' vive nas linguagens de programação. Esta história narra a experiência do autor com Objective-C, uma linguagem verbosa e controversa que inesperadamente se tornou a base do ecossistema da Apple. Apesar de suas críticas, a sintaxe única do Objective-C e seu papel no desenvolvimento inicial do iOS deixaram um impacto duradouro, conforme o autor compartilha sua jornada pessoal e o poder surpreendente dessa linguagem muitas vezes negligenciada.

Desenvolvimento

Nova API ASN.1 do PyCA Cryptography: Velocidade e Segurança

2025-04-18

A equipe do PyCA Cryptography está desenvolvendo uma nova API ASN.1 usando um analisador puro em Rust para desempenho significativamente melhorado e riscos de segurança reduzidos provenientes de diferenças com outros analisadores ASN.1. A nova API também apresenta uma interface de estilo dataclasses declarativa para melhor legibilidade e manutenção do código. Isso aborda as deficiências nas bibliotecas ASN.1 existentes em Python em relação ao desempenho e segurança, e oferece suporte melhor a ecossistemas emergentes como o Sigstore.

Desenvolvimento

Escrevendo código C, C++ e Assembly menos lento: Um guia prático para desempenho

2025-04-18
Escrevendo código C, C++ e Assembly menos lento: Um guia prático para desempenho

Este repositório oferece exemplos práticos de como escrever código C e C++ eficiente, cobrindo tópicos desde micro-kernels até algoritmos paralelos. Ele demonstra como aproveitar os recursos do C++20 e otimizações do compilador para aumentar o desempenho (por exemplo, acelerando cálculos trigonométricos em 40x), e explora as melhores práticas para evitar gargalos de desempenho, como tratamento eficiente de JSON, uso de contêineres associativos STL e escolha do modelo de programação paralela certo. O projeto também inclui exemplos de código para aceleração de hardware usando Assembly, CUDA e FPGA, com o objetivo de ajudar os desenvolvedores a escrever código mais rápido e seguro.

Desenvolvimento Programação Paralela

Bot de Editor de Código AI Fabrica Política, Causando Cancelamentos de Assinaturas

2025-04-18
Bot de Editor de Código AI Fabrica Política, Causando Cancelamentos de Assinaturas

Um editor de código alimentado por IA, Cursor, recentemente enfrentou reação negativa depois que seu chatbot de IA fabricou uma política da empresa. Um desenvolvedor descobriu que alternar dispositivos o desconectava instantaneamente do Cursor. Ao entrar em contato com o suporte, um agente de IA chamado "Sam" alegou que essa era uma nova função de segurança. No entanto, tal política não existia; a IA inventou a informação, levando a reclamações de usuários e cancelamentos de assinaturas. Isso destaca os riscos de implantar sistemas de IA em funções voltadas ao cliente sem supervisão humana, potencialmente resultando em clientes frustrados, confiança danificada e perdas financeiras.

Desenvolvimento

arXivLabs: Projetos Experimentais com Colaboradores da Comunidade

2025-04-18
arXivLabs: Projetos Experimentais com Colaboradores da Comunidade

arXivLabs é uma estrutura que permite a colaboradores desenvolverem e compartilharem novos recursos do arXiv diretamente no nosso site. Indivíduos e organizações que trabalham com o arXivLabs abraçaram e aceitaram nossos valores de abertura, comunidade, excelência e privacidade dos dados do usuário. O arXiv está comprometido com esses valores e trabalha apenas com parceiros que os respeitam. Tem uma ideia para um projeto que agregará valor à comunidade do arXiv? Saiba mais sobre o arXivLabs.

Desenvolvimento

Atualizações em série da engine Defold: Novos lançamentos e melhorias no build em nuvem

2025-04-18
Atualizações em série da engine Defold: Novos lançamentos e melhorias no build em nuvem

A engine de jogos Defold recebeu uma série de atualizações no final de 2024 e início de 2025, lançando as versões 1.9.6, 1.9.7 e 1.9.8. Também foi lançado um vídeo mostrando os jogos incríveis criados com a Defold em 2024. Além das novas versões, a Defold introduziu uma prévia técnica de sua API de scripting do editor para criação de interfaces de usuário interativas e melhorou significativamente seus servidores de build em nuvem para facilitar o desenvolvimento e a manutenção. Essas melhorias visam aprimorar a usabilidade e a eficiência do Defold, fornecendo aos desenvolvedores ferramentas mais poderosas para o desenvolvimento de jogos.

Jai: Uma Linguagem de Programação Moderna para Desenvolvedores Experientes

2025-04-18

Um programador experiente, tendo trabalhado com inúmeras linguagens, compartilha sua experiência com Jai, uma linguagem de alto desempenho projetada para desenvolvedores experientes. O autor destaca os pontos fortes do Jai: sintaxe simples, compilação extremamente rápida, poderosas capacidades de metaprogramação e compatibilidade multiplataforma. Ele discute o uso do Jai em um ambiente de produção e explica por que ele ainda está em beta fechado. Em geral, o autor elogia o Jai como uma linguagem moderna que melhora a eficiência do desenvolvedor e permite a criação de software de alta qualidade e eficiente.

Desenvolvimento

Por que abandonei o Sentry auto-hospedado: 16 GB de RAM e uma instalação complexa foram os motivos

2025-04-18
Por que abandonei o Sentry auto-hospedado: 16 GB de RAM e uma instalação complexa foram os motivos

O autor relata sua experiência ao abandonar o Sentry auto-hospedado. Inicialmente, devido às exigências do trabalho, ele hospedou com sucesso o Sentry. Anos depois, ao tentar configurar o Sentry auto-hospedado para um colega, ele encontrou vários avisos na documentação do Sentry sobre os riscos da auto-hospedagem, juntamente com requisitos de recursos exigentes (pelo menos 16 GB de RAM e vários núcleos). Isso se mostrou caro e incrivelmente difícil de manter, com o processo de instalação envolvendo centenas de linhas de scripts. O feedback do usuário online confirmou a dificuldade de manter o Sentry auto-hospedado. Por fim, o autor desistiu de hospedar o Sentry e decidiu desenvolver uma alternativa mais leve.

Desenvolvimento

60 mil linhas de Lua depois: Reflexão de um desenvolvedor de jogos

2025-04-18
60 mil linhas de Lua depois: Reflexão de um desenvolvedor de jogos

Oleg da Luden.io entrevista Ivan Trusov, programador principal do jogo Craftomation 101 baseado em Lua (~60.000 linhas de código construído com a engine Defold), sobre sua experiência. Ivan discute os prós e contras do Lua, como a falta de operadores de incremento e classes, e índices de array começando em 1. Apesar disso, ele aprecia a simplicidade e flexibilidade do Lua, especialmente suas poderosas 'tabelas', mas observa que erros de tempo de execução podem surgir em projetos grandes devido à sua tipagem dinâmica. Ele compara o Lua com Python e C++, e discute o uso potencial de ferramentas de análise estática e possíveis atualizações do Lua (como Luau). Em última análise, ele descobre que o Lua tem bom desempenho no Defold, mas para o próximo projeto, ele pode considerar uma linguagem com tipagem mais forte para detectar erros em tempo de compilação.

Desenvolvimento

Buffer Compartilhado do PostgreSQL: Mais RAM, Mais Problemas?

2025-04-18
Buffer Compartilhado do PostgreSQL: Mais RAM, Mais Problemas?

Máquinas com centenas de gigabytes de RAM são comuns hoje em dia. O buffer compartilhado do PostgreSQL pode aumentar significativamente o desempenho, mas seu funcionamento é menos intuitivo do que você pode imaginar. Este artigo examina a estratégia de substituição de buffer do PostgreSQL, incluindo o algoritmo de varredura de relógio e as estratégias de buffer em anel. Embora um buffer compartilhado maior possa parecer benéfico, o desempenho pode piorar além de um certo limite (por exemplo, 64 GB), pois o algoritmo leva mais tempo para procurar blocos substituíveis. O artigo aconselha o dimensionamento cuidadoso do buffer compartilhado com base no tamanho dos dados e na memória do sistema, evitando configurações excessivamente grandes que podem criar gargalos.

Desenvolvimento

A IA está nos transformando em cola: A ansiedade de um engenheiro de software

2025-04-17

O rápido avanço da IA, especialmente dos grandes modelos de linguagem, está mudando drasticamente o trabalho diário de engenheiros de software. O autor, um engenheiro de software, descobriu que a IA pode resolver rapidamente bugs complexos e refatorar código, aumentando a eficiência, mas roubando-lhe o prazer de resolver problemas complexos e entender profundamente a arquitetura do sistema. O autor prevê que a IA vai se destacar na maioria das tarefas de "pensamento linear profundo", deixando os humanos como a "cola" que conecta a IA ao mundo real, lidando com tarefas rotineiras, como configurar serviços em nuvem ou conectar hardware. Ele expressa ansiedade sobre o futuro, temendo que muitos empregos desapareçam e que até mesmo novas oportunidades provavelmente envolvam um trabalho de "cola" repetitivo e insatisfatório.

Desenvolvimento

Mux: Democratizando Vídeo para Desenvolvedores

2025-04-17
Mux: Democratizando Vídeo para Desenvolvedores

A Mux está construindo infraestrutura de vídeo para desenvolvedores, com o objetivo de democratizar o vídeo ao resolver problemas complexos de codificação, streaming (Mux Video) e monitoramento (Mux Data). Apoiada por investidores de primeira linha como Coatue e Accel, e com uma equipe experiente de empresas como Google, YouTube e Twitch, a Mux atende a uma clientela diversificada, desde startups até empresas estabelecidas como Reddit e Vimeo. Eles também hospedam a Demuxed, a principal conferência para engenheiros de vídeo.

Gerenciamento Seguro de Variáveis de Ambiente com Arquivos Criptografados por GPG

2025-04-17
Gerenciamento Seguro de Variáveis de Ambiente com Arquivos Criptografados por GPG

Esta ferramenta shell fornece uma maneira segura de gerenciar variáveis de ambiente usando arquivos criptografados por GPG. Ela aborda o problema comum de ferramentas de linha de comando que precisam de variáveis de ambiente contendo informações sensíveis armazenadas em arquivos shell não criptografados. A ferramenta permite que os usuários leiam segredos de arquivos criptografados e alternem facilmente entre diferentes contas. Suporta logins aninhados, atualiza a variável de ambiente `SECRET_LOGIN` e modifica o prompt do shell para exibir o login atual. O preenchimento automático para nomes de arquivos disponíveis também está incluído.

Val: Uma Linguagem de Calculadora de Precisão Arbitrária

2025-04-17
Val: Uma Linguagem de Calculadora de Precisão Arbitrária

Val é uma linguagem de calculadora de precisão arbitrária simples, construída sobre o chumsky e o ariadne. Ela roda em Linux, MacOS, BSDs e Windows. A instalação é fácil via Cargo, ou binários pré-compilados estão disponíveis. Val possui uma interface de linha de comando e REPL com destaque de sintaxe, histórico persistente e edição no estilo emacs. A linguagem suporta funções, loops, condicionais e um rico conjunto de funções embutidas que abrangem operações aritméticas, lógicas, de comparação e de coleção. Os tipos de dados incluem números, booleanos, strings e listas.

Desenvolvimento

Domando eventos recorrentes do iCalendar com funções de distância

2025-04-17
Domando eventos recorrentes do iCalendar com funções de distância

O autor encontrou um desafio ao lidar com eventos recorrentes durante a implementação de uma biblioteca para processar arquivos iCalendar. O iCalendar usa regras complexas para definir eventos recorrentes, e implementações tradicionais geralmente envolvem escrever muita lógica específica para diferentes frequências e parâmetros. O autor adotou uma abordagem diferente, considerando as regras de recorrência como consultas SQL e tomando emprestado ideias de funções de distância com sinal (SDFs) em gráficos de computador, representando ocorrências de eventos usando funções de distância. Esse método decompõe regras complexas em funções de distância simples, calculando iterativamente os horários de ocorrência de eventos para evitar numerosos julgamentos condicionais, resultando em código mais limpo e fácil de manter. Embora a implementação inicial não fosse muito eficiente, o autor a otimizou para lidar com regras de recorrência complexas em milissegundos.

(pwy.io)

TypeScript: Parâmetros de objeto vs. parâmetros individuais

2025-04-17

Ao escrever funções em TypeScript, você pode passar argumentos individualmente ou agrupá-los em um objeto. Este artigo argumenta que os parâmetros de objeto são superiores. Parâmetros individuais levam a ambiguidade e problemas de manutenção à medida que o número de parâmetros aumenta. Parâmetros de objeto, como `{firstName: "John", lastName: "Doe", age: 28, isActive: true}`, oferecem clareza, autodocumentação e aproveitam os recursos de autocompletar e segurança de tipo do TypeScript.

Desenvolvimento parâmetros de função

Suporte a Escrita e Transações em Tabelas Virtuais SQLite

2025-04-17

Esta publicação mergulha nos detalhes da implementação de suporte a escrita e transações em tabelas virtuais SQLite. Implementando hooks como xUpdate, xBegin, xSync, xCommit e xRollback, tabelas virtuais podem suportar operações de escrita e garantir a integridade transacional. O artigo explica como os mecanismos de journal de rollback e super-journal do SQLite coordenam commits atômicos em cenários de banco de dados único e múltiplo, e como as tabelas virtuais participam desse protocolo de commit de duas fases. O autor enfatiza que a durabilidade deve ser tratada em xSync, enquanto xCommit e xRollback devem apenas executar operações de limpeza idempotentes, evitando qualquer operação que possa falhar.

Desenvolvimento Tabelas Virtuais Transações
1 2 109 110 111 113 115 116 117 214 215