Category: Desenvolvimento

GPU Kill: Ferramenta CLI de Gerenciamento de GPU Multiplataforma

2025-09-21
GPU Kill: Ferramenta CLI de Gerenciamento de GPU Multiplataforma

GPU Kill é uma ferramenta de linha de comando para gerenciar GPUs em sistemas NVIDIA, AMD, Intel e Apple Silicon. Monitore, controle e proteja sua infraestrutura de GPU com facilidade. Recursos incluem monitoramento em tempo real do uso da GPU, interrupção de processos travados, detecção de mineradores de criptomoedas e atividades suspeitas, aplicação de políticas para evitar abuso de recursos, painel da web para monitoramento de cluster, gerenciamento remoto de GPUs em vários servidores e integração com assistente de IA. Suporta Linux, macOS e Windows. Interface de linha de comando simples e um painel da web fornecem gerenciamento amigável ao usuário.

Desenvolvimento gerenciamento de GPU

Minúsculo analisador JSON C99: Sem alocação, ~150 linhas

2025-09-21
Minúsculo analisador JSON C99: Sem alocação, ~150 linhas

Uma biblioteca mínima de análise JSON escrita em C99, com apenas cerca de 150 linhas de código! Ela possui alocação zero para eficiência de memória e um estado simplificado. As mensagens de erro incluem números de linha e coluna precisos. A análise de números e strings é deixada para o usuário, permitindo personalização com funções como `strtod` e `atoi`. Um exemplo simples demonstra o carregamento de um retângulo de uma string JSON em uma struct `Rect`. Este projeto é um software livre e sem restrições, lançado em domínio público.

Desenvolvimento alocação zero

arXivLabs: Projetos Experimentais com Colaboradores da Comunidade

2025-09-21
arXivLabs: Projetos Experimentais com Colaboradores da Comunidade

arXivLabs é uma estrutura que permite que colaboradores desenvolvam e compartilhem novos recursos do arXiv diretamente no site. Indivíduos e organizações que trabalham com o arXivLabs abraçaram 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

Depuração DXGI da Microsoft: Meu jogo acidentalmente entrou na lista negra

2025-09-21
Depuração DXGI da Microsoft: Meu jogo acidentalmente entrou na lista negra

Ao portar o Space Station 14 para Windows ARM64, o desenvolvedor encontrou uma falha bizarra. A depuração revelou que o problema era derivado de uma otimização DXGI da Microsoft para jogos em janela, forçando o modo "flip", causando exceções de instrução ilegal com GetDC() em circunstâncias específicas (o executável do jogo chamado SS14.Loader.exe). Descobriu-se que era um bug na otimização DXGI ARM64 da Microsoft, ativado apenas para nomes de jogos específicos, e o Space Station 14 estava infelizmente nessa lista. O desenvolvedor suspeita que esse bug passou despercebido devido ao número limitado de jogos Windows ARM64 nativos. O problema foi relatado à Microsoft, e o suporte ao Windows ARM64 está temporariamente adiado até que o bug seja corrigido.

Desenvolvimento Depuração do Windows

Vec: Um array dinâmico rápido e seguro contra vazamentos para C

2025-09-21
Vec: Um array dinâmico rápido e seguro contra vazamentos para C

Vec é um array dinâmico genérico, rápido e seguro contra vazamentos para C. Ele usa memória contígua, cresce geometricamente (×2) para operações push com amortização O(1) e oferece uma API de estilo de método para uma sensação orientada a objetos. A biblioteca prioriza a segurança com proteções contra estouro, acessores com verificação de limites e comportamento bem definido para casos extremos. Seu design equilibra desempenho e segurança, fornecendo uma interface limpa e eficiente.

Desenvolvimento

Segurança da Cadeia de Suprimentos de Software de Código Aberto: Meio Século de Desafios

2025-09-21

Desde a revisão de segurança do sistema Honeywell Multics de 1974, destacando preocupações sobre 'backdoors', até o ataque XZ de 2024 direcionado a sistemas Debian, a segurança da cadeia de suprimentos de software de código aberto permanece um problema persistente. Este artigo explora a complexidade da questão, que vai além de simples gráficos de dependências, abrangendo todas as etapas de construção e distribuição de software, incluindo fatores humanos. Propõe soluções como autenticação de software, builds reprodutíveis, detecção e correção rápidas de vulnerabilidades e o uso de linguagens de programação mais seguras. Crucialmente, enfatiza a importância do financiamento do desenvolvimento de código aberto, pois a falta de financiamento torna os projetos vulneráveis à tomada de controle maliciosa. O ataque XZ serve como um alerta claro: uma 'ajuda gratuita' aparentemente inócua pode esconder riscos significativos.

Desenvolvimento ataque XZ

Os Perigos de Seguir Ordens: Um Programador no Purgatório da Programação Funcional

2025-09-21

Um programador, depois que um colega de trabalho reclama de seu estilo de programação funcional, é proibido de usá-lo pelo seu gerente. Para manter o emprego, ele relutantemente reescreve uma função simples para listar colegas de trabalho, usando programação imperativa. Apesar de seus melhores esforços para evitar paradigmas funcionais, ele luta para cumprir totalmente, enfrentando mais desafios durante a revisão de código e, finalmente, precisando buscar orientação de seu gerente. Essa anedota humorística destaca o absurdo de decisões técnicas arbitrárias no local de trabalho.

Desenvolvimento programação imperativa

Bluefin LTS e GDX: O Reinado de Achillobator Começa

2025-09-21
Bluefin LTS e GDX: O Reinado de Achillobator Começa

Após nove meses, o Bluefin LTS (Suporte de Longo Prazo) e o Bluefin GDX (Estação de Trabalho de IA) estão disponíveis. O Bluefin LTS, construído no CentOS Stream 10, oferece uma área de trabalho GNOME 48 estável com suporte de longo prazo e um ramo de Habilitação de Hardware opcional (lts-hwe) para kernels mais novos. O Bluefin GDX é direcionado a profissionais de IA/ML, integrando drivers Nvidia e CUDA, e colaborando com a Red Hat em ferramentas de IA/ML de código aberto. Ambos possuem instalação aprimorada e suporte de inicialização segura, visando uma experiência de desktop estável e eficiente.

Desenvolvimento Estação de Trabalho de IA

PostgreSQL 18 Beta: UUIDv7 melhora as chaves primárias do banco de dados

2025-09-21
PostgreSQL 18 Beta: UUIDv7 melhora as chaves primárias do banco de dados

O PostgreSQL 18 Beta foi lançado, e seu recurso mais aguardado é o suporte nativo ao UUIDv7. O UUIDv7, uma variante de UUID baseada em timestamp, resolve os problemas de ordenação e localidade de índice inerentes aos UUIDs tradicionais usados como chaves primárias do banco de dados. Ele oferece uma combinação convincente de identificadores globalmente exclusivos e ordenação temporal, tornando-o ideal para bancos de dados distribuídos que precisam de alto desempenho e escalabilidade. Outras melhorias de desempenho no PostgreSQL 18 incluem E/S assíncrona e otimizações de índice.

Desenvolvimento

Bug persistente no Utilitário de Disco APFS do macOS: Uma solução alternativa

2025-09-21
Bug persistente no Utilitário de Disco APFS do macOS: Uma solução alternativa

O Utilitário de Disco do macOS Monterey 12.0.1 continua com um bug de longa data: falha na desmontagem de volumes ou contêineres ao reparar discos APFS. Este artigo fornece soluções alternativas, incluindo o uso do Utilitário de Disco no Modo de Recuperação ou o uso direto da ferramenta de linha de comando `fsck_apfs` para verificar e reparar volumes e contêineres APFS. O artigo detalha o uso do `fsck_apfs`, incluindo opções de verificação e reparo, e o tratamento de volumes criptografados.

Desenvolvimento Reparo de Disco Bug do macOS

Calibração: Combatendo a Supersimplificação e Dados Esparsos

2025-09-21
Calibração: Combatendo a Supersimplificação e Dados Esparsos

Este artigo aborda um problema comum na calibração de modelos: a regressão isotônica, devido ao conjunto de dados de calibração ser muito menor que o conjunto de treinamento original, supersimplifica a distribuição de probabilidade, perdendo as distinções granulares do modelo. O artigo analisa esse fenômeno de 'achatamento induzido por escassez de dados' e propõe vários métodos de diagnóstico para distinguir entre simplificação justificável devido a ruído e supersimplificação devido a limitações de dados. Finalmente, apresenta o pacote Calibre, que, relaxando restrições isotônicas ou usando modelos monótonos suaves, mantém a precisão da calibração enquanto preserva o máximo possível do poder discriminatório do modelo original.

Codificação com IA: Aprimorador de Especialistas, Não Substituto

2025-09-21

O papel da IA na codificação está longe de substituir programadores; em vez disso, ela atua como um impulsionador de eficiência para desenvolvedores seniores. A IA se destaca em código padrão, automatizando tarefas repetitivas e iteração rápida, mas fica aquém na revisão de código, design de arquitetura, qualidade do código e segurança. Portanto, a combinação atualmente mais eficaz é "desenvolvedor sênior + IA", e não a inicialmente imaginada "desenvolvedor júnior + IA". As melhores aplicações da IA são em prototipagem rápida, automação de tarefas rotineiras, trabalho multidisciplinar e testes de função simples. Embora a IA tenha um potencial imenso na codificação, a revisão humana de seu código gerado permanece crucial, e as expectativas devem estar alinhadas com a realidade.

Desenvolvimento

A Ascensão da Economia de Limpeza de Código de IA

2025-09-21

A adoção generalizada da codificação assistida por IA trouxe um desafio significativo: a bagunça da 'codificação vibe'. Embora a IA gere código de forma eficiente, muitas vezes lhe faltam solidez arquitetônica, considerações de segurança e compreensão do contexto do sistema, levando à necessidade de extensa refatoração de código. Uma nova profissão surgiu — o limpador de código de IA —, especializado em corrigir código de baixa qualidade gerado por IA e cobrando taxas altas. Pesquisas de mercado indicam que a maioria dos engenheiros de software corporativos usará assistentes de código de IA até 2028, sinalizando uma enorme oportunidade de crescimento no mercado de limpeza de código de IA. O futuro do desenvolvimento de software provavelmente envolverá a IA lidando com a implementação inicial, enquanto os humanos gerenciam a arquitetura, os testes e a limpeza. Engenheiros proficientes em limpeza de código de IA estarão em alta demanda.

Desenvolvimento

RNNs aceleradas por GPU: Uma implementação CUDA de minGRU e minLSTM

2025-09-21

Este post de blog detalha um projeto final para o curso CS179: Programação de GPU do Caltech, que verifica as afirmações do artigo de Feng et al., “Were RNNs All We Needed?”. O projeto implementou modelos simplificados minGRU e minLSTM e um algoritmo de varredura paralela CUDA personalizado. Os resultados mostraram acelerações significativas da GPU para sequências longas, validando a descoberta principal do artigo de que a recorrência RNN pode ser paralelizada. No entanto, para sequências curtas, a sobrecarga de inicialização do kernel CUDA anulou alguns ganhos de desempenho. O perfil do kernel da GPU revelou a camada de projeção final como o principal gargalo, sugerindo otimização adicional por meio de uma única chamada cuBLAS GEMM.

Desenvolvimento algoritmos paralelos

Lidando com Dados Heterogêneos em uma Linguagem de Scripting para Jogos Estática

2025-09-21

O autor encontrou desafios ao lidar com dados heterogêneos durante o desenvolvimento de uma linguagem de scripting para jogos estaticamente tipada. O artigo explora várias soluções usadas em diferentes linguagens de programação, incluindo nulo, tipos variantes, uniões não marcadas, tipos soma e subtipagem. O autor finalmente escolhe uma abordagem semelhante a registros variantes em Pascal, equilibrando sintaxe concisa com verificação de tipo em tempo de execução. Isso evita a complexidade da tipagem de fluxo, levando a uma linguagem mais compreensível e amigável ao usuário. É um design inteligente que equilibra a segurança de tipo estático com a facilidade de uso, fornecendo uma solução de linguagem de scripting mais conveniente para o desenvolvimento de jogos.

Desenvolvimento

A Inflação de Bibliotecas Priorizando Casos de Borda: O Inferno de Dependências do npm

2025-09-21

Este artigo examina a proliferação de bibliotecas superengenheiradas no ecossistema npm. Muitas bibliotecas priorizam o tratamento de casos de borda raros, resultando em árvores de dependências excessivamente granulares. O autor usa o exemplo de `is-number`, que lida com várias entradas semelhantes a números quando a maioria dos aplicativos só precisa lidar com o tipo `number`. A solução proposta é que as bibliotecas se concentrem em casos de uso comuns, fazendo suposições razoáveis sobre os tipos de entrada e deixando o tratamento de casos de borda para projetos que precisam deles. Isso simplifica o código, melhora o desempenho e reduz dependências desnecessárias.

Desenvolvimento

O Desafio Algorítmico da Expansão Eficiente de Vocabulário

2025-09-21

Aprender um novo idioma de forma eficiente requer expandir o vocabulário rapidamente. Este artigo explora o problema de selecionar livros para maximizar a eficiência do aprendizado de vocabulário. Embora selecionar um único livro seja relativamente simples, escolher vários livros para cobrir mais vocabulário se torna um problema NP-difícil, o que significa que o tempo de computação para soluções exatas cresce exponencialmente com o número de livros. Felizmente, este problema se enquadra em problemas submodulares, permitindo o uso de algoritmos de aproximação para encontrar soluções quase ótimas dentro de uma determinada precisão. O artigo apresenta algoritmos gulosos e suas melhorias, e recomenda a biblioteca Python eficiente submodlib.

Desenvolvimento aprendizado de vocabulário

Um Desenvolvedor da Microsoft e o Encontro com Raymond Chen: Pré-processadores e Mensagens de Erro do BitLocker

2025-09-21
Um Desenvolvedor da Microsoft e o Encontro com Raymond Chen: Pré-processadores e Mensagens de Erro do BitLocker

Em 2009, um jovem desenvolvedor do BitLocker da Microsoft buscou uma maneira de referenciar valores constantes de C++ em arquivos .mc para melhorar as mensagens de erro do BitLocker. Ele recorreu a uma lista de discussão interna e recebeu uma resposta concisa, mas eficaz, de Raymond Chen: usar o pré-processador. No entanto, com medo de interromper o complexo sistema de construção do Windows, o desenvolvedor acabou abandonando a abordagem. Anos depois, ele reflete sobre essa experiência, destacando as deficiências nas ferramentas internas da Microsoft e sua própria aversão a sistemas de construção complexos.

Desenvolvimento

Cache do Bazel, execução remota e incompatibilidade de versão do glibc causam falha na produção

2025-09-21
Cache do Bazel, execução remota e incompatibilidade de versão do glibc causam falha na produção

Este artigo descreve uma falha na produção causada pela interação entre o cache do Bazel, a execução remota e versões diferentes do glibc em diferentes ambientes. Um desenvolvedor compila e testa uma alteração localmente, o CI aproveita o cache para compilar uma versão de lançamento, mas a implantação na produção falha devido a uma versão 'GLIBC_2.28' ausente. O artigo analisa como as discrepâncias na versão do glibc quebram a reprodutibilidade da compilação e apresenta soluções: um atalho rápido envolve capturar as versões locais e remotas do glibc, selecionando a mais alta para a cadeia de ferramentas C++; uma solução mais robusta restringe as gravações no cache de ação, forçando as compilações a serem executadas em executores remotos; a solução definitiva utiliza sysroots, instalando várias versões do glibc em todos os ambientes e especificando explicitamente qual usar. O artigo destaca a importância das compilações reprodutíveis, recomendando soluções com base no contexto.

Desenvolvimento

De Mononucleo a Multinúcleo: A Evolução do Processamento Paralelo do macOS

2025-09-20
De Mononucleo a Multinúcleo: A Evolução do Processamento Paralelo do macOS

O Mac original de 128K de 1984 tinha um único processador Motorola 68000 a 8 MHz, capaz de executar apenas um aplicativo por vez. Hoje, os Macs executam confortavelmente vários aplicativos substanciais simultaneamente, além de backups do Time Machine e outras tarefas em segundo plano. Este artigo narra essa evolução, desde as origens de tarefas únicas até a introdução do Switcher e MultiFinder, o salto para multitarefa preemptiva e multithreading no Mac OS X, e as otimizações de desempenho trazidas pelo Grand Central Dispatch (GCD). A jornada culmina na gestão eficiente de até 32 núcleos de CPU, mostrando a busca implacável da Apple por melhorias de desempenho no macOS.

Desenvolvimento processador multinúcleo

Resolvendo um quebra-cabeça de madeira com 25 peças usando Haskell: Parte I

2025-09-20

O autor recebeu um quebra-cabeça 3D desafiador composto por 25 peças de madeira idênticas e, após lutar para resolvê-lo manualmente, decidiu usar o poder da linguagem de programação Haskell. Esta é a primeira de uma série de duas partes que se concentra na modelagem do problema. O autor modela o espaço como uma grade 3D, usando vetores para representar posições e definindo estruturas de dados para uma única peça e sua disposição no espaço. O artigo detalha como a álgebra linear e os recursos do Haskell são usados para representar rotações e translações das peças, gerando uma lista de candidatos de todos os arranjos possíveis. O artigo termina com um suspense, deixando a solução de encontrar o arranjo correto entre os candidatos para a segunda parte.

Desenvolvimento Quebra-cabeça 3D

Aumento de Desempenho do Kernel Linux: Sequências Reiniciáveis Aprimoradas

2025-09-20

O recurso de sequências reiniciáveis do kernel Linux, projetado para aumentar o desempenho em aplicativos com threads, tem visto um aumento no uso junto com novos recursos do kernel. No entanto, isso revelou alguns problemas. O desenvolvedor Thomas Gleixner recentemente melhorou o código, resolvendo gargalos de desempenho e problemas históricos. Essas alterações melhoram significativamente a eficiência, mas podem exigir alterações de ABI no espaço do usuário, exigindo testes rigorosos para compatibilidade.

Desenvolvimento sequências reiniciáveis

Modelos LLM do Azure: Um Caso de Desempenho Degradante

2025-09-20
Modelos LLM do Azure: Um Caso de Desempenho Degradante

Um desenvolvedor construindo um produto usando LLMs e modelos de áudio do Azure descobriu uma tendência preocupante: os mesmos modelos estão ficando progressivamente piores com o tempo. Usando prompts e mensagens de sistema idênticos, a precisão das respostas de ambos os modelos GPT-4o-mini e GPT-5-mini/nano diminuiu significativamente. O GPT-5, embora inicialmente esperado para ser superior, mostrou-se mais lento e menos preciso do que o GPT-4o-mini mais antigo. O desenvolvedor suspeita que a Microsoft está deliberadamente degradando modelos mais antigos para direcionar os usuários para versões mais novas, menos confiáveis. Essa prática prejudica a experiência do usuário e pode levar os desenvolvedores a procurar plataformas alternativas.

Desenvolvimento degradação do modelo

Remoção em Massa de Pacotes NPM: Um Sinal de Alerta para Desenvolvedores

2025-09-20
Remoção em Massa de Pacotes NPM: Um Sinal de Alerta para Desenvolvedores

Um grande número de pacotes npm foram removidos do repositório npm, afetando componentes e ferramentas em vários frameworks como React, Angular e NativeScript. Os pacotes afetados variam de aqueles completamente removidos a outros com versões corrigidas. Esse evento serve como um alerta para desenvolvedores sobre a importância da manutenção e segurança das dependências. É crucial revisar as dependências do projeto e tomar as medidas necessárias para evitar interrupções. As razões para a remoção podem incluir vulnerabilidades de segurança, problemas de manutenção ou outros fatores.

Desenvolvimento remoção de pacotes

Por que você deve abandonar o GitHub para seu projeto de código aberto?

2025-09-20

Este artigo expõe os aspectos problemáticos do uso do GitHub, uma plataforma de propriedade da Microsoft. Ele destaca problemas como controle limitado do usuário, um modelo centralizado, rastreamento de telemetria e travamento de fornecedor por meio de recursos como GitHub Actions e Copilot. Mais criticamente, detalha as parcerias controversas da Microsoft com o governo dos EUA e os militares israelenses, incluindo o fornecimento de serviços em nuvem para o ICE e tecnologia de IA para as Forças de Defesa de Israel, levando a protestos de funcionários internos. O autor defende a migração de projetos de código aberto para soluções auto-hospedadas como Forgejo ou Sourcehut para preservar o espírito e a independência do código aberto.

Desenvolvimento

Comitê C++ abandona proposta de subconjunto seguro em meio a debate sobre segurança de memória

2025-09-20
Comitê C++ abandona proposta de subconjunto seguro em meio a debate sobre segurança de memória

O comitê de padrões C++ rejeitou uma proposta detalhada para um subconjunto rigorosamente seguro da linguagem, apesar das preocupações contínuas sobre a segurança de memória. O coautor Sean Baxter atribui a rejeição à impopularidade do modelo de segurança do Rust no comitê, favorecendo a abordagem 'Perfis' em vez disso. Embora os Perfis tenham o apoio de figuras como Bjarne Stroustrup, sua viabilidade é questionada, podendo não ser incluída no C++26. A decisão gera controvérsia, com desenvolvedores sugerindo que mudar para Rust ou linguagens mais seguras alternativas, como o projeto experimental Carbon do Google, pode ser uma solução superior.

Desenvolvimento

Restrições da Unidade de Serviço Systemd: Uma Causa Comum de Falhas na Inicialização de Daemons

2025-09-20

Um problema clássico para administradores de sistemas Linux é um daemon falhar ao iniciar normalmente, mas funcionar bem quando executado manualmente como root. Causas tradicionais incluem variáveis de ambiente $PATH incompletas, SELinux e AppArmor. Cada vez mais, as restrições da unidade de serviço systemd (documentadas em systemd.exec) são as culpadas. Diretivas como ProtectHome e PrivateTmp podem causar erros crípticos de 'permissão negada' ou 'arquivo não encontrado', ou até mesmo falhas indiretas, como o bloqueio de consultas DNS. Remover restrições do arquivo .service do daemon pode ajudar a diagnosticar o problema, mas daemons futuros podem depender dessas restrições, complicando a solução de problemas.

Desenvolvimento

Chamadas de sistema: O custo oculto do desempenho

2025-09-20
Chamadas de sistema: O custo oculto do desempenho

Este artigo mergulha na sobrecarga de desempenho das chamadas de sistema Linux, revelando que é muito mais do que apenas uma simples chamada de função do kernel. As chamadas de sistema interrompem as otimizações de microarquitetura da CPU, como pipeline de instruções e previsão de desvios, levando a perdas de desempenho que excedem em muito o que é aparente no código-fonte. O artigo analisa o código do kernel, explica o impacto no desempenho de várias mitigações de software e hardware e oferece estratégias de otimização, como o uso de vDSO, o armazenamento em cache de valores, a otimização de E/S, operações em lote e a transferência de trabalho para o kernel para reduzir a frequência de chamadas de sistema e melhorar o desempenho do software.

Desenvolvimento

Biblioteca de Funções de Acomodação Bézier Cúbica em C++: Velocidade Imbatível

2025-09-20

Este artigo apresenta uma biblioteca C++20 em um único cabeçalho que representa curvas Bézier cúbicas diretamente como funções de acomodação, resultando em melhorias de desempenho na animação. Implementada usando a classe de modelo `EasingCubicBezier`, a biblioteca oferece modos PRECISE (alta precisão) e FAST (alto desempenho). Testes de benchmark demonstram que essa abordagem supera o algoritmo do Blender e soluções numéricas baseadas no método de Newton-Raphson, oferecendo velocidade e estabilidade superiores, especialmente para sistemas de animação em tempo real. Isso ocorre porque evita a sobrecarga de resolver equações polinomiais cúbicas em tempo de execução.

Desenvolvimento Curvas Bézier

GitHub Actions: Fim do Suporte ao Node.js 20 e Migração para o Node.js 24

2025-09-20
GitHub Actions: Fim do Suporte ao Node.js 20 e Migração para o Node.js 24

O GitHub Actions anunciou o fim do suporte ao Node.js 20 em abril de 2026 e planeja migrar todas as ações para o Node.js 24 no outono de 2025. A versão mais recente do GitHub runner já suporta o Node.js 24, e os usuários podem testá-lo antecipadamente definindo uma variável de ambiente. A partir de 4 de março de 2026, o Node.js 24 será a versão padrão. Os usuários podem continuar usando o Node.js 20 temporariamente definindo uma variável de ambiente até sua remoção completa no verão. Observe que o Node.js 24 é incompatível com macOS 13.4 e versões anteriores e não suporta runners auto-hospedados com arquitetura ARM32.

Desenvolvimento
1 2 4 6 7 8 9 214 215