Linguagens & Frameworks
Adote
-
Com Playwright você pode escrever testes de ponta a ponta que são executados no Chrome, Firefox e WebKit. Ao usar o Chrome DevTools Protocol (CDP), o Playwright pode oferecer novos recursos e eliminar muitos dos problemas encontrados com o WebDriver. Os navegadores baseados em Chromium implementam o CDP diretamente. No entanto, para suportar o Firefox e o WebKit, a equipe do Playwright precisa enviar patches para esses navegadores, o que pode às vezes limitar o framework. Os muitos recursos do Playwright incluem: esperas automatizadas (auto-waits) integradas, que resultam em testes mais confiáveis e mais fáceis de entender; Contextos do navegador (browser contexts), que permitem testar se a persistência de sessão entre abas está funcionando corretamente; e a capacidade de simular notificações, geolocalização e configurações de modo escuro. Nossas equipes estão impressionadas com a estabilidade que o Playwright traz para o conjunto de testes e gostam de obter feedback mais rapidamente ao executar testes em paralelo. Outros recursos que diferenciam o Playwright incluem um melhor suporte para carregamento lento e rastreamento. Embora o Playwright tenha algumas limitações — o suporte a componentes é experimental, por exemplo — nossas equipes o consideram sua primeira escolha em frameworks de teste e, em alguns casos, estão migrando do Cypress e do Puppeteer para ele.
Experimente
-
ASP.NET core MVC provou ser uma abordagem poderosa e flexível para a construção de aplicações web que hospedam APIs. No entanto, sua flexibilidade traz consigo uma certa complexidade, incluindo boilerplate e convenções que nem sempre são óbvias. O roteamento fornecido pelo ASP.NET permite que múltiplos serviços sejam hospedados em uma única aplicação, mas no mundo atual de funções sem servidor e microsserviços que podem ser implantados de forma independente, essa flexibilidade pode ser um exagero. APIs Mínimas do .NET fornecem uma abordagem simples para implementar uma aplicação web de única API no ecossistema .NET. O framework API Mínima pode implementar um endpoint de API com apenas algumas linhas de código. O API Mínima se junta à nova geração de frameworks de API - incluindo Micronaut, Quarkus e Helidon - que são otimizados para implantações leves e tempos de inicialização rápidos. Estamos interessados na combinação de APIs Mínimas e .NET 7 Native AOT para a implementação de microsserviços simples e leves em funções sem servidor.
-
Ajv é uma popular biblioteca JavaScript usada para validar um objeto de dados contra uma estrutura definida usando um schema JSON. Ajv é rápido e flexível para validar tipos de dados complexos. Ele suporta uma ampla gama de recursos de schema, incluindo palavras-chave e formatos personalizados. É usado por muitos aplicativos e bibliotecas JavaScript de código aberto. Nossas equipes usaram Ajv para implementar testes de contrato do consumidor em pipelines de CI, e, junto com outras ferramentas para gerar dados simulados com o schema JSON, é um recurso muito poderoso. No mundo do TypeScript, Zod é uma alternativa popular que tem uma API declarativa para definir o schema e validar os dados.
-
Armeria é um framework de código aberto para construção de microsserviços. Nossas equipes o usaram para construir APIs assíncronas, e nós gostamos bastante da abordagem de lidar com as preocupações transversais, como distributed tracing ou circuit breakers, por meio de service decorators. O framework inclui a reutilização de portas para o tráfego tanto gRPC quanto REST, entre outras escolhas de design inteligentes. Com Armeria, podemos adicionar novos recursos incrementalmente em gRPC sobre um código existente em REST ou vice-versa. No geral, achamos Armeria um framework de microsserviços flexível com várias integrações prontas para uso.
-
AWS Serverless Application Model (SAM) é um framework de código aberto para construir aplicações sem servidor na infraestrutura de nuvem AWS. Anteriormente, mencionamos o Serverless Framework como um framework popular para implantar serviços sem servidor em vários provedores de nuvem, principalmente serviços baseados em AWS Lambda. O AWS SAM ganhou popularidade nos últimos tempos, devido a evolução contínua, desde seus primeiros dias. Nossas equipes acreditam ser muito fácil de configurar e também o utilizam para testar e depurar serviços baseados em AWS Lambda, incluindo execuções locais de Lambdas para desenvolvimento.
-
Dart é uma linguagem de programação desenvolvida pelo Google que apoia a construção de aplicativos em várias plataformas, incluindo navegadores web, WebAssembly, desktop e aplicativos móveis. Sua adoção foi impulsionada pelo domínio do Flutter — um kit popular de ferramentas multiplataforma para desenvolvimento de IU impulsionada pelo Dart — no espaço de frameworks para aplicativos nativos multiplataforma. Em resposta ao feedback da comunidade, o Dart evoluiu desde suas versões iniciais e adicionou segurança de valor nulo embutida sound null safety na versão três e um sistema de tipos robusto. Além disso, o ecossistema do Dart está crescendo rapidamente, com uma comunidade ativa e uma variedade de bibliotecas e ferramentas disponíveis, tornando-o atrativo para pessoas desenvolvedoras.
-
fast-check é uma ferramenta de teste baseada em propriedades para JavaScript e TypeScript, capaz de gerar dados de teste automaticamente, para que uma ampla gama de entradas possa ser explorada sem a necessidade de criar testes separados. Isso torna mais fácil descobrir cenários de borda. Nossas equipes estão relatando bons resultados usando fast-check em testes de back-end devido à sua boa documentação, facilidade de uso e integração perfeita com frameworks de teste existentes, o que aumenta a eficiência de testes unitários.
-
Há cinco anos atrás, movemos Kotlin para o anel Adote, e hoje muitas de nossas equipes relatam que Kotlin não é apenas a escolha padrão na JVM, mas que substituiu o Java quase por completo nos softwares que elas escrevem. Ao mesmo tempo, o desejo de seguir a tendência de microsserviços (microservice envy) parece estar desaparecendo — notamos que as pessoas estão começando a explorar arquiteturas com unidades de implantação maiores, usando frameworks como o Spring Modulith entre outros. Estamos cientes dos diversos frameworks bons e nativos de Kotlin e já mencionamos alguns deles anteriormente; entretanto, em alguns casos, a maturidade e a riqueza de recursos do framework Spring são grandes vantagens, e temos usado Kotlin com Spring com sucesso, geralmente sem ou com problemas de pequena importância.
-
Mockery é uma biblioteca madura do Golang que ajuda a gerar mocks para implementações de interfaces e simula o comportamento de dependências externas. Com métodos seguros de tipo para gerar expectativas de chamadas e maneiras flexíveis de simular valores de retorno, ele permite que os testes se concentrem na lógica de negócio, em vez de se preocuparem com a corretude das dependências externas. Mockery usa geradores Go e simplifica a geração e o gerenciamento dos mocks no conjunto de testes.
-
Adotamos o GraphQL para agregação de recursos do lado do servidor e implementamos o lado do servidor usando uma variedade de tecnologias. Para serviços escritos com Spring Boot, nossas equipes tiveram boas experiências com Netflix DGS. Ele é construído em cima do graphql-java e fornece recursos e abstrações no modelo de programação Spring Boot que facilitam a implementação de endpoints GraphQL e a integração com recursos do Spring, como o Spring Security. Embora seja escrito em Kotlin, o DGS também funciona bem com Java.
-
Temos usado OpenTelemetry como solução há algum tempo e já recomendamos experimentá-lo em edições anteriores. Sua capacidade de capturar, instrumentar e gerenciar dados de telemetria de forma contínua em vários serviços e aplicativos melhorou nossa pilha de observabilidade. A flexibilidade e compatibilidade do OpenTelemetry com ambientes diversos o tornaram uma valiosa adição ao nosso kit de ferramentas.
Estamos agora particularmente curiosas sobre o recente lançamento da especificação do Protocolo OpenTelemetry (OTLP), que inclui gRPC e HTTP. Este protocolo padroniza o formato e a transmissão de dados de telemetria, promovendo a interoperabilidade e simplificando as integrações com outras ferramentas de monitoramento e análise. À medida que continuamos a explorar o potencial de integração do protocolo, estamos avaliando seu impacto de longo prazo em nossa estratégia de monitoramento e observabilidade e no cenário geral de monitoramento.
-
Polars é uma biblioteca de dataframes em memória implementada em Rust. Ao contrário de outros dataframes (como pandas), Polars é multithread, suporta execução preguiçosa e é seguro para operações paralelas. Os dados em memória são organizados no formato Apache Arrow para operações analíticas eficientes e para permitir a interoperabilidade com outras ferramentas. Se você conhece pandas, já pode começar com os bindings Python do Polars. Acreditamos que Polars, com sua implementação em Rust e bindings Python, é um dataframe em memória de alto desempenho para suas necessidades analíticas. Nossas equipes continuam a ter uma boa experiência com o Polars, razão pela qual estamos movendo-o para Experimente.
-
Pushpin é um proxy reverso que atua como intermediário entre clientes e servidores back-end que lidam com conexões de longa duração, como WebSockets e Server-Sent Events. Ele fornece uma maneira de terminar conexões de longa duração dos clientes e significa que o resto do sistema pode ser abstraído dessa complexidade. Ele gerencia de forma eficaz um grande número de conexões persistentes e as distribui automaticamente por vários servidores back-end, otimizando o desempenho e a confiabilidade. Nossa experiência usando isso para comunicação em tempo real com dispositivos móveis usando WebSockets tem sido boa, e conseguimos escalar horizontalmente para milhões de dispositivos.
-
Snowpark é uma biblioteca para consultar e processar dados em escala no Snowflake. Nossas equipes o utilizam para escrever códigos gerenciáveis para interagir com dados que residem no Snowflake — é semelhante a escrever código Spark, mas para Snowflake. Em resumo, é um mecanismo que traduz código em SQL, o que o Snowflake entende. Você pode criar aplicações que processam dados no Snowflake sem mover dados para o sistema onde o código da sua aplicação é executado. Um ponto de atenção: o suporte a testes de unidade ainda está abaixo do ideal; nossas equipes compensam isso escrevendo outros tipos de testes.
Avalie
-
Perfis de Referência — que não deve ser confundido com Perfil de Referência do Android — são perfis do Android Runtime (ART) que orientam a compilação antecipada (AOT). Eles são criados uma vez por versão em uma máquina de desenvolvimento e são enviados com o aplicativo, tornando-os disponíveis de forma mais rápida em comparação com a dependência Perfis da Nuvem, uma tecnologia mais antiga e relacionada. O runtime usa o Perfil de Referência em um aplicativo ou biblioteca para otimizar caminhos de código importantes, o que melhora a experiência para as pessoas usuárias novas ou antigas, quando o aplicativo é baixado ou atualizado. A criação de Perfis de Referência é relativamente simples e pode melhorar o desempenho de forma significativa (de até 30%) de acordo com sua documentação.
-
GGML é uma biblioteca C para aprendizado de máquina que permite a inferência de CPU. Essa biblioteca define um formato binário para a distribuição de modelos de linguagem de grande porte (LLMs). Para fazer isso ela utiliza quantização, uma técnica que permite que os LLMs sejam executados em um hardware de consumo com inferência de CPU eficaz. A GGML suporta diferentes estratégias de quantização (por exemplo, quantização 4 bits, 5 bits, e 8 bits), e para cada uma oferece diferentes trade-offs entre eficiência e desempenho. Uma maneira rápida de testar, executar e desenvolver aplicativos com esses modelos quantizados é uma binding Python chamado C Transformers. Este é um wrapper Python no topo do GGML que elimina o código boilerplate para inferência, fornecendo uma API de alto nível. Exploramos essas bibliotecas para construir provas de conceito e experimentos. Se você estiver considerando LLMs auto-hospedados, avalie de forma cautelosa essas bibliotecas apoiadas pela comunidade para a sua organização.
-
GPTCache é uma biblioteca de cache semântica para modelos de linguagem de grande porte (LLMs). Percebemos a necessidade de uma camada de cache na frente dos LLMs por dois motivos principais: melhorar o desempenho geral, reduzindo as chamadas de API externas; e reduzir o custo de operação, fazendo cache de respostas semelhantes. Ao contrário das abordagens de cache tradicionais que procuram por correspondências exatas, as soluções de cache baseadas em LLMs requerem correspondências semelhantes ou relacionadas para as consultas de entrada. O GPTCache aborda isso com a ajuda de algoritmos de embedding para converter as consultas de entrada em embeddings e, em seguida, usar um datastore vetorial para a busca de similaridades nessas embeddings. Uma desvantagem desse design, é a possibilidade de encontrar falsos positivos durante os hits de cache ou falsos negativos durante as misses de cache, razão pela qual recomendamos que você avalie cuidadosamente o GPTCache para suas aplicações baseadas em LLMs.
-
Em muitas línguas, o uso de gênero é mais visível do que em inglês, e as palavras mudam de acordo com o gênero. Por exemplo, o tratamento das pessoas usuárias pode exigir que as palavras sejam flexionadas, mas para esta prática, a forma masculina é o padrão. Há evidências de que isso tem um impacto negativo na performance e na atitude — e, claro, é indelicado. As soluções alternativas usando linguagem neutra em relação ao gênero podem muitas vezes parecer estranhas. Portanto, o tratamento correto das pessoas usuárias é a opção preferida, e com a API de Inflexão Gramatical, incorporada ao Android 14, pessoas desenvolvedoras de Android agora têm um caminho mais fácil para fazer isso.
-
htmx é uma pequena e elegante biblioteca de interface do usuário (UI) em HTML que recentemente se tornou popular, aparentemente do nada. Durante as nossas discussões sobre o Radar, descobrimos que seu predecessor intercooler.js existia há dez anos. Ao contrário de outras estruturas JavaScript/TypeScript cada vez mais complexas e pré-compiladas, o htmx incentiva o uso direto de atributos HTML para acessar operações como AJAX, transições CSS, WebSockets e Eventos Enviados pelo Servidor. Não há nada tecnicamente sofisticado no htmx, mas sua popularidade lembra a simplicidade do hipertexto no começo da web. O site do projeto também apresenta alguns ensaios perspicazes (e divertidos) sobre hipermídia e desenvolvimento web, o que sugere que a equipe por trás do htmx pensou cuidadosamente sobre seu propósito e filosofia.
-
Kotlin Kover é um conjunto de ferramentas de cobertura de código projetado especificamente para Kotlin, com suporte à JVM de Kotlin, Multiplatform e projetos Android. A importância da cobertura de código está em sua capacidade de destacar segmentos não testados, o que reforça a confiabilidade do software. À medida que o Kover evolui, ele se destaca por sua capacidade de produzir relatórios HTML e XML abrangentes, junto a uma precisão incomparável adaptada ao Kotlin. Para equipes profundamente enraizadas em Kotlin, recomendamos avaliar o Kover para aproveitar seu potencial na melhoria da qualidade do código.
-
LangChain é um framework para construção de aplicações com modelos de linguagem de grande porte (LLMs). Para construir produtos práticos com LLMs, é necessário combiná-los com dados de usuário ou de domínio específicos que não foram parte do treinamento. LangChain preenche essa lacuna com recursos como gerenciamento de prompts, encadeamento, agentes e carregadores de documentos. O benefício de componentes como modelos de prompt e carregadores de documentos é que eles podem acelerar seu tempo de lançamento. Embora seja uma escolha popular para implementar aplicações de Geração Aumentada por Recuperação e o padrão de ReAct prompting, o LangChain tem sido criticado por ser difícil de usar e muito complicado. Ao escolher um stack de tecnologia para sua aplicação com LLM, talvez seja interessante continuar procurando por frameworks similares — como Semantic Kernel — nesta área em rápida evolução.
-
LlamaIndex é um framework de dados projetado para facilitar a integração de dados privados ou de domínio específico com modelos de linguagem de grande porte (LLMs). Ele oferece ferramentas para ingerir dados de fontes diversas, incluindo APIs, bancos de dados e PDFs, e estruturar esses dados em um formato que os LLMs possam consumir facilmente. Por meio de vários tipos demotores, o LlamaIndex permite interações de linguagem natural com esses dados estruturados, tornando-os acessíveis para aplicações que fazem recuperação de informação baseada em consulta até àquelas que usam interfaces conversacionais. Similar ao LangChain, o objetivo do LlamaIndex é acelerar o desenvolvimento com LLMs, mas ele adota uma abordagem mais de framework de dados.
-
promptfoo é uma ferramenta que permite testes de engenharia de prompts (prompt engineering) de forma automatizada. Ao integrar LLMs (modelos de linguagens de grande porte) em aplicações, o ajuste dos prompts para produzir saídas ótimas e consistentes pode ser demorado. Você pode usar o promptfoo como CLI (interface de linha de comando) ou uma biblioteca para testar os prompts sistematicamente contra casos de teste predefinidos. O caso de teste, juntamente com as afirmações, pode ser configurado em um arquivo de configuração YAML simples. Essa configuração inclui os comandos que estão sendo testados, o provedor do modelo, as verificações e os valores das variáveis que serão substituídas nos comandos. promptfoo suporta muitas verificações, incluindo verificação de igualdade, estrutura JSON, semelhança, funções personalizadas ou até mesmo o uso de um LLM para classificar as saídas do modelo. Se você está procurando automatizar o feedback sobre a qualidade dos prompts e dos modelos, avalie o promptfoo.
-
Semantic Kernel é a versão de código aberto de um dos componentes principais da suíte de produtos Copilot da Microsoft. É uma biblioteca Python que ajuda você a criar aplicativos que usam modelos de linguagem de grande porte (LLMs), semelhante ao LangChain. O conceito central do Semantic Kernel é seu planejador, que permite que você construa agentes movidos a LLM que criam um plano para uma usuária e o executam passo a passo com a ajuda de plugins.
-
Fomos defensoras iniciais dos microserviços e observamos o padrão sendo usado com sucesso em inúmeros sistemas, mas também vimos os microserviços sendo mal aplicados e abusados, muitas vezes como resultado do desejo de seguir a tendência de microserviços envy. Em vez de iniciar um novo sistema com uma coleção de processos separadamente implantados separadamente, geralmente é recomendável começar com um monolito bem dimensionado e só separar unidades implantáveis separadamente quando a aplicação atingir uma escala em que os benefícios dos microserviços compensem a complexidade adicional inerente aos sistemas distribuídos. Recentemente, vimos um ressurgimento do interesse por essa abordagem e uma definição mais detalhada do que constitui exatamente um monolito bem dimensionado. Spring Modulith é um framework que ajuda a estruturar seu código de uma forma que facilite a separação em microserviços quando for a hora certa. Ele fornece uma maneira de modularizar seu código para que os conceitos lógicos de domínios e contexto delimitados estejam alinhados com os conceitos físicos de arquivos e estrutura de pacotes. Esse alinhamento torna mais fácil refatorar o monolito quando necessário e testar domínios de forma isolada. Spring Modulith fornece um mecanismo interno de processamento de eventos que ajuda a desacoplar ainda mais os módulos dentro de um único aplicativo. O melhor de tudo é que ele se integra ao ArchUnit e ao jmolecules para automatizar a verificação de suas regras de design orientado a domínio.
Evite
- Novo
- Modificado
- Sem alteração
Não encontrou algo que você esperava achar?
Cada edição do Radar inclui blips que refletem nossas experiências nos seis meses anteriores. Talvez já tenhamos falado sobre o que você procura em um Radar anterior. Às vezes, deixamos coisas de fora simplesmente porque há muitas a serem abordadas. Também pode faltar um tópico específico porque o Radar reflete nossa experiência, não se baseando em uma análise abrangente do mercado.
Não encontrou algo que você esperava achar?
Cada edição do Radar inclui blips que refletem nossas experiências nos seis meses anteriores. Talvez já tenhamos falado sobre o que você procura em um Radar anterior. Às vezes, deixamos coisas de fora simplesmente porque há muitas a serem abordadas. Também pode faltar um tópico específico porque o Radar reflete nossa experiência, não se baseando em uma análise abrangente do mercado.